From b91734bbab7eb01e1e77e42965d2edeecdc28588 Mon Sep 17 00:00:00 2001
From: Michael Jeronimo <michael.jeronimo@intel.com>
Date: Thu, 9 May 2019 13:05:11 -0700
Subject: [PATCH] Add parameter to the lifecycle manager to enable autostarting
 the stack

---
 .../include/nav2_lifecycle_manager/lifecycle_manager.hpp | 3 +++
 nav2_lifecycle_manager/src/lifecycle_manager.cpp         | 9 ++++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/nav2_lifecycle_manager/include/nav2_lifecycle_manager/lifecycle_manager.hpp b/nav2_lifecycle_manager/include/nav2_lifecycle_manager/lifecycle_manager.hpp
index 9ec0a05e..563775df 100644
--- a/nav2_lifecycle_manager/include/nav2_lifecycle_manager/lifecycle_manager.hpp
+++ b/nav2_lifecycle_manager/include/nav2_lifecycle_manager/lifecycle_manager.hpp
@@ -88,6 +88,9 @@ protected:
 
   // The names of the nodes to be managed, in the order of desired bring-up
   std::vector<std::string> node_names_;
+
+  // Whether to automatically start up the system
+  bool autostart_;
 };
 
 }  // namespace nav2_lifecycle_manager
diff --git a/nav2_lifecycle_manager/src/lifecycle_manager.cpp b/nav2_lifecycle_manager/src/lifecycle_manager.cpp
index c85b425d..436bd7ac 100644
--- a/nav2_lifecycle_manager/src/lifecycle_manager.cpp
+++ b/nav2_lifecycle_manager/src/lifecycle_manager.cpp
@@ -39,9 +39,12 @@ LifecycleManager::LifecycleManager()
   std::vector<std::string> default_node_names{"map_server", "amcl", "world_model", "dwb_controller",
     "navfn_planner", "bt_navigator"};
 
-  // However, it is parameterized, allowing this module to be used with a different set of nodes
+  // The list of names is parameterized, allowing this module to be used with a different set of nodes
   declare_parameter("node_names", rclcpp::ParameterValue(default_node_names));
+  declare_parameter("autostart", rclcpp::ParameterValue(false));
+
   get_parameter("node_names", node_names_);
+  get_parameter("autostart", autostart_);
 
   startup_srv_ = create_service<std_srvs::srv::Empty>("lifecycle_manager/startup",
       std::bind(&LifecycleManager::startupCallback, this, _1, _2, _3));
@@ -56,6 +59,10 @@ LifecycleManager::LifecycleManager()
       std::bind(&LifecycleManager::resumeCallback, this, _1, _2, _3));
 
   service_client_node_ = std::make_shared<rclcpp::Node>("lifecycle_manager_service_client");
+
+  if (autostart_) {
+    startup();
+  }
 }
 
 LifecycleManager::~LifecycleManager()
-- 
GitLab