要使用MoveIt控制我们的机器人,需要配置一个ROS的软件包。MoveIt提供了一个图形化工具MoveIt Setup Assistant可以快捷的进行配置。
介绍
MoveIt Setup Assistant是一个图形界面的工具,帮助配置MoveIt所需的ROS包。
- 最主要的功能是生成SRDF文件 。 了解URDF/SDRF
- 另外也生成MoveIt需要的管道(pipeline)的配置文件。
使用教程
这里通过官方的Franka机器人学习如何使用MoveIt配置助手。
sudo apt-get install ros-melodic-franka-description
1. 运行MoveIt Setup Assistant
启动MoveIt Setup Assistant
roslaunch moveit_setup_assistant setup_assistant.launch
有两个选项:
- 新建配置 Create New MoveIt! Configuration Package
-
编辑已有配置 Edit Existing MoveIt! Configuration Package.
点击browse按钮找到 panda_arm_hand.urdf.xacro 默认路径(/opt/ros/melodic/share/franka_description/robots/panda_arm_hand.urdf.xacro)。这个文件在安装Franka机器人描述包的后自带。随后点击Load Files。MoveIt Setup Assistant会开始加载机器人描述文件, 等待加载完成提示 Success! Use the left navigation pane to continue。
2. 生成自碰撞矩阵 Self-Collision Matrix
- 默认的碰撞免检矩阵生成器搜索机器人所有关节,这个碰撞免检矩阵是可以安全地关闭检查,从而减少行动规划的处理时间
- 在某些关节会关闭碰撞检查,比如总是碰撞,从不碰撞,在默认的位置碰撞,或在运动学链条上的相邻处。
- 采样密度指定了多少个随机机器人位置来检查碰撞。更高的密度需要更多的计算时间,而较低的密度就要减少关闭的检查节点
- 默认值是10000个碰撞检查。碰撞检查是并行完成,以减少处理时间。
选择左侧Self-Collisions, 点击Generate Collision Matrix按钮。稍加等待会呈现一个碰撞表格。
3. 添加虚拟关节 virtual joint
通过添加虚拟关节把机械臂关联到world。这里我们只需要定义一个虚拟关节把panda_link0关联到world,从而定义机械臂基座和world的坐标系关系。
- 选择左侧Virtual Joints, 点击Add Virtual Joint
- 定义名称为virtual_joint
- 定义子关节(child link)为panda_link0, 父关节(parent frame)为world
- 定义关节类型(joint type)为fixed
- 点击Save
4. 添加规划组planning group
MoveIt通过定义规划组(planning group)来语义上定义机机械臂的各个部分(如手臂,末端执行器等)。这是MoveIt中一个很重要的概念。简单来说就是定义某些关节为一个组合并起一个名字。
- 选择左侧Planning Groups
- 点击Add Group
添加规划组arm
输入名称panda_arm
运动学求解器选择kdl_kinematics_plugin/KDLKinematicsPlugin (一般用KDL就可以)如果需要更强大的求解器,参考IKFast Kinematics/IKFast
-
Kin. Search Resolution,Kin. Solver Attempts 和 *Kin. Search Timeout * 保持默认设置即可
-- Kin. Search Resolution: 关节空间的采样密度
-- Kin. Search TImeout: 求解超时时间
-- Kin. Solver Attempts: 求解失败尝试次数
-
点击Add Joints按钮,会出现所有关节的列表。arm规划组包括 joint0 到 joint8。
选中virtual_joint,按住shift再点击panda_joint8,点击>
按钮讲关节添加到右侧。
点击Save保存
添加规划组gripper
- 再为末端执行器添加一个规划组,这次添加方法会有些许不同
- 输入Group Name为hand
- 配置同arm
- 点击Add Links按钮
和arm有区别
- 选择panda_hand, panda_leftfinger, 和panda_rightfinger 并添加到右侧
- 点击Save保存
5. 添加机器人姿态
MoveIt允许添加一个预设的机器人姿态,之后可以方便调用,例如初始姿态。
这里我们添加一个HOME姿态。
- 选择左侧Robot Poses
- 点击Add Pose按钮,定义名称为home
- 选择规划组panda_arm, 右侧会出现各个关节的滑条,拖动设置想要的姿态
- 点击Save保存
-
注意
尽量拖动每一个关节,这样如果URDF中有设置错误就可以看出来
6. 配置末端执行器End Effectors
MoveIt中会给末端执行器一个专门的标签-End Effectors
。之前我们已经为末端执行器添加了规划组,这里我们要将其标记为End Effector
- 选择左侧End Effectors
- 点击Add End Effector
- End Effector Name设置为hand
- End Effector Group选择之前添加的规划组hand
- 父关节选择为panda_link8
-
父规划组选择留空白
7. 添加被动关节Passive Joints
如果机器人中有被动的关节(不是主动控制的关节),需要将其添加为被动关节,这样可以告诉MoveIt在规划运动的时候这些关节是无法主动控制的。
Panda机械臂中没有被动关节,跳过这一步。
8. 设置3D感知
这里可以为机械臂添加传感器,如kinetic。
参数配置参考tutorial
如没有传感器,设置为None
9. Gazebo仿真
如果需要在Gazebo中仿真,可以在这里生成需要的URDF文件。(不需要可以跳过)
生成URDF后,通过如下步骤在Gazebo中生成仿真
- 建立一个空的world
roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false recording:=false debug:=true
- 加载模型
rosrun gazebo_ros spawn_model -file -urdf -x 0 -y 0 -z 1 -model panda
10. ROS Control
ROS Control是ROS官方提供的针对控制机器人的一套硬件驱动框架,针对不懂得运动执行器提供不同的驱动接口,再这之上又加入了一个硬件抽象层统一接入ROS,包含了一系列ROS包: controller interfaces, controller managers, transmissions and hardware_interfaces
ROS Control
这里我们可以通过ROS Control面板为关节添加模拟控制器,这样就可以通过MoveIt模拟机械臂运动。
选择左侧ROS Control
点击Add Controller
首先为arm规划组添加position controller
定义名称为arm_position_controller
-
选择controller type为position_controllers/JointPositionController
下一步是添加控制的关节,这里可以单个关节添加,也可以添加整个规划组
这里选择后者,点击Add Planning Group Joints
-
选择规划组panda_arm 并添加到右侧
点击Save保存
11. 添加作者信息
可以把自己的信息填入,之后发布的时候需要 (主要是装个B)。
- 选择Author Information
- 输入名字和邮箱
12. 生成配置文件
最后一步啦!
- 选择左侧 Configuration Files,点击browse选择一个合适的位置(例如/home/目录)
- 点击Create New Folder,输入名称,点击Choose
- 点击Generate Package 按钮,会生成一系列的launch和配置文件
-
所有的文件显示在Generated Files/Folders列表
至此,就完成了MoveIt包的配置,可以运行通过Rviz模拟了。