前言:树莓派5和Jetson-nano的ros是运行在docker中,因此运行moveit2的效果一般,建议树莓派5和jetson-nano主板的用户在虚拟机上运行MoveIt2的相关案例。Orin主板的ros是直接运行在主板上的,因此Orin主板的用户可以直接在主板上运行MoveIt2相关的案例,指令与在虚拟机上运行的一样。本节内容以在虚拟机上运行为例展开说明。
本节内容说明如何配置MoveIt2,生成仿真所需要的参数文件以及launch文件。
MoveIt 2 是 MoveIt 的下一代版本,专为 ROS 2(Robot Operating System 2) 设计,是一个开源的机器人运动规划、操控、3D 感知、运动学、碰撞检测和任务规划框架。它广泛应用于工业机器人、服务机器人、移动机械臂以及科研和教育领域。
| 特性 | MoveIt | MoveIt2 | 
|---|---|---|
| ROS 版本 | ROS1 | ROS2 | 
| 实时性 | 有限支持 | 更好的实时性能 | 
| 跨平台支持 | 主要 Linux | 支持 Linux、Windows、macOS(ROS 2 特性) | 
| 运动规划接口 | ActionLib(ROS 1) | Action(ROS 2) | 
| 默认规划器 | OMPL | OMPL + 更多优化选项 | 
虚拟机中已经安装了MoveIt2,这里不需要进行安装,如果在新的环境下需要安装MoveIt2的话,则输入以下指令进行安装,
#把下边的<distro>修改成自己的ros版本,这边建议是用humble(22.04)或者Rolling(24.04)sudo apt install ros-<distro>-moveit -yMoveIt2源码:
GitHub - moveit/moveit2: 🤖 MoveIt for ROS 2
官方教程文档:
MoveIt 2 Documentation — MoveIt Documentation: Humble documentation
首先,在ros工作空间的src下创建一个文件夹用于存放MoveIt配置后生成的文件,以虚拟机中的moveit2_ws工作空间为例,虚拟机终端输入,
xxxxxxxxxxcd moveit2_ws/srcmkdir test_config
在虚拟机终端输入以下指令启动MoveIt2配置,
xxxxxxxxxxros2 run moveit_setup_assistant moveit_setup_assistant程序启动后,出现以下配置画面,

点击【Create New MoveIt Configuration Package】,出现以下画面,

点击【Browse】,然后选择M3Pro的URDF文件,文件目录在/home/yahboom/moveit2_ws/src/yahboom_M3Pro_description/urdf,选择完成后,点击【Load Files】。然后程序会加载选择的URDF文件,加载完成后,出现以下画面,右边显示我们加载的M3Pro小车的模型。

然后点击左侧配置栏的【Self-Collisions】,这一步是配置自碰撞检测,如下图所示,点击【Generate Collisions Matrix】即可完成配置,

接着下一步,点击左侧配置栏的【Planning Groups】,这一步是创建规划组,点击【Add Group】创建第一个规划组,如下图所示,

然后创建arm_group规划组控制机械臂,如下图设置,

然后,我们需要给这个规划组添加点击下边的【Add Joints】进入到添加界面,在添加界面中,我们选择左边的arm_Joint1到arm_Joint5,点击>完成添加后,点击【Save】保存退出。

完成arm_group规划组设置如下图所示,然后点击【Add Group】添加夹爪的规划组,

参数如下图所示,然后点击【Add Links】进入选择Links的界面,

在选择Links界面,我们选择左边的llink1、llink2、llink3,rlink1、rlink2、rlink3,点击>完成添加后,点击【Save】保存退出。

完成夹爪规划组如下图所示,

至此,设置规划组完成,接下来点击左侧设置栏的【Robot Groups】,这一步是设置机械臂和夹爪的预设姿态,
如下图所示,点击【Add Pose】,

然后如下图所示设置,设置arm_group规划组的up姿态,中间的滑块可以设置姿态,右边的urdf也会显示设置的姿态,设置完成后,点击【Save】完成设置。

接着,我们按照设置up姿态的步骤,设置arm_group规划组的down姿态和init姿态,设置参考下图,
down姿态:

init姿态:

设置完arm_group组的三个姿态后,设置grip_group组的两个姿态分别是close和open,主要这里的【Planning Group】需要修改成grip_group,设置如下图,
close姿态:

open姿态:

【Robot Poses】设置完成后,如下图所示,

接下来,点击左侧设置栏的【End Effectors】,配置末端执行器,如下图所示,点击【Add End Effector】进入设置界面,

在设置界面中,按照下图所示进行设置,设置完成后,点击【Save】保存后退出,

设置【End Effectors】完毕如下图所示,

接着,点击左侧设置栏的【ros2_control URDF Modifications】,这一步是设置URDF模型,我们不需要对URDF模型进行修改,直接点击【Add interfaces】即可,如下图所示,

点击左侧设置栏的【ROS2 Controllers】,这一步是设置机器人运动控制,点击【Add Controller】添加控制器,如下图所示,

进入设置后,按照下图所示,添加arm_group_controller控制器,

然后点击【Add Planning Group Joints】添加控制组的关节,如下图所示,添加arm_group控制组,选择左边的arm_group然后点>即可完成添加,最后点击【Save】保存退出,

设置完的第一个控制器如下图所示,

然后,我们添加第二个控制器,同样是点击【Add Controller】进入添加界面,然后按照下图所示进行设置,

然后点击【Add Planning Group Joints】添加关节,如下图所示,选择左边的grip_group,然后点击>,即可完成添加,最后点击【Save】完成设置,

完成【ROS2 Controllers】设置后,如下图所示,

接下来点击左侧设置栏的【MoveIt Controllers】,这一步是设置轨迹控制器来执行规划的轨迹,将生成的轨
迹发送到机器人ROS2控制器。点击【Add Controller】,添加轨迹控制器,如下图所示,

进入设置界面,按照下图进行设置,注意这里的【Controller Name】要和上一步设置的【ROS2 Controller】的一样,然后点击【Add Planning Group Joints】添加控制关节,

如下图所示,添加arm_group控制组,选择左边的arm_group然后点>即可完成添加,最后点击【Save】保存退出,

设置完成后如下图所示,
 
接着再添加夹爪的轨迹控制器,点击【Add Controller】,进入设置界面,根据下图所示进行设置,然后点击【Add Planning Group Joints】添加控制关节,

然后点击【Add Planning Group Joints】添加关节,如下图所示,选择左边的grip_group,然后点击>,即可完成添加,最后点击【Save】完成设置,

完成【MoveIt Controllers】设置如下图所示,

接下来点击左侧设置栏的【Author Information】,然后填入自己的姓名和邮箱,如下图所示,

最后,点击左侧设置栏的【Configuration Files】,点击【Browse】,找到我们之前创建好的文件夹,这里选择的是/home/yahboom/moveit2_ws/src/test_moveit_config,出现以下信息点击【ok】

然后点击下边的【Generate Package】,生成功能包,如下图所示,出现提示信息点击【ok】,

出现提示信息点击【ok】,

如下图所示,出现Configuration package generated successfully 点击【Exit Setup Assistant】,完成所有设置

在test_moveit_config功能包中,保存了刚才设置的所有内容,然后,我们需要对/home/yahboom/moveit2_ws/src/test_moveit_config/config目录下的joint_limits.yaml进行修改,只需要把里边的整数修改成小数,值不变,修改后的文件如下,
x# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed# For beginners, we downscale velocity and acceleration limits.# You can always specify higher scaling factors (<= 1.0) in your motion requests.  # Increase the values below to 1.0 to always move at maximum speed.default_velocity_scaling_factor0.1default_acceleration_scaling_factor0.1# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]joint_limits  arm1_Joint    has_velocity_limitstrue    max_velocity1.0    has_acceleration_limitsfalse    max_acceleration0.0  arm2_Joint    has_velocity_limitstrue    max_velocity1.0    has_acceleration_limitsfalse    max_acceleration0.0  arm3_Joint    has_velocity_limitstrue    max_velocity1.0    has_acceleration_limitsfalse    max_acceleration0.0  arm4_Joiint    has_velocity_limitstrue    max_velocity1.0    has_acceleration_limitsfalse    max_acceleration0.0  arm5_Joint    has_velocity_limitstrue    max_velocity1.0    has_acceleration_limitsfalse    max_acceleration0.0  llink1_Joint    has_velocity_limitsfalse    max_velocity0.0    has_acceleration_limitsfalse    max_acceleration0.0  llink2_Joint    has_velocity_limitsfalse    max_velocity0.0    has_acceleration_limitsfalse    max_acceleration0.0  llink3_Joint    has_velocity_limitsfalse    max_velocity0.0    has_acceleration_limitsfalse    max_acceleration0.0  rlink1_Joint    has_velocity_limitstrue    max_velocity1.0    has_acceleration_limitsfalse    max_acceleration0.0  rlink2_Joint    has_velocity_limitsfalse    max_velocity0.0    has_acceleration_limitsfalse    max_acceleration0.0  rlink3_Joint    has_velocity_limitsfalse    max_velocity0.0    has_acceleration_limitsfalse    max_acceleration0.0保存后退出,然后回到工作空间目录下,使用colcon build进行编译,终端输入,
xxxxxxxxxxcd moveit2_wscolcon build --packages-select test_moveit_config编译完成后,重新刷新下环境变量,终端输入source ~/.bashrc.然后终端输入以下指令启动moveit2,终端输入,
xxxxxxxxxxros2 launch test_moveit_config demo.launch.py程序启动后,当终端出现了You can start planning now!说明成功启动,如下图所示,

然后我们测试下Plan和Execute,我们先测试arm_grou。如下图所示,选择【Planning Group】为arm_group、选择 【Start State】为

然后点击左侧的【Plan & Execute】,让机械臂规划运行到init,如下图所示,

运动规划完成后,如下图所示,

如果能够成功地规划并执行成功,说明arm_group配置成功,接下来测试grip_group,按下图进行设置,把【Planning Group】为grip_group、选择 【Start State】为

点击左边的【Plan & Execute】,让夹爪规划运行到close状态,如下图所示,

如果夹爪成功合上表示规划执行成功。
在运行MoveIt2的时候,会出现机械臂重复执行规划的操作,这是因为打开了loop animation,我们把这个选项关闭即可。在【Display】中找到【MotionPlanning】->【Planned Path】->【Loop Animation】,点击这里的√即可取消loop animation。
运行MoveIt2的时候,橙色部分表示目标位姿,如果我们不想显示目标位姿的话,可以找到【MotionPlanning】->【Query Goal State】,点击这里的√即可取消显示目标位姿。
这里修改了rviz的设置后,需要按下ctrl 和s进行保存。