move_group 节点

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

../../_images/move_group.png

用户界面

用户可以通过两种方式访问​​ 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 参数服务器获取三种信息:

  1. URDF

  • move_group 查找 robot_description 参数以获取机器人的 URDF。

  1. SRDF

  • move_group 查找 robot_description_semantic 参数以获取机器人的 SRDF。SRDF 通常由用户使用 MoveIt 设置助手创建(一次)。

  1. 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 设置助手生成的启动文件中自动配置。