Skip to content

Commit 0dc23e3

Browse files
SteveMacenskiclaude[bot]
authored andcommitted
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>
1 parent f8827a9 commit 0dc23e3

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

nav2_ros_common/include/nav2_ros_common/lifecycle_node.hpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class LifecycleNode : public rclcpp_lifecycle::LifecycleNode
5959
const std::string & node_name,
6060
const std::string & ns,
6161
const rclcpp::NodeOptions & options = rclcpp::NodeOptions())
62-
: rclcpp_lifecycle::LifecycleNode(node_name, ns, options)
62+
: rclcpp_lifecycle::LifecycleNode(node_name, ns, options, getEnableLifecycleServices(options))
6363
{
6464
// server side never times out from lifecycle manager
6565
this->declare_parameter(bond::msg::Constants::DISABLE_HEARTBEAT_TIMEOUT_PARAM, true);
@@ -395,6 +395,24 @@ class LifecycleNode : public rclcpp_lifecycle::LifecycleNode
395395
std::unique_ptr<bond::Bond> bond_{nullptr};
396396
double bond_heartbeat_period{0.1};
397397
rclcpp::TimerBase::SharedPtr autostart_timer_;
398+
399+
private:
400+
/**
401+
* @brief Get the enable_lifecycle_services parameter value from NodeOptions
402+
* @param options NodeOptions to check for the parameter
403+
* @return true if lifecycle services should be enabled, false otherwise
404+
*/
405+
static bool getEnableLifecycleServices(const rclcpp::NodeOptions & options)
406+
{
407+
// Check if the parameter is explicitly set in NodeOptions
408+
for (const auto & param : options.parameter_overrides()) {
409+
if (param.get_name() == "enable_lifecycle_services") {
410+
return param.as_bool();
411+
}
412+
}
413+
// Default to true if not specified
414+
return true;
415+
}
398416
};
399417

400418
} // namespace nav2

0 commit comments

Comments
 (0)