diff --git a/configuration/packages/collision_monitor/configuring-collision-detector-node.rst b/configuration/packages/collision_monitor/configuring-collision-detector-node.rst index 6af4efab90..89917461c0 100644 --- a/configuration/packages/collision_monitor/configuring-collision-detector-node.rst +++ b/configuration/packages/collision_monitor/configuring-collision-detector-node.rst @@ -231,6 +231,24 @@ Observation sources parameters Description: Type of polygon shape. Could be ``scan``, ``pointcloud``, ``range`` or ``polygon``. +:````.transport_type: + + ============== ============================= + Type Default + -------------- ----------------------------- + string "raw" + ============== ============================= + + Description: + For ``pointcloud`` data, specify the transport plugin to use: + + * raw: No compression. Default; highest bandwidth usage. + * draco: Lossy compression via Google. + * zlib: Lossless compression via Zlib compression. + * zstd: Lossless compression via Zstd compression. + + See the `known transports `_ for more details. + :````.topic: ============== ============================= @@ -361,6 +379,7 @@ Here is an example of configuration YAML for the Collision Detector. pointcloud: type: "pointcloud" topic: "/intel_realsense_r200_depth/points" + transport_type: "raw" # raw or/ with compression (zlib, draco, zstd) min_height: 0.1 max_height: 0.5 enabled: True diff --git a/configuration/packages/collision_monitor/configuring-collision-monitor-node.rst b/configuration/packages/collision_monitor/configuring-collision-monitor-node.rst index f82b4269b4..810a23b387 100644 --- a/configuration/packages/collision_monitor/configuring-collision-monitor-node.rst +++ b/configuration/packages/collision_monitor/configuring-collision-monitor-node.rst @@ -509,6 +509,24 @@ Observation sources parameters Description: Type of polygon shape. Could be ``scan``, ``pointcloud``, ``range`` or ``polygon``. +:````.transport_type: + + ============== ============================= + Type Default + -------------- ----------------------------- + string "raw" + ============== ============================= + + Description: + For ``pointcloud`` data, specify the transport plugin to use: + + * raw: No compression. Default; highest bandwidth usage. + * draco: Lossy compression via Google. + * zlib: Lossless compression via Zlib compression. + * zstd: Lossless compression via Zstd compression. + + See the `known transports `_ for more details. + :````.topic: ============== ============================= @@ -726,6 +744,7 @@ Here is an example of configuration YAML for the Collision Monitor. pointcloud: type: "pointcloud" topic: "/intel_realsense_r200_depth/points" + transport_type: "raw" # raw or/ with compression (zlib, draco, zstd) min_height: 0.1 max_height: 0.5 min_range: 0.2 diff --git a/configuration/packages/configuring-costmaps.rst b/configuration/packages/configuring-costmaps.rst index 2046c13c97..fd5e03ab26 100644 --- a/configuration/packages/configuring-costmaps.rst +++ b/configuration/packages/configuring-costmaps.rst @@ -453,6 +453,7 @@ Example clearing: True marking: True data_type: "PointCloud2" + transport_type: "raw" # raw or/ with compression (zlib, draco, zstd) static_layer: plugin: "nav2_costmap_2d::StaticLayer" map_subscribe_transient_local: True diff --git a/configuration/packages/costmap-plugins/obstacle.rst b/configuration/packages/costmap-plugins/obstacle.rst index 7f9c20efb4..3a461319de 100644 --- a/configuration/packages/costmap-plugins/obstacle.rst +++ b/configuration/packages/costmap-plugins/obstacle.rst @@ -159,6 +159,24 @@ This costmap layer implements a plugin that uses 2D raycasting for 2D lidars, de Description Data type of input, LaserScan or PointCloud2. +:````. ````.transport_type: + + ====== =========== + Type Default + ------ ----------- + string "raw" + ====== =========== + + Description + For ``PointCloud2`` data, specify the transport plugin to use: + + * raw: No compression. Default; highest bandwidth usage. + * draco: Lossy compression via Google. + * zlib: Lossless compression via Zlib compression. + * zstd: Lossless compression via Zstd compression. + + See the `known transports `_ for more details. + :````. ````.min_obstacle_height: ====== ======= diff --git a/configuration/packages/costmap-plugins/voxel.rst b/configuration/packages/costmap-plugins/voxel.rst index f70f32f5fd..5fa872e0fe 100644 --- a/configuration/packages/costmap-plugins/voxel.rst +++ b/configuration/packages/costmap-plugins/voxel.rst @@ -225,6 +225,24 @@ This costmap layer implements a plugin that uses 3D raycasting for depth, 3D, or Description Data type of input, LaserScan or PointCloud2. +:````. ````.transport_type: + + ====== =========== + Type Default + ------ ----------- + string "raw" + ====== =========== + + Description + For ``PointCloud2`` data, specify the transport plugin to use: + + * raw: No compression. Default; highest bandwidth usage. + * draco: Lossy compression via Google. + * zlib: Lossless compression via Zlib compression. + * zstd: Lossless compression via Zstd compression. + + See the `known transports `_ for more details. + :````. ````.min_obstacle_height: ====== ======= diff --git a/migration/Kilted.rst b/migration/Kilted.rst index 053ad440ba..97c596ae2a 100644 --- a/migration/Kilted.rst +++ b/migration/Kilted.rst @@ -232,3 +232,60 @@ Added PersistentSequence and PauseResumeController Control Nodes In `PR #5247 `_ two new Nav2 specific behavior tree control nodes have been added. The `PauseResumeController <../configuration/packages/bt-plugins/controls/PauseResumeController.html>`_ adds services to pause and resume execution of the tree. Related to this, the `PersistentSequence <../configuration/packages/bt-plugins/controls/PersistentSequence.html>`_ control node allows the child index to be exposed to the behavior tree through a bidirectional port. This allows the sequence to be continued on resume where it was paused. + +Option to use point_cloud_transport +----------------------------------- + +In `PR #5264 `_, option to use `point_cloud_transport `_ has been added. +This enables transporting PointClouds using compression libraries (such as Draco, Zstd, Zlib, etc.) to reduce network traffic and work around DDS limitations in low-bandwidth environments. + +Default value: + +- ``"raw"`` - Uses ``sensor_msgs/msg/PointCloud2`` with no compression. + +Configuration guide +^^^^^^^^^^^^^^^^^^^ + +If your sensor already publishes compressed streams (e.g., `Seterolabs ZED X Cameras `_), you can enable this option in the costmap layers that ingest pointcloud sensor streams (i.e. obstacle, voxel) and in the collision monitor as well. + +Example costmap layer configuration: + +.. code-block:: yaml + + : + observation_sources: pointcloud + pointcloud: + data_type: "PointCloud2" + topic: /intel_realsense_r200_depth/points # Change this to your topic + transport_type: "raw" # Change this to your compressed format (zlib, draco, zstd) + +Similarly for the collision monitor config: + +.. code-block:: yaml + + collision_monitor: + ros__parameters: + observation_sources: ["pointcloud"] + pointcloud: + type: "pointcloud" + topic: /intel_realsense_r200_depth/points # Change this to your topic + transport_type: "raw" # Change this to your compressed format (zlib, draco, zstd) + +See `transport_type` in :ref:`configuring_collision_monitor_node` for more information. + +Performance Metrics +^^^^^^^^^^^^^^^^^^^ + +Below are measured bandwidth values for different transport types with default parameters: + ++------------------+----------------+ +| Transport Type | Bandwidth (KB) | ++==================+================+ +| raw | 593.63 | ++------------------+----------------+ +| draco | 443.28 | ++------------------+----------------+ +| zstd | 64.33 | ++------------------+----------------+ +| zlib | 121.95 | ++------------------+----------------+