Ros2-Moveit2-PlanningSceneMonitor(规划场景监控)
PlanningSceneMonitor是维护最新规划场景的推荐接口。RobotState、CurrentStateMonitor、PlanningScene、PlanningSceneMonitor和PlanningSceneInterface之间的
关系一开始可能非常令人困惑。本教程旨在阐明这些关键概念。
机器人状态
RobotState 是机器人的快照。 它包含RobotModel和一组关节值。
当前状态监视器(CurrentStateMonitor)
CurrentStateMonitor (CSM) 可以看作是 RobotState 的 ROS 包装器。它订阅了JointState消息的指定主题,该消息为单自由度执行器(例如旋转关节或平移关节)提供最新的传感器值,并使用这些关节值更新其内部 RobotState。除了单自由度关节外,机器人还可以拥有多自由度关节,例如浮动关节和平面关节。为了维护连杆和其他附有多自由度关节的框架的最新变换信息,CSM 存储了一个 TF2缓冲区,该缓冲区使用 TF2 TransformListener在其内部数据中设置它们的变换。
规划场景
PlanningScene是世界的快照,其中包括 RobotState 和任意数量的碰撞对象。Planning Scene 可用于碰撞检查以及获取有关环境的信息。
规划场景监控
PlanningSceneMonitor使用 ROS 接口包装 PlanningScene ,以使 PlanningScene 保持最新状态。要访问 PlanningSceneMonitor 的底层 PlanningScene,请使用提供的LockedPlanningSceneRW和LockedPlanningSceneRO类。
PlanningSceneMonitor 具有以下对象,它们具有自己的 ROS 接口,用于使规划场景的子组件保持最新状态:
- CurrentStateMonitor用于通过和跟踪对 RobotState 的更新,以及规划场景订阅者用于监听来自其他发布者的规划场景差异。
-
OccupancyMapMonitor 用于通过 ROS 主题和服务跟踪 OccupancyMap 的更新。
PlanningSceneMonitor 具有以下订阅者:
-
collision_object_subscriber_
- 监听提供的主题,获取可能添加、移除或修改规划场景中的碰撞对象的CollisionObject消息,并将它们传递到其监控的规划场景中 -
planning_scene_world_subscriber_
- 监听提供的PlanningSceneWorld消息主题,其中可能包含碰撞对象信息和/或八面体图信息。这对于保持规划场景监视器同步非常有用 -
attached_collision_object_subscriber_
- 在提供的主题上监听AttachedCollisionObject消息,该消息确定机器人状态下对象与链接的附加/分离。
PlanningSceneMonitor 有以下服务:
get_scene_service_
- 这是获取完整规划场景状态的可选服务。
PlanningSceneMonitor 的初始化方法如下:
-
startSceneMonitor
- 这开始了planning_scene_subscriber_
, -
startWorldGeometryMonitor
- 启动collision_object_subscriber_
、planning_scene_world_subscriber_
和 OccupancyMapMonitor, -
startStateMonitor
- 启动 CurrentStateMonitorattached_collision_object_subscriber_
和 -
startPublishingPlanningScene
- 启动另一个线程,在提供的主题上发布整个规划场景,供其他 PlanningSceneMonitors 订阅 providePlanningSceneService
- 这开始了get_scene_service_。
规划场景接口(PlanningSceneInterface)
PlanningSceneInterface是一个有用的类,它可以通过 C++ API 将更新发布到 MoveGroup 的PlanningSceneMonitor ,而无需创建自己的订阅者和服务客户端。如果没有 MoveGroup 或 MoveItCpp,它可能无法工作。