SMACC2
Loading...
Searching...
No Matches
cl_lifecycle_node.hpp
Go to the documentation of this file.
1// Copyright 2021 RobosoftAI Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15/*****************************************************************************************************************
16 *
17 * Authors: Pablo Inigo Blasco, Brett Aldrich
18 *
19 ******************************************************************************************************************/
20#pragma once
21
23#include <lifecycle_msgs/msg/transition_event.hpp>
24#include <lifecycle_msgs/srv/change_state.hpp>
25#include <lifecycle_msgs/srv/get_state.hpp>
27#include <smacc2/smacc.hpp>
29
31{
32template <typename TSourceObject, typename TOrthogonal>
34: sc::event<EvLifecycleNodeChangeState<TSourceObject, TOrthogonal>>
35{
36 uint8_t transition;
37};
38
39template <typename TSourceObject, typename TOrthogonal>
40struct EvTransitionCreate : public sc::event<EvTransitionCreate<TSourceObject, TOrthogonal>>
41{
42};
43
44template <typename TSourceObject, typename TOrthogonal>
45struct EvTransitionConfigure : public sc::event<EvTransitionConfigure<TSourceObject, TOrthogonal>>
46{
47};
48
49template <typename TSourceObject, typename TOrthogonal>
50struct EvTransitionCleanup : sc::event<EvTransitionCleanup<TSourceObject, TOrthogonal>>
51{
52};
53
54template <typename TSourceObject, typename TOrthogonal>
55struct EvTransitionActivate : sc::event<EvTransitionActivate<TSourceObject, TOrthogonal>>
56{
57};
58
59template <typename TSourceObject, typename TOrthogonal>
60struct EvTransitionDeactivate : sc::event<EvTransitionDeactivate<TSourceObject, TOrthogonal>>
61{
62};
63
64template <typename TSourceObject, typename TOrthogonal>
65struct EvTransitionUnconfiguredShutdown
66: sc::event<EvTransitionUnconfiguredShutdown<TSourceObject, TOrthogonal>>
67{
68};
69
70template <typename TSourceObject, typename TOrthogonal>
71struct EvTransitionInactiveShutdown
72: sc::event<EvTransitionInactiveShutdown<TSourceObject, TOrthogonal>>
73{
74};
75
76template <typename TSourceObject, typename TOrthogonal>
77struct EvTransitionActiveShutdown
78: sc::event<EvTransitionActiveShutdown<TSourceObject, TOrthogonal>>
79{
80};
81
82template <typename TSourceObject, typename TOrthogonal>
83struct EvTransitionDestroy : sc::event<EvTransitionDestroy<TSourceObject, TOrthogonal>>
84{
85};
86
87template <typename TSourceObject, typename TOrthogonal>
88struct EvTransitionOnConfigureSuccess
89: sc::event<EvTransitionOnConfigureSuccess<TSourceObject, TOrthogonal>>
90{
91};
92
93template <typename TSourceObject, typename TOrthogonal>
94struct EvTransitionOnConfigureFailure
95: sc::event<EvTransitionOnConfigureFailure<TSourceObject, TOrthogonal>>
96{
97};
98
99template <typename TSourceObject, typename TOrthogonal>
100struct EvTransitionOnConfigureError
101: sc::event<EvTransitionOnConfigureError<TSourceObject, TOrthogonal>>
102{
103};
104
105template <typename TSourceObject, typename TOrthogonal>
106struct EvTransitionOnActivateSuccess
107: sc::event<EvTransitionOnActivateSuccess<TSourceObject, TOrthogonal>>
108{
109};
110
111template <typename TSourceObject, typename TOrthogonal>
112struct EvTransitionOnActivateFailure
113: sc::event<EvTransitionOnActivateFailure<TSourceObject, TOrthogonal>>
114{
115};
116
117template <typename TSourceObject, typename TOrthogonal>
118struct EvTransitionOnActivateError
119: sc::event<EvTransitionOnActivateError<TSourceObject, TOrthogonal>>
120{
121};
122
123template <typename TSourceObject, typename TOrthogonal>
124struct EvTransitionOnDeactivateSuccess
125: sc::event<EvTransitionOnDeactivateSuccess<TSourceObject, TOrthogonal>>
126{
127};
128
129template <typename TSourceObject, typename TOrthogonal>
130struct EvTransitionOnDeactivateFailure
131: sc::event<EvTransitionOnDeactivateFailure<TSourceObject, TOrthogonal>>
132{
133};
134
135template <typename TSourceObject, typename TOrthogonal>
136struct EvTransitionOnDeactivateError
137: sc::event<EvTransitionOnDeactivateError<TSourceObject, TOrthogonal>>
138{
139};
140
141template <typename TSourceObject, typename TOrthogonal>
142struct EvTransitionOnCleanupSuccess
143: sc::event<EvTransitionOnCleanupSuccess<TSourceObject, TOrthogonal>>
144{
145};
146
147template <typename TSourceObject, typename TOrthogonal>
148struct EvTransitionOnCleanupFailure
149: sc::event<EvTransitionOnCleanupFailure<TSourceObject, TOrthogonal>>
150{
151};
152
153template <typename TSourceObject, typename TOrthogonal>
154struct EvTransitionOnCleanupError
155: sc::event<EvTransitionOnCleanupError<TSourceObject, TOrthogonal>>
156{
157};
158
159template <typename TSourceObject, typename TOrthogonal>
160struct EvTransitionOnShutdownSuccess
161: sc::event<EvTransitionOnShutdownSuccess<TSourceObject, TOrthogonal>>
162{
163};
164
165template <typename TSourceObject, typename TOrthogonal>
166struct EvTransitionOnShutdownFailure
167: sc::event<EvTransitionOnShutdownFailure<TSourceObject, TOrthogonal>>
168{
169};
170
171template <typename TSourceObject, typename TOrthogonal>
172struct EvTransitionOnShutdownError
173: sc::event<EvTransitionOnShutdownError<TSourceObject, TOrthogonal>>
174{
175};
176
177template <typename TSourceObject, typename TOrthogonal>
178struct EvTransitionOnErrorSuccess
179: sc::event<EvTransitionOnErrorSuccess<TSourceObject, TOrthogonal>>
180{
181};
182
183template <typename TSourceObject, typename TOrthogonal>
184struct EvTransitionOnErrorFailure
185: sc::event<EvTransitionOnErrorFailure<TSourceObject, TOrthogonal>>
186{
187};
188
189template <typename TSourceObject, typename TOrthogonal>
190struct EvTransitionOnErrorError : sc::event<EvTransitionOnErrorError<TSourceObject, TOrthogonal>>
191{
192};
193
195{
196public:
197 ClLifecycleNode(std::string nodeName);
198
199 virtual ~ClLifecycleNode();
200
201 void onInitialize() override;
202
203 // @brief execute this method to trigger a transition to some state
204 void changeState(uint8_t state);
205
206 // @brief execute this method to trigger the configure transition
207 void configure();
208
209 // @brief execute this method to trigger the activate transition
210 void activate();
211
212 // @brief execute this method to trigger the deactivate transition
213 void deactivate();
214
215 // @brief execute this method to trigger the cleanup transition
216 void cleanup();
217
218 // @brief execute this method to trigger the shutdown transition
219 void shutdown();
220
221 // @brief execute this method to trigger the destroy transition
222 void destroy();
223
227 template <typename TOrthogonal, typename TSourceObject>
229 {
230 // Create and register component with orthogonal
231 if (!eventMonitor_)
232 {
235 nodeName_);
236 }
237
238 // Configure component for this orthogonal
240 }
241
242private:
243 // Phase 2: Service clients (will be migrated to CpServiceClient components in future enhancement)
244 rclcpp::Client<lifecycle_msgs::srv::GetState>::SharedPtr client_get_state_;
245 rclcpp::Client<lifecycle_msgs::srv::ChangeState>::SharedPtr client_change_state_;
246
247 std::string nodeName_;
248
249 // Phase 3: Event monitor component
251 const std::string node_get_state_topic = "/get_state";
252 const std::string node_change_state_topic = "/change_state";
253
254 lifecycle_msgs::msg::TransitionEvent::SharedPtr lastTransitionEvent_;
255};
256
257} // namespace cl_lifecycle_node
rclcpp::Client< lifecycle_msgs::srv::ChangeState >::SharedPtr client_change_state_
void onStateOrthogonalAllocation()
Configure component for event posting during orthogonal allocation.
rclcpp::Client< lifecycle_msgs::srv::GetState >::SharedPtr client_get_state_
lifecycle_msgs::msg::TransitionEvent::SharedPtr lastTransitionEvent_
CpLifecycleEventMonitor * eventMonitor_
Component that monitors ROS2 lifecycle node transition events.
SmaccComponentType * createComponent(TArgs... targs)