Skip to content

rm_moveit2_config功能包说明

rm_moveit2_config是实现Moveit2控制真实机械臂的功能包,该功能包的主要作用为调用官方的Moveit2框架,结合我们机械臂本身的URDF生成适配于我们机械臂的moveit2的配置和启动文件,通过该功能包我们可以实现moveit2控制虚拟机械臂和控制真实机械臂。 这里将从以下三个方面整体介绍该功能包:

  • 1.功能包使用:了解该功能包的使用。
  • 2.功能包架构说明:熟悉功能包中的文件构成及作用。
  • 3.功能包话题说明:熟悉功能包相关的话题,方便开发和使用。

代码链接:https://github.com/RealManRobot/ros2_rm_robot/tree/main/rm_moveit2_config

1.rm_moveit2_config使用

1.1moveit2控制虚拟机械臂

首先配置好环境完成连接后我们可以通过以下命令直接启动节点。

ros2 launch rm_<arm_type>_config demo.launch.py

在实际使用时需要将以上的<arm_type>更换为实际的机械臂型号,可选择的机械臂型号有65、63、eco65、75、gen72。 例如65机械臂的启动命令:

ros2 launch rm_65_config demo.launch.py

节点启动成功后,将显示以下画面。
image 接下来我们可以通过拖动控制球使机械臂到达目标位置,然后点击规划执行。
image 规划执行。
image

1.2moveit2控制真实机械臂

控制真实机械臂需要的控制指令相对较多一些,如下为详细的控制方式。
首先运行底盘驱动节点。

ros2 launch rm_driver rm_<arm_type>_driver.launch.py

接下来需要运行rm_description功能包文件。

ros2 launch rm_description rm_<arm_type>_display.launch.py

之后需要运行中间功能包rm_control的相关节点。

ros2 launch rm_control rm_<arm_type>_control.launch.py

最终需要启动控制真实机械臂的moveit2节点。

ros2 launch rm_<arm_type>_config real_moveit_demo.launch.py

注意以上指令均需要将<arm_type>更换为对应的机械臂型号,可选择的型号有65、63、eco65、75、gen72。
完成以上操作后将会出现以下界面,我们可以通过拖动控制球的方式控制机械臂运动。
image

2.rm_moveit2_config功能包架构文件总览

├── rm_63_config                                    #63机械臂moveit2功能包
│   ├── CMakeLists.txt                              #63机械臂moveit2功能包编译规则
│   ├── config                                      #63机械臂moveit2功能包参数文件夹
│   │   ├── initial_positions.yaml                  #63机械臂moveit2初始化位姿
│   │   ├── joint_limits.yaml                       #63机械臂关节限制
│   │   ├── kinematics.yaml                         #63机械臂运动学参数
│   │   ├── moveit_controllers.yaml                 #63机械臂moveit2控制器
│   │   ├── moveit.rviz                             #63机械臂rviz2显示配置文件
│   │   ├── pilz_cartesian_limits.yaml
│   │   ├── rml_63_description.ros2_control.xacro   #63机械臂xacro描述文件
│   │   ├── rml_63_description.srdf                 #63机械臂moveit2控制配置文件
│   │   ├── rml_63_description.urdf.xacro           #63机械臂xacro描述文件
│   │   └── ros2_controllers.yaml                   #63机械臂运动控制器
│   ├── launch
│   │   ├── demo.launch.py                          #63虚拟机械臂moveit2启动文件
│   │   ├── gazebo_moveit_demo.launch.py            #63仿真机械臂moveit2启动文件
│   │   ├── move_group.launch.py
│   │   ├── moveit_rviz.launch.py
│   │   ├── real_moveit_demo.launch.py              #63真实机械臂moveit2启动文件
│   │   ├── rsp.launch.py
│   │   ├── setup_assistant.launch.py
│   │   ├── spawn_controllers.launch.py
│   │   ├── static_virtual_joint_tfs.launch.py
│   │   └── warehouse_db.launch.py
│   └── package.xml
├── rm_65_config                                    #65机械臂moveit2功能包(文件解释参考63)
│   ├── CMakeLists.txt
│   ├── config
│   │   ├── initial_positions.yaml
│   │   ├── joint_limits.yaml
│   │   ├── kinematics.yaml
│   │   ├── moveit_controllers.yaml
│   │   ├── moveit.rviz
│   │   ├── pilz_cartesian_limits.yaml
│   │   ├── rm_65_description.ros2_control.xacro
│   │   ├── rm_65_description.srdf
│   │   ├── rm_65_description.urdf.xacro
│   │   └── ros2_controllers.yaml
│   ├── launch
│   │   ├── demo.launch.py
│   │   ├── gazebo_moveit_demo.launch.py
│   │   ├── move_group.launch.py
│   │   ├── moveit_rviz.launch.py
│   │   ├── real_moveit_demo.launch.py
│   │   ├── rsp.launch.py
│   │   ├── setup_assistant.launch.py
│   │   ├── spawn_controllers.launch.py
│   │   ├── static_virtual_joint_tfs.launch.py
│   │   └── warehouse_db.launch.py
│   └── package.xml
├── rm_75_config                                      #75机械臂moveit2功能包(文件解释参考63)
│   ├── CMakeLists.txt
│   ├── config
│   │   ├── initial_positions.yaml
│   │   ├── joint_limits.yaml
│   │   ├── kinematics.yaml
│   │   ├── moveit_controllers.yaml
│   │   ├── moveit.rviz
│   │   ├── pilz_cartesian_limits.yaml
│   │   ├── rm_75_description.ros2_control.xacro
│   │   ├── rm_75_description.srdf
│   │   ├── rm_75_description.urdf.xacro
│   │   └── ros2_controllers.yaml
│   ├── launch
│   │   ├── demo.launch.py
│   │   ├── gazebo_moveit_demo.launch.py
│   │   ├── move_group.launch.py
│   │   ├── moveit_rviz.launch.py
│   │   ├── real_moveit_demo.launch.py
│   │   ├── rsp.launch.py
│   │   ├── setup_assistant.launch.py
│   │   ├── spawn_controllers.launch.py
│   │   ├── static_virtual_joint_tfs.launch.py
│   │   └── warehouse_db.launch.py
│   └── package.xml
└── rm_eco65_config                                    #eco65机械臂moveit2功能包(文件解释参考63)
│    ├── CMakeLists.txt
│    ├── config
│    │   ├── initial_positions.yaml
│    │   ├── joint_limits.yaml
│    │   ├── kinematics.yaml
│    │   ├── moveit_controllers.yaml
│    │   ├── moveit.rviz
│    │   ├── pilz_cartesian_limits.yaml
│    │   ├── rm_eco65_description.ros2_control.xacro
│    │   ├── rm_eco65_description.srdf
│    │   ├── rm_eco65_description.urdf.xacro
│    │   └── ros2_controllers.yaml
│    ├── launch
│    │   ├── demo.launch.py
│    │   ├── gazebo_moveit_demo.launch.py
│    │   ├── move_group.launch.py
│    │   ├── moveit_rviz.launch.py
│    │   ├── real_moveit_demo.launch.py
│    │   ├── rsp.launch.py
│    │   ├── setup_assistant.launch.py
│    │   ├── spawn_controllers.launch.py
│    │   ├── static_virtual_joint_tfs.launch.py
│    │   └── warehouse_db.launch.py
│    └── package.xml
└── rm_gen72_config             #gen72机械臂moveit2功能包(文件解释参考63)
    ├── CMakeLists.txt
    ├── config
    │   ├── initial_positions.yaml
    │   ├── joint_limits.yaml
    │   ├── kinematics.yaml
    │   ├── moveit_controllers.yaml
    │   ├── moveit.rviz
    │   ├── pilz_cartesian_limits.yaml
    │   ├── rm_gen72_description.ros2_control.xacro
    │   ├── rm_gen72_description.srdf
    │   ├── rm_gen72_description.urdf.xacro
    │   └── ros2_controllers.yaml
    ├── launch
    │   ├── demo.launch.py
    │   ├── gazebo_moveit_demo.launch.py
    │   ├── move_group.launch.py
    │   ├── moveit_rviz.launch.py
    │   ├── real_moveit_demo.launch.py
    │   ├── rsp.launch.py
    │   ├── setup_assistant.launch.py
    │   ├── spawn_controllers.launch.py
    │   ├── static_virtual_joint_tfs.launch.py
    │   └── warehouse_db.launch.py
    └── package.xml

3.rm_moveit2_config话题说明

这里以节点话题的数据流图的方式进行查看和讲解,使大家能够更清晰的了解话题结构。 先启动如上控制真实机器人的节点,再运行如下指令查看当前话题的对接情况:

ros2 run rqt_graph rqt_graph

运行成功后界面将显示如下画面。 image 该图反应了当前运行的节点与节点之间的话题通信关系,首先查看/rm_driver节点,该节点在moveit2运行时订阅和发布的话题如下。 imageimage 由图可知,rm_driver发布的/joint_states话题在持续被/robot_state_publiser节点和/move_group_private节点订阅。/robot_state_publiser接收/joint_states是为了持续发布关节间的TF变换;/move_group_private是moveit2的相关节点,moveit2在规划时也需要实时获取当前机械臂的关节状态信息,所以也订阅了该话题。 由图可知rm_driver还订阅了rm_control的/rm_driver/movej_canfd_cmd话题,该话题是机械臂透传功能的话题,通过该话题rm_control将规划的关节点位发布给rm_driver节点控制机械臂进行运动。 image rm_control为rm_driver与moveit2之间通信的桥梁,其通过/rm_group_controller/follow_joint_trajectory动作与/moveit_simple_controller_manager进行通信,获取规划点,并进行插值运算,将插值之后的数据通过透传的方式给到rm_driver。 image Moveit2本身涉及的节点有move_group、move_group_private、moveit_simple_controller_manager,它们的主要作用为实现机械臂的运动规划,并将规划信息等数据显示在rviz中,另一方面还需要将规划数据传递到rm_control端,进行进一步细分。