SMACC2
sm_multi_stage_1.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#pragma once
16
17#include <rclcpp/rclcpp.hpp>
18#include <smacc2/smacc.hpp>
19
20// CLIENTS
22#include <ros_timer_client/cl_ros_timer.hpp>
23
24// ORTHOGONALS
29
30using namespace cl_ros_timer;
31using namespace cl_ros_publisher;
32using namespace cl_keyboard;
34
35//CLIENT BEHAVIORS
39
42
44
45//#include <ros_timer_client/client_behaviors/cb_ros_timer.hpp>
46#include <ros_timer_client/client_behaviors/cb_timer_countdown_once.hpp>
47
48//STATE REACTORS
50
51using namespace smacc2;
52using namespace smacc2::state_reactors;
53using namespace smacc2::default_events;
54
55namespace sm_multi_stage_1
56{
57//SUPERSTATES
59namespace mode_1_sequence_a
60{
71} // namespace mode_1_sequence_a
72
74namespace mode_2_sequence_a
75{
86} // namespace mode_2_sequence_a
87
89namespace mode_3_sequence_a
90{
101} // namespace mode_3_sequence_a
102
103class SsMode4SequenceA;
104namespace mode_4_sequence_a
105{
116} // namespace mode_4_sequence_a
117
118class SsMode4SequenceC;
119namespace mode_4_sequence_c
120{
131} // namespace mode_4_sequence_c
132
133class SsMode4SequenceD;
134namespace mode_4_sequence_d
135{
146} // namespace mode_4_sequence_d
147
148class SsMode5SequenceA;
149namespace mode_5_sequence_a
150{
161} // namespace mode_5_sequence_a
162
163
164class SsMode1SequenceB;
165namespace mode_1_sequence_b
166{
167//FORWARD DECLARATIONS OF ALL INNER STATES
178} // namespace mode_1_sequence_b
179
180class SsMode2SequenceB;
181
182namespace mode_2_sequence_b
183{
184//FORWARD DECLARATIONS OF ALL INNER STATES
195} // namespace mode_2_sequence_b
196
197class SsMode3SequenceB;
198
199namespace mode_3_sequence_b
200{
201//FORWARD DECLARATIONS OF ALL INNER STATES
212} // namespace mode_3_sequence_b
213
214class SsMode4SequenceB;
215
216namespace mode_4_sequence_b
217{
218//FORWARD DECLARATIONS OF ALL INNER STATES
229} // namespace mode_4_sequence_b
230
231class SsMode5SequenceB;
232
233namespace mode_5_sequence_b
234{
235//FORWARD DECLARATIONS OF ALL INNER STATES
246} // namespace mode_5_sequence_b
247
248//STATES
249class Mode1StObserve;
257
258class Mode2StObserve;
266
267class Mode3StObserve;
268class Mode4StObserve;
269class Mode5StObserve;
270
271
281class Mode4SequenceBLoop;
284
285
286//MODE STATES
287class MsMode1;
288class MsRecovery1;
289
290//MODE STATES
291class MsMode2;
292class MsRecovery2;
293
294class MsMode3;
295class MsMode4;
296class MsMode5;
297
298struct EvToDeep : sc::event<EvToDeep>
299{
300};
301struct EvFail : sc::event<EvFail>
302{
303};
304
305// STATE MACHINE
306struct SmMultiStage1 : public smacc2::SmaccStateMachineBase<SmMultiStage1, MsMode1>
307{
308 using SmaccStateMachineBase::SmaccStateMachineBase;
309
310 virtual void onInitialize() override
311 {
312 this->createOrthogonal<OrTimer>();
313 this->createOrthogonal<OrUpdatablePublisher>();
314 this->createOrthogonal<OrKeyboard>();
315 this->createOrthogonal<OrSubscriber>();
316 }
317};
318} // namespace sm_multi_stage_1
319
320// MODE STATES
328
329//STATES
337
345
351
354
360
366
372
375
381
382//ss_mode_1_sequence_a
393
394//ss_mode_2_sequence_a
405
406//ss_mode_3_sequence_a
417
418//ss_mode_4_sequence_a
429
430//ss_mode_4_sequence_c
441
442//ss_mode_4_sequence_d
453
454//ss_mode_5_sequence_a
465
466//ss_mode_1_sequence_b
477
478//ss_mode_2_sequence_b
489
490//ss_mode_3_sequence_b
501
502//ss_mode_4_sequence_b
513
514//ss_mode_5_seqence_b
virtual void onInitialize() override
this function should be implemented by the user to create the orthogonals