2.1 准备URDF package
首先我们要准备一个机械臂的urdf,如果你已有URDF,可以使用自己的urdf模型。若手头没有现成的URDF,可以从此处下载一个库卡LWR简化模型URDF,这是一个固定底座7自由度的机械臂。
从该连接处依次进入examples/sovlers/ik_solver_demo/resources,下载里面的lwr_simplified.urdf。
复制代码
1 2 3 4 | cd path_to_catkin_ws/src catkin_create_pkg lwr_description cd lwr_description mkdir urdf |
将下载好的lwr_simplified.urdf放入urdf文件夹中,这样一个urdf package便创建好了。
2.2 MoveIt!配置助手 (MoveIt! Setup Assistant)
2.2.1 打开MoveIt! Setup Assistant
复制代码
1 | roslaunch moveit_setup_assistant setup_assistant.launch |
MoveIt! Setup Assistant 是一个图形界面,可以让我们不用写代码看代码,直接用鼠标点击就可以配置机器人的运动规划所需要的信息。点击Create New MoveIt Configuration Package来创建新的配置包,选择刚刚下载的urdf,然后点击Load Files 载入文件。
2.2.2 创建碰撞免检矩阵(ACM)
点击Setup Assisant的左边第二项'Self-Collisions',在这里我们将创建碰撞免检矩阵(Avoid Collision Matrix, ACM)。再次强调,怎么创建很简单,点击一下'Regenerate Default Collision Matrix'就可以了,问题是,为什么?ACM是做什么的?
我们知道,碰撞检测是非常复杂的运算过程。对于多关节机械臂或者类人机器人来说,机械结构复杂,肢体多,碰撞检测需要涉及很多的空间几何计算。但是对于刚体机器人来说,有些肢体之间是不可能发生碰撞的,比如原本就相邻的肢体,比如类人机器人的脚和头。这里生成的ACM就是告诉我们,这个URDF所描述的机器人,哪些肢体之间是不会发生碰撞的。那么在之后的碰撞检测算法中,我们就可以略过对这些肢体之间的检测,以提高检测效率。
2.2.3 创建虚拟关节 (Virtual Joints)
在Setup Assistant 第三项Virtual Joints里面,我们要创建所谓的虚拟关节。这个虚拟关节,可以理解为一个连接机器人和世界的关节。
一般来说,Virtual Joint Name我们命名为‘world_joint’,而'Child Link'指的是我们要把‘世界’和机器人的那个部位连接,那么很显然我们选择基座'base'。‘Parent Frame Name’,是世界坐标的名字,在ROS中一般叫'world_frame'。关节类型 Joint Type, 很显然这里我们选择固定Fixed. 代表机器人相对于世界是固定的。而另外两种, Planar指的是平面移动底座(xy平面+角度),用于移动机器人比如PR2;
还有一种Floating, 指的是浮动基座(xyz position+orientation),比如类人机器人。
- Group Name: 不用多说,名字。。。我们就叫Arm。
- Kinematic Solver: 运动学求解工具,这个就是负责求解正向运动学(Forward Kinematics)和逆运动学(IK, 见1.3节)的。 一般我们选用KDL, The Kinematics and Dynamics Library。这是一个运动学与动力学的库,可以很好的解决6自由度以上的单链机械结构的正逆运动学问题。当然你也可以用其他IK Solver, 比如SRV或者IK_FAST,甚至你可以自己开发新的Solver然后插入进来,如果有空,我以后会发帖讲解如何创建新的运动学求解库并插入到MoveIt。
- Kin. Search Resolution: 关节空间的采样密度
- Kin. Search TImeout: 求解时间
- Kin. Solver Attempts: 求解失败尝试次数,一般来说这三项使用默认值就可以。你也可以根据具体需要做出适当调整。
接下来,我们要正式创建这个组群,有很多不同的方法,Add Joints, Add Links, Add Kin. Chain, Add Subgroups。我们这里选择'Add Kin. Chain',这样我们可以清楚的看到整个机器人的机械机构,
所谓被动关节,就是指现实中不配置电机的关节,也就是不会出现在机器人的Joint State Msg里,以避免MoveIt与JointState出现匹配错误。这里我们的LWR机械臂并没有此类被动关节,所以可以直接跳过。
2.2.8 生成配置文件(Configuration Files)
最后一步,在Configuration Package Save Path里面选择一个保存地址,一般我们把他放在path_to_catkin_ws/src/lwr_moveit_config然后点击Generate Package,这样一个完整的MoveIt Configuration Package就创建好了!先不要急着运行,我们先来看看都生成了哪些东西,还有一些重要的配置参数都是在哪定义的。