Skip to content

Commit 06ec958

Browse files
jonipolSteveMacenski
authored andcommitted
Add configure and cleanup transitions to lifecycle manager and client (ros-navigation#4371)
Signed-off-by: Joni Pöllänen <joni.pollanen@karelics.fi>
1 parent 43199c9 commit 06ec958

File tree

6 files changed

+70
-0
lines changed

6 files changed

+70
-0
lines changed

nav2_lifecycle_manager/include/nav2_lifecycle_manager/lifecycle_manager.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ class LifecycleManager : public rclcpp::Node
9393
* @return true or false
9494
*/
9595
bool startup();
96+
/**
97+
* @brief Configures the managed nodes.
98+
* @return true or false
99+
*/
100+
bool configure();
101+
/**
102+
* @brief Cleanups the managed nodes
103+
* @return true or false
104+
*/
105+
bool cleanup();
96106
/**
97107
* @brief Deactivate, clean up and shut down all the managed nodes.
98108
* @return true or false

nav2_lifecycle_manager/include/nav2_lifecycle_manager/lifecycle_manager_client.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ class LifecycleManagerClient
7878
* @return true or false
7979
*/
8080
bool reset(const std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1));
81+
/**
82+
* @brief Make configure service call
83+
* @return true or false
84+
*/
85+
bool configure(const std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1));
86+
/**
87+
* @brief Make cleanup service call
88+
* @return true or false
89+
*/
90+
bool cleanup(const std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1));
8191
/**
8292
* @brief Check if lifecycle node manager server is active
8393
* @return ACTIVE or INACTIVE or TIMEOUT

nav2_lifecycle_manager/src/lifecycle_manager.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,12 @@ LifecycleManager::managerCallback(
125125
case ManageLifecycleNodes::Request::STARTUP:
126126
response->success = startup();
127127
break;
128+
case ManageLifecycleNodes::Request::CONFIGURE:
129+
response->success = configure();
130+
break;
131+
case ManageLifecycleNodes::Request::CLEANUP:
132+
response->success = cleanup();
133+
break;
128134
case ManageLifecycleNodes::Request::RESET:
129135
response->success = reset();
130136
break;
@@ -291,6 +297,34 @@ LifecycleManager::startup()
291297
return true;
292298
}
293299

300+
bool
301+
LifecycleManager::configure()
302+
{
303+
message("Configuring managed nodes...");
304+
if (!changeStateForAllNodes(Transition::TRANSITION_CONFIGURE)) {
305+
RCLCPP_ERROR(get_logger(), "Failed to configure all requested nodes. Aborting bringup.");
306+
managed_nodes_state_ = NodeState::UNKNOWN;
307+
return false;
308+
}
309+
message("Managed nodes are now configured");
310+
managed_nodes_state_ = NodeState::INACTIVE;
311+
return true;
312+
}
313+
314+
bool
315+
LifecycleManager::cleanup()
316+
{
317+
message("Cleaning up managed nodes...");
318+
if (!changeStateForAllNodes(Transition::TRANSITION_CLEANUP)) {
319+
RCLCPP_ERROR(get_logger(), "Failed to cleanup all requested nodes. Aborting cleanup.");
320+
managed_nodes_state_ = NodeState::UNKNOWN;
321+
return false;
322+
}
323+
message("Managed nodes have been cleaned up");
324+
managed_nodes_state_ = NodeState::UNCONFIGURED;
325+
return true;
326+
}
327+
294328
bool
295329
LifecycleManager::shutdown()
296330
{

nav2_lifecycle_manager/src/lifecycle_manager_client.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,18 @@ LifecycleManagerClient::reset(const std::chrono::nanoseconds timeout)
7373
return callService(ManageLifecycleNodes::Request::RESET, timeout);
7474
}
7575

76+
bool
77+
LifecycleManagerClient::configure(const std::chrono::nanoseconds timeout)
78+
{
79+
return callService(ManageLifecycleNodes::Request::CONFIGURE, timeout);
80+
}
81+
82+
bool
83+
LifecycleManagerClient::cleanup(const std::chrono::nanoseconds timeout)
84+
{
85+
return callService(ManageLifecycleNodes::Request::CLEANUP, timeout);
86+
}
87+
7688
SystemStatus
7789
LifecycleManagerClient::is_active(const std::chrono::nanoseconds timeout)
7890
{

nav2_lifecycle_manager/test/test_lifecycle_manager.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ TEST(LifecycleClientTest, BasicTest)
100100
client.is_active(std::chrono::nanoseconds(1000000000)));
101101
EXPECT_TRUE(client.resume());
102102
EXPECT_TRUE(client.reset());
103+
EXPECT_TRUE(client.configure());
104+
EXPECT_TRUE(client.cleanup());
103105
EXPECT_TRUE(client.shutdown());
104106
}
105107

nav2_msgs/srv/ManageLifecycleNodes.srv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ uint8 PAUSE = 1
33
uint8 RESUME = 2
44
uint8 RESET = 3
55
uint8 SHUTDOWN = 4
6+
uint8 CONFIGURE = 5
7+
uint8 CLEANUP = 6
68

79
uint8 command
810
---

0 commit comments

Comments
 (0)