本文参考Moveit官方教程,原文链接见文末。已经过本人踩坑验证:
- 系统版本:ubuntu16.04
- ROS版本:Kinetic
Moveit!是ROS提供的机械臂开发平台。该平台提供了一系列功能包,帮助开发者完成机械臂的运动学求解、运动规划、3D感知、仿真配置等功能。
使用Moveit!的第一步,是通过自带的配置工具MoveIt!Setup Assistant对机械臂进行配置。
配置工具MoveIt!Setup Assistant界面
我在使用过程中,发现网络上的部分教程阐述不够全面,或者由于版本更新出现了一些新的配置选项没有提及,于是我将官方说明文档进行翻译整理,并结合我自己的使用过程写了这篇总结。
概览
MoveIt!Setup Assistant是一款图形化的界面工具。使用这个工具,可以更方便地配置MoveIt!,而不需要手动添加代码文件。它会生成一个SRDF文件以及一些其它的配置文件,这些文件都会用来配置MoveIt!。
SDRF和URDF类似,都是用来描述机器人的文件格式。但机械臂的部分补充信息,如规划组、自定义位姿等不能在URDF中存储,因此使用了SDRF文件。
安装Moveit!
- 在终端中输入如下命令安装Moveit!:
sudo apt-get install ros-kinetic-moveit
下载教程机器人模型
- 将教程所用到的机器人模型下载到本地:
sudo apt-get install ros-kinetic-franka-description
第一步:运行MoveIt!Setup Assistant
- 在终端中输入如下命令运行MoveIt!Setup Assistant:
roslaunch moveit_setup_assistant setup_assistant.launch
将会出现如下开始界面,有两个选项:
Create New MoveIt! Configuration Package :创建一个新的配置功能包
Edit Existing MoveIt! Configuration Package:编辑已经存在的配置功能包
- 这里我们选择新建一个新的配置功能包。
- 点击 Browse 从教程机器人的模型路径选择模型文件。文件路径如下:
/opt/ros/kinetic/share/franka_description/robots/panda_arm_hand.urdf.xacro
- 点击 Load Files 进行加载,等待加载完毕
第二步:生成自碰撞矩阵
默认的自碰撞矩阵生成器可以搜索不必要的碰撞检查。比如,如果两个link之间总是碰撞的、永远不会碰撞、在机器人默认位姿处会碰撞、处于相邻位置时,这两个link的碰撞检查都会被禁用,以节约计算资源。
采样密度(sampling density)的默认值为10000,是指采用多少个随机的位姿来检测自碰撞。更高的采样密度需要更长的计算时间,而过低的采样密度可能会忽略掉一些本应出现的碰撞。为了节约时间,碰撞检查的计算是并行的。
- 点击左侧的 Self-Collisions 面板按钮,点击 Generate Collision Matrix 按钮,等待自碰撞计算完成
第三步:添加虚拟关节
虚拟关节用于将机器人固定在世界环境中。在 Panda 中,我们定义一个虚拟关节,以连接panda_link0 和 world 坐标系。
值得注意的是,如果机械臂模型文件本身存在与世界的Fixed关节,或者机械臂的基座是移动的(如车载机械臂),则不需要添加虚拟关节。
- 点击左侧 Virtual Joints 面板按钮,选择Add Virtual Joint
- 定义虚拟关节名称为“virtual_joint”
- 设置 child link 为“panda_link0”,parent frame 为“world”。
- 设置关节类型为“fixed”
- 点击“save”,就可以看到如图所示的界面:
第四步:添加规划组
规划组(Planning groups)用来指定机器人的不同部分。如哪一部分是手臂,哪一部分是末端执行器等。
- 点击左侧 Planning Groups 面板按钮
- 选择 Add Group ,将会看到如下界面:
添加手臂(arm)规划组
- 首先添加手臂部分的规划组:
- 输入 Group Name 为 panda_arm
- 选择 kdl_kinematics_plugin/KDLKinematicsPlugin 作为运动学求解器。(注意:如果你有一个自定义的机器人,也可以选择自定义IK求解器,详见 Kinematics/IKFast)
- 保持其余选项不变
- 接下来,点击 Add Joints 按钮。在左侧,你将会看到所有关节的列表,选择手臂部分所属的关节,添加到右侧。
- 点击 Save 存储规划组
添加手爪(gripper)规划组
- 接下来添加手爪部分的规划组,注意步骤与手臂部分有所区别。
- 点击 Add Group 按钮
- 输入 Group Name 为 hand
- 保持其余选项不变
- 点击 Add Links 按钮
- 选择 panda_hand,panda_leftfinger, 和 panda_rightfinger ,将它们添加到右侧的 Selected Links 列表
- 点击 Save
第五步:添加预置机器人位姿
我们可以在配置文件中添加一些常用的位姿,使用时就可以直接指定位姿的名称,而不用再指定具体的关节角度。
- 点击左侧 Robot Poses 面板按钮
- 点击 Add Pose。我们将所有所有关节角设为0,定义此时的位姿为home,点击保存。当然,也可以为机器人添加更多的位姿,或者为其余的规划组(如hand)添加位姿。
- 重点:在这里,我们可以随意改变所有关节的角度。我们应当尽可能多地尝试一下,这样可以发现机器人模型中的错误。
第六步:标记末端执行器
我们已经为panda添加了手爪规划组。现在,我们将这个 hand 组设置为一个特殊的组:end effector(末端执行器)。这样,Moveit!在执行某些操作时才能顺利地进行识别。
- 点击左侧 End Effectors 面板按钮
- 点击 Add End Effector
- 输入 hand 作为 End Effector Name
- 选择 hand 组作为 End Effector Group
- 选择 panda_link8 作为末端执行器的 Parent Link
- 保留 Parent Group 为空白
第七步:添加被动关节
被动关节(passive joints)是指机器人中可能存在的不需要驱动的关节,比如小车的万向轮。被指定为被动关节后,规划器就不会对这个关节的运动进行规划和控制了。在Panda中不存在被动关节,所以可以跳过此步骤。
第八步:3D感知
3D感知功能可以在 sensors_3d.yaml 文件中配置与3D传感器相关的参数。
例如:点云(point_cloud)参数
更多关于此参数的设置可以见教程tutorial。
在这里,我们不需要进行3D感知,因此设置为None
第九步:Gazebo仿真
仿真功能可以帮助我们在Gazebo中进行仿真。在此可以生成一个兼容Gazebo的新urdf文件
你可以使用生成的urdf文件在Gazebo中生成机器人,步骤如下:
- 利用rosrun打开一个空白的Gazebo世界:
roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false recording:=false debug:=true
- 利用rosrun运行机器人。其中,利用生成urdf文件的路径替换 </path_to_new_urdf/file_name.urdf> 内容
rosrun gazebo_ros spawn_model -file </path_to_new_urdf/file_name.urdf> -urdf -x 0 -y 0 -z 1 -model panda
第十步:ROS Control
ROS Control 是一系列十分常用的与机器人控制相关的功能包,详见ros_control 官方文档
ROS Control 功能可以生成用于驱动机器人的仿真控制器。这将帮助我们打通ROS和Moveit!
- 点击左侧 ROS Control 面板按钮
- 点击 Add Controller
- 在 Controller Name 输入 arm_position_controller
- 选择控制器类型为 position_controllers/JointPositionController (位置控制器)
- 接下来添加需要控制的关节 ,既可以单独添加,也可以规划组成组添加。我们这里选择成组添加 Add Planning Group Joints
- 选择 panda_arm 规划组,将其添加到右侧
- 点击Save
第十一步:添加作者信息
如果将来需要发布功能包,那么有必要完善功能包的信息:
- 点击 Author Information 面板按钮
- 输入你的姓名和邮箱
第十二步:生成配置文件
最后一步是生成配置文件,完成功能包的创建。
- 点击Configuration Files 选项,为你的Moveiy!功能包设置保存位置和名称,位置要精确到功能包目录(如果没有会自动创建),例如:
~/catkin_ws/src/panda_moveit_config
- 点选需要创建的配置文件,如果不熟悉就全部选择。点击 Generate Package 按钮,等待功能包创建完成。
以上便完成了Moveit!配置功能包创建的全部过程。对于自己的机器人,只要将模型文件替换为相应的urdf即可。
相关课程推荐:
参考文献
[1] Moveit 配置助手官方教程