From 07ebd9a0213cc653ba1c7b88abf2646eab7fca72 Mon Sep 17 00:00:00 2001 From: Matej Vargovcik Date: Thu, 18 Nov 2021 09:43:28 +0100 Subject: [PATCH 1/2] removed init_timer from lifecycle callback group --- nav2_lifecycle_manager/src/lifecycle_manager.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nav2_lifecycle_manager/src/lifecycle_manager.cpp b/nav2_lifecycle_manager/src/lifecycle_manager.cpp index 7022681e6fa..2e5be4be344 100644 --- a/nav2_lifecycle_manager/src/lifecycle_manager.cpp +++ b/nav2_lifecycle_manager/src/lifecycle_manager.cpp @@ -77,15 +77,14 @@ LifecycleManager::LifecycleManager(const rclcpp::NodeOptions & options) std::string("Shutting down "); init_timer_ = this->create_wall_timer( - std::chrono::nanoseconds(10), + 0s, [this]() -> void { init_timer_->cancel(); createLifecycleServiceClients(); if (autostart_) { startup(); } - }, - callback_group_); + }); auto executor = std::make_shared(); executor->add_callback_group(callback_group_, get_node_base_interface()); service_thread_ = std::make_unique(executor); From 89499ab04972fa3251fa17f9a233081705070091 Mon Sep 17 00:00:00 2001 From: Matej Vargovcik Date: Fri, 19 Nov 2021 14:55:11 +0100 Subject: [PATCH 2/2] lifecycle manager: startup() on autostart_ calling from callback_group_ (Bond::waitUntilFormed needs node spinning in the background) --- nav2_lifecycle_manager/src/lifecycle_manager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nav2_lifecycle_manager/src/lifecycle_manager.cpp b/nav2_lifecycle_manager/src/lifecycle_manager.cpp index 2e5be4be344..8474969f8a4 100644 --- a/nav2_lifecycle_manager/src/lifecycle_manager.cpp +++ b/nav2_lifecycle_manager/src/lifecycle_manager.cpp @@ -82,7 +82,13 @@ LifecycleManager::LifecycleManager(const rclcpp::NodeOptions & options) init_timer_->cancel(); createLifecycleServiceClients(); if (autostart_) { - startup(); + init_timer_ = this->create_wall_timer( + 0s, + [this]() -> void { + init_timer_->cancel(); + startup(); + }, + callback_group_); } }); auto executor = std::make_shared();