move_group
节点
下图显示了 MoveIt 提供的关键节点(称为:cpp_api:move_group
)的高级系统架构。
此节点充当集成器:将所有单个组件拉到一起,为用户提供一组 ROS 操作和服务。

用户界面
用户可以通过两种方式访问 move_group
提供的操作和服务:
在 C++ 中 - 使用 move_group_interface 包,该包提供了一个易于设置的 move_group C++ 接口
通过 GUI - 使用 :doc:`Rviz 的运动规划插件 <../tutorials/quickstart_in_rviz/quickstart_in_rviz_tutorial>`(ROS 可视化工具)
配置
move_group
是一个 ROS 节点。
它使用 ROS 参数服务器获取三种信息:
URDF
move_group
查找robot_description
参数以获取机器人的 URDF。
SRDF
move_group
查找robot_description_semantic
参数以获取机器人的 SRDF。SRDF 通常由用户使用 MoveIt 设置助手创建(一次)。
MoveIt 配置
move_group
将查找特定于 MoveIt 的其他配置,包括关节限制、运动学、运动规划、感知和其他信息。这些组件的配置文件由 MoveIt 设置助手自动生成,并存储在机器人相应 MoveIt 配置包的config
目录中。
机器人接口
move_group
通过 ROS 主题和操作与机器人对话。
它与机器人通信以获取当前状态信息(关节位置等),从机器人传感器获取点云和其他传感器数据,并与机器人上的控制器对话。
关节状态信息
move_group
监听 /joint_states
主题以确定当前状态信息 - 即确定机器人的每个关节的位置。
move_group
能够监听此主题上的多个发布者,即使他们只发布有关机器人状态的部分信息(例如,机器人的手臂和移动基座可以使用单独的发布者)。
请注意,move_group
不会设置自己的关节状态发布者 - 这是必须在每个机器人上实现的功能。
变换信息
move_group
使用 ROS TF 库监视变换信息。
这允许节点获取有关机器人姿势的全局信息(以及其他信息)。
例如,ROS 导航堆栈将向 TF 发布机器人地图框架和基座之间的变换。
move_group
可以使用 TF 找出此变换以供内部使用。请注意,“move_group”仅监听 TF。
要从您的机器人发布 TF 信息,您需要在机器人上运行“robot_state_publisher”节点。
控制器接口
“move_group”使用 FollowJointTrajectoryAction 接口与机器人上的控制器对话。 这是一个 ROS 操作接口。 机器人上的服务器需要为此操作提供服务 - 此服务器不是由“move_group”本身提供的。 “move_group”将仅实例化一个客户端来与机器人上的此控制器操作服务器对话。
规划场景
“move_group”使用规划场景监视器来维护**规划场景**,它是世界和机器人当前状态的表示。 机器人状态可以包括任何连接到(由机器人携带)的物体,这些物体被认为是刚性连接到机器人的。 有关维护和更新**规划场景**的架构的更多详细信息,请参阅下面的规划场景部分。
可扩展功能
move_group
的结构易于扩展。
拾取和放置、运动学、运动规划等单个功能实际上是作为具有通用基类的单独插件实现的。
可以通过一组 ROS yaml 参数和使用 ROS pluginlib 库使用 ROS 配置插件。
大多数用户不必配置 move_group 插件,因为它们会在 MoveIt 设置助手生成的启动文件中自动配置。