前言:树莓派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 -y
MoveIt2源码:
GitHub - moveit/moveit2: 🤖 MoveIt for ROS 2
官方教程文档:
MoveIt 2 Documentation — MoveIt Documentation: Humble documentation
首先,在ros工作空间的src下创建一个文件夹用于存放MoveIt配置后生成的文件,以虚拟机中的moveit2_ws工作空间为例,虚拟机终端输入,
xxxxxxxxxx
cd moveit2_ws/src
mkdir test_config
在虚拟机终端输入以下指令启动MoveIt2配置,
xxxxxxxxxx
ros2 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.1
default_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进行编译,终端输入,
xxxxxxxxxx
cd moveit2_ws
colcon build --packages-select test_moveit_config
编译完成后,重新刷新下环境变量,终端输入source ~/.bashrc
.然后终端输入以下指令启动moveit2,终端输入,
xxxxxxxxxx
ros2 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进行保存。