Kilted to L-turtle
Moving from ROS 2 Kilted to L-Turtle, a number of stability improvements were added that we will not specifically address here.
Removed Parameter action_server_result_timeout
Removed the parameter action_server_result_timeout
from all action servers after resolution within rcl
and rclcpp
to address early goal removal.
This is not longer required to be set.
Dock Plugin Detector Control
PR #5218 adds on-demand detector control to opennav_docking
.
ChargingDock
and NonChargingDock
now provide pure virtual startDetectionProcess
/ stopDetectionProcess
functions that the docking server invokes around the perception loop.
Custom dock plugins must implement the new hooks (return
true
if nothing extra is required).Simple(Non)ChargingDock
gaineddetector_service_name
,detector_service_timeout
, andsubscribe_toggle
parameters so a detector service can be triggered only while detections are needed.See Docking Server for the updated parameter reference and YAML example.
Added Corner Smoothing functionality to route_server
In PR #5226 the ability to stitch two successive edges in route_server
with a smooth circular arc has been added. Below is an example of two successive edges forming a corner being smoothed with a radius of one. The red lines are the edges of the route graph and the green line is the resultant path that can be used by a local planner.

New parameters include smooth_corners
which enable or disable corner smoothing and smoothing_radius
which specifies the radius of the corner to fit to a corner. The tangents of the starting and ending points of the circular arc will match the tangent of the edges that form the corner. In the event that two edges are basically straight, no corner arc is added and regular linear interpolation is done. In addition to that, if the corner arc requires a starting point and ending point that’s longer than the edge lengths, then it will not add a corner arc.
Added NonblockingSequence Control Node
In PR #5325 a new Nav2 specific behavior tree control node has been added. The new behavior tree control node, NonblockingSequence
, allows every child node in the sequence to be ticked through even if one of the child node returns RUNNING
. This is done to prevent long running child nodes from blocking the sequence.
For additional details regarding the NonblockingSequence
please see the Nav2 specific node walkthrough and NonblockingSequence configuration guide.
MPPI Optimal Trajectory Validator Plugin
The MPPI controller now has a plugin, OptimalTrajectoryValidator
, which can be used to validate an output trajectory for execution.
This can be used to check for collisions, margin from obstacles, distance from a path, progress being made, etc.
By default, it uses the DefaultOptimalTrajectoryValidator
which checks for collisions.
Note that kinematic and dynamic constraints are not required to be checked as the Optimizer ensures these constraints are met.
Added PersistentSequence and PauseResumeController Control Nodes
In PR #5247 two new Nav2 specific behavior tree control nodes have been added.
The PauseResumeController adds services to pause and resume execution of the tree. Related to this, the PersistentSequence 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"
- Usessensor_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:
<costmap_layer>:
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:
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 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 |
Add BehaviorTree SubTrees Support
The BehaviorTree engine now supports SubTrees in different files within directory(s) set through bt_search_directories
parameter. This allows you to modularize your behavior trees into smaller components that can be reused across different trees.
The interface now supports passing the behavior tree file or ID as input to the loadBehaviorTree method of the BT action server.
Each behavior tree is now strictly required to have its own unique ID, therefore the need to replace MainTre to a unique ID. For example, in navigate_through_poses_w_replanning_and_recovery.xml
` `MainTree can be replaced with NavigateThroughPosesWReplanningAndRecovery.
Option to have custom window size and poly order in Savitsky-Golay Smoother
In PR #5489, option to have custom window size and polynomial order was added. Previously, the implementation used a fixed window size of 7 and a polynomial order of 3.
Default value:
window_size: 7
poly_order: 3
Vector Objects were Supported for Raster Maps
PR #5479 adds new Vector Object server into nav2_map_server
package.
It reads vector objects (polygons and polygonal chains as PolygonObject.msg
; and circles as CircleObject.msg
) from input parameters, handles them by service calls (AddShapes.srv
/GetShapes.srv
/RemoveShapes.srv
) and finally puts them on output raster OccupancyGrid map.
This map is typically used with costmaps by acting as an input mask for Costmap Filters.
This allows to cover such use-cases as:
adding virtual obstacles on maps, dynamic objects simulation/highlighting, hiding some areas or sticking-out robot parts, sensors noise removal, blacking-out areas on maps, adding keep-out or maximum speed restricted areas on vector basis, synthetic testing purposes, and much more.
To run Vector Object server a new vector_object_server.launch.py
launch-file is being supplied.
Navigating with Vector Objects tutorial explains how launch Vector Object server and navigate with vector objects added to raster costmaps.
The information about Vector Object server parameters set-up could be found at Vector Object Server configuration guide.
Toggle collision monitor service and BT plugin
PR #5493 and PR #5532 introduce a new toggle service for the collision monitor. This service allows enabling or disabling all collision monitor polygons while keeping sensor checks within the collision monitor active.
The service is defined using a new interface, Toggle.srv
:
bool enable
---
bool success
string message
This interface can be extended in the future if needed.
A corresponding Behavior Tree (BT) plugin was also created to call this service.
The plugin is based on BtServiceNode
and provides the following input ports:
service_name
: name of the toggle serviceserver_timeout
: timeout for service callsenable
: boolean flag to enable or disable the collision monitor
An example usage in a Behavior Tree XML file:
<ToggleCollisionMonitor enable="false" service_name="collision_monitor/toggle"/>