-
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 <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
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_lifecycle
tonav2_ros_common
andnav2::LifecycleNode
- Migrate service, action, publisher, and subscriber factories to
create_*
methods andasync_call
for services - Update CMakeLists and package.xml to add
nav2_ros_common
dependency 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 <stevenmacenski@gmail.com>
588d4e7
to
1e1f939
Compare
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
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
FYI @MarcoMatteoBassa ros2/rclcpp#2876 this is what is causing the smac planner deadlock tests. When |
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
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 <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Migration docs: ros-navigation/docs.nav2.org#712 |
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
* initial unorganized prototype Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * break out files and add doxygen Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding refactor for nav2_ros_common and new ROS interface factories Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fixing CI - not sure how that got through merge conflicts Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Lifecycle publisher a missing test Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * system tests Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * default Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * activating publishers Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * temp disable allow param qos overrides Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * API update for new constructor option Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Supporting Jazzy and abstracting util Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Review round 1 Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding Nav2 Publisher and Subscriber objects to later build upon Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding additional ::SharedPtr for readability Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fix bug Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fixing Jazzy support Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * missed one last spot Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding migration instructions Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * more context Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding migration context Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * precommit Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * adding missing dep Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Updating system tess Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * more Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
* 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 <nilsmailiseke@gmail.com> * Update Cache Version Signed-off-by: Nils-Christian Iseke <nilsmailiseke@gmail.com> --------- Signed-off-by: Nils-Christian Iseke <nilsmailiseke@gmail.com> * enable_groot_monitoring_ false (ros-navigation#5246) Signed-off-by: Guillaume Doisy <guillaume@dexory.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com> * Updating readme table for kilted release (ros-navigation#5249) * updating readme table for kilted release Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Updating table lint Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Add min_distance_to_obstacle parameter to RPP (ros-navigation#4543) * min_distance_to_obstacle Signed-off-by: Guillaume Doisy <guillaume@dexory.com> * suggestion to time base and combine Signed-off-by: Guillaume Doisy <guillaume@dexory.com> * typo Signed-off-by: Guillaume Doisy <guillaume@dexory.com> * use min_approach_linear_velocity Signed-off-by: Guillaume Doisy <guillaume@dexory.com> --------- Signed-off-by: Guillaume Doisy <guillaume@dexory.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com> * 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 <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Working for Kilted, Jazzy Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Change max_cost default to 254 (ros-navigation#5256) Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * Route server corner smoothing (ros-navigation#5226) * added edge length method Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * Added corner arc class Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * replaced double vectors with Coordinates, added methods to return start and end coordinates Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * using Coordinates, fixed direction of tangents Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added corner arc in header, added logger in protected variable Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * first pass of corner smoothing algorithm Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * reassigning next edge to have a different start, if a corner occurs before it Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * using unique pointer instead of raw pointers for new edges and nodes Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added smoothing parameter Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * made angle of interpolation a parameter Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * const for return methods, added flag for smoothing corners Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * moved getEdgeLength() into the Directional Edge struct Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * using float instead of double Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * smoothing radius is float, couple methods moved to protected Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * removed signed_angle_ as a member variable Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * removed unnecessary member variables Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * removed angle of interpolation and inferring it from path density and radius instead Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * consolidated corner arc into one header function Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * readded newline Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * changed corner arc to corner smoothing Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * replaced the use of edges with coordinates to generate smoothing arc, removed storage of nodes and edges Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * linting Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * fixing cpplint Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * linting for headers Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * cpplinting Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update nav2_route/src/path_converter.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update nav2_route/include/nav2_route/corner_smoothing.hpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fixed divide by zeros and accessing empty route.edges Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * uncrustify linting Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * cpp linting Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * path converter linting Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * changed all doubles to floats Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added check for edges that are colinear to avoid divide by 0, fixed final edge interpolation Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * linting Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * Update nav2_route/include/nav2_route/corner_smoothing.hpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * added doxygen for corner arc class Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added warning message if corner can't be smoothed Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added smooth_corners to the nav2 params file Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added smoothing flag and radius parameter to README.md' Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * typo in README Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * added testing for corner smoothing Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> * Update nav2_route/include/nav2_route/corner_smoothing.hpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> Co-authored-by: Steve Macenski <stevenmacenski@gmail.com> * Conserve curvature with LIMIT action (ros-navigation#5255) * Conserve curvature with LIMIT action Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * fix format Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * fix test Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> --------- Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * Parametrizing obstacle layer tf filter tolerance (ros-navigation#5261) Signed-off-by: Marco Bassa <marco.bassa@idealworks.com> * Add namespace support for rviz costmap cost tool (ros-navigation#5268) Signed-off-by: Maurice-1235 <mauricepurnawan@gmail.com> * Fix/smac planner orientation goals (ros-navigation#5235) * cherry pick Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * cherry pick 6a74ba6 Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * cherrpy pick Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * include x11 forwarding Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * kind of working version Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * cleanup Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * formatting Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * minor format change Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * change naming Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * minor changes Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * working with new changes Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * 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 <nilsmailiseke@gmail.com> * Update Cache Version Signed-off-by: Nils-Christian Iseke <nilsmailiseke@gmail.com> --------- Signed-off-by: Nils-Christian Iseke <nilsmailiseke@gmail.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * Revert back Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * enable_groot_monitoring_ false (ros-navigation#5246) Signed-off-by: Guillaume Doisy <guillaume@dexory.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * Updating readme table for kilted release (ros-navigation#5249) * updating readme table for kilted release Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Updating table lint Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * Add min_distance_to_obstacle parameter to RPP (ros-navigation#4543) * min_distance_to_obstacle Signed-off-by: Guillaume Doisy <guillaume@dexory.com> * suggestion to time base and combine Signed-off-by: Guillaume Doisy <guillaume@dexory.com> * typo Signed-off-by: Guillaume Doisy <guillaume@dexory.com> * use min_approach_linear_velocity Signed-off-by: Guillaume Doisy <guillaume@dexory.com> --------- Signed-off-by: Guillaume Doisy <guillaume@dexory.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * 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 <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Working for Kilted, Jazzy Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update amcl_node.cpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * Change max_cost default to 254 (ros-navigation#5256) Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * linter Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * remove const Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * pass const pointer by value Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * pass const pointer by value Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> * remove unused param Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> --------- Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> Signed-off-by: Nils-Christian Iseke <nilsmailiseke@gmail.com> Signed-off-by: Guillaume Doisy <guillaume@dexory.com> Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> Co-authored-by: Steve Macenski <stevenmacenski@gmail.com> Co-authored-by: Nils-Christian Iseke <48475933+Nils-ChristianIseke@users.noreply.github.com> Co-authored-by: Guillaume Doisy <doisyg@users.noreply.github.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com> Co-authored-by: Tony Najjar <tony.najjar.1997@gmail.com> * Fix backport compiler warning (ros-navigation#5277) Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Fix ament mypy (ros-navigation#5280) * Configured nav2_loopback_sim to be compliant with mypy. Signed-off-by: Leander Stephen D'Souza <leanderdsouza1234@gmail.com> * Configured nav2_simple_commander to be compliant with mypy. Signed-off-by: Leander Stephen D'Souza <leanderdsouza1234@gmail.com> * Configured nav2_system_tests to be compliant with mypy. Signed-off-by: Leander Stephen D'Souza <leanderdsouza1234@gmail.com> --------- Signed-off-by: Leander Stephen D'Souza <leanderdsouza1234@gmail.com> * Publish zero velocitiy in case of goal failure (ros-navigation#5279) Signed-off-by: haider8645 <haider_lodhi@hotmail.com> * Update PULL_REQUEST_TEMPLATE.md Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Use fixed thresholds for Trinary yaml (ros-navigation#5278) Signed-off-by: Adi Vardi <adi.vardi@enway.ai> * Add missing include of algorithm in differential_motion_model.cpp (ros-navigation#5293) Signed-off-by: Silvio Traversaro <silvio@traversaro.it> * Remove unused unistd.h header from route_tool.cpp (ros-navigation#5292) Signed-off-by: Silvio Traversaro <silvio@traversaro.it> * Fix compilation of nav2_smac_planner on Windows (ros-navigation#5291) Signed-off-by: Silvio <silvio.traversaro@iit.it> * Large Nav2 Node, Utils, and Interface Refactor (ros-navigation#5288) * initial unorganized prototype Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * break out files and add doxygen Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding refactor for nav2_ros_common and new ROS interface factories Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fixing CI - not sure how that got through merge conflicts Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Lifecycle publisher a missing test Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * system tests Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * default Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * activating publishers Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * temp disable allow param qos overrides Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * API update for new constructor option Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Supporting Jazzy and abstracting util Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Review round 1 Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding Nav2 Publisher and Subscriber objects to later build upon Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding additional ::SharedPtr for readability Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fix bug Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * fixing Jazzy support Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * missed one last spot Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding migration instructions Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * more context Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding migration context Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * precommit Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * adding missing dep Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Updating system tess Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * more Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * 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 <stevenmacenski@gmail.com> * toggle on Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * apply for smac 2D Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update interface_factories.hpp Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Add LaunchConfigAsBool (Fixes ros-navigation#5233) (ros-navigation#5301) * Add LaunchConfigAsBool (Fixes ros-navigation#5233) Signed-off-by: nishalangovender <nishalan.govender@gmail.com> * Fix Linting Signed-off-by: nishalangovender <nishalan.govender@gmail.com> * Fix ament_mypy and pre-commit Signed-off-by: nishalangovender <nishalan.govender@gmail.com> * Added Type Annotations Signed-off-by: Nishalan Govender <nishalan.govender@gmail.com> * mypy ignore Signed-off-by: Nishalan Govender <nishalan.govender@gmail.com> * launch.Substitution Signed-off-by: Nishalan Govender <nishalan.govender@gmail.com> * Update All Bools in nav2_bringup Signed-off-by: Nishalan Govender <nishalan.govender@gmail.com> --------- Signed-off-by: nishalangovender <nishalan.govender@gmail.com> Signed-off-by: Nishalan Govender <nishalan.govender@gmail.com> * Create claude.yml Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update claude.yml Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update claude.yml Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update claude.yml for authorized users Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update claude.yml Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update claude.yml Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding clear costmap around pose service option (ros-navigation#5309) * Adding clear costmap around pose impl Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Update nav2_msgs/srv/ClearCostmapAroundPose.srv Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * Adding APIs for simple commander Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * linting Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * adding import Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> --------- Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> * 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 <nilsmailiseke@gmail.com> Signed-off-by: Guillaume Doisy <guillaume@dexory.com> Signed-off-by: Steve Macenski <stevenmacenski@gmail.com> Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> Signed-off-by: Alexander Yuen <alex@polymathrobotics.com> Signed-off-by: Marco Bassa <marco.bassa@idealworks.com> Signed-off-by: Maurice-1235 <mauricepurnawan@gmail.com> Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com> Signed-off-by: Leander Stephen D'Souza <leanderdsouza1234@gmail.com> Signed-off-by: haider8645 <haider_lodhi@hotmail.com> Signed-off-by: Adi Vardi <adi.vardi@enway.ai> Signed-off-by: Silvio Traversaro <silvio@traversaro.it> Signed-off-by: Silvio <silvio.traversaro@iit.it> Signed-off-by: nishalangovender <nishalan.govender@gmail.com> Signed-off-by: Nishalan Govender <nishalan.govender@gmail.com> Co-authored-by: Nils-Christian Iseke <48475933+Nils-ChristianIseke@users.noreply.github.com> Co-authored-by: Guillaume Doisy <doisyg@users.noreply.github.com> Co-authored-by: Guillaume Doisy <guillaume@dexory.com> Co-authored-by: Steve Macenski <stevenmacenski@gmail.com> Co-authored-by: Tony Najjar <tony.najjar.1997@gmail.com> Co-authored-by: alexanderjyuen <103065090+alexanderjyuen@users.noreply.github.com> Co-authored-by: Marco Bassa <101661130+MarcoMatteoBassa@users.noreply.github.com> Co-authored-by: mini-1235 <mauricepurnawan@gmail.com> Co-authored-by: Stevedan Ogochukwu Omodolor <61468301+stevedanomodolor@users.noreply.github.com> Co-authored-by: Leander Stephen D'Souza <leanderdsouza1234@gmail.com> Co-authored-by: Haider <haider_lodhi@hotmail.com> Co-authored-by: Adi Vardi <57910756+adivardi@users.noreply.github.com> Co-authored-by: Silvio Traversaro <silvio@traversaro.it> Co-authored-by: Nishalan Govender <137301877+nishalangovender@users.noreply.github.com> 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_common
package, 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:
StandardTopicQoS
for reliable, volitile, queue size 10 topics, andLatchedTopicQoS
for transient local queue size 1 topics, andSensorDataQoS
for best effort, queue size 10 topics)MyObject<T>::SharedPtr
rather 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_common
package containing our specialized node and the various interface wrappers for the Actions, Services, Topics, etc and breaking it out ofnav2_util
. The newnav2::LifecycleNode
also 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::ServiceClient
with introspection configurationcreate_service
-->nav2::ServiceServer
with introspection configurationcreate_publisher
-->rclcpp_lifecycle::LifecyclePublisher
with QoS override parameterizationcreate_subscriber
-->rclcpp::Subscriber
with QoS override parameterizationcreate_action_server
-->nav2::SimpleActionServer
with introspection configurationcreate_action_client
-->rclcpp_action::Client
with introspection configurationSo, in code using the Nav2 nodes, it will no longer return in some cases the
rclcpp
interface object but the newnav2
ones, 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_tracing
tracepoints 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::LifecycleNode
is nownav2::LifecycleNode
nav2::
namespace, but they should not be accessed directly. Use thecreate_*
factories from thenav2::LifecycleNode
nav2::qos
profiles for QoS to be used in the codebase for homologation and later easier changing:nav2::qos::StandardTopicQoS
nav2::qos::LatchedTopicQoS
andnav2::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 theStandardTopicQoS
is 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::LifecycleNode
instead ofrclcpp_lifecycle::LifecycleNode
ornav2_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_t
header 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::QoS
for the moment.Publishers that explicitly specify a QoS profile do not require changes, though if the constructor using
depth
is used, it must now specify a policy explicitly. Both are nownav2::Publisher
andnav2::Subscription
objects 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