Skip to content

Conversation

SteveMacenski
Copy link
Member

@SteveMacenski SteveMacenski commented Jun 19, 2025

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:

  • Action, Action Client, Service, and Clients' introspection for all such interfaces removing the boilerplate code for all instances in the application code
  • Allow for QoS overrides of all publishers and subscribers by a standard parameter, removing the boilerplate code in the application code
  • Audit and correct existing QoS profiles and configuration mistakes. Ensure that this cannot happen again by controlling globally the use of QoS in all instances
  • Simplify interfaces for Nav2 developers and removing the need to specify extra information when using 'standard' topics and providing semantically meaningful QoS profiles to developers (i.e. StandardTopicQoS for reliable, volitile, queue size 10 topics, and LatchedTopicQoS for transient local queue size 1 topics, and SensorDataQoS for best effort, queue size 10 topics)
  • Allow pub/sub to more easily expose things like matched callbacks, dropped message callback, etc for system debugging
  • Clean up the code so that all main nav2 utilities can be addressed as MyObject<T>::SharedPtr rather than std::shared_ptr<MyObject<T>> for easier reading of users

In 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 of nav2_util. The new nav2::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 configuration
  • create_service --> nav2::ServiceServer with introspection configuration
  • create_publisher --> rclcpp_lifecycle::LifecyclePublisher with QoS override parameterization
  • create_subscriber --> rclcpp::Subscriber with QoS override parameterization
  • create_action_server --> nav2::SimpleActionServer with introspection configuration
  • create_action_client --> rclcpp_action::Client with introspection configuration

So, in code using the Nav2 nodes, it will no longer return in some cases the rclcpp interface object but the new nav2 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, adding ros2_tracing tracepoints on key network events, new feature settings, etc.

Future work:


General information

  • nav2_util::LifecycleNode is now nav2::LifecycleNode
  • The Service Client, Service Server, and Simple Action Server were also moved to the nav2:: namespace, but they should not be accessed directly. Use the create_* factories from the nav2::LifecycleNode
  • There are now nav2::qos profiles for QoS to be used in the codebase for homologation and later easier changing: nav2::qos::StandardTopicQoS nav2::qos::LatchedTopicQoS and nav2::qos::SensorDataQoS.
  • The APIs for 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 the StandardTopicQoS 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 of rclcpp_lifecycle::LifecycleNode or nav2_util::LifecycleNode. All must be updated to use this new API from planners and controllers to behavior tree nodes. Similarly, calls to the create_* 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.

// If using rclcpp::Client<T> from previous create_client factor
main_client_ = node->create_client<SrvT>(main_srv_name_, rclcpp::SystemDefaultsQoS(), callback_group_); 

// If using nav2_util::ServiceClient<T> manually
main_client_ =
  std::make_shared<nav2_util::ServiceClient<SrvT>>(
  main_srv_name_,
  node,
  false /* Does not create and spin an internal executor*/);

To:

main_client_ = node->create_client<SrvT>(main_srv_name_, false  /* Does not create and spin an internal executor*/);

Service Server Migration Example

We need to include the rmw_request_id_t header now, so we have 3 placeholders

// If using previous create_service factory
  service_ = node->create_service<std_srvs::srv::Trigger>(
    std::string(node->get_name()) + "/" + getName() + "/reroute",
    std::bind(
      &ReroutingService::serviceCb, this,
      std::placeholders::_1, std::placeholders::_2));

// If using nav2_util::ServiceServer<T> manually
  service_ = std::make_shared<nav2_util::ServiceServer<std_srvs::srv::Trigger,
      std::shared_ptr<rclcpp_lifecycle::LifecycleNode>>>(
    std::string(node->get_name()) + "/" + getName() + "/reroute",
    node,
    std::bind(
      &ReroutingService::serviceCb, this,
      std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));

To

  service_ = node->create_service<std_srvs::srv::Trigger>(
    std::string(node->get_name()) + "/" + getName() + "/reroute",
    std::bind(&ReroutingService::serviceCb, this,
        std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));

Action Server Migration

We can use the factory now from the node and the node is not required as an argument.

  compute_and_track_route_server_ = std::make_shared<ComputeAndTrackRouteServer>(
    node, "compute_and_track_route",
    std::bind(&RouteServer::computeAndTrackRoute, this),
    nullptr, std::chrono::milliseconds(500), true);

To

  compute_and_track_route_server_ = create_action_server<ComputeAndTrackRoute>(
    "compute_and_track_route",
    std::bind(&RouteServer::computeAndTrackRoute, this),
    nullptr, std::chrono::milliseconds(500), true);

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

  nav_to_pose_client_ = rclcpp_action::create_client<ClientT>(
    get_node_base_interface(),
    get_node_graph_interface(),
    get_node_logging_interface(),
    get_node_waitables_interface(),
    "navigate_to_pose", callback_group_);

To

  nav_to_pose_client_ = create_action_client<ClientT>(
    "navigate_to_pose", callback_group_);

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 as rclcpp::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 now nav2::Publisher and nav2::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 the rclcpp:: to nav2:: as well so those updates are already easily available.

  plan_publisher_ = create_publisher<nav_msgs::msg::Path>("plan", 1);
  plan_publisher_ = create_publisher<nav_msgs::msg::Path>("plan", rclcpp::QoS());

  data_sub_ = node->create_subscription<sensor_msgs::msg::Range>(
    source_topic, range_qos,
    std::bind(&Range::dataCallback, this, std::placeholders::_1));

To

  plan_publisher_ = create_publisher<nav_msgs::msg::Path>("plan");  // No QoS is required if using the StandardTopicQoS, else it can be provided

  data_sub_ = node->create_subscription<sensor_msgs::msg::Range>(
    source_topic,
    std::bind(&Range::dataCallback, this, std::placeholders::_1));  // QoS can be ommitted if using StandardTopicQoS, else it can be provided last

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
@SteveMacenski SteveMacenski requested a review from Copilot June 19, 2025 01:14
Copy link
Contributor

@Copilot Copilot AI left a 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 to nav2_ros_common and nav2::LifecycleNode
  • Migrate service, action, publisher, and subscriber factories to create_* methods and async_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(

@SteveMacenski
Copy link
Member Author

SteveMacenski commented Jun 19, 2025

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>
@SteveMacenski SteveMacenski force-pushed the 4888 branch 2 times, most recently from 588d4e7 to 1e1f939 Compare June 20, 2025 04:11
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>
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@ros-navigation ros-navigation deleted a comment from mergify bot Jun 20, 2025
@@ -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))
Copy link
Contributor

@MarcoMatteoBassa MarcoMatteoBassa Jun 20, 2025

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.

Copy link
Member Author

@SteveMacenski SteveMacenski Jun 20, 2025

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?

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
@SteveMacenski
Copy link
Member Author

SteveMacenski commented Jun 21, 2025

FYI @MarcoMatteoBassa ros2/rclcpp#2876 this is what is causing the smac planner deadlock tests. When options.qos_overriding_options is non-empty for the publishers (also possibly subscribers?), then if ever reinitialized within a dynamic parameter callback it deadlocks.

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Copy link

codecov bot commented Jun 21, 2025

Codecov Report

Attention: Patch coverage is 98.00000% with 10 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
nav2_amcl/src/amcl_node.cpp 97.14% 3 Missing ⚠️
nav2_costmap_2d/src/costmap_2d_markers.cpp 0.00% 2 Missing ⚠️
...av2_docking/opennav_docking/src/docking_server.cpp 91.66% 2 Missing ⚠️
nav2_bt_navigator/src/bt_navigator.cpp 80.00% 1 Missing ⚠️
...2_collision_monitor/src/collision_monitor_node.cpp 95.00% 1 Missing ⚠️
nav2_costmap_2d/plugins/static_layer.cpp 80.00% 1 Missing ⚠️
Files with missing lines Coverage Δ
...nclude/nav2_behavior_tree/behavior_tree_engine.hpp 100.00% <ø> (ø)
...tree/include/nav2_behavior_tree/bt_action_node.hpp 81.67% <100.00%> (+2.29%) ⬆️
...ee/include/nav2_behavior_tree/bt_action_server.hpp 83.33% <ø> (ø)
...clude/nav2_behavior_tree/bt_action_server_impl.hpp 89.77% <100.00%> (+0.17%) ⬆️
...clude/nav2_behavior_tree/bt_cancel_action_node.hpp 80.00% <100.00%> (ø)
...ree/include/nav2_behavior_tree/bt_service_node.hpp 84.05% <100.00%> (-0.23%) ⬇️
...avior_tree/include/nav2_behavior_tree/bt_utils.hpp 97.48% <ø> (ø)
...lugins/action/append_goal_pose_to_goals_action.hpp 100.00% <ø> (ø)
...ior_tree/plugins/action/assisted_teleop_action.hpp 100.00% <ø> (ø)
...ree/plugins/action/assisted_teleop_cancel_node.hpp 100.00% <ø> (ø)
... and 155 more

... and 65 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
@SteveMacenski SteveMacenski marked this pull request as ready for review June 23, 2025 02:13
@MarcoMatteoBassa
Copy link
Contributor

FYI @MarcoMatteoBassa ros2/rclcpp#2876 this is what is causing the smac planner deadlock tests. When options.qos_overriding_options is non-empty for the publishers (also possibly subscribers?), then if ever reinitialized within a dynamic parameter callback it deadlocks.

That is unfortunate :(

@SteveMacenski
Copy link
Member Author

SteveMacenski commented Jun 23, 2025

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>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
@SteveMacenski
Copy link
Member Author

Migration docs: ros-navigation/docs.nav2.org#712

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
@SteveMacenski SteveMacenski merged commit a9fcc5b into main Jun 24, 2025
15 checks passed
@SteveMacenski SteveMacenski deleted the 4888 branch June 24, 2025 01:41
SakshayMahna pushed a commit to SakshayMahna/navigation2 that referenced this pull request Jul 6, 2025
* 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>
Sushant-Chavan added a commit to Sushant-Chavan/navigation2 that referenced this pull request Aug 5, 2025
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants