【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程

1283
2
2020年5月25日 09时15分

 

本文参考Moveit官方教程,原文链接见文末。已经过本人踩坑验证:

  • 系统版本:ubuntu16.04
  • ROS版本:Kinetic

 

Moveit!是ROS提供的机械臂开发平台。该平台提供了一系列功能包,帮助开发者完成机械臂的运动学求解、运动规划、3D感知、仿真配置等功能。
使用Moveit!的第一步,是通过自带的配置工具MoveIt!Setup Assistant对机械臂进行配置。

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图

配置工具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:编辑已经存在的配置功能包

 

  • 这里我们选择新建一个新的配置功能包。

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(1)

 

  • 点击 Browse 从教程机器人的模型路径选择模型文件。文件路径如下:

 

/opt/ros/kinetic/share/franka_description/robots/panda_arm_hand.urdf.xacro

 

  • 点击 Load Files 进行加载,等待加载完毕

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(2)

 

第二步:生成自碰撞矩阵

默认的自碰撞矩阵生成器可以搜索不必要的碰撞检查。比如,如果两个link之间总是碰撞的、永远不会碰撞、在机器人默认位姿处会碰撞、处于相邻位置时,这两个link的碰撞检查都会被禁用,以节约计算资源。

 

采样密度(sampling density)的默认值为10000,是指采用多少个随机的位姿来检测自碰撞。更高的采样密度需要更长的计算时间,而过低的采样密度可能会忽略掉一些本应出现的碰撞。为了节约时间,碰撞检查的计算是并行的。

 

  • 点击左侧的 Self-Collisions 面板按钮,点击 Generate Collision Matrix 按钮,等待自碰撞计算完成

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(3)

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(4)

 

第三步:添加虚拟关节

虚拟关节用于将机器人固定在世界环境中。在 Panda 中,我们定义一个虚拟关节,以连接panda_link0 和 world 坐标系。

值得注意的是,如果机械臂模型文件本身存在与世界的Fixed关节,或者机械臂的基座是移动的(如车载机械臂),则不需要添加虚拟关节。

  • 点击左侧 Virtual Joints 面板按钮,选择Add Virtual Joint
  • 定义虚拟关节名称为“virtual_joint”
  • 设置 child link 为“panda_link0”,parent frame 为“world”。
  • 设置关节类型为“fixed”
  • 点击“save”,就可以看到如图所示的界面:

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(5)

 

第四步:添加规划组

规划组(Planning groups)用来指定机器人的不同部分。如哪一部分是手臂,哪一部分是末端执行器等。

  • 点击左侧 Planning Groups 面板按钮
  • 选择 Add Group ,将会看到如下界面:

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(6)

 

添加手臂(arm)规划组

  • 首先添加手臂部分的规划组:
  1. 输入 Group Name 为 panda_arm
  2. 选择 kdl_kinematics_plugin/KDLKinematicsPlugin 作为运动学求解器。(注意:如果你有一个自定义的机器人,也可以选择自定义IK求解器,详见 Kinematics/IKFast)
  3. 保持其余选项不变

 

  • 接下来,点击 Add Joints 按钮。在左侧,你将会看到所有关节的列表,选择手臂部分所属的关节,添加到右侧。

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(7)

 

  • 点击 Save 存储规划组

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(8)

 

添加手爪(gripper)规划组

  • 接下来添加手爪部分的规划组,注意步骤与手臂部分有所区别。
  1. 点击 Add Group 按钮
  2. 输入 Group Name 为 hand
  3. 保持其余选项不变
  4. 点击 Add Links 按钮
  5. 选择 panda_hand,panda_leftfinger, 和 panda_rightfinger ,将它们添加到右侧的 Selected Links 列表
  6. 点击 Save

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(9)

 

第五步:添加预置机器人位姿

我们可以在配置文件中添加一些常用的位姿,使用时就可以直接指定位姿的名称,而不用再指定具体的关节角度。

 

  • 点击左侧 Robot Poses 面板按钮
  • 点击 Add Pose。我们将所有所有关节角设为0,定义此时的位姿为home,点击保存。当然,也可以为机器人添加更多的位姿,或者为其余的规划组(如hand)添加位姿。
  • 重点:在这里,我们可以随意改变所有关节的角度。我们应当尽可能多地尝试一下,这样可以发现机器人模型中的错误。

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(10)

 

第六步:标记末端执行器

我们已经为panda添加了手爪规划组。现在,我们将这个 hand 组设置为一个特殊的组:end effector(末端执行器)。这样,Moveit!在执行某些操作时才能顺利地进行识别。

  • 点击左侧 End Effectors 面板按钮
  • 点击 Add End Effector
  • 输入 hand 作为 End Effector Name
  • 选择 hand 组作为 End Effector Group
  • 选择 panda_link8 作为末端执行器的 Parent Link
  • 保留 Parent Group 为空白

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(11)

 

第七步:添加被动关节

被动关节(passive joints)是指机器人中可能存在的不需要驱动的关节,比如小车的万向轮。被指定为被动关节后,规划器就不会对这个关节的运动进行规划和控制了。在Panda中不存在被动关节,所以可以跳过此步骤。

第八步:3D感知

3D感知功能可以在 sensors_3d.yaml 文件中配置与3D传感器相关的参数。

例如:点云(point_cloud)参数

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(12)

 

更多关于此参数的设置可以见教程tutorial

 

在这里,我们不需要进行3D感知,因此设置为None

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(13)

 

第九步:Gazebo仿真

仿真功能可以帮助我们在Gazebo中进行仿真。在此可以生成一个兼容Gazebo的新urdf文件

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(14)

 

你可以使用生成的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-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(15)

 

第十步:ROS Control

ROS Control 是一系列十分常用的与机器人控制相关的功能包,详见ros_control 官方文档

ROS Control 功能可以生成用于驱动机器人的仿真控制器。这将帮助我们打通ROS和Moveit!

  • 点击左侧 ROS Control 面板按钮

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(16)

 

  • 点击 Add Controller
  • 在 Controller Name 输入 arm_position_controller
  • 选择控制器类型为 position_controllers/JointPositionController (位置控制器)
  • 接下来添加需要控制的关节 ,既可以单独添加,也可以规划组成组添加。我们这里选择成组添加 Add Planning Group Joints

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(17)

 

  • 选择 panda_arm 规划组,将其添加到右侧

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(18)

 

  • 点击Save

 

第十一步:添加作者信息

如果将来需要发布功能包,那么有必要完善功能包的信息:

  • 点击 Author Information 面板按钮
  • 输入你的姓名和邮箱

 

第十二步:生成配置文件

最后一步是生成配置文件,完成功能包的创建。

  • 点击Configuration Files 选项,为你的Moveiy!功能包设置保存位置和名称,位置要精确到功能包目录(如果没有会自动创建),例如:
~/catkin_ws/src/panda_moveit_config
  • 点选需要创建的配置文件,如果不熟悉就全部选择。点击 Generate Package 按钮,等待功能包创建完成。

 

【ROS-Moveit!】机械臂控制探索(1)——Moveit!配置助手的使用教程插图(19)

以上便完成了Moveit!配置功能包创建的全部过程。对于自己的机器人,只要将模型文件替换为相应的urdf即可。

 

相关课程推荐:

《MoveIt编程入门 · 古月》

《MoveIt可视化配置及仿真指南 · 古月》

 

参考文献

[1] Moveit 配置助手官方教程

发表评论

后才能评论

评论列表(2条)

  • 5nprd_7673 2020年7月10日 下午5:55

    abb的机器人模型怎么下载呢

  • 神秘老铁 2020年6月5日 下午10:21

    请问配置完成后 运行demo_gazebo.launch
    在rviz中移动机械臂并执行会failed
    终端报错:
    [ERROR] [1591366799.165638413, 35.823000000]: Unable to identify any set of controllers that can actuate the specified joints: [ joint1 joint2 joint3 joint4 joint5 joint6 ]
    这个是什么导致的哦
    谢谢~