|
1 | 1 | Planning Scene Monitor |
2 | 2 | ================================== |
3 | 3 |
|
4 | | -The :planning_scene_monitor:`PlanningSceneMonitor` is the recommended interface for maintaining an up to date planning scene. The relationship between :moveit_core:`RobotState`, :planning_scene_monitor:`CurrentStateMonitor`, :planning_scene:`PlanningScene`, :planning_scene_monitor:`PlanningSceneMonitor`, and :planning_interface:`PlanningSceneInterface` can be really confusing at first. This tutorial aims to make clear these key concepts. |
| 4 | +The :planning_scene_monitor:`PlanningSceneMonitor` is the recommended interface for maintaining an up-to-date planning scene. The relationship between :moveit_core:`RobotState`, :planning_scene_monitor:`CurrentStateMonitor`, :planning_scene:`PlanningScene`, :planning_scene_monitor:`PlanningSceneMonitor`, and :planning_interface:`PlanningSceneInterface` can be really confusing at first. This tutorial aims to make clear these key concepts. |
5 | 5 |
|
6 | 6 | RobotState |
7 | 7 | ---------- |
8 | 8 | The :moveit_core:`RobotState` is a snapshot of a robot. It contains the :moveit_core:`RobotModel` and a set of joint values. |
9 | 9 |
|
10 | 10 | CurrentStateMonitor |
11 | 11 | ------------------- |
12 | | -The :planning_scene_monitor:`CurrentStateMonitor` (CSM) can be thought of as a ROS wrapper for the RobotState. It subscribes to a provided topic for :sensor_msgs:`JointState` messages that provide up to date sensor values for single degree of freedom actuators such as revolute or prismatic joints and updates it's internal RobotState with those joint values. In addition to the single degree of freedom joints, a robot can have joints with multiple degrees of freedom such as floating and planar joints. To maintain up-to-date transform information for links and other frames attached with multiple-degree-of-freedom joints, the CSM stores a TF2 :tf2:`Buffer` that uses a TF2 :tf2:`TransformListener` to set their transforms in its internal data. |
| 12 | +The :planning_scene_monitor:`CurrentStateMonitor` (CSM) can be thought of as a ROS wrapper for the RobotState. It subscribes to a provided topic for :sensor_msgs:`JointState` messages that provide up-to-date sensor values for single degree of freedom actuators, such as revolute or prismatic joints, and updates its internal RobotState with those joint values. In addition to the single degree of freedom joints, a robot can have joints with multiple degrees of freedom such as floating and planar joints. To maintain up-to-date transform information for links and other frames attached with multiple-degree-of-freedom joints, the CSM stores a TF2 :tf2:`Buffer` that uses a TF2 :tf2:`TransformListener` to set their transforms in its internal data. |
13 | 13 |
|
14 | 14 | PlanningScene |
15 | 15 | ------------- |
16 | | -The :planning_scene:`PlanningScene` can be seen as a snapshot of the world and that includes both the RobotState and any number of collision objects. The Planning Scene can be used for collision checking as well as getting information about the environment. |
| 16 | +The :planning_scene:`PlanningScene` is a snapshot of the world that includes both the RobotState and any number of collision objects. The Planning Scene can be used for collision checking as well as getting information about the environment. |
17 | 17 |
|
18 | 18 | PlanningSceneMonitor |
19 | 19 | -------------------- |
20 | | -The :planning_scene_monitor:`PlanningSceneMonitor` wraps a PlanningScene with ROS interfaces for keeping the PlanningScene up to date. To access the PlanningSceneMonitor's underlying PlanningScene, you can use the provided :planning_scene_monitor:`LockedPlanningSceneRW` and :planning_scene_monitor:`LockedPlanningSceneRO` classes. |
| 20 | +The :planning_scene_monitor:`PlanningSceneMonitor` wraps a PlanningScene with ROS interfaces for keeping the PlanningScene up to date. To access the PlanningSceneMonitor's underlying PlanningScene, use the provided :planning_scene_monitor:`LockedPlanningSceneRW` and :planning_scene_monitor:`LockedPlanningSceneRO` classes. |
21 | 21 |
|
22 | | -The PlanningSceneMonitor has the following objects which have their own ROS interfaces for keeping sub-components of the planning scene up to date: |
| 22 | +The PlanningSceneMonitor has the following objects, which have their own ROS interfaces for keeping sub-components of the planning scene up to date: |
23 | 23 |
|
24 | 24 | * A :planning_scene_monitor:`CurrentStateMonitor` for tracking updates to the RobotState via a ``robot_state_subscriber_`` and a ``tf_buffer_``, as well as a planning scene subscriber for listening to planning scene diffs from other publishers. |
25 | | - * An OccupancyMapMonitor for tracking updates an OccupancyMap via ROS topics and services. |
| 25 | + * An OccupancyMapMonitor for tracking updates to an OccupancyMap via ROS topics and services. |
26 | 26 |
|
27 | 27 | The PlanningSceneMonitor has the following subscribers: |
28 | 28 |
|
29 | | - * ``collision_object_subscriber_`` - Listens to a provided topic for :moveit_msgs:`CollisionObject` messages that might add, remove or modify collision objects in the planning scene and passes them into its monitored planning scene |
30 | | - * ``planning_scene_world_subscriber_`` - Listens to a provided topic for :moveit_msgs:`PlanningSceneWorld` messages that may contain collision object information and or octomap information. This is useful for keeping planning scene monitors in sync |
31 | | - * ``attached_collision_object_subscriber_`` - Listens on a provided topic for :moveit_msgs:`AttachedCollisionObject` messages that determine the attaching / detaching of objects to links in the robot state. |
| 29 | + * ``collision_object_subscriber_`` - Listens to a provided topic for :moveit_msgs:`CollisionObject` messages that might add, remove, or modify collision objects in the planning scene and passes them into its monitored planning scene |
| 30 | + * ``planning_scene_world_subscriber_`` - Listens to a provided topic for :moveit_msgs:`PlanningSceneWorld` messages that may contain collision object information and/or octomap information. This is useful for keeping planning scene monitors in sync |
| 31 | + * ``attached_collision_object_subscriber_`` - Listens on a provided topic for :moveit_msgs:`AttachedCollisionObject` messages that determine the attaching/detaching of objects to links in the robot state. |
32 | 32 |
|
33 | 33 | The PlanningSceneMonitor has the following services: |
34 | 34 |
|
35 | 35 | * ``get_scene_service_`` - Which is an optional service to get the full planning scene state. |
36 | 36 |
|
37 | 37 | The PlanningSceneMonitor is initialized with: |
38 | 38 |
|
39 | | - * ``startSceneMonitor`` - Which starts the ``planning_scene_subscriber_`` |
40 | | - * ``startWorldGeometryMonitor`` - Which starts the ``collision_object_subscriber_``, the ``planning_scene_world_subscriber_``, and the OccupancyMapMonitor. |
41 | | - * ``startStateMonitor`` - Which starts the CurrentStateMonitor and the ``attached_collision_object_subscriber_``. |
42 | | - * ``startPublishingPlanningScene`` - Which starts another thread for publishing the entire planning scene on a provided topic for other PlanningSceneMonitor's to subscribe to |
| 39 | + * ``startSceneMonitor`` - Which starts the ``planning_scene_subscriber_``, |
| 40 | + * ``startWorldGeometryMonitor`` - Which starts the ``collision_object_subscriber_``, the ``planning_scene_world_subscriber_``, and the OccupancyMapMonitor, |
| 41 | + * ``startStateMonitor`` - Which starts the CurrentStateMonitor and the ``attached_collision_object_subscriber_``, |
| 42 | + * ``startPublishingPlanningScene`` - Which starts another thread for publishing the entire planning scene on a provided topic for other PlanningSceneMonitors to subscribe to, and |
43 | 43 | * ``providePlanningSceneService`` - Which starts the ``get_scene_service_``. |
44 | 44 |
|
45 | 45 | PlanningSceneInterface |
46 | 46 | ---------------------- |
47 | | -The :planning_interface:`PlanningSceneInterface` is a useful class for publishing updates to a MoveGroup's :planning_scene_monitor:`PlanningSceneMonitor` through a C++ API without creating your own subscribers and service clients. It may not work without MoveGroup or MoveItCpp |
| 47 | +The :planning_interface:`PlanningSceneInterface` is a useful class for publishing updates to a MoveGroup's :planning_scene_monitor:`PlanningSceneMonitor` through a C++ API without creating your own subscribers and service clients. It may not work without MoveGroup or MoveItCpp. |
0 commit comments