-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Large Nav2 Node, Utils, and Interface Refactor #5288
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR refactors Nav2 and Opennav Docking packages to replace nav2_util and raw rclcpp_lifecycle::LifecycleNode usage with the new nav2_ros_common APIs, unifying QoS defaults and simplifying ROS interface creation.
- Replace all includes and types from
nav2_util/rclcpp_lifecycletonav2_ros_commonandnav2::LifecycleNode - Migrate service, action, publisher, and subscriber factories to
create_*methods andasync_callfor services - Update CMakeLists and package.xml to add
nav2_ros_commondependency and include directories
Reviewed Changes
Copilot reviewed 300 out of 620 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| nav2_dwb_controller/dwb_core/trajectory_critic.hpp | Updated include and node pointer type to nav2::LifecycleNode |
| nav2_dwb_controller/dwb_core/publisher.hpp | Switched lifecycle callbacks and node type to nav2 namespace |
| nav2_dwb_controller/dwb_core/dwb_local_planner.hpp | Replaced node weak ptr type |
| nav2_dwb_controller/dwb_core/CMakeLists.txt | Added nav2_ros_common dependency and include dirs |
| nav2_docking/opennav_docking_core/.../*.hpp/.cpp/.xml/.CMakeLists.txt | Updated all docking core plugins to use nav2_ros_common APIs |
| nav2_docking/opennav_docking_bt/... | Updated BT test fixtures and CMake to nav2::LifecycleNode |
| nav2_docking/opennav_docking/... | Refactored server, utils, tests to new node and factory APIs |
| nav2_costmap_2d/... | Migrated costmap layers, filters, subscribers, publishers |
| nav2_costmap_2d/test/... | Converted all unit/integration tests to use nav2::LifecycleNode |
| nav2_costmap_2d/CMakeLists.txt & package.xml | Added nav2_ros_common dependency and include dirs |
Comments suppressed due to low confidence (1)
nav2_costmap_2d/include/nav2_costmap_2d/costmap_subscriber.hpp:39
- The non-templated constructor for
CostmapSubscriber(const nav2::LifecycleNode::WeakPtr&, const std::string&)is declared but its implementation was removed from the .cpp file. Either provide a definition or remove the declaration to avoid linker errors.
CostmapSubscriber(
|
I re-reviewed the first ~250 files and going to step away for the day due to brain mush. Will pick back up tomorrow. I expect linting problems to cleanup but otherwise I think this should be ready minus my review comments to come. |
Signed-off-by: Steve Macenski <[email protected]>
588d4e7 to
1e1f939
Compare
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
nav2_ros_common/include/nav2_ros_common/interface_factories.hpp
Outdated
Show resolved
Hide resolved
nav2_ros_common/include/nav2_ros_common/interface_factories.hpp
Outdated
Show resolved
Hide resolved
nav2_ros_common/include/nav2_ros_common/interface_factories.hpp
Outdated
Show resolved
Hide resolved
| @@ -83,20 +94,27 @@ class ServiceClient | |||
| */ | |||
| typename ResponseType::SharedPtr invoke( | |||
| typename RequestType::SharedPtr & request, | |||
| const std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1)) | |||
| const std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1), | |||
| const std::chrono::nanoseconds wait_for_service_timeout = std::chrono::seconds(10)) | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would default this to wait forever, or at least a bigger duration, to reduce the chance of errors in systems with a long boot-up times or other kind of delays.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Service clients shouldn't be invoking on startup - that's kind of the point on the lifecycle node. By the time this could be triggered, the node would need to be activated and ready to process data. I think this is reasonable to leave as-is?
nav2_ros_common/include/nav2_ros_common/simple_action_server.hpp
Outdated
Show resolved
Hide resolved
Signed-off-by: Steve Macenski <[email protected]>
|
FYI @MarcoMatteoBassa ros2/rclcpp#2876 this is what is causing the smac planner deadlock tests. When |
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
That is unfortunate :( |
|
I actually filed a similar ticket awhile back and it seemed like it was resolved for subscribers. I'm also seeing that the tests don't fail anymore where the odom subscription (the subscriber that triggered the bug report) are failing, so it looks like subscriptions are working now. It seems to just be publishers. Your original PR wanted the Subscriptions to be overridable, so that is still doable at this point in this PR as long as it wasn't for the planner server / smac planner. That is the only one I'm seeing a deadlock failure for in dynamic parameter updates. I could work around it by changing the API of the costmap publisher so it does not get reconstructed in the dynamic parameter callback, but I'd rather fix the core ROS 2 issue instead of just patching Nav2 above it. |
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
|
Migration docs: ros-navigation/docs.nav2.org#712 |
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
Signed-off-by: Steve Macenski <[email protected]>
* initial unorganized prototype Signed-off-by: Steve Macenski <[email protected]> * break out files and add doxygen Signed-off-by: Steve Macenski <[email protected]> * Adding refactor for nav2_ros_common and new ROS interface factories Signed-off-by: Steve Macenski <[email protected]> * fixing CI - not sure how that got through merge conflicts Signed-off-by: Steve Macenski <[email protected]> * Lifecycle publisher a missing test Signed-off-by: Steve Macenski <[email protected]> * system tests Signed-off-by: Steve Macenski <[email protected]> * default Signed-off-by: Steve Macenski <[email protected]> * activating publishers Signed-off-by: Steve Macenski <[email protected]> * temp disable allow param qos overrides Signed-off-by: Steve Macenski <[email protected]> * API update for new constructor option Signed-off-by: Steve Macenski <[email protected]> * Supporting Jazzy and abstracting util Signed-off-by: Steve Macenski <[email protected]> * Review round 1 Signed-off-by: Steve Macenski <[email protected]> * Adding Nav2 Publisher and Subscriber objects to later build upon Signed-off-by: Steve Macenski <[email protected]> * Adding additional ::SharedPtr for readability Signed-off-by: Steve Macenski <[email protected]> * fix bug Signed-off-by: Steve Macenski <[email protected]> * fixing Jazzy support Signed-off-by: Steve Macenski <[email protected]> * missed one last spot Signed-off-by: Steve Macenski <[email protected]> * Adding migration instructions Signed-off-by: Steve Macenski <[email protected]> * more context Signed-off-by: Steve Macenski <[email protected]> * Adding migration context Signed-off-by: Steve Macenski <[email protected]> * precommit Signed-off-by: Steve Macenski <[email protected]> * adding missing dep Signed-off-by: Steve Macenski <[email protected]> * Updating system tess Signed-off-by: Steve Macenski <[email protected]> * more Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]>
* Revert "Fix Ci from key signing (ros-navigation#5220)" (ros-navigation#5237) * Revert "Fix Ci from key signing (ros-navigation#5220)" This reverts the changes to the Dockerfile done in 1345c22. Signed-off-by: Nils-Christian Iseke <[email protected]> * Update Cache Version Signed-off-by: Nils-Christian Iseke <[email protected]> --------- Signed-off-by: Nils-Christian Iseke <[email protected]> * enable_groot_monitoring_ false (ros-navigation#5246) Signed-off-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> * Updating readme table for kilted release (ros-navigation#5249) * updating readme table for kilted release Signed-off-by: Steve Macenski <[email protected]> * Updating table lint Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> * Add min_distance_to_obstacle parameter to RPP (ros-navigation#4543) * min_distance_to_obstacle Signed-off-by: Guillaume Doisy <[email protected]> * suggestion to time base and combine Signed-off-by: Guillaume Doisy <[email protected]> * typo Signed-off-by: Guillaume Doisy <[email protected]> * use min_approach_linear_velocity Signed-off-by: Guillaume Doisy <[email protected]> --------- Signed-off-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> * Fixing builds for message filters API change while retaining Jazzy, Kilted, and Rolling support (ros-navigation#5251) * Update amcl_node.hpp Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> * Working for Kilted, Jazzy Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> * Change max_cost default to 254 (ros-navigation#5256) Signed-off-by: Tony Najjar <[email protected]> * Route server corner smoothing (ros-navigation#5226) * added edge length method Signed-off-by: Alexander Yuen <[email protected]> * Added corner arc class Signed-off-by: Alexander Yuen <[email protected]> * replaced double vectors with Coordinates, added methods to return start and end coordinates Signed-off-by: Alexander Yuen <[email protected]> * using Coordinates, fixed direction of tangents Signed-off-by: Alexander Yuen <[email protected]> * added corner arc in header, added logger in protected variable Signed-off-by: Alexander Yuen <[email protected]> * first pass of corner smoothing algorithm Signed-off-by: Alexander Yuen <[email protected]> * reassigning next edge to have a different start, if a corner occurs before it Signed-off-by: Alexander Yuen <[email protected]> * using unique pointer instead of raw pointers for new edges and nodes Signed-off-by: Alexander Yuen <[email protected]> * added smoothing parameter Signed-off-by: Alexander Yuen <[email protected]> * made angle of interpolation a parameter Signed-off-by: Alexander Yuen <[email protected]> * const for return methods, added flag for smoothing corners Signed-off-by: Alexander Yuen <[email protected]> * moved getEdgeLength() into the Directional Edge struct Signed-off-by: Alexander Yuen <[email protected]> * using float instead of double Signed-off-by: Alexander Yuen <[email protected]> * smoothing radius is float, couple methods moved to protected Signed-off-by: Alexander Yuen <[email protected]> * removed signed_angle_ as a member variable Signed-off-by: Alexander Yuen <[email protected]> * removed unnecessary member variables Signed-off-by: Alexander Yuen <[email protected]> * removed angle of interpolation and inferring it from path density and radius instead Signed-off-by: Alexander Yuen <[email protected]> * consolidated corner arc into one header function Signed-off-by: Alexander Yuen <[email protected]> * readded newline Signed-off-by: Alexander Yuen <[email protected]> * changed corner arc to corner smoothing Signed-off-by: Alexander Yuen <[email protected]> * replaced the use of edges with coordinates to generate smoothing arc, removed storage of nodes and edges Signed-off-by: Alexander Yuen <[email protected]> * linting Signed-off-by: Alexander Yuen <[email protected]> * fixing cpplint Signed-off-by: Alexander Yuen <[email protected]> * linting for headers Signed-off-by: Alexander Yuen <[email protected]> * cpplinting Signed-off-by: Alexander Yuen <[email protected]> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <[email protected]> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <[email protected]> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <[email protected]> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <[email protected]> * Update nav2_route/include/nav2_route/corner_smoothing.hpp Signed-off-by: Steve Macenski <[email protected]> * fixed divide by zeros and accessing empty route.edges Signed-off-by: Alexander Yuen <[email protected]> * uncrustify linting Signed-off-by: Alexander Yuen <[email protected]> * cpp linting Signed-off-by: Alexander Yuen <[email protected]> * path converter linting Signed-off-by: Alexander Yuen <[email protected]> * changed all doubles to floats Signed-off-by: Alexander Yuen <[email protected]> * added check for edges that are colinear to avoid divide by 0, fixed final edge interpolation Signed-off-by: Alexander Yuen <[email protected]> * linting Signed-off-by: Alexander Yuen <[email protected]> * Update nav2_route/include/nav2_route/corner_smoothing.hpp Signed-off-by: Steve Macenski <[email protected]> * added doxygen for corner arc class Signed-off-by: Alexander Yuen <[email protected]> * added warning message if corner can't be smoothed Signed-off-by: Alexander Yuen <[email protected]> * added smooth_corners to the nav2 params file Signed-off-by: Alexander Yuen <[email protected]> * added smoothing flag and radius parameter to README.md' Signed-off-by: Alexander Yuen <[email protected]> * typo in README Signed-off-by: Alexander Yuen <[email protected]> * added testing for corner smoothing Signed-off-by: Alexander Yuen <[email protected]> * Update nav2_route/include/nav2_route/corner_smoothing.hpp Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Alexander Yuen <[email protected]> Signed-off-by: Steve Macenski <[email protected]> Co-authored-by: Steve Macenski <[email protected]> * Conserve curvature with LIMIT action (ros-navigation#5255) * Conserve curvature with LIMIT action Signed-off-by: Tony Najjar <[email protected]> * fix format Signed-off-by: Tony Najjar <[email protected]> * fix test Signed-off-by: Tony Najjar <[email protected]> --------- Signed-off-by: Tony Najjar <[email protected]> * Parametrizing obstacle layer tf filter tolerance (ros-navigation#5261) Signed-off-by: Marco Bassa <[email protected]> * Add namespace support for rviz costmap cost tool (ros-navigation#5268) Signed-off-by: Maurice-1235 <[email protected]> * Fix/smac planner orientation goals (ros-navigation#5235) * cherry pick Signed-off-by: Stevedan Omodolor <[email protected]> * cherry pick 6a74ba6 Signed-off-by: Stevedan Omodolor <[email protected]> * cherrpy pick Signed-off-by: Stevedan Omodolor <[email protected]> * include x11 forwarding Signed-off-by: Stevedan Omodolor <[email protected]> * kind of working version Signed-off-by: Stevedan Omodolor <[email protected]> * cleanup Signed-off-by: Stevedan Omodolor <[email protected]> * formatting Signed-off-by: Stevedan Omodolor <[email protected]> * minor format change Signed-off-by: Stevedan Omodolor <[email protected]> * change naming Signed-off-by: Stevedan Omodolor <[email protected]> * minor changes Signed-off-by: Stevedan Omodolor <[email protected]> * working with new changes Signed-off-by: Stevedan Omodolor <[email protected]> * Revert "Fix Ci from key signing (ros-navigation#5220)" (ros-navigation#5237) * Revert "Fix Ci from key signing (ros-navigation#5220)" This reverts the changes to the Dockerfile done in 1345c22. Signed-off-by: Nils-Christian Iseke <[email protected]> * Update Cache Version Signed-off-by: Nils-Christian Iseke <[email protected]> --------- Signed-off-by: Nils-Christian Iseke <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> * Revert back Signed-off-by: Stevedan Omodolor <[email protected]> * enable_groot_monitoring_ false (ros-navigation#5246) Signed-off-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> * Updating readme table for kilted release (ros-navigation#5249) * updating readme table for kilted release Signed-off-by: Steve Macenski <[email protected]> * Updating table lint Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> * Add min_distance_to_obstacle parameter to RPP (ros-navigation#4543) * min_distance_to_obstacle Signed-off-by: Guillaume Doisy <[email protected]> * suggestion to time base and combine Signed-off-by: Guillaume Doisy <[email protected]> * typo Signed-off-by: Guillaume Doisy <[email protected]> * use min_approach_linear_velocity Signed-off-by: Guillaume Doisy <[email protected]> --------- Signed-off-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> * Fixing builds for message filters API change while retaining Jazzy, Kilted, and Rolling support (ros-navigation#5251) * Update amcl_node.hpp Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> * Working for Kilted, Jazzy Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> * Update amcl_node.cpp Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> * Change max_cost default to 254 (ros-navigation#5256) Signed-off-by: Tony Najjar <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> * linter Signed-off-by: Stevedan Omodolor <[email protected]> * remove const Signed-off-by: Stevedan Omodolor <[email protected]> * pass const pointer by value Signed-off-by: Stevedan Omodolor <[email protected]> * pass const pointer by value Signed-off-by: Stevedan Omodolor <[email protected]> * remove unused param Signed-off-by: Stevedan Omodolor <[email protected]> --------- Signed-off-by: Stevedan Omodolor <[email protected]> Signed-off-by: Nils-Christian Iseke <[email protected]> Signed-off-by: Guillaume Doisy <[email protected]> Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> Co-authored-by: Steve Macenski <[email protected]> Co-authored-by: Nils-Christian Iseke <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Co-authored-by: Tony Najjar <[email protected]> * Fix backport compiler warning (ros-navigation#5277) Signed-off-by: Steve Macenski <[email protected]> * Fix ament mypy (ros-navigation#5280) * Configured nav2_loopback_sim to be compliant with mypy. Signed-off-by: Leander Stephen D'Souza <[email protected]> * Configured nav2_simple_commander to be compliant with mypy. Signed-off-by: Leander Stephen D'Souza <[email protected]> * Configured nav2_system_tests to be compliant with mypy. Signed-off-by: Leander Stephen D'Souza <[email protected]> --------- Signed-off-by: Leander Stephen D'Souza <[email protected]> * Publish zero velocitiy in case of goal failure (ros-navigation#5279) Signed-off-by: haider8645 <[email protected]> * Update PULL_REQUEST_TEMPLATE.md Signed-off-by: Steve Macenski <[email protected]> * Use fixed thresholds for Trinary yaml (ros-navigation#5278) Signed-off-by: Adi Vardi <[email protected]> * Add missing include of algorithm in differential_motion_model.cpp (ros-navigation#5293) Signed-off-by: Silvio Traversaro <[email protected]> * Remove unused unistd.h header from route_tool.cpp (ros-navigation#5292) Signed-off-by: Silvio Traversaro <[email protected]> * Fix compilation of nav2_smac_planner on Windows (ros-navigation#5291) Signed-off-by: Silvio <[email protected]> * Large Nav2 Node, Utils, and Interface Refactor (ros-navigation#5288) * initial unorganized prototype Signed-off-by: Steve Macenski <[email protected]> * break out files and add doxygen Signed-off-by: Steve Macenski <[email protected]> * Adding refactor for nav2_ros_common and new ROS interface factories Signed-off-by: Steve Macenski <[email protected]> * fixing CI - not sure how that got through merge conflicts Signed-off-by: Steve Macenski <[email protected]> * Lifecycle publisher a missing test Signed-off-by: Steve Macenski <[email protected]> * system tests Signed-off-by: Steve Macenski <[email protected]> * default Signed-off-by: Steve Macenski <[email protected]> * activating publishers Signed-off-by: Steve Macenski <[email protected]> * temp disable allow param qos overrides Signed-off-by: Steve Macenski <[email protected]> * API update for new constructor option Signed-off-by: Steve Macenski <[email protected]> * Supporting Jazzy and abstracting util Signed-off-by: Steve Macenski <[email protected]> * Review round 1 Signed-off-by: Steve Macenski <[email protected]> * Adding Nav2 Publisher and Subscriber objects to later build upon Signed-off-by: Steve Macenski <[email protected]> * Adding additional ::SharedPtr for readability Signed-off-by: Steve Macenski <[email protected]> * fix bug Signed-off-by: Steve Macenski <[email protected]> * fixing Jazzy support Signed-off-by: Steve Macenski <[email protected]> * missed one last spot Signed-off-by: Steve Macenski <[email protected]> * Adding migration instructions Signed-off-by: Steve Macenski <[email protected]> * more context Signed-off-by: Steve Macenski <[email protected]> * Adding migration context Signed-off-by: Steve Macenski <[email protected]> * precommit Signed-off-by: Steve Macenski <[email protected]> * adding missing dep Signed-off-by: Steve Macenski <[email protected]> * Updating system tess Signed-off-by: Steve Macenski <[email protected]> * more Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> * Adding logging for matched events and dropped messages into pub/sub of new nav2_ros_common package. Also adding QoS overrides default ON (ros-navigation#5302) * Adding logging for matched events and dropped messages Signed-off-by: Steve Macenski <[email protected]> * toggle on Signed-off-by: Steve Macenski <[email protected]> * apply for smac 2D Signed-off-by: Steve Macenski <[email protected]> * Update interface_factories.hpp Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> * Add LaunchConfigAsBool (Fixes ros-navigation#5233) (ros-navigation#5301) * Add LaunchConfigAsBool (Fixes ros-navigation#5233) Signed-off-by: nishalangovender <[email protected]> * Fix Linting Signed-off-by: nishalangovender <[email protected]> * Fix ament_mypy and pre-commit Signed-off-by: nishalangovender <[email protected]> * Added Type Annotations Signed-off-by: Nishalan Govender <[email protected]> * mypy ignore Signed-off-by: Nishalan Govender <[email protected]> * launch.Substitution Signed-off-by: Nishalan Govender <[email protected]> * Update All Bools in nav2_bringup Signed-off-by: Nishalan Govender <[email protected]> --------- Signed-off-by: nishalangovender <[email protected]> Signed-off-by: Nishalan Govender <[email protected]> * Create claude.yml Signed-off-by: Steve Macenski <[email protected]> * Update claude.yml Signed-off-by: Steve Macenski <[email protected]> * Update claude.yml Signed-off-by: Steve Macenski <[email protected]> * Update claude.yml for authorized users Signed-off-by: Steve Macenski <[email protected]> * Update claude.yml Signed-off-by: Steve Macenski <[email protected]> * Update claude.yml Signed-off-by: Steve Macenski <[email protected]> * Adding clear costmap around pose service option (ros-navigation#5309) * Adding clear costmap around pose impl Signed-off-by: Steve Macenski <[email protected]> * Update nav2_msgs/srv/ClearCostmapAroundPose.srv Signed-off-by: Steve Macenski <[email protected]> * Adding APIs for simple commander Signed-off-by: Steve Macenski <[email protected]> * linting Signed-off-by: Steve Macenski <[email protected]> * adding import Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> * Fix compiler errors in nav2_map_server * Fix compiler errors in nav2_costmap_2d * Add support for enable_lifecycle_services parameter in LifecycleNode (ros-navigation#5307) Expose the enable_communication_interface parameter from rclcpp_lifecycle::LifecycleNode through nav2's LifecycleNode wrapper. This allows users to disable lifecycle communication interfaces when manually managing node lifecycle transitions. The parameter can be set via NodeOptions parameter overrides: ```cpp rclcpp::NodeOptions options; options.parameter_overrides({{"enable_lifecycle_services", false}}); ``` Fixes ros-navigation#5305 Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> --------- Signed-off-by: Nils-Christian Iseke <[email protected]> Signed-off-by: Guillaume Doisy <[email protected]> Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> Signed-off-by: Alexander Yuen <[email protected]> Signed-off-by: Marco Bassa <[email protected]> Signed-off-by: Maurice-1235 <[email protected]> Signed-off-by: Stevedan Omodolor <[email protected]> Signed-off-by: Leander Stephen D'Souza <[email protected]> Signed-off-by: haider8645 <[email protected]> Signed-off-by: Adi Vardi <[email protected]> Signed-off-by: Silvio Traversaro <[email protected]> Signed-off-by: Silvio <[email protected]> Signed-off-by: nishalangovender <[email protected]> Signed-off-by: Nishalan Govender <[email protected]> Co-authored-by: Nils-Christian Iseke <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Co-authored-by: Steve Macenski <[email protected]> Co-authored-by: Tony Najjar <[email protected]> Co-authored-by: alexanderjyuen <[email protected]> Co-authored-by: Marco Bassa <[email protected]> Co-authored-by: mini-1235 <[email protected]> Co-authored-by: Stevedan Ogochukwu Omodolor <[email protected]> Co-authored-by: Leander Stephen D'Souza <[email protected]> Co-authored-by: Haider <[email protected]> Co-authored-by: Adi Vardi <[email protected]> Co-authored-by: Silvio Traversaro <[email protected]> Co-authored-by: Nishalan Govender <[email protected]> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Closing #4888
This PR does a very large refactor of Nav2, its utilities, their structure, and how we interface with the ROS network. Note that if you want to do a review, focus on the
nav2_ros_commonpackage, the other changes are simply using the new API updates that this creates. That is what should be scrutinized, though I'm happy to have as much of a review as possible from anyone interested :-)The aim of this work was to be able to expose:
StandardTopicQoSfor reliable, volitile, queue size 10 topics, andLatchedTopicQoSfor transient local queue size 1 topics, andSensorDataQoSfor best effort, queue size 10 topics)MyObject<T>::SharedPtrrather thanstd::shared_ptr<MyObject<T>>for easier reading of usersIn doing so, enough wrappers of ROS 2 interfaces justified the creation of a new
nav2_ros_commonpackage containing our specialized node and the various interface wrappers for the Actions, Services, Topics, etc and breaking it out ofnav2_util. The newnav2::LifecycleNodealso has factories for services, topics, etc using the same style API as ROS 2, but now returning Nav2 specific instances with our added utilities.create_client-->nav2::ServiceClientwith introspection configurationcreate_service-->nav2::ServiceServerwith introspection configurationcreate_publisher-->rclcpp_lifecycle::LifecyclePublisherwith QoS override parameterizationcreate_subscriber-->rclcpp::Subscriberwith QoS override parameterizationcreate_action_server-->nav2::SimpleActionServerwith introspection configurationcreate_action_client-->rclcpp_action::Clientwith introspection configurationSo, in code using the Nav2 nodes, it will no longer return in some cases the
rclcppinterface object but the newnav2ones, requiring some migration of custom planners, controllers, behavior tree nodes, etc to use these interfaces. We do this globally to ensure that all ROS interfaces go through our factories in order to set the QoS defaults, QoS parameter overridability, and introspection status -- in addition to future possible modifications that are able to be applied to all ROS interfaces. For example, addingros2_tracingtracepoints on key network events, new feature settings, etc.Future work:
Nav2 Pub/Sub with logging or exposed callbacks for dropped messages, matched events, etc more easily used by applicationsAdd nodethread spin as an optional spin typeGeneral information
nav2_util::LifecycleNodeis nownav2::LifecycleNodenav2::namespace, but they should not be accessed directly. Use thecreate_*factories from thenav2::LifecycleNodenav2::qosprofiles for QoS to be used in the codebase for homologation and later easier changing:nav2::qos::StandardTopicQoSnav2::qos::LatchedTopicQoSandnav2::qos::SensorDataQoS.create_*are very similar to the default ones, but slightly different to move the QoS profile specification below required information. When this is not specified theStandardTopicQoSis used (reliable, queue size 10). Only override this if you want another QoS type -- this is supposed to help make sure that things keep compatible and consistent. Avoid use of `SystemDefaultsQoS.Plugin Migration
All plugins now use
nav2::LifecycleNodeinstead ofrclcpp_lifecycle::LifecycleNodeornav2_util::LifecycleNode. All must be updated to use this new API from planners and controllers to behavior tree nodes. Similarly, calls to thecreate_*factories will now point to the Nav2 objects, where applicable. See above for what those look like and below for a migration from the existing code usage to the new version in order to make use of the new features and API.Service Client Migration Example
We no longer need to create the object manually, nor should we as it bypasses the lifecycle node factories that set introspection and possibly other future features. We can use the node now to do this instead of passing in a node and we don't need to specify the node type anymore as a template.
To:
Service Server Migration Example
We need to include the
rmw_request_id_theader now, so we have 3 placeholdersTo
Action Server Migration
We can use the factory now from the node and the node is not required as an argument.
To
Action Client Migration
We can use the node now and not need to specify all the nasty interfaces. We do that internally for you to clean up application code
To
Publisher Subscriber Migration
To migrate, the order of the arguments in the Subscription must change since the QoS profile is now optional. It is now
(topic, callback, QoS)whereas QoS defaults to the StandardTopicQoS, which is the same asrclcpp::QoSfor the moment.Publishers that explicitly specify a QoS profile do not require changes, though if the constructor using
depthis used, it must now specify a policy explicitly. Both are nownav2::Publisherandnav2::Subscriptionobjects that today just typedef the rclcpp and rclcpp_lifecycle versions. In the future, more features will be added here like lifecycle support for the subscriptions, so its highly recommended as part of this migration to migrate therclcpp::tonav2::as well so those updates are already easily available.To