Full Code of reelrbtx/SMACC for AI

noetic-devel e5abc09c51b1 cached
1000 files
2.1 MB
617.6k tokens
780 symbols
1 requests
Download .txt
Showing preview only (2,460K chars total). Download the full file or copy to clipboard to get everything.
Repository: reelrbtx/SMACC
Branch: noetic-devel
Commit: e5abc09c51b1
Files: 1000
Total size: 2.1 MB

Directory structure:
gitextract_y9gdi5pk/

├── .codespell-ignore-words.txt
├── .github/
│   └── workflows/
│       ├── CI.yaml
│       ├── bloom_release.yml
│       ├── code_quality.yml
│       └── doxygen.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .vscode/
│   └── launch.json
├── LICENSE.txt
├── README.md
├── documentation/
│   ├── Dance_Bot FlowchartX.odp
│   ├── Dance_Bot FlowchartX.v2.odp
│   └── ReelSmacc.v2.odp
├── smacc/
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── include/
│   │   └── smacc/
│   │       ├── callback_counter_semaphore.h
│   │       ├── client_base_components/
│   │       │   ├── cp_ros_control_interface.h
│   │       │   └── cp_topic_subscriber.h
│   │       ├── client_bases/
│   │       │   ├── smacc_action_client.h
│   │       │   ├── smacc_action_client_base.h
│   │       │   ├── smacc_publisher_client.h
│   │       │   ├── smacc_service_client.h
│   │       │   ├── smacc_service_server_client.h
│   │       │   └── smacc_subscriber_client.h
│   │       ├── client_behavior_bases/
│   │       │   ├── cb_service_server_callback_base.h
│   │       │   └── cb_subscription_callback_base.h
│   │       ├── common.h
│   │       ├── component.h
│   │       ├── impl/
│   │       │   ├── smacc_asynchronous_client_behavior_impl.h
│   │       │   ├── smacc_client_behavior_impl.h
│   │       │   ├── smacc_client_impl.h
│   │       │   ├── smacc_component_impl.h
│   │       │   ├── smacc_event_generator_impl.h
│   │       │   ├── smacc_orthogonal_impl.h
│   │       │   ├── smacc_state_impl.h
│   │       │   ├── smacc_state_machine_impl.h
│   │       │   └── smacc_state_reactor_impl.h
│   │       ├── introspection/
│   │       │   ├── introspection.h
│   │       │   ├── smacc_state_info.h
│   │       │   ├── smacc_state_machine_info.h
│   │       │   ├── state_traits.h
│   │       │   └── string_type_walker.h
│   │       ├── smacc.h
│   │       ├── smacc_asynchronous_client_behavior.h
│   │       ├── smacc_client.h
│   │       ├── smacc_client_behavior.h
│   │       ├── smacc_client_behavior_base.h
│   │       ├── smacc_default_events.h
│   │       ├── smacc_event_generator.h
│   │       ├── smacc_fifo_scheduler.h
│   │       ├── smacc_fifo_worker.h
│   │       ├── smacc_orthogonal.h
│   │       ├── smacc_signal.h
│   │       ├── smacc_signal_detector.h
│   │       ├── smacc_state.h
│   │       ├── smacc_state_base.h
│   │       ├── smacc_state_machine.h
│   │       ├── smacc_state_machine_base.h
│   │       ├── smacc_state_reactor.h
│   │       ├── smacc_transition.h
│   │       ├── smacc_types.h
│   │       └── smacc_updatable.h
│   ├── package.xml
│   ├── rosdoc.yaml
│   ├── smacc_client_behavior_base.h
│   ├── src/
│   │   └── smacc/
│   │       ├── callback_counter_semaphore.cpp
│   │       ├── client.cpp
│   │       ├── client_bases/
│   │       │   └── smacc_action_client.cpp
│   │       ├── common.cpp
│   │       ├── components/
│   │       │   └── cp_ros_control_interface.cpp
│   │       ├── introspection/
│   │       │   ├── reflection.cpp
│   │       │   └── string_type_walker.cpp
│   │       ├── orthogonal.cpp
│   │       ├── signal_detector.cpp
│   │       ├── smacc_client_async_behavior.cpp
│   │       ├── smacc_client_behavior.cpp
│   │       ├── smacc_client_behavior_base.cpp
│   │       ├── smacc_component.cpp
│   │       ├── smacc_event_generator.cpp
│   │       ├── smacc_state.cpp
│   │       ├── smacc_state_info.cpp
│   │       ├── smacc_state_machine.cpp
│   │       ├── smacc_state_machine_info.cpp
│   │       ├── smacc_updatable.cpp
│   │       └── state_reactor.cpp
│   └── test/
│       └── type_info_unit_test.cpp
├── smacc_ci/
│   ├── .gitignore
│   ├── Doxyfile
│   ├── docker/
│   │   ├── ros_kinetic_ubuntu_16.04/
│   │   │   ├── Dockerfile
│   │   │   ├── build.sh
│   │   │   ├── examples/
│   │   │   │   └── run_sm_atomic.sh
│   │   │   └── run_bash.sh
│   │   ├── ros_melodic_ubuntu_18.04/
│   │   │   ├── Dockerfile
│   │   │   ├── build.sh
│   │   │   ├── examples/
│   │   │   │   └── run_sm_atomic.sh
│   │   │   └── run_bash.sh
│   │   └── ros_noetic_ubuntu_20.04/
│   │       ├── Dockerfile
│   │       ├── build.sh
│   │       ├── examples/
│   │       │   └── run_sm_atomic.sh
│   │       └── run_bash.sh
│   ├── gh-pages.sh
│   ├── packagecloud_docker/
│   │   ├── .gitignore
│   │   ├── Dockerfile
│   │   ├── build_ubuntu_16_04_kinetic.sh
│   │   ├── build_ubuntu_18_04_melodic.sh
│   │   ├── build_ubuntu_20_04_noetic.sh
│   │   ├── generate_debs.py
│   │   ├── generate_smacc_debs.bash
│   │   ├── local_build_18_04_melodic.sh
│   │   └── local_build_20_04_noetic.sh
│   ├── rosdep_kinetic.yaml
│   ├── rosdep_melodic.yaml
│   └── rosdep_noetic.yaml
├── smacc_client_library/
│   ├── battery_monitor_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── battery_monitor_client/
│   │   │       └── cl_battery_monitor.h
│   │   ├── package.xml
│   │   ├── server/
│   │   │   └── battery_monitor_node.py
│   │   └── src/
│   │       └── battery_monitor_client/
│   │           └── cl_battery_monitor.cpp
│   ├── keyboard_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── keyboard_client/
│   │   │       ├── cl_keyboard.h
│   │   │       └── client_behaviors/
│   │   │           └── cb_default_keyboard_behavior.h
│   │   ├── package.xml
│   │   ├── server/
│   │   │   └── keyboard_server_node/
│   │   │       └── keyboard_server_node.py
│   │   └── src/
│   │       └── keyboard_client/
│   │           └── cl_keyboard.cpp
│   ├── move_base_z_client/
│   │   ├── README.md
│   │   ├── custom_planners/
│   │   │   ├── backward_global_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── bgp_plugin.xml
│   │   │   │   ├── include/
│   │   │   │   │   └── backward_global_planner/
│   │   │   │   │       └── backward_global_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── backward_global_planner.cpp
│   │   │   ├── backward_local_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── blp_plugin.xml
│   │   │   │   ├── cfg/
│   │   │   │   │   └── BackwardLocalPlanner.cfg
│   │   │   │   ├── include/
│   │   │   │   │   └── backward_local_planner/
│   │   │   │   │       └── backward_local_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── backward_local_planner.cpp
│   │   │   ├── forward_global_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── fgp_plugin.xml
│   │   │   │   ├── include/
│   │   │   │   │   └── forward_global_planner/
│   │   │   │   │       ├── forward_global_planner.h
│   │   │   │   │       └── move_base_z_client_tools.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       ├── forward_global_planner.cpp
│   │   │   │       └── path_tools.cpp
│   │   │   ├── forward_local_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── cfg/
│   │   │   │   │   └── ForwardLocalPlanner.cfg
│   │   │   │   ├── flp_plugin.xml
│   │   │   │   ├── include/
│   │   │   │   │   └── forward_local_planner/
│   │   │   │   │       └── forward_local_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── forward_local_planner.cpp
│   │   │   ├── pure_spinning_local_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── cfg/
│   │   │   │   │   └── PureSpinningLocalPlanner.cfg
│   │   │   │   ├── config/
│   │   │   │   │   └── pure_spinning_local_planner.yaml
│   │   │   │   ├── include/
│   │   │   │   │   └── pure_spinning_local_planner/
│   │   │   │   │       └── pure_spinning_local_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── pslp_plugin.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── pure_spinning_local_planner/
│   │   │   │           └── pure_spinning_local_planner.cpp
│   │   │   └── undo_path_global_planner/
│   │   │       ├── CHANGELOG.rst
│   │   │       ├── CMakeLists.txt
│   │   │       ├── include/
│   │   │       │   └── undo_path_global_planner/
│   │   │       │       └── undo_path_global_planner.h
│   │   │       ├── package.xml
│   │   │       ├── rosdoc.yaml
│   │   │       ├── src/
│   │   │       │   └── undo_path_global_planner.cpp
│   │   │       └── upgp_plugin.xml
│   │   └── move_base_z_client_plugin/
│   │       ├── CHANGELOG.rst
│   │       ├── CMakeLists.txt
│   │       ├── action/
│   │       │   └── OdomTracker.action
│   │       ├── cfg/
│   │       │   └── OdomTracker.cfg
│   │       ├── include/
│   │       │   └── move_base_z_client_plugin/
│   │       │       ├── client_behaviors/
│   │       │       │   ├── cb_absolute_rotate.h
│   │       │       │   ├── cb_move_base_client_behavior_base.h
│   │       │       │   ├── cb_navigate_backwards.h
│   │       │       │   ├── cb_navigate_forward.h
│   │       │       │   ├── cb_navigate_global_position.h
│   │       │       │   ├── cb_navigate_next_waypoint.h
│   │       │       │   ├── cb_rotate.h
│   │       │       │   ├── cb_undo_path_backwards.h
│   │       │       │   └── cb_undo_path_backwards2.h
│   │       │       ├── client_behaviors.h
│   │       │       ├── components/
│   │       │       │   ├── costmap_switch/
│   │       │       │   │   └── cp_costmap_switch.h
│   │       │       │   ├── odom_tracker/
│   │       │       │   │   └── odom_tracker.h
│   │       │       │   ├── planner_switcher/
│   │       │       │   │   └── planner_switcher.h
│   │       │       │   ├── pose/
│   │       │       │   │   └── cp_pose.h
│   │       │       │   └── waypoints_navigator/
│   │       │       │       ├── waypoints_event_dispatcher.h
│   │       │       │       └── waypoints_navigator.h
│   │       │       └── move_base_z_client_plugin.h
│   │       ├── package.xml
│   │       ├── rosdoc.yaml
│   │       └── src/
│   │           ├── client_behaviors/
│   │           │   ├── cb_absolute_rotate.cpp
│   │           │   ├── cb_move_base_client_behavior_base.cpp
│   │           │   ├── cb_navigate_backward.cpp
│   │           │   ├── cb_navigate_forward.cpp
│   │           │   ├── cb_navigate_global_position.cpp
│   │           │   ├── cb_navigate_next_waypoint.cpp
│   │           │   ├── cb_rotate.cpp
│   │           │   ├── cb_undo_path_backwards.cpp
│   │           │   └── cb_undo_path_backwards2.cpp
│   │           ├── components/
│   │           │   ├── costmap_switch/
│   │           │   │   └── cp_costmap_switch.cpp
│   │           │   ├── odom_tracker/
│   │           │   │   ├── odom_tracker.cpp
│   │           │   │   └── odom_tracker_node.cpp
│   │           │   ├── planner_switcher/
│   │           │   │   └── planner_switcher.cpp
│   │           │   ├── pose/
│   │           │   │   └── cp_pose.cpp
│   │           │   └── waypoints_navigator/
│   │           │       ├── waypoints_event_dispatcher.cpp
│   │           │       └── waypoints_navigator.cpp
│   │           └── move_base_z_client_plugin.cpp
│   ├── move_eye/
│   │   └── move_eye_client/
│   │       ├── CHANGELOG.rst
│   │       ├── CMakeLists.txt
│   │       ├── package.xml
│   │       └── src/
│   │           └── cl_move_eye.cpp
│   ├── move_group_interface_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── move_group_interface_client/
│   │   │       ├── cl_movegroup.h
│   │   │       ├── client_behaviors/
│   │   │       │   ├── cb_attach_object.h
│   │   │       │   ├── cb_circular_pivot_motion.h
│   │   │       │   ├── cb_detach_object.h
│   │   │       │   ├── cb_end_effector_rotate.h
│   │   │       │   ├── cb_execute_last_trajectory.h
│   │   │       │   ├── cb_move_cartesian_relative.h
│   │   │       │   ├── cb_move_cartesian_relative2.h
│   │   │       │   ├── cb_move_end_effector.h
│   │   │       │   ├── cb_move_end_effector_relative.h
│   │   │       │   ├── cb_move_end_effector_trajectory.h
│   │   │       │   ├── cb_move_joints.h
│   │   │       │   ├── cb_move_joints_relative.h
│   │   │       │   ├── cb_move_known_state.h
│   │   │       │   ├── cb_move_last_trajectory_initial_state.h
│   │   │       │   ├── cb_move_named_target.h
│   │   │       │   ├── cb_pouring_motion.h
│   │   │       │   └── cb_undo_last_trajectory.h
│   │   │       ├── client_behaviors.h
│   │   │       └── components/
│   │   │           ├── cp_grasping_objects.h
│   │   │           ├── cp_tf_listener.h
│   │   │           └── cp_trajectory_history.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── move_group_interface_client/
│   │           ├── cl_movegroup.cpp
│   │           ├── client_behaviors/
│   │           │   ├── cb_attach_object.cpp
│   │           │   ├── cb_circular_pivot_motion.cpp
│   │           │   ├── cb_detach_object.cpp
│   │           │   ├── cb_end_effector_rotate.cpp
│   │           │   ├── cb_execute_last_trajectory.cpp
│   │           │   ├── cb_move_cartesian_relative.cpp
│   │           │   ├── cb_move_end_effector.cpp
│   │           │   ├── cb_move_end_effector_relative.cpp
│   │           │   ├── cb_move_end_effector_trajectory.cpp
│   │           │   ├── cb_move_joints.cpp
│   │           │   ├── cb_move_known_state.cpp
│   │           │   ├── cb_move_last_trajectory_initial_state.cpp
│   │           │   ├── cb_move_named_target.cpp
│   │           │   ├── cb_pouring_motion.cpp
│   │           │   └── cb_undo_last_trajectory.cpp
│   │           └── components/
│   │               ├── cp_grasping_objects.cpp
│   │               └── cp_trajectory_history.cpp
│   ├── multirole_sensor_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── multirole_sensor_client/
│   │   │       ├── cl_multirole_sensor.h
│   │   │       └── client_behaviors/
│   │   │           └── cb_default_multirole_sensor_behavior.h
│   │   ├── package.xml
│   │   └── rosdoc.yaml
│   ├── ros_publisher_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── ros_publisher_client/
│   │   │       ├── cl_ros_publisher.h
│   │   │       └── client_behaviors/
│   │   │           ├── cb_default_publish_loop.h
│   │   │           ├── cb_muted_behavior.h
│   │   │           └── cb_publish_once.h
│   │   └── package.xml
│   └── ros_timer_client/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── include/
│       │   └── ros_timer_client/
│       │       ├── cl_ros_timer.h
│       │       └── client_behaviors/
│       │           ├── cb_ros_timer.h
│       │           ├── cb_timer_countdown_loop.h
│       │           └── cb_timer_countdown_once.h
│       ├── package.xml
│       └── src/
│           └── ros_timer_client/
│               ├── cb_timer.cpp
│               ├── cb_timer_countdown_loop.cpp
│               ├── cb_timer_countdown_once.cpp
│               └── timer_client.cpp
├── smacc_diagnostics/
│   ├── readme.md
│   ├── scripts/
│   │   └── regex_template.py
│   ├── smacc_runtime_test/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── config/
│   │   │   └── state_machine_config_test_file.yaml
│   │   ├── launch/
│   │   │   └── meta_test.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── smacc_runtime_test_node.cpp
│   └── smacc_rviz_plugin/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── media/
│       │   └── .empty
│       ├── package.xml
│       ├── plugin_description.xml
│       └── src/
│           ├── imu_visual.cpp
│           ├── imu_visual.h
│           ├── smacc_rviz_display.cpp
│           └── smacc_rviz_display.h
├── smacc_event_generator_library/
│   ├── eg_conditional_generator/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── eg_conditional_generator/
│   │   │       └── eg_conditional_generator.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── eg_conditional_generator/
│   │           └── eg_conditional_generator.cpp
│   └── eg_random_generator/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── eg_random_generator/
│       │       └── eg_random_generator.h
│       ├── package.xml
│       └── src/
│           └── eg_random_generator/
│               └── eg_random_generator.cpp
├── smacc_msgs/
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── msg/
│   │   ├── SmaccContainerInitialStatusCmd.msg
│   │   ├── SmaccContainerStatus.msg
│   │   ├── SmaccContainerStructure.msg
│   │   ├── SmaccEvent.msg
│   │   ├── SmaccEventGenerator.msg
│   │   ├── SmaccOrthogonal.msg
│   │   ├── SmaccSMCommand.msg
│   │   ├── SmaccState.msg
│   │   ├── SmaccStateMachine.msg
│   │   ├── SmaccStateReactor.msg
│   │   ├── SmaccStatus.msg
│   │   ├── SmaccTransition.msg
│   │   └── SmaccTransitionLogEntry.msg
│   ├── package.xml
│   └── srv/
│       └── SmaccGetTransitionHistory.srv
├── smacc_sm_reference_library/
│   ├── sm_atomic/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── sm_atomic_config.yaml
│   │   │   └── sm_atomic_test.yaml
│   │   ├── include/
│   │   │   └── sm_atomic/
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic.launch
│   │   ├── package.xml
│   │   ├── src/
│   │   │   └── sm_atomic_node.cpp
│   │   └── test/
│   │       └── sm_atomic.test
│   ├── sm_atomic_cb/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_atomic_cb_config.yaml
│   │   ├── include/
│   │   │   └── sm_atomic_cb/
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic_cb.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic_cb.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_atomic_cb_node.cpp
│   ├── sm_atomic_mode_states/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── sm_atomic_config.yaml
│   │   │   └── sm_atomic_test.yaml
│   │   ├── include/
│   │   │   └── sm_atomic_mode_states/
│   │   │       ├── client_behaviors/
│   │   │       │   └── cb_updatable_test.h
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic_mode_states.h
│   │   │       └── states/
│   │   │           ├── ms_state_1.h
│   │   │           ├── ms_state_2.h
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic_mode_states.launch
│   │   ├── package.xml
│   │   ├── src/
│   │   │   └── sm_atomic_node.cpp
│   │   └── test/
│   │       └── sm_atomic.test
│   ├── sm_atomic_services/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── sm_atomic_services_config.yaml
│   │   │   └── sm_atomic_services_test.yaml
│   │   ├── include/
│   │   │   └── sm_atomic_services/
│   │   │       ├── clients/
│   │   │       │   ├── cl_service_client.h
│   │   │       │   ├── cl_service_server.h
│   │   │       │   └── client_behaviors/
│   │   │       │       └── cb_service_server.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_services.h
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic_services.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic_services.launch
│   │   ├── package.xml
│   │   ├── src/
│   │   │   └── sm_atomic_services_node.cpp
│   │   └── test/
│   │       └── sm_atomic_services.test
│   ├── sm_calendar_week/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_calendar_week_config.yaml
│   │   ├── include/
│   │   │   └── sm_calendar_week/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_weekend.h
│   │   │       │   └── ms_workweek.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_calendar_week.h
│   │   │       └── states/
│   │   │           ├── st_friday.h
│   │   │           ├── st_monday.h
│   │   │           ├── st_saturday.h
│   │   │           ├── st_sunday.h
│   │   │           ├── st_thursday.h
│   │   │           ├── st_tuesday.h
│   │   │           └── st_wednesday.h
│   │   ├── launch/
│   │   │   └── sm_calendar_week.launch
│   │   ├── package.xml
│   │   ├── package_REMOTE_32590.xml
│   │   └── src/
│   │       └── sm_calendar_week_node.cpp
│   ├── sm_dance_bot/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── rosconsole.config
│   │   │   └── sm_dance_bot_config.yaml
│   │   ├── docs/
│   │   │   └── Global Transition Rules.txt
│   │   ├── include/
│   │   │   └── sm_dance_bot/
│   │   │       ├── clients/
│   │   │       │   ├── cl_led/
│   │   │       │   │   ├── cl_led.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       ├── cb_led_off.h
│   │   │       │   │       └── cb_led_on.h
│   │   │       │   ├── cl_lidar/
│   │   │       │   │   ├── cl_lidar.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_lidar_sensor.h
│   │   │       │   ├── cl_service3/
│   │   │       │   │   ├── cl_service3.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_service3.h
│   │   │       │   ├── cl_string_publisher/
│   │   │       │   │   ├── cl_string_publisher.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_string_publisher.h
│   │   │       │   └── cl_temperature_sensor/
│   │   │       │       ├── cl_temperature_sensor.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_custom_condition_temperature_sensor.h
│   │   │       ├── modestates/
│   │   │       │   ├── ms_dance_bot_recovery_mode.h
│   │   │       │   └── ms_dance_bot_run_mode.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_led.h
│   │   │       │   ├── or_navigation.h
│   │   │       │   ├── or_obstacle_perception.h
│   │   │       │   ├── or_service3.h
│   │   │       │   ├── or_string_publisher.h
│   │   │       │   ├── or_temperature_sensor.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_dance_bot.h
│   │   │       ├── states/
│   │   │       │   ├── f_pattern_states/
│   │   │       │   │   ├── sti_fpattern_forward_1.h
│   │   │       │   │   ├── sti_fpattern_forward_2.h
│   │   │       │   │   ├── sti_fpattern_loop_start.h
│   │   │       │   │   ├── sti_fpattern_return_1.h
│   │   │       │   │   ├── sti_fpattern_rotate_1.h
│   │   │       │   │   └── sti_fpattern_rotate_2.h
│   │   │       │   ├── radial_motion_states/
│   │   │       │   │   ├── sti_radial_end_point.h
│   │   │       │   │   ├── sti_radial_loop_start.h
│   │   │       │   │   ├── sti_radial_return.h
│   │   │       │   │   └── sti_radial_rotate.h
│   │   │       │   ├── s_pattern_states/
│   │   │       │   │   ├── sti_spattern_forward_1.h
│   │   │       │   │   ├── sti_spattern_forward_2.h
│   │   │       │   │   ├── sti_spattern_forward_3.h
│   │   │       │   │   ├── sti_spattern_forward_4.h
│   │   │       │   │   ├── sti_spattern_loop_start.h
│   │   │       │   │   ├── sti_spattern_rotate_1.h
│   │   │       │   │   ├── sti_spattern_rotate_2.h
│   │   │       │   │   ├── sti_spattern_rotate_3.h
│   │   │       │   │   └── sti_spattern_rotate_4.h
│   │   │       │   ├── st_acquire_sensors.h
│   │   │       │   ├── st_event_count_down.h
│   │   │       │   ├── st_navigate_forward_1.h
│   │   │       │   ├── st_navigate_forward_2.h
│   │   │       │   ├── st_navigate_reverse_1.h
│   │   │       │   ├── st_navigate_reverse_2.h
│   │   │       │   ├── st_navigate_reverse_3.h
│   │   │       │   ├── st_navigate_to_waypoint_1.h
│   │   │       │   ├── st_navigate_to_waypoints_x.h
│   │   │       │   ├── st_rotate_degrees_1.h
│   │   │       │   ├── st_rotate_degrees_2.h
│   │   │       │   ├── st_rotate_degrees_3.h
│   │   │       │   ├── st_rotate_degrees_4.h
│   │   │       │   ├── st_rotate_degrees_5.h
│   │   │       │   └── st_rotate_degrees_6.h
│   │   │       └── superstates/
│   │   │           ├── ss_f_pattern_1.h
│   │   │           ├── ss_radial_pattern_1.h
│   │   │           ├── ss_radial_pattern_2.h
│   │   │           ├── ss_radial_pattern_3.h
│   │   │           └── ss_s_pattern_1.h
│   │   ├── launch/
│   │   │   ├── readme.md
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_dance_bot.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   ├── action_server_node_3/
│   │   │   │   └── src/
│   │   │   │       └── action_server_node_3.cpp
│   │   │   ├── led_action_server/
│   │   │   │   ├── action/
│   │   │   │   │   └── LEDControl.action
│   │   │   │   └── src/
│   │   │   │       └── led_action_server_node.cpp
│   │   │   ├── lidar_node/
│   │   │   │   └── src/
│   │   │   │       └── lidar_node.cpp
│   │   │   ├── service_node_3/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── service_node_3.py
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   ├── src/
│   │   │   ├── clients/
│   │   │   │   └── cl_led/
│   │   │   │       └── cl_led.cpp
│   │   │   └── sm_dance_bot.cpp
│   │   └── urdf/
│   │       └── empty.xacro
│   ├── sm_dance_bot_2/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── rosconsole.config
│   │   │   └── sm_dance_bot_2_config.yaml
│   │   ├── docs/
│   │   │   ├── Global Transition Rules.txt
│   │   │   └── StateChart - sm_dance_bot.odp
│   │   ├── include/
│   │   │   └── sm_dance_bot_2/
│   │   │       ├── clients/
│   │   │       │   ├── cl_led/
│   │   │       │   │   ├── cl_led.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       ├── cb_led_off.h
│   │   │       │   │       └── cb_led_on.h
│   │   │       │   ├── cl_lidar/
│   │   │       │   │   ├── cl_lidar.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_lidar_sensor.h
│   │   │       │   ├── cl_service3/
│   │   │       │   │   ├── cl_service3.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_service3.h
│   │   │       │   ├── cl_string_publisher/
│   │   │       │   │   ├── cl_string_publisher.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_string_publisher.h
│   │   │       │   └── cl_temperature_sensor/
│   │   │       │       ├── cl_temperature_sensor.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_custom_condition_temperature_sensor.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_led.h
│   │   │       │   ├── or_navigation.h
│   │   │       │   ├── or_obstacle_perception.h
│   │   │       │   ├── or_service3.h
│   │   │       │   ├── or_string_publisher.h
│   │   │       │   ├── or_temperature_sensor.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_dance_bot_2.h
│   │   │       └── states/
│   │   │           ├── ms_dance_bot_recovery_mode/
│   │   │           │   └── ms_dance_bot_recovery_mode.h
│   │   │           └── ms_dance_bot_run_mode/
│   │   │               ├── f_pattern_states/
│   │   │               │   ├── ss_f_pattern_1.h
│   │   │               │   ├── sti_fpattern_forward_1.h
│   │   │               │   ├── sti_fpattern_forward_2.h
│   │   │               │   ├── sti_fpattern_loop_start.h
│   │   │               │   ├── sti_fpattern_return_1.h
│   │   │               │   ├── sti_fpattern_rotate_1.h
│   │   │               │   └── sti_fpattern_rotate_2.h
│   │   │               ├── ms_dance_bot_run_mode.h
│   │   │               ├── radial_motion_states/
│   │   │               │   ├── ss_radial_pattern_1.h
│   │   │               │   ├── ss_radial_pattern_2.h
│   │   │               │   ├── ss_radial_pattern_3.h
│   │   │               │   ├── sti_radial_end_point.h
│   │   │               │   ├── sti_radial_loop_start.h
│   │   │               │   ├── sti_radial_return.h
│   │   │               │   └── sti_radial_rotate.h
│   │   │               ├── s_pattern_states/
│   │   │               │   ├── ss_s_pattern_1.h
│   │   │               │   ├── sti_spattern_forward_1.h
│   │   │               │   ├── sti_spattern_forward_2.h
│   │   │               │   ├── sti_spattern_forward_3.h
│   │   │               │   ├── sti_spattern_forward_4.h
│   │   │               │   ├── sti_spattern_loop_start.h
│   │   │               │   ├── sti_spattern_rotate_1.h
│   │   │               │   ├── sti_spattern_rotate_2.h
│   │   │               │   ├── sti_spattern_rotate_3.h
│   │   │               │   └── sti_spattern_rotate_4.h
│   │   │               ├── st_acquire_sensors.h
│   │   │               ├── st_event_count_down.h
│   │   │               ├── st_navigate_forward_1.h
│   │   │               ├── st_navigate_forward_2.h
│   │   │               ├── st_navigate_reverse_1.h
│   │   │               ├── st_navigate_reverse_2.h
│   │   │               ├── st_navigate_reverse_3.h
│   │   │               ├── st_navigate_to_waypoint_1.h
│   │   │               ├── st_navigate_to_waypoints_x.h
│   │   │               ├── st_rotate_degrees_1.h
│   │   │               ├── st_rotate_degrees_2.h
│   │   │               ├── st_rotate_degrees_3.h
│   │   │               ├── st_rotate_degrees_4.h
│   │   │               ├── st_rotate_degrees_5.h
│   │   │               └── st_rotate_degrees_6.h
│   │   ├── launch/
│   │   │   ├── readme.md
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_dance_bot_2.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   ├── action_server_node_3/
│   │   │   │   └── src/
│   │   │   │       └── action_server_node_3.cpp
│   │   │   ├── led_action_server/
│   │   │   │   ├── action/
│   │   │   │   │   └── LEDControl.action
│   │   │   │   └── src/
│   │   │   │       └── led_action_server_node.cpp
│   │   │   ├── lidar_node/
│   │   │   │   └── src/
│   │   │   │       └── lidar_node.cpp
│   │   │   ├── service_node_3/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── service_node_3.py
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   ├── src/
│   │   │   ├── clients/
│   │   │   │   └── cl_led/
│   │   │   │       └── cl_led.cpp
│   │   │   └── sm_dance_bot_2.cpp
│   │   └── urdf/
│   │       └── empty.xacro
│   ├── sm_dance_bot_strikes_back/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── rosconsole.config
│   │   │   └── sm_dancebot_strikes_back_config.yaml
│   │   ├── include/
│   │   │   └── sm_dance_bot_strikes_back/
│   │   │       ├── clients/
│   │   │       │   ├── cl_led/
│   │   │       │   │   ├── cl_led.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       ├── cb_led_off.h
│   │   │       │   │       └── cb_led_on.h
│   │   │       │   ├── cl_lidar/
│   │   │       │   │   ├── cl_lidar.h
│   │   │       │   │   ├── client_behaviors/
│   │   │       │   │   │   └── cb_lidar_sensor.h
│   │   │       │   │   └── components/
│   │   │       │   │       └── cp_lidar_data.h
│   │   │       │   ├── cl_service3/
│   │   │       │   │   ├── cl_service3.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_service3.h
│   │   │       │   ├── cl_string_publisher/
│   │   │       │   │   ├── cl_string_publisher.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_string_publisher.h
│   │   │       │   └── cl_temperature_sensor/
│   │   │       │       ├── cl_temperature_sensor.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_custom_condition_temperature_sensor.h
│   │   │       ├── modestates/
│   │   │       │   ├── ms_dance_bot_recovery_mode.h
│   │   │       │   └── ms_dance_bot_run_mode.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_led.h
│   │   │       │   ├── or_navigation.h
│   │   │       │   ├── or_obstacle_perception.h
│   │   │       │   ├── or_service3.h
│   │   │       │   ├── or_string_publisher.h
│   │   │       │   ├── or_temperature_sensor.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_dance_bot_strikes_back.h
│   │   │       ├── states/
│   │   │       │   ├── f_pattern_states/
│   │   │       │   │   ├── sti_fpattern_forward_1.h
│   │   │       │   │   ├── sti_fpattern_forward_2.h
│   │   │       │   │   ├── sti_fpattern_loop_start.h
│   │   │       │   │   ├── sti_fpattern_return_1.h
│   │   │       │   │   ├── sti_fpattern_rotate_1.h
│   │   │       │   │   └── sti_fpattern_rotate_2.h
│   │   │       │   ├── radial_motion_states/
│   │   │       │   │   ├── sti_radial_end_point.h
│   │   │       │   │   ├── sti_radial_loop_start.h
│   │   │       │   │   ├── sti_radial_return.h
│   │   │       │   │   └── sti_radial_rotate.h
│   │   │       │   ├── s_pattern_states/
│   │   │       │   │   ├── sti_spattern_forward_1.h
│   │   │       │   │   ├── sti_spattern_forward_2.h
│   │   │       │   │   ├── sti_spattern_forward_3.h
│   │   │       │   │   ├── sti_spattern_forward_4.h
│   │   │       │   │   ├── sti_spattern_loop_start.h
│   │   │       │   │   ├── sti_spattern_rotate_1.h
│   │   │       │   │   ├── sti_spattern_rotate_2.h
│   │   │       │   │   ├── sti_spattern_rotate_3.h
│   │   │       │   │   └── sti_spattern_rotate_4.h
│   │   │       │   ├── st_acquire_sensors.h
│   │   │       │   ├── st_event_count_down.h
│   │   │       │   ├── st_fpattern_prealignment.h
│   │   │       │   ├── st_navigate_to_waypoints_x.h
│   │   │       │   └── st_spattern_prealignment.h
│   │   │       └── superstates/
│   │   │           ├── ss_f_pattern_1.h
│   │   │           ├── ss_radial_pattern_1.h
│   │   │           ├── ss_radial_pattern_2.h
│   │   │           ├── ss_radial_pattern_3.h
│   │   │           └── ss_s_pattern_1.h
│   │   ├── launch/
│   │   │   ├── readme.md
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_dance_bot_strikes_back.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   ├── action_server_node_3/
│   │   │   │   └── src/
│   │   │   │       └── action_server_node_3.cpp
│   │   │   ├── led_action_server/
│   │   │   │   ├── action/
│   │   │   │   │   └── LEDControl.action
│   │   │   │   └── src/
│   │   │   │       └── led_action_server_node.cpp
│   │   │   ├── lidar_node/
│   │   │   │   └── src/
│   │   │   │       └── lidar_node.cpp
│   │   │   ├── service_node_3/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── service_node_3.py
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   ├── src/
│   │   │   ├── clients/
│   │   │   │   └── cl_led/
│   │   │   │       └── cl_led.cpp
│   │   │   └── sm_dance_bot_strikes_back.cpp
│   │   └── urdf/
│   │       └── empty.xacro
│   ├── sm_ferrari/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_three_some_config.yaml
│   │   ├── include/
│   │   │   └── sm_ferrari/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_my_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_recover.h
│   │   │       │   └── ms_run.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_ferrari.h
│   │   │       ├── states/
│   │   │       │   ├── inner_states/
│   │   │       │   │   ├── sti_state_1.h
│   │   │       │   │   ├── sti_state_2.h
│   │   │       │   │   └── sti_state_3.h
│   │   │       │   ├── st_state_1.h
│   │   │       │   ├── st_state_2.h
│   │   │       │   ├── st_state_3.h
│   │   │       │   └── st_state_4.h
│   │   │       └── superstates/
│   │   │           ├── ss_superstate_1.h
│   │   │           └── ss_superstate_2.h
│   │   ├── launch/
│   │   │   └── sm_ferrari.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   └── src/
│   │       └── sm_ferrari_node.cpp
│   ├── sm_packml/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_packml_config.yaml
│   │   ├── include/
│   │   │   └── sm_packml/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_run.h
│   │   │       │   └── ms_stop.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_packml.h
│   │   │       └── states/
│   │   │           ├── st_aborted.h
│   │   │           ├── st_aborting.h
│   │   │           ├── st_clearing.h
│   │   │           ├── st_complete.h
│   │   │           ├── st_completing.h
│   │   │           ├── st_execute.h
│   │   │           ├── st_held.h
│   │   │           ├── st_holding.h
│   │   │           ├── st_idle.h
│   │   │           ├── st_resetting.h
│   │   │           ├── st_starting.h
│   │   │           ├── st_stopped.h
│   │   │           ├── st_stopping.h
│   │   │           ├── st_suspended.h
│   │   │           ├── st_suspending.h
│   │   │           ├── st_unholding.h
│   │   │           └── st_unsuspending.h
│   │   ├── launch/
│   │   │   └── sm_packML.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_packml_node.cpp
│   ├── sm_respira_1/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_respira_1_config.yaml
│   │   ├── include/
│   │   │   └── sm_respira_1/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_calibration.h
│   │   │       │   ├── ms_leaky_lung.h
│   │   │       │   ├── ms_patient_obstruction.h
│   │   │       │   ├── ms_run.h
│   │   │       │   └── ms_shutdown.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_respira_1.h
│   │   │       ├── states/
│   │   │       │   ├── ac_cycle_inner_states/
│   │   │       │   │   ├── sti_ac_cycle_dwell.h
│   │   │       │   │   ├── sti_ac_cycle_expire.h
│   │   │       │   │   ├── sti_ac_cycle_inspire.h
│   │   │       │   │   ├── sti_ac_cycle_loop.h
│   │   │       │   │   └── sti_ac_cycle_plateau.h
│   │   │       │   ├── cmv_cycle_inner_states/
│   │   │       │   │   ├── sti_cmv_cycle_dwell.h
│   │   │       │   │   ├── sti_cmv_cycle_expire.h
│   │   │       │   │   ├── sti_cmv_cycle_inspire.h
│   │   │       │   │   ├── sti_cmv_cycle_loop.h
│   │   │       │   │   └── sti_cmv_cycle_plateau.h
│   │   │       │   ├── ms_calibration_inner_states/
│   │   │       │   │   └── st_calibration_step_1.h
│   │   │       │   ├── ms_leaky_lung_inner_states/
│   │   │       │   │   ├── st_leaky_lung_step_1.h
│   │   │       │   │   ├── st_leaky_lung_step_2.h
│   │   │       │   │   └── st_leaky_lung_step_3.h
│   │   │       │   ├── ms_patient_obstruction_inner_states/
│   │   │       │   │   ├── st_patient_obstruction_step_1.h
│   │   │       │   │   └── st_patient_obstruction_step_2.h
│   │   │       │   ├── ms_shutdown_inner_states/
│   │   │       │   │   └── st_system_shutdown.h
│   │   │       │   ├── pc_cycle_inner_states/
│   │   │       │   │   ├── sti_pc_cycle_dwell.h
│   │   │       │   │   ├── sti_pc_cycle_expire.h
│   │   │       │   │   ├── sti_pc_cycle_inspire.h
│   │   │       │   │   ├── sti_pc_cycle_loop.h
│   │   │       │   │   └── sti_pc_cycle_plateau.h
│   │   │       │   ├── ps_cycle_inner_states/
│   │   │       │   │   ├── sti_ps_cycle_dwell.h
│   │   │       │   │   ├── sti_ps_cycle_expire.h
│   │   │       │   │   ├── sti_ps_cycle_inspire.h
│   │   │       │   │   ├── sti_ps_cycle_loop.h
│   │   │       │   │   └── sti_ps_cycle_plateau.h
│   │   │       │   └── st_observe.h
│   │   │       └── superstates/
│   │   │           ├── ss_ac_cycle.h
│   │   │           ├── ss_cmv_cycle.h
│   │   │           ├── ss_pc_cycle.h
│   │   │           └── ss_ps_cycle.h
│   │   ├── launch/
│   │   │   └── sm_respira_1.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_respira_1_node.cpp
│   ├── sm_ridgeback_barrel_search_1/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── radial_motion_sm_config.yaml
│   │   │   ├── rosconsole.config
│   │   │   └── sm_ridgeback_barrel_search_1_config.yaml
│   │   ├── include/
│   │   │   └── sm_ridgeback_barrel_search_1/
│   │   │       ├── clients/
│   │   │       │   └── opencv_perception_client/
│   │   │       │       └── cl_opencv_perception_client.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_navigation.h
│   │   │       │   └── or_perception.h
│   │   │       ├── sm_ridgeback_barrel_search_1.h
│   │   │       └── states/
│   │   │           ├── st_detect_items.h
│   │   │           └── st_navigate_to_waypoint_x.h
│   │   ├── launch/
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_ridgeback_barrel_search_1.launch
│   │   ├── msg/
│   │   │   └── DetectedBlobs.msg
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── opencv_perception_node/
│   │   │       ├── CMakeLists.txt2
│   │   │       └── opencv_perception_node.cpp
│   │   ├── simulation/
│   │   │   └── worlds/
│   │   │       └── opencv_world.sdf
│   │   ├── src/
│   │   │   └── sm_ridgeback_barrel_search_1.cpp
│   │   └── urdf/
│   │       ├── ridgeback.camera.gazebo
│   │       └── ridgeback.urdf.xacro
│   ├── sm_ridgeback_barrel_search_2/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── rosconsole.config
│   │   │   └── sm_ridgeback_barrel_search_2_config.yaml
│   │   ├── include/
│   │   │   └── sm_ridgeback_barrel_search_2/
│   │   │       ├── clients/
│   │   │       │   └── opencv_perception_client/
│   │   │       │       └── cl_opencv_perception_client.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_navigation.h
│   │   │       │   └── or_perception.h
│   │   │       ├── sm_ridgeback_barrel_search_2.h
│   │   │       └── states/
│   │   │           ├── st_detect_items.h
│   │   │           └── st_navigate_to_waypoint_x.h
│   │   ├── launch/
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_ridgeback_barrel_search_2.launch
│   │   ├── msg/
│   │   │   └── DetectedBlobs.msg
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── opencv_perception_node/
│   │   │       ├── CMakeLists.txt2
│   │   │       └── opencv_perception_node.cpp
│   │   ├── simulation/
│   │   │   └── worlds/
│   │   │       └── opencv_world.sdf
│   │   ├── src/
│   │   │   └── sm_ridgeback_barrel_search_2.cpp
│   │   └── urdf/
│   │       ├── ridgeback.camera.gazebo
│   │       └── ridgeback.urdf.xacro
│   ├── sm_ridgeback_floor_coverage_dynamic_1/
│   │   └── config/
│   │       └── move_base_client/
│   │           └── base_local_planner_params.yaml
│   ├── sm_ridgeback_floor_coverage_static_1/
│   │   └── config/
│   │       └── move_base_client/
│   │           └── base_local_planner_params.yaml
│   ├── sm_starcraft_ai/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_starcraft_ai_config.yaml
│   │   ├── include/
│   │   │   └── sm_starcraft_ai/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   └── ms_run.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_starcraft_ai.h
│   │   │       ├── states/
│   │   │       │   ├── attack_inner_states/
│   │   │       │   │   ├── sti_attack_1.h
│   │   │       │   │   ├── sti_attack_2.h
│   │   │       │   │   └── sti_attack_3.h
│   │   │       │   ├── build_inner_states/
│   │   │       │   │   ├── sti_build_1.h
│   │   │       │   │   ├── sti_build_2.h
│   │   │       │   │   └── sti_build_3.h
│   │   │       │   ├── move_inner_states/
│   │   │       │   │   ├── sti_move_1.h
│   │   │       │   │   ├── sti_move_2.h
│   │   │       │   │   └── sti_move_3.h
│   │   │       │   └── st_observe.h
│   │   │       └── superstates/
│   │   │           ├── ss_attack.h
│   │   │           ├── ss_build.h
│   │   │           └── ss_move.h
│   │   ├── launch/
│   │   │   └── sm_starcraft_ai.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_starcraft_ai_node.cpp
│   ├── sm_subscriber/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── config/
│   │   │   ├── rosconsole.config
│   │   │   └── sm_subscriber_config.yaml
│   │   ├── include/
│   │   │   └── sm_subscriber/
│   │   │       ├── clients/
│   │   │       │   └── cl_numbers_subscription/
│   │   │       │       ├── cl_numbers_subscription.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_post_custom_event.h
│   │   │       │           └── cb_print_message_number.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_subscriber.h
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_subscriber.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_subscriber.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── numbers_publisher/
│   │   │       └── numbers_publisher.cpp
│   │   └── src/
│   │       └── sm_subscriber_node.cpp
│   ├── sm_three_some/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_three_some_config.yaml
│   │   ├── include/
│   │   │   └── sm_three_some/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_recover.h
│   │   │       │   └── ms_run.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_three_some.h
│   │   │       ├── states/
│   │   │       │   ├── inner_states/
│   │   │       │   │   ├── sti_state_1.h
│   │   │       │   │   ├── sti_state_2.h
│   │   │       │   │   └── sti_state_3.h
│   │   │       │   ├── st_state_1.h
│   │   │       │   ├── st_state_2.h
│   │   │       │   ├── st_state_3.h
│   │   │       │   └── st_state_4.h
│   │   │       └── superstates/
│   │   │           ├── ss_superstate_1.h
│   │   │           └── ss_superstate_2.h
│   │   ├── launch/
│   │   │   └── sm_three_some.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_three_some_node.cpp
│   ├── sm_update_loop/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_update_loop_config.yaml
│   │   ├── include/
│   │   │   └── sm_update_loop/
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_update_loop.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_update_loop.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_update_loop_node.cpp
│   └── sm_viewer_sim/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── config/
│       │   └── sm_viewer_sim_config.yaml
│       ├── include/
│       │   └── sm_viewer_sim/
│       │       ├── modestates/
│       │       │   ├── ms_recovery_mode.h
│       │       │   └── ms_run_mode.h
│       │       ├── orthogonals/
│       │       │   └── or_navigation.h
│       │       ├── sm_viewer_sim.h
│       │       └── states/
│       │           ├── st_st1.h
│       │           ├── st_st2.h
│       │           └── st_st3.h
│       ├── launch/
│       │   └── sm_viewer_sim.launch
│       ├── package.xml
│       └── src/
│           └── sm_viewer_sim.cpp
├── smacc_state_reactor_library/
│   ├── sr_all_events_go/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── sr_all_events_go/
│   │   │       └── sr_all_events_go.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── sr_all_events_go/
│   │           └── sr_all_events_go.cpp
│   ├── sr_conditional/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── sr_conditional/
│   │   │       └── sr_conditional.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── sr_conditional/
│   │           └── sr_conditional.cpp
│   └── sr_event_countdown/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── sr_event_countdown/
│       │       └── sr_event_countdown.h
│       ├── package.xml
│       └── src/
│           └── sr_event_countdown/
│               └── sr_event_countdown.cpp
└── test/
    ├── sm_coretest_transition_speed_1/
    │   ├── CHANGELOG.rst
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── config/
    │   │   └── rosconsole.config
    │   ├── include/
    │   │   └── sm_coretest_transition_speed_1/
    │   │       ├── orthogonals/
    │   │       │   └── or_timer.h
    │   │       ├── sm_coretest_transition_speed_1.h
    │   │       └── states/
    │   │           ├── st_state_1.h
    │   │           └── st_state_2.h
    │   ├── launch/
    │   │   └── sm_coretest_transition_speed_1.launch
    │   ├── package.xml
    │   └── src/
    │       └── sm_coretest_transition_speed_1_node.cpp
    ├── sm_coretest_x_y_1/
    │   ├── CHANGELOG.rst
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── config/
    │   │   └── rosconsole.config
    │   ├── include/
    │   │   └── sm_coretest_x_y_1/
    │   │       ├── orthogonals/
    │   │       │   └── or_timer.h
    │   │       ├── sm_coretest_x_y_1.h
    │   │       └── states/
    │   │           ├── st_state_1.h
    │   │           └── st_state_2.h
    │   ├── launch/
    │   │   └── sm_coretest_x_y_1.launch
    │   ├── package.xml
    │   └── src/
    │       └── sm_coretest_x_y_1_node.cpp
    ├── sm_coretest_x_y_2/
    │   ├── CHANGELOG.rst
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── config/
    │   │   └── rosconsole.config
    │   ├── include/
    │   │   └── sm_coretest_x_y_2/
    │   │       ├── orthogonals/
    │   │       │   └── or_timer.h
    │   │       ├── sm_coretest_x_y_2.h
    │   │       └── states/
    │   │           ├── st_state_1.h
    │   │           └── st_state_2.h
    │   ├── launch/
    │   │   └── sm_coretest_x_y_2.launch
    │   ├── package.xml
    │   └── src/
    │       └── sm_coretest_x_y_2_node.cpp
    └── sm_coretest_x_y_3/
        ├── CHANGELOG.rst
        ├── CMakeLists.txt
        ├── README.md
        ├── config/
        │   └── rosconsole.config
        ├── include/
        │   └── sm_coretest_x_y_3/
        │       ├── orthogonals/
        │       │   └── or_timer.h
        │       ├── sm_coretest_x_y_3.h
        │       └── states/
        │           ├── st_state_1.h
        │           └── st_state_2.h
        ├── launch/
        │   └── sm_coretest_x_y_3.launch
        ├── package.xml
        └── src/
            └── sm_coretest_x_y_3_node.cpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .codespell-ignore-words.txt
================================================
ba


================================================
FILE: .github/workflows/CI.yaml
================================================
name: Noetic Continuous Integration

on:
  push:
  pull_request:

jobs:
  CI:
    runs-on: ubuntu-latest
    container: osrf/ros:noetic-desktop
    steps:
      - uses: actions/checkout@v1
        with:
          path: src/SMACC

      - shell: bash
        run: |
         source /opt/ros/noetic/setup.bash
         apt update
         rosdep update
         rosdep install --from-paths . --ignore-src -r -y
         cd ../../
         catkin_make -DCMAKE_BUILD_TYPE=Debug


================================================
FILE: .github/workflows/bloom_release.yml
================================================
name: bloom-release

on:
  push:
    paths:
      - package.xml
      - '*/package.xml'
      - '.github/workflows/bloom_release.yml'
    branches: noetic-devel

jobs:
  bloom-release:
    runs-on: ubuntu-latest
    env:
      ROS_DISTRO: noetic
      PRERELEASE: true
      BASEDIR: ${{ github.workspace }}/.work

    steps:
      - name: checkout
        uses: actions/checkout@v2

      # BASIC CODE QUALITY
      - run: |
          sudo apt-get update
          sudo apt-get install -y clang-format-12

      - uses: actions/setup-python@v3
        with:
          python-version: 3.9

      - name: code quality check
        uses: pre-commit/action@v3.0.0

      # BLOOM PRERELEASE CHECK
      # - name: industrial_ci prerelease check
      #   uses: ros-industrial/industrial_ci@master

      # BLOOM RELEASE
      - name: bloom release
        uses: pabloinigoblasco/bloom-release-action@master
        with:
          ros_distro: ${{ env.ROS_DISTRO }}
          github_token_bloom: ${{ secrets.GITTOKEN_BLOOM }}
          github_user: pabloinigoblasco
          git_user: pabloinigoblasco
          git_email: pablo@ibrobotics.com
          release_repository_push_url: https://github.com/robosoft-ai/SMACC-release
          tag_and_release: true
          #open_pr: true


================================================
FILE: .github/workflows/code_quality.yml
================================================
name: Code Format & Quality

on:
  pull_request:
  push:

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - run: |
        sudo apt-get update
        sudo apt-get install -y clang-format-12
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v3
      with:
        python-version: 3.9
    - uses: pre-commit/action@v3.0.0


================================================
FILE: .github/workflows/doxygen.yml
================================================
name: Doxygen

on:
  push:
    branches: [noetic-devel]

jobs:
  doxygen:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v1

      - uses: mattnotmitt/doxygen-action@v1
        with:
          doxyfile-path: 'smacc_ci/Doxyfile'

      - uses: peaceiris/actions-gh-pages@v3
        with:
          deploy_key: ${{ secrets.ACTION_DEPLOY_KEY }}
          external_repository:  robosoft-ai/smacc_doxygen
          publish_branch: gh-pages
          publish_dir: docs/
          destination_dir: noetic
          commit_message: ${{ github.event.head_commit.message }}


================================================
FILE: .gitignore
================================================
build
install
log
bin


================================================
FILE: .pre-commit-config.yaml
================================================
# To use:
#
#     pre-commit run -a
#
# Or:
#
#     pre-commit install  # (runs every time you commit in git)
#
# To update this file:
#
#     pre-commit autoupdate
#
# See https://github.com/pre-commit/pre-commit

repos:
  # Standard hooks
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.1.0
    hooks:
      - id: check-added-large-files
      - id: check-ast
      - id: check-case-conflict
      - id: check-docstring-first
      - id: check-merge-conflict
      - id: check-symlinks
      - id: check-xml
      #- id: check-yaml
      - id: debug-statements
      - id: end-of-file-fixer
      - id: mixed-line-ending
      - id: trailing-whitespace
      - id: fix-byte-order-marker

  # Python hooks
  - repo: https://github.com/asottile/pyupgrade
    rev: v2.31.0
    hooks:
    -   id: pyupgrade
        args: [--py36-plus]

  - repo: https://github.com/psf/black
    rev: 22.3.0
    hooks:
      - id: black
        args: ["--line-length=99"]

  # PEP 257
  - repo: https://github.com/FalconSocial/pre-commit-mirrors-pep257
    rev: v0.3.3
    hooks:
    - id: pep257
      args: ["--ignore=D100,D101,D102,D103,D104,D105,D106,D107,D203,D212,D404"]

  - repo: https://github.com/pycqa/flake8
    rev: 4.0.1
    hooks:
    - id: flake8
      args: ["--ignore=E501,W503,E203"]

  # CPP hooks
  - repo: local
    hooks:
      - id: clang-format
        name: clang-format
        description: Format files with ClangFormat.
        entry: clang-format
        language: system
        files: \.(c|cc|cxx|cpp|frag|glsl|h|hpp|hxx|ih|ispc|ipp|java|js|m|proto|vert)$
        args: ['-fallback-style=none', '-i']
        # exclude: smacc2_sm_reference_library/


  # Docs - RestructuredText hooks
  - repo: https://github.com/PyCQA/doc8
    rev: 0.10.1
    hooks:
      - id: doc8
        args: ['--max-line-length=100', '--ignore=D001']
        exclude: CHANGELOG\.rst$

  - repo: https://github.com/pre-commit/pygrep-hooks
    rev: v1.9.0
    hooks:
      - id: rst-backticks
        exclude: CHANGELOG\.rst$
      - id: rst-directive-colons
      - id: rst-inline-touching-normal

  # Spellcheck in comments and docs
  # skipping of *.svg files is not working...
  - repo: https://github.com/codespell-project/codespell
    rev: v2.1.0
    hooks:
      - id: codespell
        name: codespell
        description: Checks for common misspellings in text files.
        entry: codespell
        language: python
        types: [text]
        args: ['--ignore-words=.codespell-ignore-words.txt', '--write-changes']
        exclude: \.(svg|pyc)$


================================================
FILE: .vscode/launch.json
================================================
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
        "name": "(gdb) sm_fetch",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/devel/lib/sm_fetch_six_table_pick_n_sort_1/sm_fetch_six_table_pick_n_sort_1_node",
        "args": ["__name:=sm_fetch_six_table_pick_n_sort_1_node"],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "console": "externalTerminal",
        "MIMode": "gdb",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ]
    },
    {
        "name": "(gdb) sm_atomic_mode_states",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/../../devel/lib/sm_atomic_mode_states/sm_atomic_mode_states_node",
        "args": ["__name:=sm_fetch_six_table_pick_n_sort_1_node"],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "console": "externalTerminal",
        "MIMode": "gdb",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ]
    },
    {
        "name": "(gdb) smacc_rta",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/../build/smacc_rta/smacc_rta",
        "args": ["__name:=smacc_rta"],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "console": "externalTerminal",
        "MIMode": "gdb",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ]
    },
        {
            "name": "Smacc Viewer",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/src/SMACC_Viewer/smacc_viewer/scripts/smacc_viewer_node.py",
            "console": "integratedTerminal"
        }
    ]
}


================================================
FILE: LICENSE.txt
================================================
BSD 3-Clause License

Copyright (c) Reelrobotix, Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: README.md
================================================

## Continuous Integration:


| ROS Distro  | Code Format & Quality | Documentation | Binary Packages |
| :-----------: | :-----------: | :-----------: | :-----------: |
| Melodic  | [![Code Format & Quality](https://github.com/robosoft-ai/SMACC/actions/workflows/code_quality.yml/badge.svg?branch=melodic-devel)](https://github.com/robosoft-ai/SMACC/actions/workflows/code_quality.yml) | [![Doxygen](https://github.com/robosoft-ai/SMACC/actions/workflows/doxygen.yml/badge.svg?branch=melodic-devel)](https://github.com/robosoft-ai/SMACC/actions/workflows/doxygen.yml) <br/> <a href="https://robosoft-ai.github.io/smacc_doxygen/melodic/html/namespaces.html">doxygen</a>|[![Build Status](https://build.ros.org/job/Mdev__smacc__ubuntu_bionic_amd64/badge/icon?subject=ros-buildfarm)](https://build.ros.org/job/Mdev__smacc__ubuntu_bionic_amd64/)<br/>[![bloom-release](https://build.ros2.org/job/Hdev__SMACC2__ubuntu_jammy_amd64/badge/icon?style=plastic&subject=bloom-release&status=E.O.L&color=lightgray)](http://wiki.ros.org/Distributions)<br/>[SMACC](https://index.ros.org/p/smacc/github-robosoft-ai-smacc/#melodic)|
| Noetic  | [![Code Format & Quality](https://github.com/robosoft-ai/SMACC/actions/workflows/code_quality.yml/badge.svg?branch=noetic-devel)](https://github.com/robosoft-ai/SMACC/actions/workflows/code_quality.yml) | [![Doxygen](https://github.com/robosoft-ai/SMACC/actions/workflows/doxygen.yml/badge.svg?branch=noetic-devel)](https://github.com/robosoft-ai/SMACC/actions/workflows/doxygen.yml) <br/> <a href="https://robosoft-ai.github.io/smacc_doxygen/noetic/html/namespaces.html">doxygen</a>|  [![Build Status](https://build.ros.org/job/Ndev__smacc__ubuntu_focal_amd64/badge/icon?subject=ros-buildfarm)](https://build.ros.org/job/Ndev__smacc__ubuntu_focal_amd64/)<br/>[![bloom-release](https://github.com/robosoft-ai/SMACC/actions/workflows/bloom_release.yml/badge.svg?branch=noetic-devel)](https://github.com/robosoft-ai/smacc/actions/workflows/bloom_release.yml) <br/>[SMACC](https://index.ros.org/p/smacc/github-robosoft-ai-smacc/#noetic)|

## Docker Containers

[![Docker Automated build](https://img.shields.io/docker/automated/pabloinigoblasco/smacc.svg?maxAge=2592000)](https://hub.docker.com/r/pabloinigoblasco/smacc/) [![Docker Pulls](https://img.shields.io/docker/pulls/pabloinigoblasco/smacc.svg?maxAge=2592000)](https://hub.docker.com/r/pabloinigoblasco/smacc/) [![Docker Stars](https://img.shields.io/docker/stars/pabloinigoblasco/smacc.svg)](https://registry.hub.docker.com/pabloinigoblasco/smacc/)


# <img src="http://smacc.dev/wp-content/uploads/2019/07/SMACC-Logo-Pixelate-4-copy.png" width="30" align="left"/> SMACC

SMACC is an event-driven, asynchronous, behavioral state machine library for real-time ROS (Robotic Operating System) applications written in C++, designed to allow programmers to build robot control applications for multicomponent robots, in an intuitive and systematic manner.

SMACC was inspired by Harel's statecharts and the [SMACH ROS package](http://wiki.ros.org/smach). SMACC is built on top of the [Boost StateChart library](https://www.boost.org/doc/libs/1_53_0/libs/statechart/doc/index.html).


## Features
 *  ***Powered by ROS:*** SMACC has been developed specifically to work with ROS. It supports ROS topics, services and actions, right out of the box.
 *   ***Written in C++:*** Until now, ROS has lacked a library to develop task-level behavioral state machines in C++. Although libraries have been developed in scripting languages such as python, these are unsuitable for real-world industrial environments where real-time requirements are demanded.
 *   ***Orthogonals:*** Originally conceived by David Harel in 1987, orthogonality is absolutely crucial to developing state machines for complex robotic systems. This is because complex robots are always a collection of hardware devices which require communication protocols, start-up determinism, etc. With orthogonals, it is an intuitive and relatively straight forward exercise (at least conceptually;) to code a state machine for a robot comprising a mobile base, a robotic arm, a gripper, two lidar sensors, a gps transceiver and an imu, for instance.
 *  ***Static State Machine Checking:*** One of the features that SMACC inherits from Boost Statechart is that you get compile time validation checking. This benefits developers in that the amount of runtime testing necessary to ship quality software that is both stable and safe is dramatically reduced. Our philosophy is "Wherever possible, let the compiler do it".
 *  ***State Machine Reference Library:*** With a constantly growing library of out-of-the-box reference state machines, (found in the folder [sm_reference_library](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library)) guaranteed to compile and run, you can jumpstart your development efforts by choosing a reference machine that is closest to your needs, and then customize and extend to meet the specific requirements of your robotic application. All the while knowing that the library supports advanced functionalities that are practically universal among actual working robots.
 *  ***SMACC Client Library:*** SMACC also features a constantly growing library of [clients](https://github.com/robosoft-ai/SMACC/tree/master/smacc_client_library) that support ROS Action Servers, Service Servers and other nodes right out-of-the box. The clients within the SMACC Client library have been built utilizing a component based architecture that allows for developer to build powerful clients of their own. Current clients of note include MoveBaseZ, a full featured Action Client built to integrate with the ROS Navigation stack, the ros_timer_client, the multi_role_sensor_client, and a keyboard_client used extensively for state machine drafting & debugging.
  *  ***Extensive Documentation:*** Although many ROS users are familiar with doxygen, our development team has spent a lot of time researching the more advanced features of doxygen such as uml style class diagrams and call graphs, and we've used them to document the SMACC library. Have a look to [our doxygen sites](https://robosoft-ai.github.io/smacc_doxygen/master/html/namespaces.html) and we think you'll be blown away at what Doxygen looks like when [it's done right](https://robosoft-ai.github.io/smacc_doxygen/master/html/classsmacc_1_1ISmaccStateMachine.html) and it becomes a powerful tool to research a codebase.
  *  ***SMACC1 Runtime Analyzer:*** The SMACC library for ROS1 works out of the box with the SMACC1 RTA. This allows developers to visualize and runtime debug the state machines they are working on. The SMACC1 RTA is closed source, but is free for individual and academic use. It can be found [here](https://robosoft.ai/product-category/smacc1-runtime-analyzer/), along with installation instructions which can be found [here](https://robosoft.ai/smacc1_rta-installation/).


## SMACC applications
From it's inception, SMACC was written to support the programming of multi-component, complex robots. If your project involves small, solar-powered insect robots, that simply navigate towards a light source, then SMACC might not be the right choice for you. But if you are trying to program a robot with a mobile base, a robotic arm, a gripper, two lidar sensors, a gps transceiver and an imu, then you've come to the right place.


## Getting Started
The easiest way to get started is by selecting one of the state machines in our [reference library](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library), and then hacking it to meet your needs.

Each state machine in the reference library comes with it's own README.md file, which contains the appropriate operating instructions, so that all you have to do is simply copy & paste some commands into your terminal.


  *  If you are looking for a minimal example, we recommend [sm_atomic](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library/sm_atomic).

  *  If you are looking for a slightly more complicated, but still very simple example, try [sm_calendar_week](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library/sm_calendar_week).

  *  If you are looking for a minimal example but with a looping superstate, try [sm_three_some](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library/sm_three_some).

  *  If you want to get started with the ROS Navigation stack right away, try [sm_dance_bot](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library/sm_dance_bot).

  *  If you want to get started with ROS Navigation and exploring the orthogonal read-write cycle, then try [sm_dance_bot_strikes_back](https://github.com/robosoft-ai/SMACC/tree/master/smacc_sm_reference_library/sm_dance_bot_strikes_back).


Operating instructions can be found in each reference state machines readme file.
Happy Coding.

## Support
If you are interested in getting involved or need a little support, feel free to contact us by emailing brett@robosoft.ai


================================================
FILE: smacc/CHANGELOG.rst
================================================
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package smacc
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Forthcoming
-----------

* Progressing on transition log
* dynamic behavior
* progress on viewer, modestates and history mode
* smacc megastate example
* missing changes on previous commit
* more improvements on status message on the viewer and the smacc core
* some stable version of the viewer, code cleaning, fixes on dancebot
* progress in the viewer, creating a new concept of transition tag
* progress in the viewer
* SMACC improvements on the viewer and loop branching funcionality
* progressing in the smacc viewer
* fixing logic units event source information
* progressing in viewer and metainformation
* progressing in the viewer and adding more metaknoledge about triggering events of logic units
* progress in the viewer and examples
* fixing eveng aggregator compilation issue
* more fixings and progressing to the smacc_viewer
* recurrent pattern for sensors and substate behaviors
* template recurrent pattern, string type walker, showing string for smacc viewer
* adding transition file
* moving behavior creation of sm_dance_bot to static staticConfigure
* action client moving to event convention Ev<TSource>
* logic units, better output of the state machine knowledge at the startup
* StateTransition info structure
* creating static staticConfigure functionality
* removing obsolete state funcionality
* broken build orthogonal fix
* changes on architecture, orthogonal role, client role and component role changes, fixing all examples
* adding service client
* smacc_msgs dependencies
* smacc_msgs dependencies
* gh-pages travis
* ff pattern and spattern first implementation
* fixing build
* testing status message, creation of rviz display plugin, refactoring of sm_dance_bot.launch to make it lightweight, readme.md for launching
* adding SmaccStatus message funcionality
* PackML inspired funcionalities for SM: stop, estop, reset
* several improvements: adding topicPublisherClient, fixing install build, further testing of sm_dance_bot on install workspace
* adding publisher client
* working on fixing travis build
* working on fixing travis
* superstates improving the viewer for the dance_bot
* many core fixes and refactorings, substate behavior destroying, dance_bot keyboard separated in two files, topic sensor separated in two files too for the client and the substate behavior
* progressing on keyboard
* introducing the client concept and moving smacc topic subscriber to the smacc 'core' package
* ClMultiroleSensor and TopicSubscriber
* detaching substatebehaviors from component and renaming class refactoring
* making smacc_viewer run and also refactoring smacc_state_info headers
* Merge branch 'master' of https://github.com/robosoft-ai/SMACC
* minor changes
* Minor commenting edits
* more improvements on sensor topics keyboard events, and architecture improvements
* refactoring smacc substate behaviors and states
* changes on code
* better rosout and some progress on sm_dance_bot and fixing travis build
* runtime testing of examples
* hard renaming - namming convention - initial integration of smach_viewer
* Folder Renaming
* SMACC building
* Merge branch 'master' of https://github.com/robosoft-ai/SMACC
* fixing smacc for melodic
* c++11 for indigo in some projects
* Merge branch 'master' into indigo-devel
* removing boost demangle dependency to make build indigo
* makin build SMACC for indigo
* Merge branch 'master' into indigo-devel
* merge on melodic
* updating backward and forward local planners
* Merge remote-tracking branch 'origin/master' into melodic-devel
* Merge branch 'master' into indigo-devel
* updating cmakelists
* Merge branch 'master' of https://github.com/pabloinigoblasco/SMACC
* Merge pull request `#1 <https://github.com/robosoft-ai/SMACC/issues/1>`_ from robosoft-ai/master
  merging
* smacc improvements
* minor
* navigation improvements and syntax improvements in example
* final waypoints tests
* progress on waypoints
* renaming getglobalData setGlobalData
* authory in code files and more in documentation
* important refactoring and fixes, and the creation of the radial_motion example
* syntax improvement to remove the context from smacc code
* adapting to the smacc requiresComponent method refactoring
* refactoring smacc to support other kind of plugins beyond actionclients, such as the odom tracker, also ading a custom radial_motion_example independent to the reel
* refactoring SMACC to contain navigation plugins
* adding planners to SMACC
* package version
* package.xml format
* adding feedback message information to feedback events
* syntax improvement for better action result reaction
* some refactoring on smacc code
* more on documentation
* fixing ros parameters
* Tool orthogonal line and wiki documentation
* cleaning and refactoring smacc library
* adding tool orthogonal line
* Adapting to smacc feedback message improvemnts. Now, the transitions reacts on these action feedback messages, instead of action results
* minor changes on radial motion sample
* feedback message support
* refactoring, renamings, documenting smacc
* some more on style
* more comments and style
* some more comments
* large refactoring of the smacc example code and comments
* minor
* initial version of radial motion example
* going forward to radial example
* minor to show some example
* going forward to smacc
* minor fixes
* initials on smacc
* Moved SMACC to it's own repo..
* Contributors: Pablo Inigo Blasco, Pablo Iñigo Blasco, brett2@robosoft-ai.com, brettpac, travis


================================================
FILE: smacc/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.8)
project(smacc)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  actionlib
  roscpp
  pluginlib
  smacc_msgs
  controller_manager_msgs
)


################################################
## Declare ROS messages, services and actions ##
################################################


################################################
## Declare ROS dynamic reconfigure parameters ##
################################################

###################################
## catkin specific configuration ##
###################################

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES smacc
  CATKIN_DEPENDS actionlib roscpp smacc_msgs controller_manager_msgs smacc_msgs message_runtime
#  DEPENDS system_lib
)

###########
## Build ##
###########

SET(CMAKE_CXX_STANDARD 14)
add_compile_options(-std=c++11) #workaround for ubuntu 16.04, to extinguish

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

file(GLOB_RECURSE ${PROJECT_NAME}_IncludeFilesPaths "*.h")
add_custom_target(${PROJECT_NAME}_IncludeFilesTarget SOURCES ${${PROJECT_NAME}_IncludeFilesPaths})

# sources
file(GLOB_RECURSE SRC_FILES "src/smacc/*.cpp" "src/smacc/introspection/*.cpp" "src/smacc/state_reactors/*.cpp") # opcionalmente GLOB

add_library(${PROJECT_NAME} ${SRC_FILES})

## Add cmake target dependencies of the executable
## same as for the library above
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}
   ${catkin_LIBRARIES}
 )

#############
## Install ##
#############

## Mark executables and/or libraries for installation
install(TARGETS ${PROJECT_NAME}
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

## Mark cpp header files for installation
install(DIRECTORY include/${PROJECT_NAME}/
   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
   FILES_MATCHING PATTERN "*.h"
   PATTERN ".svn" EXCLUDE
)

#############
## Testing ##
#############


================================================
FILE: smacc/include/smacc/callback_counter_semaphore.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <iostream>
#include <boost/signals2.hpp>
#include <thread>
#include <condition_variable>
#include <mutex>
#include <boost/signals2.hpp>
#include <ros/ros.h>

namespace smacc
{
class CallbackCounterSemaphore {
public:
    CallbackCounterSemaphore(std::string name, int count = 0);
    bool acquire();

    void release();

    void finalize();

    void addConnection(boost::signals2::connection conn);

private:
    int count_;
    std::mutex mutex_;
    std::condition_variable cv_;
    std::vector<boost::signals2::connection> connections_;
    bool finalized = false;
    std::string name_;
};
}


================================================
FILE: smacc/include/smacc/client_base_components/cp_ros_control_interface.h
================================================
#pragma once
#include <smacc/component.h>
#include <controller_manager_msgs/ControllerState.h>

namespace smacc
{
namespace components
{
struct ControllerTypeInfo
{
    std::string type;
    std::string baseClass;
};

enum Strictness
{
    BEST_EFFORT = 1,
    STRICT = 2
};

class CpRosControlInterface : public smacc::ISmaccComponent
{
public:
    CpRosControlInterface();

    virtual ~CpRosControlInterface();

    virtual void onInitialize() override;

    // template <typename TOrthogonal, typename TSourceObject>
    // void onOrthogonalAllocation() {}

    std::vector<ControllerTypeInfo> listControllerTypes();

    std::vector<controller_manager_msgs::ControllerState> listControllers();

    bool loadController(std::string name);

    bool unloadController(std::string name);

    bool reloadControllerLibraries(bool forceKill);

    bool switchControllers(std::vector<std::string> start_controllers,
                           std::vector<std::string> stop_controllers,
                           Strictness strictness);

    boost::optional<std::string> serviceName_;

private:
    ros::NodeHandle nh_;

    ros::ServiceClient srvListControllers;
    ros::ServiceClient srvListControllersTypes;
    ros::ServiceClient srvLoadController;
    ros::ServiceClient srvReloadControllerLibraries;
    ros::ServiceClient srvSwitchControllers;
    ros::ServiceClient srvUnloadController;
};
}
}


================================================
FILE: smacc/include/smacc/client_base_components/cp_topic_subscriber.h
================================================
#pragma once
#include <smacc/component.h>
#include <smacc/smacc_signal.h>
#include <boost/optional/optional_io.hpp>
#include <smacc/client_bases/smacc_subscriber_client.h>

namespace smacc
{
namespace components
{

using namespace smacc::default_events;

template <typename MessageType>
class CpTopicSubscriber : public smacc::ISmaccComponent
{
public:
    boost::optional<std::string> topicName;
    boost::optional<int> queueSize;

    typedef MessageType TMessageType;

    CpTopicSubscriber()
    {
        initialized_ = false;
    }

    CpTopicSubscriber(std::string topicname)
    {
        topicName = topicname;
    }

    virtual ~CpTopicSubscriber()
    {
        sub_.shutdown();
    }

    smacc::SmaccSignal<void(const MessageType &)> onFirstMessageReceived_;
    smacc::SmaccSignal<void(const MessageType &)> onMessageReceived_;

    std::function<void(const MessageType &)> postMessageEvent;
    std::function<void(const MessageType &)> postInitialMessageEvent;

    template <typename T>
    boost::signals2::connection onMessageReceived(void (T::*callback)(const MessageType &), T *object)
    {
        return this->getStateMachine()->createSignalConnection(onMessageReceived_, callback, object);
    }

    template <typename T>
    boost::signals2::connection onFirstMessageReceived(void (T::*callback)(const MessageType &), T *object)
    {
        return this->getStateMachine()->createSignalConnection(onFirstMessageReceived_, callback, object);
    }

    template <typename TOrthogonal, typename TSourceObject>
    void onOrthogonalAllocation()
    {
        this->postMessageEvent = [=](auto msg) {
            auto event = new EvTopicMessage<TSourceObject, TOrthogonal>();
            event->msgData = msg;
            this->postEvent(event);
        };

        this->postInitialMessageEvent = [=](auto msg) {
            auto event = new EvTopicInitialMessage<TSourceObject, TOrthogonal>();
            event->msgData = msg;
            this->postEvent(event);
        };
    }

    virtual void initialize()
    {
        if (!initialized_)
        {
            firstMessage_ = true;

            if (!queueSize)
                queueSize = 1;

            if (!topicName)
            {
                ROS_ERROR("topic client with no topic name set. Skipping subscribing");
            }
            else
            {
                ROS_INFO_STREAM("[" << this->getName() << "] Subscribing to topic: " << topicName);

                sub_ = nh_.subscribe(*topicName, *queueSize, &CpTopicSubscriber<MessageType>::messageCallback, this);
                this->initialized_ = true;
            }
        }
    }

protected:
    ros::NodeHandle nh_;

private:
    ros::Subscriber sub_;
    bool firstMessage_;
    bool initialized_;

    void messageCallback(const MessageType &msg)
    {
        if (firstMessage_)
        {
            postInitialMessageEvent(msg);
            onFirstMessageReceived_(msg);
            firstMessage_ = false;
        }

        postMessageEvent(msg);
        onMessageReceived_(msg);
    }
};
}
}


================================================
FILE: smacc/include/smacc/client_bases/smacc_action_client.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/smacc_client.h>
#include <smacc/smacc_state_machine.h>
#include <actionlib/client/simple_action_client.h>

namespace smacc
{
namespace client_bases
{
    using namespace actionlib;

    // This class interface shows the basic set of methods that
    // a SMACC "resource" or "plugin" Action Client has
    class ISmaccActionClient : public ISmaccClient
    {
    public:
        ISmaccActionClient();

        // The destructor. This is called when the object is not
        // referenced anymore by its owner
        virtual ~ISmaccActionClient();

        // Gets the ros path of the action...
        inline std::string getNamespace() const
        {
            return name_;
        }

        virtual void cancelGoal() = 0;

        virtual SimpleClientGoalState getState() = 0;

    protected:
        // The ros path where the action server is located
        std::string name_;
    };
} // namespace smacc
} // namespace smacc


================================================
FILE: smacc/include/smacc/client_bases/smacc_action_client_base.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/client_bases/smacc_action_client.h>
#include <smacc/smacc_signal.h>

#include <boost/optional/optional_io.hpp>

namespace smacc
{
namespace client_bases
{
using namespace smacc::default_events;

template <typename ActionType>
class SmaccActionClientBase : public ISmaccActionClient
{
public:
    // Inside this macro you can find the typedefs for Goal and other types
    ACTION_DEFINITION(ActionType);
    typedef actionlib::SimpleActionClient<ActionType> ActionClient;
    typedef actionlib::SimpleActionClient<ActionType> GoalHandle;

    typedef typename ActionClient::SimpleDoneCallback SimpleDoneCallback;
    typedef typename ActionClient::SimpleActiveCallback SimpleActiveCallback;
    typedef typename ActionClient::SimpleFeedbackCallback SimpleFeedbackCallback;

    SmaccActionClientBase(std::string actionServerName)
        : ISmaccActionClient(),
          name_(actionServerName)
    {
    }

    SmaccActionClientBase()
        : ISmaccActionClient(),
          name_("")
    {
    }

    static std::string getEventLabel()
    {
        auto type = TypeInfo::getTypeInfoFromType<ActionType>();
        return type->getNonTemplatedTypeName();
    }

    virtual ~SmaccActionClientBase()
    {
    }

    /// rosnamespace path
    std::string name_;

    virtual void initialize() override
    {
        client_ = std::make_shared<ActionClient>(name_);
    }

    smacc::SmaccSignal<void(const ResultConstPtr &)> onSucceeded_;
    smacc::SmaccSignal<void(const ResultConstPtr &)> onAborted_;
    smacc::SmaccSignal<void(const ResultConstPtr &)> onPreempted_;
    smacc::SmaccSignal<void(const ResultConstPtr &)> onRejected_;

    // event creation/posting factory functions
    std::function<void(ResultConstPtr)> postSuccessEvent;
    std::function<void(ResultConstPtr)> postAbortedEvent;
    std::function<void(ResultConstPtr)> postPreemptedEvent;
    std::function<void(ResultConstPtr)> postRejectedEvent;

    std::function<void(FeedbackConstPtr)> postFeedbackEvent;

    SimpleDoneCallback done_cb;
    SimpleActiveCallback active_cb;
    SimpleFeedbackCallback feedback_cb;

    template <typename EvType>
    void postResultEvent(ResultConstPtr result)
    {
        auto *ev = new EvType();
        //ev->client = this;
        ev->resultMessage = *result;
        ROS_INFO("Posting EVENT %s", demangleSymbol(typeid(ev).name()).c_str());
        this->postEvent(ev);
    }

    template <typename TOrthogonal, typename TSourceObject>
    void onOrthogonalAllocation()
    {
        // we create here all the event factory functions capturing the TOrthogonal
        postSuccessEvent = [=](auto msg) { this->postResultEvent<EvActionSucceeded<TSourceObject, TOrthogonal>>(msg); };
        postAbortedEvent = [=](auto msg) { this->postResultEvent<EvActionAborted<TSourceObject, TOrthogonal>>(msg); };
        postPreemptedEvent = [=](auto msg) { this->postResultEvent<EvActionPreempted<TSourceObject, TOrthogonal>>(msg); };
        postRejectedEvent = [=](auto msg) { this->postResultEvent<EvActionRejected<TSourceObject, TOrthogonal>>(msg); };
        postFeedbackEvent = [=](auto msg) {
            auto actionFeedbackEvent = new EvActionFeedback<Feedback, TOrthogonal>();
            actionFeedbackEvent->client = this;
            actionFeedbackEvent->feedbackMessage = *msg;
            this->postEvent(actionFeedbackEvent);
            ROS_DEBUG("[%s] FEEDBACK EVENT", demangleType(typeid(*this)).c_str());
        };

        done_cb = boost::bind(&SmaccActionClientBase<ActionType>::onResult, this, _1, _2);
        //active_cb;
        feedback_cb = boost::bind(&SmaccActionClientBase<ActionType>::onFeedback, this, _1);
    }

    template <typename T>
    boost::signals2::connection onSucceeded(void (T::*callback)(ResultConstPtr &), T *object)
    {
        return this->getStateMachine()->createSignalConnection(onSucceeded_, callback, object);
    }

    template <typename T>
    boost::signals2::connection onSucceeded(std::function<void(ResultConstPtr &)> callback)
    {
        return this->getStateMachine()->createSignalConnection(onSucceeded_, callback);
    }

    template <typename T>
    boost::signals2::connection onAborted(void (T::*callback)(ResultConstPtr &), T *object)
    {
        return this->getStateMachine()->createSignalConnection(onAborted_, callback, object);
    }

    template <typename T>
    boost::signals2::connection onAborted(std::function<void(ResultConstPtr &)> callback)
    {
        return this->getStateMachine()->createSignalConnection(onAborted_, callback);
    }

    template <typename T>
    boost::signals2::connection onPreempted(void (T::*callback)(ResultConstPtr &), T *object)
    {
        return this->getStateMachine()->createSignalConnection(onPreempted_, callback, object);
    }

    template <typename T>
    boost::signals2::connection onPreempted(std::function<void(ResultConstPtr &)> callback)
    {
        return this->getStateMachine()->createSignalConnection(onPreempted_, callback);
    }

    template <typename T>
    boost::signals2::connection onRejected(void (T::*callback)(ResultConstPtr &), T *object)
    {
        return this->getStateMachine()->createSignalConnection(onRejected_, callback, object);
    }

    template <typename T>
    boost::signals2::connection onRejected(std::function<void(ResultConstPtr &)> callback)
    {
        return this->getStateMachine()->createSignalConnection(onRejected_, callback);
    }

    virtual void cancelGoal() override
    {
        if (client_->isServerConnected())
        {
            ROS_INFO("Cancelling goal of %s", this->getName().c_str());
            client_->cancelGoal();
        }
        else
        {
            ROS_ERROR("%s [at %s]: not connected with actionserver, skipping cancel goal ...", getName().c_str(), getNamespace().c_str());
        }
    }

    virtual SimpleClientGoalState getState() override
    {
        return client_->getState();
    }

    void sendGoal(Goal &goal)
    {
        ROS_INFO_STREAM("[ActionClient<"<< demangledTypeName<ActionType>() <<">] Sending goal to actionserver located in " << this->name_ << "\"");

        if (client_->isServerConnected())
        {
            ROS_INFO_STREAM(getName() << ": Goal Value: " << std::endl
                                      << goal);
            client_->sendGoal(goal, done_cb, active_cb, feedback_cb);
        }
        else
        {
            ROS_ERROR("%s [at %s]: not connected with actionserver, skipping goal request ...", getName().c_str(), getNamespace().c_str());
            //client_->waitForServer();
        }
    }

protected:
    std::shared_ptr<ActionClient> client_;

    void onFeedback(const FeedbackConstPtr &feedback_msg)
    {
        postFeedbackEvent(feedback_msg);
    }

    void onResult(const SimpleClientGoalState &state, const ResultConstPtr &result_msg)
    {
        // auto *actionResultEvent = new EvActionResult<TDerived>();
        // actionResultEvent->client = this;
        // actionResultEvent->resultMessage = *result_msg;

        const auto &resultType = this->getState();
        ROS_INFO("[%s] request result: %s", this->getName().c_str(), resultType.toString().c_str());

        if (resultType == actionlib::SimpleClientGoalState::SUCCEEDED)
        {
            ROS_INFO("[%s] request result: Success", this->getName().c_str());
            onSucceeded_(result_msg);
            postSuccessEvent(result_msg);
        }
        else if (resultType == actionlib::SimpleClientGoalState::ABORTED)
        {
            ROS_INFO("[%s] request result: Aborted", this->getName().c_str());
            onAborted_(result_msg);
            postAbortedEvent(result_msg);
        }
        else if (resultType == actionlib::SimpleClientGoalState::REJECTED)
        {
            ROS_INFO("[%s] request result: Rejected", this->getName().c_str());
            onRejected_(result_msg);
            postRejectedEvent(result_msg);
        }
        else if (resultType == actionlib::SimpleClientGoalState::PREEMPTED)
        {
            ROS_INFO("[%s] request result: Preempted", this->getName().c_str());
            onPreempted_(result_msg);
            postPreemptedEvent(result_msg);
        }
        else
        {
            ROS_INFO("[%s] request result: NOT HANDLED TYPE: %s", this->getName().c_str(), resultType.toString().c_str());
        }
    }
};

#define SMACC_ACTION_CLIENT_DEFINITION(ActionType) ACTION_DEFINITION(ActionType); typedef smacc::client_bases::SmaccActionClientBase<ActionType> Base;
} // namespace client_bases

} // namespace smacc


================================================
FILE: smacc/include/smacc/client_bases/smacc_publisher_client.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/smacc_client.h>
#include <boost/optional/optional_io.hpp>

namespace smacc
{
namespace client_bases
{
class SmaccPublisherClient : public smacc::ISmaccClient
{
public:
  boost::optional<std::string> topicName;
  boost::optional<int> queueSize;

  SmaccPublisherClient()
  {
    initialized_ = false;
  }

  virtual ~SmaccPublisherClient()
  {
    pub_.shutdown();
  }

  template <typename MessageType>
  void configure(std::string topicName)
  {
    this->topicName = topicName;
    if (!initialized_)
    {
      if (!this->topicName)
      {
        ROS_ERROR("topic publisher with no topic name set. Skipping advertising.");
        return;
      }
      if (!queueSize)
        queueSize = 1;

      ROS_INFO_STREAM("[" << this->getName() << "] Client Publisher to topic: " << topicName);
      pub_ = nh_.advertise<MessageType>(*(this->topicName), *queueSize);

      this->initialized_ = true;
    }
  }

  template <typename MessageType>
  void publish(const MessageType &msg)
  {
    pub_.publish(msg);
  }

protected:
  ros::NodeHandle nh_;
  ros::Publisher pub_;

private:
  bool initialized_;
};
} // namespace client_bases
} // namespace smacc


================================================
FILE: smacc/include/smacc/client_bases/smacc_service_client.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/smacc_client.h>
#include <boost/optional/optional_io.hpp>

namespace smacc
{
namespace client_bases
{
template <typename ServiceType>
class SmaccServiceClient : public smacc::ISmaccClient
{
public:
    boost::optional<std::string> serviceName_;

    SmaccServiceClient()
    {
        initialized_ = false;
    }
    SmaccServiceClient(std::string service_name)
    {
      serviceName_ = service_name;
      initialized_ = false;
    }

    virtual void initialize() override
    {
        if (!initialized_)
        {
            if (!serviceName_)
            {
                ROS_ERROR("service client with no service name set. Skipping.");
            }
            else
            {
                ROS_INFO_STREAM("[" << this->getName() << "] Client Service: " << *serviceName_);
                this->initialized_ = true;

                client_ = nh_.serviceClient<ServiceType>(*serviceName_);
            }
        }
    }

    bool call(ServiceType &srvreq)
    {
        return client_.call(srvreq);
    }

protected:
    ros::NodeHandle nh_;
    ros::ServiceClient client_;
    bool initialized_;
};
} // namespace client_bases
} // namespace smacc


================================================
FILE: smacc/include/smacc/client_bases/smacc_service_server_client.h
================================================
#pragma once

#include <smacc/smacc_client.h>
#include <smacc/smacc_signal.h>
#include <std_srvs/Empty.h>

#include <boost/optional/optional_io.hpp>

namespace smacc {
namespace client_bases {
template <typename TService>
class SmaccServiceServerClient : public smacc::ISmaccClient {
  using TServiceRequest = typename TService::Request;
  using TServiceResponse = typename TService::Response;

 public:
  boost::optional<std::string> serviceName_;
  SmaccServiceServerClient() { initialized_ = false; }
  SmaccServiceServerClient(std::string service_name) {
    serviceName_ = service_name;
    initialized_ = false;
  }

  virtual ~SmaccServiceServerClient() { server_.shutdown(); }

  smacc::SmaccSignal<void(TServiceRequest&, std::shared_ptr<TServiceResponse>)>
      onServiceRequestReceived_;

  template <typename T>
  boost::signals2::connection onServiceRequestReceived(
      void (T::*callback)(TServiceRequest&, std::shared_ptr<TServiceResponse>),
      T* object) {
    return this->getStateMachine()->createSignalConnection(
        onServiceRequestReceived_, callback, object);
  }

  virtual void initialize() override {
    if (!initialized_) {
      if (!serviceName_) {
        ROS_ERROR("service server with no service name set. Skipping.");
      } else {
        ROS_INFO_STREAM("[" << this->getName()
                            << "] Client Service: " << serviceName_);

        server_ = nh_.advertiseService(
            *serviceName_, &SmaccServiceServerClient<TService>::serviceCallback,
            this);
        this->initialized_ = true;
      }
    }
  }

 protected:
  ros::NodeHandle nh_;

 private:
  bool serviceCallback(TServiceRequest& req, TServiceResponse& res)
  {
    std::shared_ptr<TServiceResponse> response{new TServiceResponse};
    onServiceRequestReceived_(req, response);
    res = *response;
    return true;
  }
  ros::ServiceServer server_;
  bool initialized_;
};
}  // namespace client_bases
}  // namespace smacc


================================================
FILE: smacc/include/smacc/client_bases/smacc_subscriber_client.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/smacc_client.h>
#include <boost/optional/optional_io.hpp>
#include <smacc/impl/smacc_state_impl.h>

namespace smacc
{

namespace client_bases
{

using namespace smacc::default_events;

template <typename MessageType>
class SmaccSubscriberClient : public smacc::ISmaccClient
{
public:
  boost::optional<std::string> topicName;
  boost::optional<int> queueSize;

  typedef MessageType TMessageType;

  SmaccSubscriberClient()
  {
    initialized_ = false;
  }

  SmaccSubscriberClient(std::string topicname)
  {
    topicName = topicname;
  }

  virtual ~SmaccSubscriberClient()
  {
    sub_.shutdown();
  }

  smacc::SmaccSignal<void(const MessageType &)> onFirstMessageReceived_;
  smacc::SmaccSignal<void(const MessageType &)> onMessageReceived_;

  std::function<void(const MessageType &)> postMessageEvent;
  std::function<void(const MessageType &)> postInitialMessageEvent;

  template <typename T>
  boost::signals2::connection onMessageReceived(void (T::*callback)(const MessageType &), T *object)
  {
    return this->getStateMachine()->createSignalConnection(onMessageReceived_, callback, object);
  }

  template <typename T>
  boost::signals2::connection onFirstMessageReceived(void (T::*callback)(const MessageType &), T *object)
  {
    return this->getStateMachine()->createSignalConnection(onFirstMessageReceived_, callback, object);
  }

  template <typename TOrthogonal, typename TSourceObject>
  void onOrthogonalAllocation()
  {
    this->postMessageEvent = [=](auto msg) {
      auto event = new EvTopicMessage<TSourceObject, TOrthogonal>();
      event->msgData = msg;
      this->postEvent(event);
    };

    this->postInitialMessageEvent = [=](auto msg) {
      auto event = new EvTopicInitialMessage<TSourceObject, TOrthogonal>();
      event->msgData = msg;
      this->postEvent(event);
    };
  }

  virtual void initialize()
  {
    if (!initialized_)
    {
      firstMessage_ = true;

      if (!queueSize)
        queueSize = 1;

      if (!topicName)
      {
        ROS_ERROR("topic client with no topic name set. Skipping subscribing");
      }
      else
      {
        ROS_INFO_STREAM("[" << this->getName() << "] Subscribing to topic: " << topicName);

        sub_ = nh_.subscribe(*topicName, *queueSize, &SmaccSubscriberClient<MessageType>::messageCallback, this);
        this->initialized_ = true;
      }
    }
  }

protected:
  ros::NodeHandle nh_;

private:
  ros::Subscriber sub_;
  bool firstMessage_;
  bool initialized_;

  void messageCallback(const MessageType &msg)
  {
    if (firstMessage_)
    {
      postInitialMessageEvent(msg);
      onFirstMessageReceived_(msg);
      firstMessage_ = false;
    }

    onMessageReceived_(msg);
    postMessageEvent(msg);
  }
};
} // namespace client_bases
} // namespace smacc


================================================
FILE: smacc/include/smacc/client_behavior_bases/cb_service_server_callback_base.h
================================================
#pragma once
#include <smacc/smacc_client_behavior.h>

namespace smacc {
template <typename TService>
class CbServiceServerCallbackBase : public smacc::SmaccClientBehavior {
 public:
  virtual void onEntry() override {
    this->requiresClient(attachedClient_);
    attachedClient_->onServiceRequestReceived(
        &CbServiceServerCallbackBase::onServiceRequestReceived, this);
  }

  virtual void onServiceRequestReceived(typename TService::Request& req,
                                        std::shared_ptr<typename TService::Response> res) = 0;

 protected:
  smacc::client_bases::SmaccServiceServerClient<TService>* attachedClient_ =
      nullptr;
};
}  // namespace smacc


================================================
FILE: smacc/include/smacc/client_behavior_bases/cb_subscription_callback_base.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018-2021
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once
#include <smacc/smacc_client_behavior.h>

namespace smacc
{
template <typename TMsg>
class CbSubscriptionCallbackBase : public smacc::SmaccClientBehavior
{
public:
  virtual void onEntry() override
  {
    this->requiresClient(attachedClient_);
    attachedClient_->onMessageReceived(&CbSubscriptionCallbackBase::onMessageReceived, this);
  }

  virtual void onMessageReceived(const TMsg& msg) = 0;

protected:
  smacc::client_bases::SmaccSubscriberClient<TMsg>* attachedClient_ = nullptr;
};
}  // namespace smacc


================================================
FILE: smacc/include/smacc/common.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once

#include <boost/statechart/state.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/event.hpp>
#include <boost/statechart/asynchronous_state_machine.hpp>
#include <boost/statechart/custom_reaction.hpp>
#include <boost/statechart/deep_history.hpp>

#include <boost/config.hpp>
#include <boost/intrusive_ptr.hpp>
#include <boost/function.hpp>
#include <boost/signals2.hpp>
#include <boost/mpl/list.hpp>
#include <boost/statechart/deep_history.hpp>
#include <boost/any.hpp>
#include <boost/algorithm/string.hpp>

#include <mutex>

#include <ros/ros.h>
//#include <actionlib/client/simple_action_client.h>

#include <smacc/smacc_fifo_scheduler.h>
#include <smacc/smacc_types.h>
#include <smacc/introspection/introspection.h>

typedef boost::statechart::processor_container<boost::statechart::fifo_scheduler<>, boost::function0<void>, std::allocator<boost::statechart::none>>::processor_context my_context;
namespace smacc
{

namespace utils
{
// demangles the type name to be used as a node handle path
std::string cleanShortTypeName(const std::type_info &tinfo);
} // namespace utils

enum class SMRunMode
{
  DEBUG,
  RELEASE
};

} // namespace smacc

#include <smacc/smacc_default_events.h>
#include <smacc/smacc_transition.h>


================================================
FILE: smacc/include/smacc/component.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once

#include <smacc/common.h>
#include <boost/optional.hpp>

namespace smacc
{

class ISmaccComponent
{
public:
    ISmaccComponent();

    virtual ~ISmaccComponent();

    // Returns a custom identifier defined by the specific plugin implementation
    virtual std::string getName() const;

protected:

    virtual void initialize(ISmaccClient *owner);

    // Assigns the owner of this resource to the given state machine parameter object
    void setStateMachine(ISmaccStateMachine *stateMachine);

    template <typename EventType>
    void postEvent(const EventType &ev);

    template <typename EventType>
    void postEvent();

    template <typename TOrthogonal, typename TSourceObject>
    void onOrthogonalAllocation() {}

    template <typename TComponent>
    void requiresComponent(TComponent *& requiredComponentStorage);

    template <typename TClient>
    void requiresClient(TClient *& requiredClientStorage);

    virtual void onInitialize();

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *createSiblingComponent(TArgs... targs);

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *createSiblingNamedComponent(std::string name, TArgs... targs);

    // A reference to the state machine object that owns this resource
    ISmaccStateMachine *stateMachine_;

    ISmaccClient *owner_;

    friend class ISmaccOrthogonal;
    friend class ISmaccClient;
};
} // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_asynchronous_client_behavior_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_asynchronous_client_behavior.h>
#include <smacc/smacc_state_machine.h>

namespace smacc
{

    template <typename TOrthogonal, typename TSourceObject>
    void SmaccAsyncClientBehavior::onOrthogonalAllocation()
    {
        postFinishEventFn_ = [=] {
            this->onFinished_();
            this->postEvent<EvCbFinished<TSourceObject, TOrthogonal>>();
        };

        postSuccessEventFn_ = [=] {
            this->onSuccess_();
            this->postEvent<EvCbSuccess<TSourceObject, TOrthogonal>>();
        };

        postFailureEventFn_ = [=] {
            this->onFailure_();
            this->postEvent<EvCbFailure<TSourceObject, TOrthogonal>>();
        };
    }

    template <typename TCallback, typename T>
    boost::signals2::connection SmaccAsyncClientBehavior::onSuccess(TCallback callback, T *object)
    {
        return this->getStateMachine()->createSignalConnection(onSuccess_, callback, object);
    }

    template <typename TCallback, typename T>
    boost::signals2::connection SmaccAsyncClientBehavior::onFinished(TCallback callback, T *object)
    {
        return this->getStateMachine()->createSignalConnection(onFinished_, callback, object);
    }

    template <typename TCallback, typename T>
    boost::signals2::connection SmaccAsyncClientBehavior::onFailure(TCallback callback, T *object)
    {
        return this->getStateMachine()->createSignalConnection(onFailure_, callback, object);
    }
}


================================================
FILE: smacc/include/smacc/impl/smacc_client_behavior_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once

#include <smacc/smacc_client_behavior.h>
#include <smacc/smacc_state_machine.h>

namespace smacc
{

template <typename EventType>
void ISmaccClientBehavior::postEvent(const EventType &ev)
{
    if (stateMachine_ == nullptr)
    {
        ROS_ERROR("The client behavior cannot post events before being assigned to an orthogonal. Ignoring post event call.");
    }
    else
    {
        stateMachine_->postEvent(ev, EventLifeTime::CURRENT_STATE);
    }
}

template <typename EventType>
void ISmaccClientBehavior::postEvent()
{
    if (stateMachine_ == nullptr)
    {
        ROS_ERROR("The client behavior cannot post events before being assigned to an orthogonal. Ignoring post event call.");
    }
    else
    {

        stateMachine_->template postEvent<EventType>(EventLifeTime::CURRENT_STATE);
    }
}

//inline
ISmaccStateMachine *ISmaccClientBehavior::getStateMachine()
{
    return this->stateMachine_;
}

//inline
ISmaccState *ISmaccClientBehavior::getCurrentState()
{
    return this->currentState;
}

template <typename SmaccClientType>
void ISmaccClientBehavior::requiresClient(SmaccClientType *&storage)
{
    currentOrthogonal->requiresClient(storage);
}

template <typename SmaccComponentType>
void ISmaccClientBehavior::requiresComponent(SmaccComponentType *&storage)
{
    if (stateMachine_ == nullptr)
    {
        ROS_ERROR("Cannot use the requiresComponent funcionality before assigning the client behavior to an orthogonal. Try using the OnEntry method to capture required components.");
    }
    else
    {
        stateMachine_->requiresComponent(storage);
    }
}

template <typename TOrthogonal, typename TSourceObject>
void ISmaccClientBehavior::onOrthogonalAllocation() {}

} // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_client_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/smacc_client.h>
#include <smacc/impl/smacc_state_machine_impl.h>

namespace smacc
{
    template <typename EventType>
    void ISmaccClient::postEvent(const EventType &ev)
    {
        stateMachine_->postEvent(ev);
    }

    template <typename EventType>
    void ISmaccClient::postEvent()
    {
        stateMachine_->postEvent<EventType>();
    }

    template <typename TComponent>
    TComponent *ISmaccClient::getComponent()
    {
        return this->getComponent<TComponent>(std::string());
    }

    template <typename TComponent>
    TComponent *ISmaccClient::getComponent(std::string name)
    {
        for (auto &component : components_)
        {
            if (component.first.name != name)
                continue;

            auto *tcomponent = dynamic_cast<TComponent *>(component.second.get());
            if (tcomponent != nullptr)
            {
                return tcomponent;
            }
        }

        return nullptr;
    }

    //inline
    ISmaccStateMachine *ISmaccClient::getStateMachine()
    {
        return this->stateMachine_;
    }

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *ISmaccClient::createNamedComponent(std::string name, TArgs... targs)
    {
        ComponentKey componentkey(&typeid(SmaccComponentType), name);

        std::shared_ptr<SmaccComponentType> ret;

        auto it = this->components_.find(componentkey);

        if (it == this->components_.end())
        {
            auto tname = demangledTypeName<SmaccComponentType>();
            ROS_DEBUG("%s smacc component is required. Creating a new instance.", tname.c_str());

            ret = std::shared_ptr<SmaccComponentType>(new SmaccComponentType(targs...));
            ret->setStateMachine(this->getStateMachine());
            ret->owner_ = this;
            ret->initialize(this);

            this->components_[componentkey] = ret; //std::dynamic_pointer_cast<smacc::ISmaccComponent>(ret);
            ROS_DEBUG("%s resource is required. Done.", tname.c_str());
        }
        else
        {
            ROS_DEBUG("%s resource is required. Found resource in cache.", demangledTypeName<SmaccComponentType>().c_str());
            ret = dynamic_pointer_cast<SmaccComponentType>(it->second);
        }

        ret->template onOrthogonalAllocation<TOrthogonal, TClient>();

        return ret.get();
    }

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *ISmaccClient::createComponent(TArgs... targs)
    {
        return this->createNamedComponent<SmaccComponentType, TOrthogonal, TClient>(std::string(), targs...);
    }

    template <typename TSmaccSignal, typename T>
    void ISmaccClient::connectSignal(TSmaccSignal &signal, void (T::*callback)(), T *object)
    {
        return this->getStateMachine()->createSignalConnection(signal, callback, object);
    }

    template <typename SmaccClientType>
    void ISmaccClient::requiresClient(SmaccClientType *&storage)
    {
        this->orthogonal_->requiresClient(storage);
    }

} // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_component_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/component.h>
#include <smacc/impl/smacc_state_machine_impl.h>

namespace smacc
{
    template <typename EventType>
    void ISmaccComponent::postEvent(const EventType &ev)
    {
        stateMachine_->postEvent(ev);
    }

    template <typename TComponent>
    void ISmaccComponent::requiresComponent(TComponent *&requiredComponentStorage)
    {
        requiredComponentStorage = this->owner_->getComponent<TComponent>();
    }

    template <typename TClient>
    void ISmaccComponent::requiresClient(TClient *&requiredClientStorage)
    {
        this->owner_->requiresClient(requiredClientStorage);
    }

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *ISmaccComponent::createSiblingComponent(TArgs... targs)
    {
        return this->owner_->createComponent<SmaccComponentType, TOrthogonal, TClient>(targs...);
    }

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *ISmaccComponent::createSiblingNamedComponent(std::string name, TArgs... targs)
    {
        return this->owner_->createNamedComponent<SmaccComponentType, TOrthogonal, TClient>(name, targs...);
    }

} // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_event_generator_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_event_generator.h>
#include <smacc/introspection/introspection.h>

namespace smacc
{
    template <typename EventType>
    void SmaccEventGenerator::postEvent(const EventType &ev)
    {
        ownerState_->postEvent(ev);
    }

    template <typename EventType>
    void SmaccEventGenerator::postEvent()
    {
        ownerState_->postEvent<EventType>();
    }

    template <typename TState, typename TSource>
    void SmaccEventGenerator::onStateAllocation()
    {
    }
} // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_orthogonal_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_orthogonal.h>
#include <smacc/smacc_client.h>
#include <cassert>

namespace smacc
{

template <typename SmaccClientType>
bool ISmaccOrthogonal::requiresClient(SmaccClientType *&storage)
{
    for (auto &client : clients_)
    {
        storage = dynamic_cast<SmaccClientType *>(client.get());
        if (storage != nullptr)
            return true;
    }

    auto requiredClientName = demangledTypeName<SmaccClientType>();
    ROS_WARN_STREAM("Required client ["<< requiredClientName<< "] not found in current orthogonal. Searching in other orthogonals.");

    for (auto &orthoentry : this->getStateMachine()->getOrthogonals())
    {
        for (auto &client : orthoentry.second->getClients())
        {
            storage = dynamic_cast<SmaccClientType *>(client.get());
            if (storage != nullptr)
            {
                ROS_WARN_STREAM("Required client  ["<< requiredClientName<<"] found in other orthogonal.");
                return true;
            }
        }
    }

    ROS_ERROR_STREAM("Required client ["<< requiredClientName<< "] not found even in other orthogonals. Returning null pointer. If the requested client is used may result in a segmentation fault.");
    return false;
}

template <typename SmaccComponentType>
void ISmaccOrthogonal::requiresComponent(SmaccComponentType *&storage)
{
    if (stateMachine_ == nullptr)
    {
        ROS_ERROR("Cannot use the requiresComponent funcionality from an orthogonal before onInitialize");
    }
    else
    {
        stateMachine_->requiresComponent(storage);
    }
}

template <typename TOrthogonal, typename TClient>
void ISmaccOrthogonal::assignClientToOrthogonal(TClient* client)
{
    client->setStateMachine(getStateMachine());
    client->setOrthogonal(this);

    client->template onOrthogonalAllocation<TOrthogonal, TClient>();
}

template <typename TClientBehavior>
TClientBehavior *ISmaccOrthogonal::getClientBehavior()
{
    for (auto &cb : this->clientBehaviors_.back())
    {
        auto *ret = dynamic_cast<TClientBehavior *>(cb.get());
        if (ret != nullptr)
        {
            return ret;
        }
    }

    return nullptr;
}

inline const std::vector<std::shared_ptr<smacc::ISmaccClient>> &ISmaccOrthogonal::getClients()
{
    return clients_;
}

inline const std::vector<std::vector<std::shared_ptr<smacc::ISmaccClientBehavior>>> &ISmaccOrthogonal::getClientBehaviors() const
{
    return this->clientBehaviors_;
}

template <typename T>
void ISmaccOrthogonal::setGlobalSMData(std::string name, T value)
{
    this->getStateMachine()->setGlobalSMData(name, value);
}

template <typename T>
bool ISmaccOrthogonal::getGlobalSMData(std::string name, T &ret)
{
    return this->getStateMachine()->getGlobalSMData(name, ret);
}

//inline
ISmaccStateMachine *ISmaccOrthogonal::getStateMachine() { return this->stateMachine_; }

template <typename TOrthogonal, typename TClient>
class ClientHandler : public TClient
{
public:
    template <typename... TArgs>
    ClientHandler(TArgs... args)
        : TClient(args...)
    {
    }

    ClientHandler()
        : TClient()
    {
    }

    template <typename SmaccComponentType, typename... TArgs>
    SmaccComponentType *createComponent(TArgs... targs)
    {
        return ISmaccClient::createComponent<SmaccComponentType, TOrthogonal, TClient, TArgs...>(targs...);
    }

    template <typename SmaccComponentType, typename... TArgs>
    SmaccComponentType *createNamedComponent(std::string name, TArgs... targs)
    {
        return ISmaccClient::createNamedComponent<SmaccComponentType, TOrthogonal, TClient, TArgs...>(name, targs...);
    }

    virtual smacc::introspection::TypeInfo::Ptr getType() override
    {
        return smacc::introspection::TypeInfo::getTypeInfoFromType<TClient>();
    }
};

template <typename TOrthogonal>
class Orthogonal : public ISmaccOrthogonal
{
public:
    template <typename TClient, typename... TArgs>
    std::shared_ptr<ClientHandler<TOrthogonal, TClient>> createClient(TArgs... args)
    {
        //static_assert(std::is_base_of<ISmaccOrthogonal, TOrthogonal>::value, "The object Tag must be the orthogonal type where the client was created");
        // if (typeid(*this) != typeid(TOrthogonal))
        // {
        //     ROS_ERROR_STREAM("Error creating client. The object Tag must be the type of the orthogonal where the client was created:" << demangleType(typeid(*this)) << ". The object creation was skipped and a nullptr was returned");
        //     return nullptr;
        // }

        ROS_INFO("[%s] creates a client of type '%s' and object tag '%s'",
                    demangleType(typeid(*this)).c_str(),
                    demangledTypeName<TClient>().c_str(),
                    demangledTypeName<TOrthogonal>().c_str()
                );

        auto client = std::make_shared<ClientHandler<TOrthogonal, TClient>>(args...);
        this->template assignClientToOrthogonal<TOrthogonal, TClient>(client.get());

        // it is stored the client (not the client handler)
        clients_.push_back(client);

        return client;
    }
};
}; // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_state_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_state.h>
#include <smacc/smacc_orthogonal.h>
#include <smacc/smacc_client_behavior.h>
#include <smacc/introspection/introspection.h>
#include <smacc/smacc_state_reactor.h>
//#include <smacc/smacc_event_generator.h>
#include <smacc/introspection/string_type_walker.h>
#include <smacc/smacc_client_behavior.h>
#include <smacc/smacc_state_machine.h>

namespace smacc
{
    using namespace smacc::introspection;
    //-------------------------------------------------------------------------------------------------------
    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    bool ISmaccState::getParam(std::string param_name, T &param_storage)
    {
        return nh.getParam(param_name, param_storage);
    }
    //-------------------------------------------------------------------------------------------------------

    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    void ISmaccState::setParam(std::string param_name, T param_val)
    {
        return nh.setParam(param_name, param_val);
    }
    //-------------------------------------------------------------------------------------------------------

    //Delegates to ROS param access with the current NodeHandle
    template <typename T>
    bool ISmaccState::param(std::string param_name, T &param_val, const T &default_val) const
    {
        return nh.param(param_name, param_val, default_val);
    }
    //-------------------------------------------------------------------------------------------------------

#define THIS_STATE_NAME ((demangleSymbol(typeid(*this).name()).c_str()))
    template <typename TOrthogonal, typename TBehavior, typename... Args>
    std::shared_ptr<TBehavior> ISmaccState::configure(Args &&... args)
    {
        std::string orthogonalkey = demangledTypeName<TOrthogonal>();
        ROS_INFO("[%s] Configuring orthogonal: %s", THIS_STATE_NAME, orthogonalkey.c_str());

        TOrthogonal *orthogonal = this->getOrthogonal<TOrthogonal>();
        if (orthogonal != nullptr)
        {
            auto clientBehavior = std::shared_ptr<TBehavior>(new TBehavior(args...));
            clientBehavior->currentState = this;
            orthogonal->addClientBehavior(clientBehavior);
            clientBehavior->template onOrthogonalAllocation<TOrthogonal, TBehavior>();
            return clientBehavior;
        }
        else
        {
            ROS_ERROR("[%s] Skipping client behavior creation in orthogonal [%s]. It does not exist.", THIS_STATE_NAME, orthogonalkey.c_str());
            return nullptr;
        }
    }
    //-------------------------------------------------------------------------------------------------------

    template <typename SmaccComponentType>
    void ISmaccState::requiresComponent(SmaccComponentType *&storage)
    {
        this->getStateMachine().requiresComponent(storage);
    }
    //-------------------------------------------------------------------------------------------------------

    template <typename SmaccClientType>
    void ISmaccState::requiresClient(SmaccClientType *&storage)
    {
        const char *sname = (demangleSymbol(typeid(*this).name()).c_str());
        storage = nullptr;
        auto &orthogonals = this->getStateMachine().getOrthogonals();
        for (auto &ortho : orthogonals)
        {
            ortho.second->requiresClient(storage);
            if (storage != nullptr)
                return;
        }

        ROS_ERROR("[%s] Client of type '%s' not found in any orthogonal of the current state machine. This may produce a segmentation fault if the returned reference is used.", sname, demangleSymbol<SmaccClientType>().c_str());
    }
    //-------------------------------------------------------------------------------------------------------

    template <typename T>
    bool ISmaccState::getGlobalSMData(std::string name, T &ret)
    {
        return this->getStateMachine().getGlobalSMData(name, ret);
    }
    //-------------------------------------------------------------------------------------------------------

    // Store globally in this state machine. (By value parameter )
    template <typename T>
    void ISmaccState::setGlobalSMData(std::string name, T value)
    {
        this->getStateMachine().setGlobalSMData(name, value);
    }
    //-------------------------------------------------------------------------------------------------------

    template <typename TStateReactor, typename... TEvArgs>
    std::shared_ptr<TStateReactor> ISmaccState::createStateReactor(TEvArgs... args)
    {
        auto sr = std::make_shared<TStateReactor>(args...);
        //sb->initialize(this, mock);
        //sb->setOutputEvent(typelist<TTriggerEvent>());
        stateReactors_.push_back(sr);
        return sr;
    }

    template <typename TEventGenerator, typename... TEvArgs>
    std::shared_ptr<TEventGenerator> ISmaccState::createEventGenerator(TEvArgs... args)
    {
        auto eg = std::make_shared<TEventGenerator>(args...);
        eventGenerators_.push_back(eg);
        return eg;
    }

    template <typename TEventList>
    struct AddTEventType
    {
        smacc::StateReactor *sr_;
        AddTEventType(smacc::StateReactor *sr) : sr_(sr)
        {
        }

        template <typename T>
        void operator()(T)
        {
            sr_->addInputEvent<T>();
        }
    };

    template <typename TStateReactor, typename TTriggerEvent, typename TEventList, typename... TEvArgs>
    std::shared_ptr<TStateReactor> ISmaccState::createStateReactor(TEvArgs... args)
    {
        auto sr = std::make_shared<TStateReactor>(args...);
        TEventList *mock;
        sr->initialize(this);
        sr->template setOutputEvent<TTriggerEvent>();

        using boost::mpl::_1;
        using wrappedList = typename boost::mpl::transform<TEventList, _1>::type;
        AddTEventType<TEventList> op(sr.get());
        boost::mpl::for_each<wrappedList>(op);

        stateReactors_.push_back(sr);
        return sr;
    }


    template <typename TOrthogonal>
    TOrthogonal *ISmaccState::getOrthogonal()
    {
        //static_assert(boost::type_traits::is_base_of<ISmaccOrthogonal,TOrthogonal>::value);
        return this->getStateMachine().getOrthogonal<TOrthogonal>();
    }

    template <typename TEventGenerator>
    TEventGenerator* ISmaccState::getEventGenerator()
    {
        TEventGenerator* ret = nullptr;
        for(auto& evg: this->eventGenerators_)
        {
            ret = dynamic_cast<TEventGenerator *>(evg.get());
            if(ret!=nullptr)
                break;
        }
        return ret;
    }

    template <typename TStateReactor>
    TStateReactor* ISmaccState::getStateReactor()
    {
        TStateReactor* ret = nullptr;
        for(auto& sr: this->stateReactors_)
        {
            ret = dynamic_cast<TStateReactor *>(sr.get());
            if(ret!=nullptr)
                break;
        }
        return ret;
    }

    // template <typename TStateReactor, typename TTriggerEvent, typename... TEvArgs>
    // std::shared_ptr<TStateReactor> ISmaccState::createStateReactor(TEvArgs... args)
    // {
    //     auto sb = std::make_shared<TStateReactor>(std::forward(args...));
    //     sb->initialize(this, typelist<TEvArgs...>());
    //     sb->setOutputEvent(typelist<TTriggerEvent>());
    //     stateReactors_.push_back(sb);

    //     return sb;
    // }
    //-------------------------------------------------------------------------------------------------------

    template <typename EventType>
    void ISmaccState::postEvent(const EventType &ev)
    {
        getStateMachine().postEvent(ev);
    }

    template <typename EventType>
    void ISmaccState::postEvent()
    {
        getStateMachine().postEvent<EventType>();
    }
    //-------------------------------------------------------------------------------------------------------

    template <typename TransitionType>
    void ISmaccState::notifyTransition()
    {
        auto transitionType = TypeInfo::getTypeInfoFromType<TransitionType>();
        this->notifyTransitionFromTransitionTypeInfo(transitionType);
    }

    //-------------------------------------------------------------------------------------------------------------------

} // namespace smacc

// implementation depends on state definition
#include <smacc/impl/smacc_state_reactor_impl.h>
#include <smacc/impl/smacc_event_generator_impl.h>


================================================
FILE: smacc/include/smacc/impl/smacc_state_machine_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/smacc_state_machine.h>

#include <smacc/smacc_client.h>
#include <smacc/smacc_orthogonal.h>
#include <smacc/smacc_state.h>

#include <smacc/introspection/introspection.h>
#include <smacc/smacc_signal_detector.h>
#include <smacc/smacc_state_reactor.h>
#include <smacc_msgs/SmaccStatus.h>
#include <sstream>

#include <boost/function_types/function_arity.hpp>
#include <boost/function_types/function_type.hpp>
#include <boost/function_types/parameter_types.hpp>

namespace smacc
{
  using namespace smacc::introspection;

  template <typename TOrthogonal>
  TOrthogonal *ISmaccStateMachine::getOrthogonal()
  {
    std::lock_guard<std::recursive_mutex> lock(m_mutex_);

    std::string orthogonalkey = demangledTypeName<TOrthogonal>();
    TOrthogonal *ret;

    auto it = orthogonals_.find(orthogonalkey);

    if (it != orthogonals_.end())
    {
      ROS_DEBUG("Orthogonal %s resource is being required from some state, client or component. Found resource in cache.", orthogonalkey.c_str());
      ret = dynamic_cast<TOrthogonal *>(it->second.get());
      return ret;
    }
    else
    {
      std::stringstream ss;
      ss << "Orthogonal not found " << orthogonalkey.c_str() << std::endl;
      ss << "The existing orthogonals are the following: " << std::endl;
      for (auto &orthogonal : orthogonals_)
      {
        ss << " - " << orthogonal.first << std::endl;
      }

      ROS_WARN_STREAM(ss.str());

      return nullptr;
    }
  }

  //-------------------------------------------------------------------------------------------------------
  template <typename TOrthogonal>
  void ISmaccStateMachine::createOrthogonal()
  {
    this->lockStateMachine("create orthogonal");
    std::string orthogonalkey = demangledTypeName<TOrthogonal>();

    if (orthogonals_.count(orthogonalkey) == 0)
    {
      auto ret = std::make_shared<TOrthogonal>();
      orthogonals_[orthogonalkey] = dynamic_pointer_cast<smacc::ISmaccOrthogonal>(ret);

      ret->setStateMachine(this);

      ROS_INFO("%s Orthogonal is created", orthogonalkey.c_str());
    }
    else
    {
      ROS_WARN_STREAM("There were already one existing orthogonal of type "
                      << orthogonalkey.c_str() << ". Skipping creation orthogonal request. ");
      std::stringstream ss;
      ss << "The existing orthogonals are the following: " << std::endl;
      for (auto &orthogonal : orthogonals_)
      {
        ss << " - " << orthogonal.first << std::endl;
      }
      ROS_WARN_STREAM(ss.str());
    }
    this->unlockStateMachine("create orthogonal");
  }

  //-------------------------------------------------------------------------------------------------------
  template <typename SmaccComponentType>
  void ISmaccStateMachine::requiresComponent(SmaccComponentType *&storage)
  {
    ROS_DEBUG("component %s is required", demangleSymbol(typeid(SmaccComponentType).name()).c_str());
    std::lock_guard<std::recursive_mutex> lock(m_mutex_);

    for (auto ortho : this->orthogonals_)
    {
      for (auto &client : ortho.second->clients_)
      {

        storage = client->getComponent<SmaccComponentType>();
        if (storage != nullptr)
        {
          return;
        }
      }
    }

    ROS_WARN("component %s is required but it was not found in any orthogonal", demangleSymbol(typeid(SmaccComponentType).name()).c_str());

    // std::string componentkey = demangledTypeName<SmaccComponentType>();
    // SmaccComponentType *ret;

    // auto it = components_.find(componentkey);

    // if (it == components_.end())
    // {
    //     ROS_DEBUG("%s smacc component is required. Creating a new instance.", componentkey.c_str());

    //     ret = new SmaccComponentType();
    //     ret->setStateMachine(this);
    //     components_[componentkey] = static_cast<smacc::ISmaccComponent *>(ret);
    //     ROS_DEBUG("%s resource is required. Done.", componentkey.c_str());
    // }
    // else
    // {
    //     ROS_DEBUG("%s resource is required. Found resource in cache.", componentkey.c_str());
    //     ret = dynamic_cast<SmaccComponentType *>(it->second);
    // }

    // storage = ret;
  }
  //-------------------------------------------------------------------------------------------------------
  template <typename EventType>
  void ISmaccStateMachine::postEvent(EventType *ev, EventLifeTime evlifetime)
  {
    std::lock_guard<std::recursive_mutex> guard(eventQueueMutex_);
    if (evlifetime == EventLifeTime::CURRENT_STATE && (stateMachineCurrentAction == StateMachineInternalAction::STATE_EXITING ||
                                                       stateMachineCurrentAction == StateMachineInternalAction::TRANSITIONING))
    {
      ROS_WARN_STREAM("CURRENT STATE SCOPED EVENT SKIPPED, state is exiting/transitioning " << demangleSymbol<EventType>());
      return;
      // in this case we may lose/skip events, if this is not right for some cases we should create a queue
      // to lock the events during the transitions. This issues appeared when a client asyncbehavior was posting an event
      // meanwhile we were doing the transition, but the main thread was waiting for its correct finalization (with thread.join)
    }

    // when a postting event is requested by any component, client, or client behavior
    // we reach this place. Now, we propagate the events to all the state state reactors to generate
    // some more events

    ROS_DEBUG_STREAM("[PostEvent entry point] " << demangleSymbol<EventType>());

    for (auto currentState : currentState_)
    {
      propagateEventToStateReactors(currentState, ev);
    }

    this->signalDetector_->postEvent(ev);
  }

  template <typename EventType>
  void ISmaccStateMachine::postEvent(EventLifeTime evlifetime)
  {
    auto *ev = new EventType();
    this->postEvent(ev, evlifetime);
  }

  template <typename T>
  bool ISmaccStateMachine::getGlobalSMData(std::string name, T &ret)
  {
    std::lock_guard<std::recursive_mutex> lock(m_mutex_);
    // ROS_WARN("get SM Data lock acquire");
    bool success = false;

    if (!globalData_.count(name))
    {
      // ROS_WARN("get SM Data - data do not exist");
      success = false;
    }
    else
    {
      // ROS_WARN("get SM DAta -data exist. accessing");
      try
      {
        auto &v = globalData_[name];

        // ROS_WARN("get SM DAta -data exist. any cast");
        ret = boost::any_cast<T>(v.second);
        success = true;
        // ROS_WARN("get SM DAta -data exist. success");
      }
      catch (boost::bad_any_cast &ex)
      {
        ROS_ERROR("bad any cast: %s", ex.what());
        success = false;
      }
    }

    // ROS_WARN("get SM Data lock release");
    return success;
  }

  template <typename T>
  void ISmaccStateMachine::setGlobalSMData(std::string name, T value)
  {
    {
      std::lock_guard<std::recursive_mutex> lock(m_mutex_);
      // ROS_WARN("set SM Data lock acquire");

      globalData_[name] = {[this, name]() {
                             std::stringstream ss;
                             auto val = any_cast<T>(globalData_[name].second);
                             ss << val;
                             return ss.str();
                           },
                           value};
    }

    this->updateStatusMessage();
  }

  template <typename StateField, typename BehaviorType>
  void ISmaccStateMachine::mapBehavior()
  {
    std::string stateFieldName = demangleSymbol(typeid(StateField).name());
    std::string behaviorType = demangleSymbol(typeid(BehaviorType).name());
    ROS_INFO("Mapping state field '%s' to stateReactor '%s'", stateFieldName.c_str(), behaviorType.c_str());
    SmaccClientBehavior *globalreference;
    if (!this->getGlobalSMData(stateFieldName, globalreference))
    {
      // Using the requires component approach, we force a unique existence
      // of this component
      BehaviorType *behavior;
      this->requiresComponent(behavior);
      globalreference = dynamic_cast<ISmaccClientBehavior *>(behavior);

      this->setGlobalSMData(stateFieldName, globalreference);
    }
  }

  namespace utils
  {
    template <int arity>
    struct Bind
    {
      template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
      boost::signals2::connection bindaux(TSmaccSignal &signal, TMemberFunctionPrototype callback,
                                          TSmaccObjectType *object, std::shared_ptr<CallbackCounterSemaphore> callbackCounter);
    };

    template <>
    struct Bind<1>
    {
      template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
      boost::signals2::connection bindaux(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object, std::shared_ptr<CallbackCounterSemaphore> callbackCounter)
      {
        return signal.connect(

        [=]()
        {
          if(callbackCounter == nullptr)
          {
           (object->*callback)();
          }
          else if (callbackCounter->acquire())
          {
            (object->*callback)();
            callbackCounter->release();
        }});
      }
    };

    template <>
    struct Bind<2>
    {
      template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
      boost::signals2::connection bindaux(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object, std::shared_ptr<CallbackCounterSemaphore> callbackCounter)
      {
        return signal.connect([=](auto a1)
        {
            if(callbackCounter == nullptr)
          {
            (object->*callback)(a1);
          }
          else if (callbackCounter->acquire())
          {
            (object->*callback)(a1);
            callbackCounter->release();

          }
            });
      }
    };

    template <>
    struct Bind<3>
    {
      template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
      boost::signals2::connection bindaux(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object, std::shared_ptr<CallbackCounterSemaphore> callbackCounter)
      {
        return signal.connect([=](auto a1, auto a2) {
           if(callbackCounter == nullptr)
          {
            (object->*callback)(a1,a2);
          }
          else if (callbackCounter->acquire())
          {
            (object->*callback)(a1,a2);
            callbackCounter->release();

          }
          });
      }
    };

    template <>
    struct Bind<4>
    {
      template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
      boost::signals2::connection bindaux(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object, std::shared_ptr<CallbackCounterSemaphore> callbackCounter)
      {
        return signal.connect([=](auto a1, auto a2, auto a3) {
           if(callbackCounter == nullptr)
          {
            (object->*callback)(a1,a2,a3);
          }
          else if (callbackCounter->acquire())
          {
            (object->*callback)(a1,a2,a3);
            callbackCounter->release();

          }
          });

      }
    };
  } // namespace utils
  using namespace smacc::utils;

  template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
  boost::signals2::connection ISmaccStateMachine::createSignalConnection(TSmaccSignal &signal,
                                                                         TMemberFunctionPrototype callback,
                                                                         TSmaccObjectType *object)
  {
    std::lock_guard<std::recursive_mutex> lock(m_mutex_);

    static_assert(std::is_base_of<ISmaccState, TSmaccObjectType>::value ||
                      std::is_base_of<ISmaccClient, TSmaccObjectType>::value ||
                      std::is_base_of<ISmaccClientBehavior, TSmaccObjectType>::value ||
                      std::is_base_of<StateReactor, TSmaccObjectType>::value ||
                      std::is_base_of<ISmaccComponent, TSmaccObjectType>::value,
                  "Only are accepted smacc types as subscribers for smacc signals");

    typedef decltype(callback) ft;
    Bind<boost::function_types::function_arity<ft>::value> binder;

    boost::signals2::connection connection;

    // long life-time objects
    if (std::is_base_of<ISmaccComponent, TSmaccObjectType>::value ||
        std::is_base_of<ISmaccClient, TSmaccObjectType>::value ||
        std::is_base_of<ISmaccOrthogonal, TSmaccObjectType>::value ||
        std::is_base_of<ISmaccStateMachine, TSmaccObjectType>::value)
    {
      connection = binder.bindaux(signal, callback, object, nullptr);
    }
    else if (std::is_base_of<ISmaccState, TSmaccObjectType>::value ||
             std::is_base_of<StateReactor, TSmaccObjectType>::value ||
             std::is_base_of<ISmaccClientBehavior, TSmaccObjectType>::value)
    {
      ROS_INFO("[StateMachine] life-time constrained smacc signal subscription created. Subscriber is %s",
               demangledTypeName<TSmaccObjectType>().c_str());

      std::shared_ptr<CallbackCounterSemaphore> callbackCounterSemaphore;
      if(stateCallbackConnections.count(object))
      {
        callbackCounterSemaphore = stateCallbackConnections[object];
      }
      else
      {
          callbackCounterSemaphore =  std::make_shared<CallbackCounterSemaphore>(demangledTypeName<TSmaccObjectType>().c_str());
          stateCallbackConnections[object] = callbackCounterSemaphore;
      }

      connection = binder.bindaux(signal, callback, object, callbackCounterSemaphore);
      callbackCounterSemaphore->addConnection(connection);

    }
    else // state life-time objects
    {
      ROS_WARN("[StateMachine] connecting signal to an unknown object with life-time unknown behavior. It might provoke "
               "an exception if the object is destroyed during the execution.");

      connection = binder.bindaux(signal, callback, object, nullptr);
    }

    return connection;
  }

  template <typename T>
  bool ISmaccStateMachine::getParam(std::string param_name, T &param_storage)
  {
    return nh_.getParam(param_name, param_storage);
  }

  // Delegates to ROS param access with the current NodeHandle
  template <typename T>
  void ISmaccStateMachine::setParam(std::string param_name, T param_val)
  {
    return nh_.setParam(param_name, param_val);
  }

  // Delegates to ROS param access with the current NodeHandle
  template <typename T>
  bool ISmaccStateMachine::param(std::string param_name, T &param_val, const T &default_val) const
  {
    return nh_.param(param_name, param_val, default_val);
  }

  template <typename StateType>
  void ISmaccStateMachine::notifyOnStateEntryStart(StateType *state)
  {
    std::lock_guard<std::recursive_mutex> lock(m_mutex_);

    ROS_DEBUG("[State Machne] Initializating a new state '%s' and updating current state. Getting state meta-information. number of orthogonals: %ld", demangleSymbol(typeid(StateType).name()).c_str(), this->orthogonals_.size());

    stateSeqCounter_++;
    currentState_.push_back(state);
    currentStateInfo_ = stateMachineInfo_->getState<StateType>();
  }

  template <typename StateType>
  void ISmaccStateMachine::notifyOnStateEntryEnd(StateType *state)
  {
    ROS_INFO("[%s] State OnEntry code finished", demangleSymbol(typeid(StateType).name()).c_str());

    auto currentState = this->currentState_.back();
    for (auto pair : this->orthogonals_)
    {
      //ROS_INFO("ortho onentry: %s", pair.second->getName().c_str());
      auto &orthogonal = pair.second;
      try
      {
        orthogonal->onEntry();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[Orthogonal %s] Exception on Entry - continuing with next orthogonal. Exception info: %s",
                  pair.second->getName().c_str(), e.what());
      }
    }

    for (auto &sr : currentState->getStateReactors())
    {
      auto srname = smacc::demangleSymbol(typeid(*sr).name()).c_str();
      ROS_INFO("state reactor onEntry: %s", srname);
      try
      {
        sr->onEntry();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[State Reactor %s] Exception on Entry - continuing with next state reactor. Exception info: %s",
                  srname, e.what());
      }
    }

    for (auto &eg : currentState->getEventGenerators())
    {
      auto egname = smacc::demangleSymbol(typeid(*eg).name()).c_str();
      ROS_INFO("state reactor onEntry: %s", egname);
      try
      {
        eg->onEntry();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[Event generator %s] Exception on Entry - continuing with next state reactor. Exception info: %s",
                  egname, e.what());
      }
    }

    {
      std::lock_guard<std::recursive_mutex> lock(m_mutex_);
      this->updateStatusMessage();
      stateMachineCurrentAction = StateMachineInternalAction::STATE_STEADY;
    }
  }

  template <typename StateType>
  void ISmaccStateMachine::notifyOnRuntimeConfigurationFinished(StateType *state)
  {
    for (auto pair : this->orthogonals_)
    {
      //ROS_INFO("ortho onruntime configure: %s", pair.second->getName().c_str());
      auto &orthogonal = pair.second;
      orthogonal->runtimeConfigure();
    }

    {
      std::lock_guard<std::recursive_mutex> lock(m_mutex_);
      this->updateStatusMessage();
      this->signalDetector_->notifyStateConfigured(this->currentState_.back());

      stateMachineCurrentAction = StateMachineInternalAction::STATE_ENTERING;
    }
  }

  template <typename StateType>
  void ISmaccStateMachine::notifyOnRuntimeConfigured(StateType *state)
  {
    stateMachineCurrentAction = StateMachineInternalAction::STATE_CONFIGURING;
  }

  template <typename StateType>
  void ISmaccStateMachine::notifyOnStateExitting(StateType *state)
  {
    stateMachineCurrentAction = StateMachineInternalAction::STATE_EXITING;

    auto fullname = demangleSymbol(typeid(StateType).name());
    ROS_WARN_STREAM("exiting state: " << fullname);
    //this->setParam("destroyed", true);

    ROS_INFO_STREAM("Notification State Exit: leaving state" << state);
    for (auto pair : this->orthogonals_)
    {
      auto &orthogonal = pair.second;
      try
      {
        orthogonal->onExit();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[Orthogonal %s] Exception onExit - continuing with next orthogonal. Exception info: %s",
                  pair.second->getName().c_str(), e.what());
      }
    }

    for (auto &sr : state->getStateReactors())
    {
      auto srname = smacc::demangleSymbol(typeid(*sr).name()).c_str();
      ROS_INFO("state reactor OnExit: %s", srname);
      try
      {
        sr->onExit();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[State Reactor %s] Exception on OnExit - continuing with next state reactor. Exception info: %s",
                  srname, e.what());
      }
    }

    for (auto &eg : state->getEventGenerators())
    {
      auto egname = smacc::demangleSymbol(typeid(*eg).name()).c_str();
      ROS_INFO("state reactor OnExit: %s", egname);
      try
      {
        eg->onExit();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[State Reactor %s] Exception on OnExit - continuing with next state reactor. Exception info: %s",
                  egname, e.what());
      }
    }
  }

  template <typename StateType>
  void ISmaccStateMachine::notifyOnStateExited(StateType *state)
  {
    this->lockStateMachine("state exit");

    signalDetector_->notifyStateExited(state);

    auto fullname = demangleSymbol(typeid(StateType).name());
    ROS_WARN_STREAM("exiting state: " << fullname);

    ROS_INFO_STREAM("Notification State Disposing: leaving state" << state);
    for (auto pair : this->orthogonals_)
    {
      auto &orthogonal = pair.second;
      try
      {
        orthogonal->onDispose();
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[Orthogonal %s] Exception onDispose - continuing with next orthogonal. Exception info: %s",
                  pair.second->getName().c_str(), e.what());
      }
    }

    for (auto &sr : state->getStateReactors())
    {
      auto srname = smacc::demangleSymbol(typeid(*sr).name()).c_str();
      ROS_INFO("state reactor disposing: %s", srname);
      try
      {
        this->disconnectSmaccSignalObject(sr.get());
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[State Reactor %s] Exception on OnDispose - continuing with next state reactor. Exception info: %s",
                  srname, e.what());
      }
    }

    for (auto &eg : state->getEventGenerators())
    {
      auto egname = smacc::demangleSymbol(typeid(*eg).name()).c_str();
      ROS_INFO("state reactor disposing: %s", egname);
      try
      {
        this->disconnectSmaccSignalObject(eg.get());
      }
      catch (const std::exception &e)
      {
        ROS_ERROR("[State Reactor %s] Exception on OnDispose - continuing with next state reactor. Exception info: %s",
                  egname, e.what());
      }
    }

    this->stateCallbackConnections.clear();
    currentState_.pop_back();

    // then call exit state
    ROS_WARN_STREAM("state exit: " << fullname);

    stateMachineCurrentAction = StateMachineInternalAction::TRANSITIONING;
    this->unlockStateMachine("state exit");
  }
  //-------------------------------------------------------------------------------------------------------
  template <typename EventType>
  void ISmaccStateMachine::propagateEventToStateReactors(ISmaccState *st, EventType *ev)
  {
    ROS_DEBUG("PROPAGATING EVENT [%s] TO LUs [%s]: ", demangleSymbol<EventType>().c_str(), st->getClassName().c_str());
    for (auto &sb : st->getStateReactors())
    {
      sb->notifyEvent(ev);
    }

    auto *pst = st->getParentState();
    if (pst != nullptr)
    {
      propagateEventToStateReactors(pst, ev);
    }
  }

  template <typename InitialStateType>
  void ISmaccStateMachine::buildStateMachineInfo()
  {
    this->stateMachineInfo_ = std::make_shared<SmaccStateMachineInfo>();
    this->stateMachineInfo_->buildStateMachineInfo<InitialStateType>();
    this->stateMachineInfo_->assembleSMStructureMessage(this);
    this->checkStateMachineConsistence();
  }

  uint64_t ISmaccStateMachine::getCurrentStateCounter() const
  {
    return this->stateSeqCounter_;
  }

  ISmaccState *ISmaccStateMachine::getCurrentState() const
  {
    return this->currentState_.back();
  }

  const smacc::introspection::SmaccStateMachineInfo &ISmaccStateMachine::getStateMachineInfo()
  {
    return *this->stateMachineInfo_;
  }

} // namespace smacc


================================================
FILE: smacc/include/smacc/impl/smacc_state_reactor_impl.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_state_reactor.h>
#include <smacc/introspection/introspection.h>

namespace smacc
{

template <typename EventType>
void StateReactor::postEvent(const EventType &ev)
{
    ownerState->postEvent(ev);
}

template <typename EventType>
void StateReactor::postEvent()
{
    ownerState->postEvent<EventType>();
}

template <typename TEv>
void StateReactor::setOutputEvent()
{
    this->postEventFn = [this]() {
        ROS_INFO_STREAM("[State Reactor Base] postingfn posting event: " << demangleSymbol<TEv>());
        auto *ev = new TEv();
        this->ownerState->getStateMachine().postEvent(ev);
    };
}

template <typename TEv>
void StateReactor::addInputEvent()
{
    this->eventTypes.push_back(&typeid(TEv));
}

template <typename T, typename TClass>
void StateReactor::createEventCallback(void (TClass::*callback)(T *), TClass *object)
{
    const auto *eventtype = &typeid(T);
    this->eventCallbacks_[eventtype] = [=](void *msg) {
        T *evptr = (T *)msg;
        (object->*callback)(evptr);
    };
}

template <typename T>
void StateReactor::createEventCallback(std::function<void(T *)> callback)
{
    const auto *eventtype = &typeid(T);
    this->eventCallbacks_[eventtype] = [=](void *msg) {
        T *evptr = (T *)msg;
        callback(evptr);
    };
}

namespace introspection
{

template <typename TEv>
void StateReactorHandler::addInputEvent()
{
    StateReactorCallbackFunctor functor;
    functor.fn = [=](std::shared_ptr<smacc::StateReactor> sr) {
        ROS_INFO("[%s] State Reactor adding input event: %s", demangleType(srInfo_->stateReactorType).c_str(), demangledTypeName<TEv>().c_str());
        sr->addInputEvent<TEv>();
    };

    this->callbacks_.push_back(functor);

    auto evtype = TypeInfo::getFromStdTypeInfo(typeid(TEv));
    auto evinfo = std::make_shared<SmaccEventInfo>(evtype);
    EventLabel<TEv>(evinfo->label);

    srInfo_->sourceEventTypes.push_back(evinfo);
}

template <typename TEv>
void StateReactorHandler::setOutputEvent()
{
    StateReactorCallbackFunctor functor;
    functor.fn = [=](std::shared_ptr<smacc::StateReactor> sr) {
        ROS_INFO("[%s] State Reactor setting output event: %s", demangleType(srInfo_->stateReactorType).c_str(), demangledTypeName<TEv>().c_str());
        sr->setOutputEvent<TEv>();
    };

    this->callbacks_.push_back(functor);
}
} // namespace introspection

} // namespace smacc


================================================
FILE: smacc/include/smacc/introspection/introspection.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <boost/statechart/state.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/event.hpp>

#include <ros/ros.h>
#include <typeinfo>
#include <boost/mpl/list.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/transform.hpp>

#include <smacc/smacc_types.h>
#include <smacc/introspection/string_type_walker.h>
#include <smacc/introspection/smacc_state_info.h>

#include <smacc_msgs/SmaccTransition.h>

namespace sc = boost::statechart;

namespace smacc
{
namespace introspection
{
using namespace boost;
using namespace smacc::default_transition_tags;

void transitionInfoToMsg(const SmaccTransitionInfo &transition, smacc_msgs::SmaccTransition &transitionMsg);

typedef std::allocator<boost::statechart::none> SmaccAllocator;

template <class T>
auto optionalNodeHandle(boost::intrusive_ptr<T> &obj)
    -> ros::NodeHandle
{
    return obj->getROSNode();
}

template <class T>
auto optionalNodeHandle(T *) -> ros::NodeHandle
{
    return ros::NodeHandle("");
}

inline std::string demangleSymbol(const std::string &name)
{
    return demangleSymbol(name.c_str());
}

inline std::string demangleSymbol(const char *name)
{
#if (__GNUC__ && __cplusplus && __GNUC__ >= 3)
    int status;
    char *res = abi::__cxa_demangle(name, 0, 0, &status);
    if (res)
    {
        const std::string demangled_name(res);
        std::free(res);
        return demangled_name;
    }
    // Demangling failed, fallback to mangled name
    return std::string(name);
#else
    return std::string(name);
#endif
}

template <typename T>
inline std::string demangleSymbol()
{
    return demangleSymbol(typeid(T).name());
}

template <class T>
inline std::string demangledTypeName()
{
    return demangleSymbol(typeid(T).name());
}

inline std::string demangleType(const std::type_info* tinfo)
{
    return demangleSymbol(tinfo->name());
}

inline std::string demangleType(const std::type_info &tinfo)
{
    return demangleSymbol(tinfo.name());
}

template <typename...>
struct typelist
{
};

//-------------------------------------------------------------------------
template <typename T>
class HasEventLabel
{
private:
    typedef char YesType[1];
    typedef char NoType[2];

    template <typename C>
    static YesType &test(decltype(&C::getEventLabel));
    template <typename C>
    static NoType &test(...);

public:
    enum
    {
        value = sizeof(test<T>(0)) == sizeof(YesType)
    };
};

template <typename T>
typename std::enable_if<HasEventLabel<T>::value, void>::type
EventLabel(std::string &label)
{
    label = T::getEventLabel();
}

template <typename T>
typename std::enable_if<!HasEventLabel<T>::value, void>::type
EventLabel(std::string &label)
{
    label = "";
}
//-----------------------------------------------------------------------

template <typename T>
class HasAutomaticTransitionTag
{
private:
    typedef char YesType[1];
    typedef char NoType[2];

    template <typename C>
    static YesType &test(decltype(&C::getDefaultTransitionTag));
    template <typename C>
    static NoType &test(...);

public:
    enum
    {
        value = sizeof(test<T>(0)) == sizeof(YesType)
    };
};

template <typename T>
typename std::enable_if<HasAutomaticTransitionTag<T>::value, void>::type
automaticTransitionTag(std::string &transition_name)
{
    transition_name = T::getDefaultTransitionTag();
}

template <typename T>
typename std::enable_if<!HasAutomaticTransitionTag<T>::value, void>::type
automaticTransitionTag(std::string &transition_name)
{
    transition_name = "";
}

//-------------------------------------------------
template <typename T>
class HasAutomaticTransitionType
{
private:
    typedef char YesType[1];
    typedef char NoType[2];

    template <typename C>
    static YesType &test(decltype(&C::getDefaultTransitionType));
    template <typename C>
    static NoType &test(...);

public:
    enum
    {
        value = sizeof(test<T>(0)) == sizeof(YesType)
    };
};

template <typename T>
typename std::enable_if<HasAutomaticTransitionType<T>::value, void>::type
automaticTransitionType(std::string &transition_type)
{
    transition_type = T::getDefaultTransitionType();
}

template <typename T>
typename std::enable_if<!HasAutomaticTransitionType<T>::value, void>::type
automaticTransitionType(std::string &transition_type)
{
    transition_type = demangledTypeName<DEFAULT>();
}

// there are many ways to implement this, for instance adding static methods to the types
typedef boost::mpl::list<SUCCESS, ABORT, PREEMPT, CONTINUELOOP, ENDLOOP> DEFAULT_TRANSITION_TYPES;

//--------------------------------

template <typename T>
struct type_
{
    using type = T;
};

//---------------------------------------------
template <typename T>
struct add_type_wrapper
{
    using type = type_<T>;
};

template <typename TTransition>
struct CheckType
{
    CheckType(std::string *transitionTypeName)
    {
        this->transitionTypeName = transitionTypeName;
    }

    std::string *transitionTypeName;
    template <typename T>
    void operator()(T)
    {
        //ROS_INFO_STREAM("comparing.."<< demangleSymbol<T>() <<" vs " << demangleSymbol<TTransition>() );
        if (std::is_base_of<T, TTransition>::value || std::is_same<T, TTransition>::value)
        {
            *(this->transitionTypeName) = demangledTypeName<T>();
            //ROS_INFO("YESS!");
        }
    }
};

template <typename TTransition>
static std::string getTransitionType()
{
    std::string output;
    CheckType<TTransition> op(&output);
    using boost::mpl::_1;
    using wrappedList = typename boost::mpl::transform<DEFAULT_TRANSITION_TYPES, _1>::type;

    boost::mpl::for_each<wrappedList>(op);
    return output;
};

// // BASE CASE
// template <typename T>
// static void walkStateReactorsSources(SmaccStateReactorInfo &sbinfo, typelist<T>)
// {
//     auto sourceType = TypeInfo::getFromStdTypeInfo(typeid(T));
//     auto evinfo = std::make_shared<SmaccEventInfo>(sourceType);
//     EventLabel<T>(evinfo->label);
//     sbinfo.sourceEventTypes.push_back(evinfo);
//     ROS_INFO_STREAM("event: " << sourceType->getFullName());
//     ROS_INFO_STREAM("event parameters: " << sourceType->templateParameters.size());
// }

// // RECURSIVE CASE
// template <typename TEvHead, typename... TEvArgs>
// static void walkStateReactorsSources(SmaccStateReactorInfo &sbinfo, typelist<TEvHead, TEvArgs...>)
// {
//     auto sourceType = TypeInfo::getFromStdTypeInfo(typeid(TEvHead));
//     auto evinfo = std::make_shared<SmaccEventInfo>(sourceType);
//     EventLabel<TEvHead>(evinfo->label);
//     sbinfo.sourceEventTypes.push_back(evinfo);
//     ROS_INFO_STREAM("event: " << sourceType->getFullName());
//     ROS_INFO_STREAM("event parameters: " << sourceType->templateParameters.size());
//     walkStateReactorsSources(sbinfo, typelist<TEvArgs...>());
// }

} // namespace introspection
} // namespace smacc
#include <smacc/introspection/smacc_state_machine_info.h>


================================================
FILE: smacc/include/smacc/introspection/smacc_state_info.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <memory>
#include <functional>
#include <vector>
#include <smacc/smacc_types.h>

namespace smacc
{
namespace introspection
{

struct ClientBehaviorInfoEntry
{
    std::function<void(smacc::ISmaccState *)> factoryFunction;
    const std::type_info *behaviorType;
    const std::type_info *orthogonalType;
};

//---------------------------------------------
struct SmaccEventInfo
{
    SmaccEventInfo(std::shared_ptr<TypeInfo> eventType);

    std::string getEventTypeName();

    std::string getEventSourceName();

    // AKA orthogonal
    std::string getOrthogonalName();

    std::string label;

    std::shared_ptr<TypeInfo> eventType;

private:
};

struct SmaccTransitionInfo
{
    SmaccTransitionInfo()
    {
    }

    bool historyNode;
    int index;
    std::shared_ptr<SmaccStateInfo> sourceState;
    std::shared_ptr<SmaccStateInfo> destinyState;

    std::string transitionTag;
    std::string transitionType;
    std::shared_ptr<SmaccEventInfo> eventInfo;

    smacc::introspection::TypeInfo::Ptr transitionTypeInfo;
};
//---------------------------------------------

struct StateReactorCallbackFunctor
{
    std::function<void(std::shared_ptr<smacc::StateReactor>)> fn;
};

class StateReactorHandler
{
private:
    std::vector<StateReactorCallbackFunctor> callbacks_;

public:
    void configureStateReactor(std::shared_ptr<smacc::StateReactor> sr);

    template <typename TEv>
    void addInputEvent();

    template <typename TEv>
    void setOutputEvent();

    std::shared_ptr<smacc::introspection::SmaccStateReactorInfo> srInfo_;
};

struct SmaccStateReactorInfo
{
    std::shared_ptr<SmaccStateInfo> ownerState;
    std::function<void(smacc::ISmaccState *)> factoryFunction;

    const std::type_info *stateReactorType;
    std::shared_ptr<TypeInfo> objectTagType;
    std::vector<std::shared_ptr<SmaccEventInfo>> sourceEventTypes;
    std::shared_ptr<StateReactorHandler> srh;
};

//---------------------------------------------------------
struct EventGeneratorCallbackFunctor
{
    std::function<void(std::shared_ptr<smacc::SmaccEventGenerator>)> fn;
};

class EventGeneratorHandler
{
private:
    std::vector<EventGeneratorCallbackFunctor> callbacks_;

public:
    void configureEventGenerator(std::shared_ptr<smacc::SmaccEventGenerator> eg);

    template <typename TEv>
    void setOutputEvent();

    std::shared_ptr<smacc::introspection::SmaccEventGeneratorInfo> egInfo_;
};

struct SmaccEventGeneratorInfo
{
    std::shared_ptr<SmaccStateInfo> ownerState;
    std::function<void(smacc::ISmaccState *)> factoryFunction;

    const std::type_info *eventGeneratorType;
    std::shared_ptr<TypeInfo> objectTagType;
    std::vector<std::shared_ptr<SmaccEventInfo>> sourceEventTypes;
    std::shared_ptr<EventGeneratorHandler> egh;
};

//---------------------------------------------

enum class SmaccStateType
{
    SUPERSTATE = 2,
    STATE = 1,
    SUPERSTATE_ROUTINE = 1
};

class SmaccStateInfo : public std::enable_shared_from_this<SmaccStateInfo>
{

public:
    typedef std::shared_ptr<SmaccStateInfo> Ptr;

    static std::map<const std::type_info *, std::vector<ClientBehaviorInfoEntry>> staticBehaviorInfo;
    static std::map<const std::type_info *, std::vector<std::shared_ptr<SmaccStateReactorInfo>>> stateReactorsInfo;
    static std::map<const std::type_info *, std::vector<std::shared_ptr<SmaccEventGeneratorInfo>>> eventGeneratorsInfo;

    int stateIndex_;
    std::string fullStateName;
    std::string demangledStateName;

    std::shared_ptr<SmaccStateMachineInfo> stateMachine_;
    std::shared_ptr<SmaccStateInfo> parentState_;
    std::vector<SmaccTransitionInfo> transitions_;

    std::vector<std::shared_ptr<SmaccStateInfo>> children_;
    int depth_;
    const std::type_info *tid_;

    SmaccStateInfo(const std::type_info *tid, std::shared_ptr<SmaccStateInfo> parentState, std::shared_ptr<SmaccStateMachineInfo> stateMachineInfo);

    SmaccStateType getStateLevel();

    inline int depth() const { return depth_; }

    void getAncestors(std::list<const SmaccStateInfo *> &ancestorsList) const;

    std::string getFullPath();

    template <typename StateType>
    std::shared_ptr<SmaccStateInfo> createChildState();

    template <typename EvType>
    void declareTransition(std::shared_ptr<SmaccStateInfo> &dstState, std::string transitionTag, std::string transitionType, bool history, TypeInfo::Ptr transitionTypeInfo);

    // template <typename EvSource, template <typename> typename EvType>
    // void declareTransition(std::shared_ptr<SmaccStateInfo> &dstState, std::string transitionTag, std::string transitionType, bool history);

    const std::string &toShortName() const;

    std::string getDemangledFullName() const;
};
} // namespace introspection
} // namespace smacc


================================================
FILE: smacc/include/smacc/introspection/smacc_state_machine_info.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <smacc/common.h>
#include <smacc/smacc_orthogonal.h>

// smacc_msgs
#include <smacc_msgs/SmaccState.h>
#include <smacc_msgs/SmaccTransition.h>
#include <smacc_msgs/SmaccOrthogonal.h>
#include <smacc_msgs/SmaccStateReactor.h>
#include <smacc_msgs/SmaccEventGenerator.h>

namespace smacc
{
namespace introspection
{
class SmaccStateMachineInfo : public std::enable_shared_from_this<SmaccStateMachineInfo>
{
public:
    std::map<std::string, std::shared_ptr<SmaccStateInfo>> states;

    std::vector<smacc_msgs::SmaccState> stateMsgs;

    template <typename InitialStateType>
    void buildStateMachineInfo();

    template <typename StateType>
    std::shared_ptr<SmaccStateInfo> createState(std::shared_ptr<SmaccStateInfo> parentState);

    template <typename StateType>
    bool containsState()
    {
        auto typeNameStr = typeid(StateType).name();

        return states.count(typeNameStr) > 0;
    }

    template <typename StateType>
    std::shared_ptr<SmaccStateInfo> getState()
    {
        if (this->containsState<StateType>())
        {
            return states[typeid(StateType).name()];
        }
        return nullptr;
    }

    template <typename StateType>
    void addState(std::shared_ptr<StateType> &state);

    void assembleSMStructureMessage(ISmaccStateMachine *sm);
};

//---------------------------------------------
struct AddSubState
{
    std::shared_ptr<SmaccStateInfo> &parentState_;
    AddSubState(std::shared_ptr<SmaccStateInfo> &parentState)
        : parentState_(parentState)
    {
    }

    template <typename T>
    void operator()(T);
};

//---------------------------------------------
struct AddTransition
{
    std::shared_ptr<SmaccStateInfo> &currentState_;

    AddTransition(std::shared_ptr<SmaccStateInfo> &currentState)
        : currentState_(currentState)
    {
    }

    template <template <typename, typename, typename> typename TTransition, typename TevSource, template <typename> typename EvType, typename Tag, typename DestinyState>
    void operator()(TTransition<EvType<TevSource>, DestinyState, Tag>);

    template <template <typename, typename> typename TTransition, typename TevSource, template <typename> typename EvType, typename DestinyState>
    void operator()(TTransition<EvType<TevSource>, DestinyState>);

    template <typename T>
    void operator()(T);
};

//---------------------------------------------
template <typename InitialStateType>
struct WalkStatesExecutor
{
    static void walkStates(std::shared_ptr<SmaccStateInfo> &currentState, bool rootInitialNode);
};

//---------------------------------------------
template <typename T>
void AddSubState::operator()(T)
{
    using type_t = typename T::type;
    //auto childState = this->parentState_->createChildState<type_t>()
    WalkStatesExecutor<type_t>::walkStates(parentState_, false);
}
//--------------------------------------------
template <typename T>
typename disable_if<boost::mpl::is_sequence<T>>::type
processSubState(std::shared_ptr<SmaccStateInfo> &parentState)
{
    WalkStatesExecutor<T>::walkStates(parentState, false);
}

//---------------------------------------------
template <typename T>
typename enable_if<boost::mpl::is_sequence<T>>::type
processSubState(std::shared_ptr<SmaccStateInfo> &parentState)
{
    using boost::mpl::_1;
    using wrappedList = typename boost::mpl::transform<T, add_type_wrapper<_1>>::type;
    boost::mpl::for_each<wrappedList>(AddSubState(parentState));
}

//--------------------------------------------
/*Iterate on All Transitions*/
template <typename T>
typename enable_if<boost::mpl::is_sequence<T>>::type
processTransitions(std::shared_ptr<SmaccStateInfo> &sourceState)
{

    ROS_INFO_STREAM("State %s Walker has transition list");
    using boost::mpl::_1;
    using wrappedList = typename boost::mpl::transform<T, add_type_wrapper<_1>>::type;
    boost::mpl::for_each<wrappedList>(AddTransition(sourceState));
}

template <typename Ev, typename Dst, typename Tag>
void processTransition(smacc::Transition<Ev, boost::statechart::deep_history<Dst>, Tag> *, std::shared_ptr<SmaccStateInfo> &sourceState)
{
    auto transitionTypeInfo = TypeInfo::getTypeInfoFromType<smacc::Transition<Ev, boost::statechart::deep_history<Dst>, Tag>>();
    smacc::Transition<Ev, Dst, Tag> *mock;
    processTransitionAux(mock, sourceState, true, transitionTypeInfo);
}

template <typename Ev, typename Dst, typename Tag>
void processTransition(smacc::Transition<Ev, Dst, Tag> *t, std::shared_ptr<SmaccStateInfo> &sourceState)
{
    auto transitionTypeInfo = TypeInfo::getTypeInfoFromType<smacc::Transition<Ev, Dst, Tag>>();
    processTransitionAux(t, sourceState, false, transitionTypeInfo);
}

template <typename Ev, typename Dst, typename Tag>
void processTransitionAux(smacc::Transition<Ev, Dst, Tag> *, std::shared_ptr<SmaccStateInfo> &sourceState, bool history, TypeInfo::Ptr &transitionTypeInfo)
{
    ROS_INFO("State %s Walker transition: %s", sourceState->toShortName().c_str(), demangleSymbol(typeid(Ev).name()).c_str());
    std::string transitionTag;
    std::string transitionType;

    if (typeid(Tag) != typeid(default_transition_name))
    {
        transitionTag = demangleSymbol<Tag>();
        transitionType = getTransitionType<Tag>();
        ROS_DEBUG_STREAM("TRANSITION TYPE:" << transitionType);
    }
    else
    {
        transitionTag = "";
        automaticTransitionTag<Ev>(transitionTag);
        automaticTransitionType<Ev>(transitionType);
    }

    ROS_INFO_STREAM("Transition tag: " << transitionTag);

    if (!sourceState->stateMachine_->containsState<Dst>())
    {
        auto realparentState = sourceState->stateMachine_->getState<typename Dst::TContext>();
        auto siblingnode = sourceState->stateMachine_->createState<Dst>(realparentState);

        //auto siblingnode = sourceState->stateMachine_->createState<Dst>(sourceState->parentState_);
        WalkStatesExecutor<Dst>::walkStates(siblingnode, true);
        sourceState->declareTransition<Ev>(siblingnode, transitionTag, transitionType, history, transitionTypeInfo);
    }
    else
    {
        //auto realparentState = sourceState->stateMachine_->getState<typename Dst::TContext>();
        //auto siblingnode = sourceState->stateMachine_->createState<Dst>(realparentState);

        auto siblingnode = sourceState->stateMachine_->getState<Dst>();
        sourceState->declareTransition<Ev>(siblingnode, transitionTag, transitionType, history, transitionTypeInfo);
    }
}

//---------------------------------------------
template <typename EvType>
void SmaccStateInfo::declareTransition(std::shared_ptr<SmaccStateInfo> &dstState, std::string transitionTag, std::string transitionType, bool history, TypeInfo::Ptr transitionTypeInfo)
{
    auto evtype = demangledTypeName<EvType>();

    SmaccTransitionInfo transitionInfo;
    transitionInfo.index = transitions_.size();
    transitionInfo.sourceState = shared_from_this();
    transitionInfo.destinyState = dstState;
    transitionInfo.transitionTypeInfo = transitionTypeInfo;

    if (transitionTag != "")
        transitionInfo.transitionTag = transitionTag;
    else
        transitionInfo.transitionTag = "Transition_" + std::to_string(transitionInfo.index);

    transitionInfo.transitionType = transitionType;
    transitionInfo.historyNode = history;

    transitionInfo.eventInfo = std::make_shared<SmaccEventInfo>(transitionTypeInfo->templateParameters.front());

    EventLabel<EvType>(transitionInfo.eventInfo->label);
    ROS_DEBUG_STREAM("LABEL: " << transitionInfo.eventInfo->label);

    transitions_.push_back(transitionInfo);
}
//---------------------------------------------

// template <typename TevSource, template <typename> typename EvType>
// void SmaccStateInfo::declareTransition(std::shared_ptr<SmaccStateInfo> &dstState, std::string transitionTag, std::string transitionType, bool history)
// {
//     auto evtype = demangledTypeName<EvType<TevSource>>();

//     SmaccTransitionInfo transitionInfo;
//     transitionInfo.index = transitions_.size();
//     transitionInfo.sourceState = shared_from_this();
//     transitionInfo.destinyState = dstState;

//     if (transitionTag != "")
//         transitionInfo.transitionTag = transitionTag;
//     else
//         transitionInfo.transitionTag = "Transition_" + std::to_string(transitionInfo.index);

//     transitionInfo.transitionType = transitionType;

//     transitionInfo.eventInfo = std::make_shared<SmaccEventInfo>(TypeInfo::getTypeInfoFromString(demangleSymbol(typeid(EvType<TevSource>).name())));

//     EventLabel<EvType<TevSource>>(transitionInfo.eventInfo->label);
//     ROS_ERROR_STREAM("LABEL: " << transitionInfo.eventInfo->label);

//     transitions_.push_back(transitionInfo);
// }

//---------------------------------------------
template <typename Ev, typename Dst>
void processTransition(statechart::transition<Ev, Dst> *, std::shared_ptr<SmaccStateInfo> &sourceState)
{
    //ROS_INFO_STREAM("GOTCHA");
}

template <typename Ev>
void processTransition(statechart::custom_reaction<Ev> *, std::shared_ptr<SmaccStateInfo> &sourceState)
{
    //ROS_INFO_STREAM("GOTCHA");
}

//---------------------------------------------
// only reached if it is a leaf transition in the mpl::list

template <typename T>
typename disable_if<boost::mpl::is_sequence<T>>::type
processTransitions(std::shared_ptr<SmaccStateInfo> &sourceState)
{
    //ROS_INFO_STREAM("state transition from: " << sourceState->demangledStateName << " of type: " << demangledTypeName<T>());
    T *dummy;
    processTransition(dummy, sourceState);
}

/*
// only reached if it is a leaf transition in the mpl::list
template <template <typename,typename,typename> typename TTransition, typename TevSource, template <typename> typename EvType, typename Tag, typename DestinyState >
typename disable_if<boost::mpl::is_sequence<TTransition<EvType<TevSource>,DestinyState, Tag>>>::type
processTransitions(std::shared_ptr<SmaccStateInfo> &sourceState)
{
    ROS_INFO("DETECTED COMPLEX TRANSITION **************");
    //ROS_INFO_STREAM("state transition from: " << sourceState->demangledStateName << " of type: " << demangledTypeName<T>());
    TTransition<EvType<TevSource>,DestinyState, Tag> *dummy;
    processTransition(dummy, sourceState);
}

template <template <typename,typename> typename TTransition, typename TevSource, template <typename> typename EvType, typename DestinyState >
typename disable_if<boost::mpl::is_sequence<TTransition<EvType<TevSource>,DestinyState>>>::type
processTransitions(std::shared_ptr<SmaccStateInfo> &sourceState)
{
    ROS_INFO("DETECTED COMPLEX TRANSITION **************");
    //ROS_INFO_STREAM("state transition from: " << sourceState->demangledStateName << " of type: " << demangledTypeName<T>());
    TTransition<EvType<TevSource>,DestinyState> *dummy;
    processTransition(dummy, sourceState);
}
*/

//--------------------------------------------

template <template <typename, typename, typename> typename TTransition, typename TevSource, template <typename> typename EvType, typename Tag, typename DestinyState>
void AddTransition::operator()(TTransition<EvType<TevSource>, DestinyState, Tag>)
{
    processTransitions<TTransition<EvType<TevSource>, DestinyState, Tag>>(currentState_);
}

//--------------------------------------------

template <template <typename, typename> typename TTransition, typename TevSource, template <typename> typename EvType, typename DestinyState>
void AddTransition::operator()(TTransition<EvType<TevSource>, DestinyState>)
{
    processTransitions<TTransition<EvType<TevSource>, DestinyState>>(currentState_);
}

template <typename TTrans>
void AddTransition::operator()(TTrans)
{
    using type_t = typename TTrans::type;
    processTransitions<type_t>(currentState_);
}

//------------------ staticConfigure -----------------------------

// SFINAE test
template <typename T>
class HasOnDefinition
{
private:
    typedef char YesType[1];
    typedef char NoType[2];

    template <typename C>
    static YesType &test(decltype(&C::staticConfigure));
    template <typename C>
    static NoType &test(...);

public:
    enum
    {
        value = sizeof(test<T>(0)) == sizeof(YesType)
    };
};

template <typename T>
typename std::enable_if<HasOnDefinition<T>::value, void>::type
CallOnDefinition()
{
    /* something when T has toString ... */
    ROS_INFO_STREAM("EXECUTING ONDEFINITION: " << demangleSymbol(typeid(T).name()));
    T::staticConfigure();
}

template <typename T>
typename std::enable_if<!HasOnDefinition<T>::value, void>::type
CallOnDefinition()
{
    ROS_INFO_STREAM("static OnDefinition: dont exist for " << demangleSymbol(typeid(T).name()));
    /* something when T has toString ... */
}

/*
void CallOnDefinition(...)
{

}*/

//-----------------------------------------------------------------------------------
template <typename InitialStateType>
void WalkStatesExecutor<InitialStateType>::walkStates(std::shared_ptr<SmaccStateInfo> &parentState, bool rootInitialNode)
{
    //ros::Duration(1).sleep();
    auto currentname = demangledTypeName<InitialStateType>();

    std::shared_ptr<SmaccStateInfo> targetState;

    if (!rootInitialNode)
    {
        if (parentState->stateMachine_->containsState<InitialStateType>())
        {
            // it already exist: break;
            return;
        }

        targetState = parentState->createChildState<InitialStateType>();
    }
    else
    {
        targetState = parentState;
    }

    CallOnDefinition<InitialStateType>();

    typedef typename std::remove_pointer<decltype(InitialStateType::smacc_inner_type)>::type InnerType;
    processSubState<InnerType>(targetState);

    // -------------------- REACTIONS --------------------
    typedef typename InitialStateType::reactions reactions;
    //ROS_INFO_STREAM("state machine initial state reactions: "<< demangledTypeName<reactions>());

    processTransitions<reactions>(targetState);
}

//------------------------------------------------

template <typename InitialStateType>
void SmaccStateMachineInfo::buildStateMachineInfo()
{
    auto initialState = this->createState<InitialStateType>(nullptr);
    WalkStatesExecutor<InitialStateType>::walkStates(initialState, true);
}

template <typename StateType>
std::shared_ptr<SmaccStateInfo> SmaccStateMachineInfo::createState(std::shared_ptr<SmaccStateInfo> parent)
{
    auto thisptr = this->shared_from_this();
    auto *statetid = &(typeid(StateType));

    auto demangledName = demangledTypeName<StateType>();
    ROS_INFO_STREAM("Creating State Info: " << demangledName);

    auto state = std::make_shared<SmaccStateInfo>(statetid, parent, thisptr);
    state->demangledStateName = demangledName;
    state->fullStateName = typeid(StateType).name();
    state->stateIndex_ = states.size();

    if (parent != nullptr)
    {
        parent->children_.push_back(state);
    }

    this->addState(state);

    return state;
}

template <typename StateType>
void SmaccStateMachineInfo::addState(std::shared_ptr<StateType> &state)
{
    states[state->fullStateName] = state;
}

template <typename StateType>
std::shared_ptr<SmaccStateInfo> SmaccStateInfo::createChildState()
{
    auto realparentState = this->stateMachine_->getState<typename StateType::TContext>();

    auto childState = this->stateMachine_->createState<StateType>(realparentState);

    ROS_WARN_STREAM("Real parent state> " << demangleSymbol<typename StateType::TContext>());

    /*auto contextInfo = TypeInfo::getTypeInfoFromType<InitialStateType>();
    auto parentState2= getState<InitialStateType::TContext>();
    parentState2->createChildState<InitialStateType>();*/

    //this->stateMachine_->addState(childState);
    //stateMachineInfo.addState(stateMachineInfo)
    //stateNames.push_back(currentname);
    //ROS_INFO("------------");
    //ROS_INFO_STREAM("** STATE state: "<< this->demangledStateName);

    return childState;
}
} // namespace introspection
} // namespace smacc


================================================
FILE: smacc/include/smacc/introspection/state_traits.h
================================================
#pragma once

namespace smacc
{
    template <typename T, typename TransitionTagName>
    class HasSpecificNamedOnExit
    {
        template <typename U, void (U::*)(TransitionTagName)>
        struct Check;
        template <typename U>
        static char func(Check<U, &U::onExit> *);
        template <typename U>
        static int func(...);

    public:
        typedef HasSpecificNamedOnExit type;
        enum
        {
            value = sizeof(func<T>(0)) == sizeof(char)
        };
    };

    template <typename TState, typename TTransitionTagName>
    void specificNamedOnExit(TState &st, TTransitionTagName tn, std::true_type)
    {
        st.onExit(tn);
    }

    template <typename TState, typename TTransitionTagName>
    void specificNamedOnExit(TState &, TTransitionTagName tn, std::false_type)
    {
    }

    template <typename TState, typename TTransitionTagName>
    void specificNamedOnExit(TState &m, TTransitionTagName tn)
    {
        specificNamedOnExit(m, tn,
                            std::integral_constant<bool, HasSpecificNamedOnExit<TState, TTransitionTagName>::value>());
    }

    //-------------------------------------------------

    template <typename T>
    class HasStandardOnExit
    {
        template <typename U, void (U::*)()>
        struct Check;
        template <typename U>
        static char func(Check<U, &U::onExit> *);
        template <typename U>
        static int func(...);

    public:
        typedef HasStandardOnExit type;
        enum
        {
            value = sizeof(func<T>(0)) == sizeof(char)
        };
    };

    template <typename TState>
    void standardOnExit(TState &st, std::true_type)
    {
        st.onExit();
    }

    template <typename TState>
    void standardOnExit(TState &, std::false_type)
    {
    }

    template <typename TState>
    void standardOnExit(TState &m)
    {
        standardOnExit(m,
                       std::integral_constant<bool, HasStandardOnExit<TState>::value>());
    }

} // namespace smacc


================================================
FILE: smacc/include/smacc/introspection/string_type_walker.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <string>
#include <memory>
#include <vector>
#include <typeinfo>
#include <map>

namespace smacc
{
namespace introspection
{
class TypeInfo
{
public:
    typedef std::shared_ptr<TypeInfo> Ptr;

    //---- FACTORY STATIC METHODS -----------
    static TypeInfo::Ptr getTypeInfoFromString(std::string inputtext);
    static TypeInfo::Ptr getFromStdTypeInfo(const std::type_info &tid);

    template <typename T>
    static TypeInfo::Ptr getTypeInfoFromType()
    {
        return TypeInfo::getFromStdTypeInfo(typeid(T));
    }
    //---------------------------------------

    std::vector<Ptr> templateParameters;

    TypeInfo(std::string tkey, std::string codedtype, std::string finaltype)
    {
        this->tkey = tkey;
        this->codedtype = codedtype;
        this->finaltype = finaltype;
    }

    std::string toString()
    {
        return this->tkey + ":" + this->finaltype;
    }

    std::string getNonTemplatedTypeName()
    {
        auto index = this->finaltype.find("<");
        return this->finaltype.substr(0, index);
    }


    const std::string &getFullName()
    {
        return this->finaltype;
    }

    static std::map<std::string, Ptr> typeInfoDatabase;

private:
    std::string tkey;
    std::string codedtype;
    std::string finaltype;
};
} // namespace introspection
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once
#include <smacc/common.h>
#include <smacc/smacc_state_machine_base.h>
#include <smacc/smacc_signal_detector.h>
#include <smacc/smacc_default_events.h>


================================================
FILE: smacc/include/smacc/smacc_asynchronous_client_behavior.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_client_behavior_base.h>
#include <smacc/smacc_signal.h>
#include <thread>
#include <condition_variable>
#include <mutex>
#include <future>

namespace smacc
{
    template <typename AsyncCB, typename Orthogonal>
    struct EvCbFinished : sc::event<EvCbFinished<AsyncCB, Orthogonal>>
    {
    };

    template <typename AsyncCB, typename Orthogonal>
    struct EvCbSuccess : sc::event<EvCbSuccess<AsyncCB, Orthogonal>>
    {
    };

    template <typename AsyncCB, typename Orthogonal>
    struct EvCbFailure : sc::event<EvCbFailure<AsyncCB, Orthogonal>>
    {
    };

    // Asnchronous client behaviors are used when the onEntry or onExit function execution is slow
    // CONCEPT: this funcionality is related with the orthogonality of SmaccState machines.
    // No behavior should block the creation of other behaviors, all of them conceptually start in parallel.
    // Alternative for long duration behaviors: using default-synchromous SmaccClientBehaviors with the update method
    // ASYNCHRONOUS STATE MACHINES DESIGN NOTES: Asynchronous behaviors can safely post events and use its local methods,
    //  but the interaction with other components or elements of
    // the state machine is not by-default thread safe and must be manually implemented. For example, if some element of the architecture
    // (components, states, clients) need to access to this behavior client information it is needed to implement a mutex for the internal
    // state of this behavior. Other example: if this behavior access to some component located in other thread, it is also may be needed
    // to some mutex for that component
    class SmaccAsyncClientBehavior : public ISmaccClientBehavior
    {
    public:
        template <typename TOrthogonal, typename TSourceObject>
        void onOrthogonalAllocation();

        virtual ~SmaccAsyncClientBehavior();

        template <typename TCallback, typename T>
        boost::signals2::connection onSuccess(TCallback callback, T *object);

        template <typename TCallback, typename T>
        boost::signals2::connection onFinished(TCallback callback, T *object);

        template <typename TCallback, typename T>
        boost::signals2::connection onFailure(TCallback callback, T *object);

    protected:
        virtual void executeOnEntry() override;
        virtual void executeOnExit() override;

        void postSuccessEvent();
        void postFailureEvent();

        virtual void dispose() override;

    private:
        std::future<int> onEntryThread_;
        std::future<int> onExitThread_;

        std::function<void()> postFinishEventFn_;
        std::function<void()> postSuccessEventFn_;
        std::function<void()> postFailureEventFn_;

        SmaccSignal<void()> onFinished_;
        SmaccSignal<void()> onSuccess_;
        SmaccSignal<void()> onFailure_;
    };
} // namespace smacc

#include <smacc/impl/smacc_asynchronous_client_behavior_impl.h>


================================================
FILE: smacc/include/smacc/smacc_client.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once

#include <smacc/common.h>
#include <smacc/component.h>
#include <typeinfo>

namespace smacc
{
struct ComponentKey
{
    ComponentKey(const std::type_info *typeinfo, std::string name)
    {
        this->name = name;
        this->typeinfo = typeinfo;
        encodedKey = std::to_string((long)(void *)typeinfo) + "_" + name;
    }
    std::string encodedKey;
    const std::type_info *typeinfo;
    std::string name;

    bool operator<(const ComponentKey &other) const
    {
        return this->encodedKey < other.encodedKey;
    }
    bool operator==(const ComponentKey &other) const
    {
        return this->encodedKey == other.encodedKey;
    }
};

class ISmaccClient
{
public:
    ISmaccClient();
    virtual ~ISmaccClient();

    virtual void initialize();

    // Returns a custom identifier defined by the specific plugin implementation
    virtual std::string getName() const;

    template <typename EventType>
    void postEvent(const EventType &ev);

    template <typename EventType>
    void postEvent();

    template <typename TComponent>
    TComponent *getComponent();

    template <typename TComponent>
    TComponent *getComponent(std::string name);

    virtual smacc::introspection::TypeInfo::Ptr getType();

    inline ISmaccStateMachine *getStateMachine();

    template <typename TSmaccSignal, typename T>
    void connectSignal(TSmaccSignal &signal, void (T::*callback)(), T *object);

    template <typename SmaccClientType>
    void requiresClient(SmaccClientType *&storage);

    void getComponents(std::vector<std::shared_ptr<ISmaccComponent>> &components);

protected:

// it is called after the client initialization, provides information about the orthogonal it is located in
    template <typename TOrthogonal, typename TSourceObject>
    void onOrthogonalAllocation() {}

    // components
    std::map<ComponentKey, std::shared_ptr<smacc::ISmaccComponent>> components_;

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *createComponent(TArgs... targs);

    template <typename SmaccComponentType, typename TOrthogonal, typename TClient, typename... TArgs>
    SmaccComponentType *createNamedComponent(std::string name, TArgs... targs);

    // Assigns the owner of this resource to the given state machine parameter object
    void setStateMachine(ISmaccStateMachine *stateMachine);

    void setOrthogonal(ISmaccOrthogonal *orthogonal);

private:
    // A reference to the state machine object that owns this resource
    ISmaccStateMachine *stateMachine_;
    ISmaccOrthogonal *orthogonal_;

    friend class ISmaccOrthogonal;
    friend class ISmaccComponent;
};
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_client_behavior.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_client_behavior_base.h>

namespace smacc
{
    class SmaccClientBehavior : public ISmaccClientBehavior
    {
    public:
        virtual void onEntry() override;
        virtual void onExit() override;
    };
} // namespace smacc

#include <smacc/impl/smacc_client_behavior_impl.h>


================================================
FILE: smacc/include/smacc/smacc_client_behavior_base.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/common.h>

namespace smacc
{
    class ISmaccClientBehavior
    {
    public:
        ISmaccClientBehavior();

        virtual ~ISmaccClientBehavior();

        inline ISmaccStateMachine *getStateMachine();

        std::string getName() const;

        template <typename SmaccClientType>
        void requiresClient(SmaccClientType *&storage);

        template <typename SmaccComponentType>
        void requiresComponent(SmaccComponentType *&storage);

        ros::NodeHandle getNode();

    protected:
        virtual void runtimeConfigure();

        virtual void onEntry();

        virtual void onExit();

        template <typename EventType>
        void postEvent(const EventType &ev);

        template <typename EventType>
        void postEvent();

        inline ISmaccState *getCurrentState();

        virtual void executeOnEntry();

        virtual void executeOnExit();

        virtual void dispose();

    private:

        template <typename TOrthogonal, typename TSourceObject>
        void onOrthogonalAllocation();

        // a reference to the owner state machine
        ISmaccStateMachine *stateMachine_;

        // a reference to the state where the client behavior is being executed
        ISmaccState *currentState;

        smacc::ISmaccOrthogonal *currentOrthogonal;

        friend class ISmaccState;
        friend class ISmaccOrthogonal;
    };
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_default_events.h
================================================
#pragma once

#include <boost/statechart/state.hpp>
#include <boost/statechart/event.hpp>

#include <smacc/smacc_types.h>

namespace smacc
{
namespace default_events
{
using namespace smacc::introspection;
using namespace smacc::default_transition_tags;

template <typename ActionFeedback, typename TOrthogonal>
struct EvActionFeedback : sc::event<EvActionFeedback<ActionFeedback, TOrthogonal>>
{
  smacc::client_bases::ISmaccActionClient *client;
  ActionFeedback feedbackMessage;
  //boost::any feedbackMessage;
};

template <typename TSource, typename TOrthogonal>
struct EvActionResult : sc::event<EvActionResult<TSource, TOrthogonal>>
{
  typename TSource::Result resultMessage;
};

//--------------------------------
template <typename TSource, typename TOrthogonal>
struct EvActionSucceeded : sc::event<EvActionSucceeded<TSource, TOrthogonal>>
{
  typename TSource::Result resultMessage;

  static std::string getEventLabel()
  {
    // show ros message type
    std::string label;
    EventLabel<TSource>(label);
    return label;
  }

  static std::string getDefaultTransitionTag()
  {
    return demangledTypeName<SUCCESS>();
  }

  static std::string getDefaultTransitionType()
  {
    return demangledTypeName<SUCCESS>();
  }
};

template <typename TSource, typename TOrthogonal>
struct EvActionAborted : sc::event<EvActionAborted<TSource, TOrthogonal>>
{
  typename TSource::Result resultMessage;

  static std::string getEventLabel()
  {
    // show ros message type
    std::string label;
    EventLabel<TSource>(label);
    return label;
  }

  static std::string getDefaultTransitionTag()
  {
    return demangledTypeName<ABORT>();
  }

  static std::string getDefaultTransitionType()
  {
    return demangledTypeName<ABORT>();
  }
};

template <typename TSource, typename TOrthogonal>
struct EvActionPreempted : sc::event<EvActionPreempted<TSource, TOrthogonal>>
{
  typename TSource::Result resultMessage;

  static std::string getEventLabel()
  {
    // show ros message type
    std::string label;
    EventLabel<TSource>(label);
    return label;
  }

  static std::string getDefaultTransitionTag()
  {
    return demangledTypeName<PREEMPT>();
  }

  static std::string getDefaultTransitionType()
  {
    return demangledTypeName<PREEMPT>();
  }
};

template <typename TSource, typename TOrthogonal>
struct EvActionRejected : sc::event<EvActionRejected<TSource, TOrthogonal>>
{
  typename TSource::Result resultMessage;

  static std::string getEventLabel()
  {
    // show ros message type
    std::string label;
    EventLabel<TSource>(label);
    return label;
  }

  static std::string getDefaultTransitionTag()
  {
    return demangledTypeName<REJECT>();
  }

  static std::string getDefaultTransitionType()
  {
    return demangledTypeName<REJECT>();
  }
};

template <typename StateType>
struct EvSequenceFinished : sc::event<EvSequenceFinished<StateType>>
{

};

template <typename TSource>
struct EvLoopContinue : sc::event<EvLoopContinue<TSource>>
{
  static std::string getDefaultTransitionTag()
  {
    return demangledTypeName<CONTINUELOOP>();
  }

  static std::string getDefaultTransitionType()
  {
    return demangledTypeName<CONTINUELOOP>();
  }
};

template <typename TSource>
struct EvLoopEnd : sc::event<EvLoopEnd<TSource>>
{
  static std::string getDefaultTransitionTag()
  {
    return demangledTypeName<ENDLOOP>();
  }

  static std::string getDefaultTransitionType()
  {
    return demangledTypeName<ENDLOOP>();
  }
};

template <typename TSource, typename TOrthogonal>
struct EvTopicInitialMessage : sc::event<EvTopicInitialMessage<TSource, TOrthogonal>>
{
  //typename EvTopicInitialMessage<SensorBehaviorType>::TMessageType msgData;
  static std::string getEventLabel()
  {
    auto typeinfo = TypeInfo::getTypeInfoFromType<typename TSource::TMessageType>();

    std::string label = typeinfo->getNonTemplatedTypeName();
    return label;
  }

  typename TSource::TMessageType msgData;
};

template <typename TSource, typename TOrthogonal>
struct EvTopicMessage : sc::event<EvTopicMessage<TSource, TOrthogonal>>
{
  static std::string getEventLabel()
  {
    auto typeinfo = TypeInfo::getTypeInfoFromType<typename TSource::TMessageType>();

    std::string label = typeinfo->getNonTemplatedTypeName();
    return label;
  }

  typename TSource::TMessageType msgData;
};
} // namespace default_events
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_event_generator.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <functional>
#include <memory>
#include <vector>
#include <algorithm>
#include <smacc/introspection/introspection.h>
#include <boost/statechart/event.hpp>
#include <map>

namespace smacc
{
    class ISmaccState;
    class ISMaccStateMachine;

    class SmaccEventGenerator
    {
    public:
        SmaccEventGenerator();
        virtual ~SmaccEventGenerator();

        template <typename TState, typename TSource>
        void onStateAllocation();

        virtual void onEntry();
        virtual void onExit();

        template <typename EventType>
        void postEvent(const EventType &ev);

        template <typename EventType>
        void postEvent();

        void initialize(ISmaccState *ownerState);
        virtual void onInitialized();

    private:
        ISmaccState *ownerState_;
        friend ISmaccStateMachine;
    };

} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_fifo_scheduler.h
================================================
#include <boost/statechart/fifo_scheduler.hpp>
#include <smacc/smacc_fifo_worker.h>

typedef boost::statechart::fifo_scheduler<SmaccFifoWorker, SmaccAllocator> SmaccFifoScheduler;


================================================
FILE: smacc/include/smacc/smacc_fifo_worker.h
================================================
#pragma once
#include <boost/statechart/fifo_worker.hpp>

typedef std::allocator<boost::statechart::none> SmaccAllocator;
typedef boost::statechart::fifo_worker<SmaccAllocator> SmaccFifoWorker;


================================================
FILE: smacc/include/smacc/smacc_orthogonal.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/common.h>
#include <utility>

namespace smacc
{
class ISmaccOrthogonal
{
public:
    void setStateMachine(ISmaccStateMachine *value);

    inline ISmaccStateMachine *getStateMachine();

    void initState(ISmaccState *state);

    void addClientBehavior(std::shared_ptr<smacc::ISmaccClientBehavior> clientBehavior);

    void runtimeConfigure();

    void onEntry();

    void onExit();

    void onDispose();

    virtual std::string getName() const;

    template <typename SmaccComponentType>
    void requiresComponent(SmaccComponentType *&storage);

    template <typename SmaccClientType>
    bool requiresClient(SmaccClientType *&storage);

    inline const std::vector<std::shared_ptr<smacc::ISmaccClient>> &getClients();

    inline const std::vector<std::vector<std::shared_ptr<smacc::ISmaccClientBehavior>>> &getClientBehaviors() const;

    template <typename T>
    void setGlobalSMData(std::string name, T value);

    template <typename T>
    bool getGlobalSMData(std::string name, T &ret);

    template <typename TClientBehavior>
    TClientBehavior *getClientBehavior();

protected:
    virtual void onInitialize();

    template <typename TOrthogonal, typename TClient>
    void assignClientToOrthogonal(TClient* client);

    std::vector<std::shared_ptr<smacc::ISmaccClient>> clients_;

private:
    ISmaccStateMachine *stateMachine_;

    std::vector<std::vector<std::shared_ptr<smacc::ISmaccClientBehavior>>> clientBehaviors_;
    friend class ISmaccStateMachine;
};

} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_signal.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <boost/signals2/signal.hpp>
#include <boost/any.hpp>

namespace smacc
{
using namespace boost;
using namespace boost::signals2;
using namespace boost::signals2::detail;

template <typename Signature,
          typename Combiner = optional_last_value<typename boost::function_traits<Signature>::result_type>,
          typename Group = int,
          typename GroupCompare = std::less<Group>,
          typename SlotFunction = function<Signature>,
          typename ExtendedSlotFunction = typename extended_signature<function_traits<Signature>::arity, Signature>::function_type,
          typename Mutex = boost::signals2::mutex>
class SmaccSignal : public boost::signals2::signal<Signature, Combiner, Group, GroupCompare, SlotFunction, ExtendedSlotFunction, Mutex>
{
};
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_signal_detector.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once

#include <boost/thread.hpp>
#include <smacc/common.h>
#include <atomic>

namespace smacc
{
enum class ExecutionModel
{
  SINGLE_THREAD_SPINNER,
  ASYNCHRONOUS_SPINNER
};

// Mostly define the state machine ros thread and receive events state machine components (clients, state elements)
// This class also contains the event queue of the state machine
class SignalDetector
{
public:
  SignalDetector(SmaccFifoScheduler* scheduler, ExecutionModel executionModel = ExecutionModel::SINGLE_THREAD_SPINNER);

  void initialize(ISmaccStateMachine* stateMachine);

  void setProcessorHandle(SmaccFifoScheduler::processor_handle processorHandle);

  // Runs the polling loop into a thread...
  void runThread();

  // Waits for the polling thread to end...
  void join();

  void stop();

  void pollingLoop();

  template <typename EventType>
  void postEvent(EventType* ev)
  {
    boost::intrusive_ptr<EventType> weakPtrEvent = ev;
    this->scheduler_->queue_event(processorHandle_, weakPtrEvent);
  }

  void notifyStateConfigured(ISmaccState* currentState);

  void notifyStateExited(ISmaccState* currentState);

private:
  void pollOnce();

  ISmaccStateMachine* smaccStateMachine_;

  std::vector<ISmaccUpdatable*> updatableClients_;

  std::vector<std::vector<ISmaccUpdatable*>> updatableStateElements_;

  std::atomic<uint64_t> lastState_;

  void findUpdatableClients();
  void findUpdatableStateElements(ISmaccState* currentState);

  // Loop frequency of the signal detector (to check answers from actionservers)
  double loop_rate_hz;

  std::atomic<bool> end_;

  std::atomic<bool> initialized_;

  ros::NodeHandle nh_;

  ros::Publisher statusPub_;

  // ---- boost statechart related ----

  SmaccFifoScheduler* scheduler_;

  SmaccFifoScheduler::processor_handle processorHandle_;

  boost::thread signalDetectorThread_;

  ExecutionModel executionModel_;
};

// Main entry point for any SMACC state machine
// It instantiates and starts the specified state machine type
// it uses two threads: a new thread and the current one.
// The created thread is for the state machine process
// it locks the current thread to handle events of the state machine
template <typename StateMachineType>
void run(ExecutionModel executionModel = ExecutionModel::SINGLE_THREAD_SPINNER)
{
  // create the asynchronous state machine scheduler
  SmaccFifoScheduler scheduler1(true);

  // create the signalDetector component
  SignalDetector signalDetector(&scheduler1, executionModel);

  // create the asynchronous state machine processor
  SmaccFifoScheduler::processor_handle sm = scheduler1.create_processor<StateMachineType>(&signalDetector);

  // initialize the asynchronous state machine processor
  signalDetector.setProcessorHandle(sm);

  scheduler1.initiate_processor(sm);

  // create a thread for the asynchronous state machine processor execution
  boost::thread otherThread(boost::bind(&sc::fifo_scheduler<>::operator(), &scheduler1, 0));

  // use the  main thread for the signal detector component (waiting actionclient requests)
  signalDetector.pollingLoop();
  scheduler1.terminate();
  otherThread.join();
}

}  // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_state.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once
#include <smacc/common.h>

namespace smacc
{
  class ISmaccState
  {
  public:
    virtual ISmaccStateMachine &getStateMachine() = 0;

    inline ISmaccState *getParentState() { return parentState_; }

    inline ros::NodeHandle &getROSNode() { return nh; }

    virtual std::string getClassName();

    template <typename TOrthogonal, typename TBehavior, typename... Args>
    std::shared_ptr<TBehavior> configure(Args &&... args);

    template <typename SmaccComponentType>
    void requiresComponent(SmaccComponentType *&storage);

    template <typename SmaccClientType>
    void requiresClient(SmaccClientType *&storage);

    template <typename T>
    bool getGlobalSMData(std::string name, T &ret);

    // Store globally in this state machine. (By value parameter )
    template <typename T>
    void setGlobalSMData(std::string name, T value);

    template <typename TStateReactor, typename TTriggerEvent, typename TEventList, typename... TEvArgs>
    std::shared_ptr<TStateReactor> createStateReactor(TEvArgs... args);

    template <typename TStateReactor, typename... TEvArgs>
    std::shared_ptr<TStateReactor> createStateReactor(TEvArgs... args);

    template <typename TEventGenerator, typename... TEvArgs>
    std::shared_ptr<TEventGenerator> createEventGenerator(TEvArgs... args);

    template <typename EventType>
    void postEvent(const EventType &ev);

    template <typename EventType>
    void postEvent();

    // used for transition logging
    template <typename TransitionType>
    void notifyTransition();

    // used for transition logging
    void notifyTransitionFromTransitionTypeInfo(std::shared_ptr<smacc::introspection::TypeInfo> &transitionTypeInfo);

    inline std::vector<std::shared_ptr<StateReactor>> &getStateReactors() { return stateReactors_; }

    inline std::vector<std::shared_ptr<SmaccEventGenerator>> &getEventGenerators() { return eventGenerators_; }

    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    bool getParam(std::string param_name, T &param_storage);

    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    void setParam(std::string param_name, T param_val);

    //Delegates to ROS param access with the current NodeHandle
    template <typename T>
    bool param(std::string param_name, T &param_val, const T &default_val) const;

    template <typename TOrthogonal>
    TOrthogonal *getOrthogonal();

    template <typename TEventGenerator>
    TEventGenerator* getEventGenerator();

    template <typename TStateReactor>
    TStateReactor* getStateReactor();

  protected:
    std::vector<std::shared_ptr<StateReactor>> stateReactors_;
    std::vector<std::shared_ptr<smacc::SmaccEventGenerator>> eventGenerators_;

    ros::NodeHandle nh;

    ros::NodeHandle contextNh;

    ISmaccState *parentState_;

    const smacc::introspection::SmaccStateInfo *stateInfo_;
  };
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_state_base.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once
#include <smacc/smacc_state.h>
#include <smacc/smacc_state_reactor.h>
#include <smacc/smacc_event_generator.h>
#include <smacc/introspection/state_traits.h>

namespace smacc
{
  using namespace smacc::introspection;
  using namespace smacc::default_events;

  template <class MostDerived,
            class Context,
            class InnerInitial = mpl::list<>,
            sc::history_mode historyMode = sc::has_deep_history>
  class SmaccState : public sc::simple_state<
                         MostDerived, Context, InnerInitial, historyMode>,
                     public ISmaccState
  {
    typedef sc::simple_state<MostDerived, Context, InnerInitial, historyMode>
        base_type;

  public:
    typedef Context TContext;
    typedef typename Context::inner_context_type context_type;
    typedef typename context_type::state_iterator state_iterator;

    typedef InnerInitial LastDeepState;

    bool finishStateThrown;
    InnerInitial *smacc_inner_type;

    //////////////////////////////////////////////////////////////////////////
    struct my_context
    {
      my_context(typename base_type::context_ptr_type pContext) : pContext_(pContext)
      {
      }

      typename base_type::context_ptr_type pContext_;
    };

    SmaccState() = delete;

#define STATE_NAME (demangleSymbol(typeid(MostDerived).name()).c_str())
    // Constructor that initializes the state ros node handle
    SmaccState(my_context ctx)
    {
      static_assert(std::is_base_of<ISmaccState, Context>::value || std::is_base_of<ISmaccStateMachine, Context>::value, "The context class must be a SmaccState or a SmaccStateMachine");

      static_assert(!std::is_same<MostDerived, Context>::value, "The context must be a different state or state machine than the current state");

      ROS_WARN("[%s] creating ", STATE_NAME);
      this->set_context(ctx.pContext_);

      this->stateInfo_ = getStateInfo();

      // storing a reference to the parent state
      auto &ps = this->template context<Context>();
      parentState_ = dynamic_cast<ISmaccState *>(&ps);
      finishStateThrown = false;

      this->contextNh = optionalNodeHandle(ctx.pContext_);
      ROS_DEBUG("[%s] Ros node handle namespace for this state: %s", STATE_NAME, contextNh.getNamespace().c_str());
      if (contextNh.getNamespace() == "/")
      {
        auto nhname = smacc::utils::cleanShortTypeName(typeid(Context));
        ROS_INFO("[%s] Creating ros NodeHandle for this state: %s", STATE_NAME, nhname.c_str());
        contextNh = ros::NodeHandle(nhname);
      }
    }

    virtual ~SmaccState()
    {
    }

    const smacc::introspection::SmaccStateInfo *getStateInfo()
    {
      auto smInfo = this->getStateMachine().getStateMachineInfo();

      auto key = typeid(MostDerived).name();
      if (smInfo.states.count(key))
      {
        return smInfo.states[key].get();
      }
      else
      {
        return nullptr;
      }
    }

    std::string getFullName()
    {
      return demangleSymbol(typeid(MostDerived).name());
    }

    std::string getShortName()
    {
      return smacc::utils::cleanShortTypeName(typeid(MostDerived));
    }

    virtual ISmaccState *getParentState()
    {
      //auto* ctx = dynamic_cast<ISmaccState*>(this->template context<Context *>());

      return parentState_;
    }

    // this function is called by boot statechart before the destructor call
    void exit()
    {
      auto *derivedThis = static_cast<MostDerived *>(this);
      this->getStateMachine().notifyOnStateExitting(derivedThis);
      try
      { // static_cast<MostDerived *>(this)->onExit();
        standardOnExit(*derivedThis);
      }
      catch (...)
      {
      }
      this->getStateMachine().notifyOnStateExited(derivedThis);
    }

  public:
    // This method is static-polymorphic because of the curiously recurring template pattern. It
    // calls to the most derived class onEntry method if declared on smacc state construction
    void runtimeConfigure()
    {
    }

    // This method is static-polymorphic because of the curiously recurring template pattern. It
    // calls to the most derived class onEntry method if declared on smacc state construction
    void onEntry()
    {
    }

    // this method is static-polimorphic because of the curiously recurreing pattern. It
    // calls to the most derived class onExit method if declared on smacc state destruction
    void onExit()
    {
    }

    template <typename T>
    bool getGlobalSMData(std::string name, T &ret)
    {
      return base_type::outermost_context().getGlobalSMData(name, ret);
    }

    // Store globally in this state machine. (By value parameter )
    template <typename T>
    void setGlobalSMData(std::string name, T value)
    {
      base_type::outermost_context().setGlobalSMData(name, value);
    }

    template <typename SmaccComponentType>
    void requiresComponent(SmaccComponentType *&storage)
    {
      base_type::outermost_context().requiresComponent(storage);
    }

    virtual ISmaccStateMachine &getStateMachine()
    {
      return base_type::outermost_context();
    }

    template <typename TOrthogonal, typename TBehavior>
    static void configure_orthogonal_runtime(std::function<void(TBehavior &bh, MostDerived &)> initializationFunction)
    {
      configure_orthogonal_internal<TOrthogonal, TBehavior>([=](ISmaccState *state) {
        //auto bh = std::make_shared<TBehavior>(args...);
        auto bh = state->configure<TOrthogonal, TBehavior>();
        initializationFunction(*bh, *(static_cast<MostDerived *>(state)));
      });
    }

    template <typename TOrthogonal, typename TBehavior>
    static void configure_orthogonal_runtime(std::function<void(TBehavior &bh)> initializationFunction)
    {
      configure_orthogonal_internal<TOrthogonal, TBehavior>([=](ISmaccState *state) {
        //auto bh = std::make_shared<TBehavior>(args...);
        auto bh = state->configure<TOrthogonal, TBehavior>();
        initializationFunction(*bh);
      });
    }

    template <typename TOrthogonal, typename TBehavior, typename... Args>
    static void configure_orthogonal(Args &&... args)
    {
      configure_orthogonal_internal<TOrthogonal, TBehavior>(
          [=](ISmaccState *state) {
            //auto bh = std::make_shared<TBehavior>(args...);
            state->configure<TOrthogonal, TBehavior>(args...);
          });
    }

    /*

  template<typename TInputEventList>
  void ISmaccState::state_reactor_initialize_inputEventList(smacc::introspection::StateReactorHandler* sr, TInputEventList *)
  {
      using boost::mpl::_1;
      using wrappedList = typename boost::mpl::transform<TInputEventList, _1>::type;
      AddTEventType<TInputEventList> op(sr);
      boost::mpl::for_each<wrappedList>(op);
  }

    template <typename TStateReactor, typename TOutputEvent, typename TInputEventList, typename... TArgs... args>
    std::shared_ptr<TStateReactor> ISmaccState::static_createStateReactor(TArgs... args)
    {
      auto srHandler = static_createStateReactor_aux(args...);

      srHandler->addInputEvent<EvTopicMessage<CbLidarSensor, OrObstaclePerception>>();
      srHandler->addInputEvent<EvTopicMessage<CbConditionTemperatureSensor, OrTemperatureSensor>>();

      TInputEventList* mock;
      state_reactor_initialize_inputEventList(mock,)

      srHandler->setOutputEvent<TOutputEvent>();
    }
*/
    template <typename TStateReactor, typename TOutputEvent, typename TInputEventList, typename... TArgs>
    static std::shared_ptr<smacc::introspection::StateReactorHandler> static_createStateReactor(TArgs... args)
    {
      auto srh = std::make_shared<smacc::introspection::StateReactorHandler>();
      auto srinfo = std::make_shared<SmaccStateReactorInfo>();

      srinfo->stateReactorType = &typeid(TStateReactor);
      srinfo->srh = srh;
      srh->srInfo_ = srinfo;

      const std::type_info *tindex = &(typeid(MostDerived)); // get identifier of the current state

      if (!SmaccStateInfo::stateReactorsInfo.count(tindex))
        SmaccStateInfo::stateReactorsInfo[tindex] = std::vector<std::shared_ptr<SmaccStateReactorInfo>>();

      srinfo->factoryFunction = [&, srh, args...](ISmaccState *state) {
        auto sr = state->createStateReactor<TStateReactor, TOutputEvent, TInputEventList, TArgs...>(args...);
        srh->configureStateReactor(sr);
        sr->initialize(state);
        return sr;
      };

      SmaccStateInfo::stateReactorsInfo[tindex].push_back(srinfo);

      return srh;
    }

    template <typename TEventGenerator, typename... TUArgs>
    static std::shared_ptr<smacc::introspection::EventGeneratorHandler> static_createEventGenerator(TUArgs... args)
    {
      auto egh = std::make_shared<smacc::introspection::EventGeneratorHandler>();
      auto eginfo = std::make_shared<SmaccEventGeneratorInfo>();
      eginfo->eventGeneratorType = &typeid(TEventGenerator);
      eginfo->egh = egh;
      egh->egInfo_ = eginfo;

      const std::type_info *tindex = &(typeid(MostDerived)); // get identifier of the current state

      if (!SmaccStateInfo::eventGeneratorsInfo.count(tindex))
        SmaccStateInfo::eventGeneratorsInfo[tindex] = std::vector<std::shared_ptr<SmaccEventGeneratorInfo>>();

      eginfo->factoryFunction = [&, egh, args...](ISmaccState *state) {
        auto eg = state->createEventGenerator<TEventGenerator>(args...);
        egh->configureEventGenerator(eg);
        eg->initialize(state);
        eg->template onStateAllocation<MostDerived, TEventGenerator>();
        return eg;
      };

      SmaccStateInfo::eventGeneratorsInfo[tindex].push_back(eginfo);
      return egh;
    }

    template <typename TStateReactor, typename... TUArgs>
    static std::shared_ptr<smacc::introspection::StateReactorHandler> static_createStateReactor_aux(TUArgs... args)
    {
      auto srh = std::make_shared<smacc::introspection::StateReactorHandler>();
      auto srinfo = std::make_shared<SmaccStateReactorInfo>();

      srinfo->stateReactorType = &typeid(TStateReactor);
      srinfo->srh = srh;
      srh->srInfo_ = srinfo;

      const std::type_info *tindex = &(typeid(MostDerived)); // get identifier of the current state

      if (!SmaccStateInfo::stateReactorsInfo.count(tindex))
        SmaccStateInfo::stateReactorsInfo[tindex] = std::vector<std::shared_ptr<SmaccStateReactorInfo>>();

      srinfo->factoryFunction = [&, srh, args...](ISmaccState *state) {
        auto sr = state->createStateReactor<TStateReactor>(args...);
        srh->configureStateReactor(sr);
        sr->initialize(state);
        return sr;
      };

      SmaccStateInfo::stateReactorsInfo[tindex].push_back(srinfo);

      return srh;
    }

    void checkWhileLoopConditionAndThrowEvent(bool (MostDerived::*conditionFn)())
    {
      auto *thisobject = static_cast<MostDerived *>(this);
      auto condition = boost::bind(conditionFn, thisobject);
      bool conditionResult = condition();

      //ROS_INFO("LOOP EVENT CONDITION: %d", conditionResult);
      if (conditionResult)
      {
        this->postEvent<EvLoopContinue<MostDerived>>();
      }
      else
      {
        this->postEvent<EvLoopEnd<MostDerived>>();
      }
      ROS_INFO("[%s] POST THROW CONDITION", STATE_NAME);
    }

    void throwSequenceFinishedEvent()
    {
      this->postEvent<EvSequenceFinished<MostDerived>>();
    }

    //////////////////////////////////////////////////////////////////////////
    // The following declarations should be private.
    // They are only public because many compilers lack template friends.
    //////////////////////////////////////////////////////////////////////////
    // See base class for documentation
    typedef typename base_type::outermost_context_base_type
        outermost_context_base_type;
    typedef typename base_type::inner_context_ptr_type inner_context_ptr_type;
    typedef typename base_type::context_ptr_type context_ptr_type;
    typedef typename base_type::inner_initial_list inner_initial_list;

    static void initial_deep_construct(
        outermost_context_base_type &outermostContextBase)
    {
      deep_construct(&outermostContextBase, outermostContextBase);
    }

    // See base class for documentation
    static void deep_construct(
        const context_ptr_type &pContext,
        outermost_context_base_type &outermostContextBase)
    {
      const inner_context_ptr_type pInnerContext(
          shallow_construct(pContext, outermostContextBase));
      base_type::template deep_construct_inner<inner_initial_list>(
          pInnerContext, outermostContextBase);
    }

    static inner_context_ptr_type shallow_construct(
        const context_ptr_type &pContext,
        outermost_context_base_type &outermostContextBase)
    {
      // allocating in memory
      auto state = new MostDerived(SmaccState<MostDerived, Context, InnerInitial, historyMode>::my_context(pContext));
      const inner_context_ptr_type pInnerContext(state);

      ROS_INFO("[%s] State object created. Initializating...", STATE_NAME);
      state->entryStateInternal();

      outermostContextBase.add(pInnerContext);
      return pInnerContext;
    }

  private:
    template <typename TOrthogonal, typename TBehavior>
    static void configure_orthogonal_internal(std::function<void(ISmaccState *state)> initializationFunction)
    {
      ROS_INFO("[%s] Runtime configure orthogonal %s -> %s", STATE_NAME, demangleSymbol(typeid(TOrthogonal).name()).c_str(), demangleSymbol(typeid(TBehavior).name()).c_str());

      ClientBehaviorInfoEntry bhinfo;
      bhinfo.factoryFunction = initializationFunction;

      bhinfo.behaviorType = &(typeid(TBehavior));
      bhinfo.orthogonalType = &(typeid(TOrthogonal));

      const std::type_info *tindex = &(typeid(MostDerived));
      if (!SmaccStateInfo::staticBehaviorInfo.count(tindex))
        SmaccStateInfo::staticBehaviorInfo[tindex] = std::vector<ClientBehaviorInfoEntry>();

      SmaccStateInfo::staticBehaviorInfo[tindex].push_back(bhinfo);
    }

    void entryStateInternal()
    {
      this->getStateMachine().notifyOnStateEntryStart(static_cast<MostDerived *>(this));

      // TODO: make this static to build the parameter tree at startup
      this->nh = ros::NodeHandle(contextNh.getNamespace() + std::string("/") + smacc::utils::cleanShortTypeName(typeid(MostDerived)).c_str());

      ROS_DEBUG("[%s] nodehandle namespace: %s", STATE_NAME, nh.getNamespace().c_str());

      this->setParam("created", true);

      // before dynamic runtimeConfigure, we execute the staticConfigure behavior configurations
      {
        ROS_INFO("[%s] -- STATIC STATE DESCRIPTION --", STATE_NAME);

        for (const auto &stateReactorsVector : SmaccStateInfo::staticBehaviorInfo)
        {
          ROS_DEBUG("[%s] state info: %s", STATE_NAME, demangleSymbol(stateReactorsVector.first->name()).c_str());
          for (auto &bhinfo : stateReactorsVector.second)
          {
            ROS_DEBUG("[%s] client behavior: %s", STATE_NAME, demangleSymbol(bhinfo.behaviorType->name()).c_str());
          }
        }

        const std::type_info *tindex = &(typeid(MostDerived));
        auto &staticDefinedBehaviors = SmaccStateInfo::staticBehaviorInfo[tindex];
        auto &staticDefinedStateReactors = SmaccStateInfo::stateReactorsInfo[tindex];
        auto &staticDefinedEventGenerators = SmaccStateInfo::eventGeneratorsInfo[tindex];

        for(auto & ortho : this->getStateMachine().getOrthogonals())
        {
          ROS_INFO("[%s] Initializing orthogonal: %s", STATE_NAME, demangleSymbol(typeid(*ortho.second).name()).c_str());
          ortho.second->initState(this);
        }

        for (auto &bhinfo : staticDefinedBehaviors)
        {
          ROS_INFO("[%s] Creating static client behavior: %s", STATE_NAME, demangleSymbol(bhinfo.behaviorType->name()).c_str());
          bhinfo.factoryFunction(this);
        }

        for (auto &sr : staticDefinedStateReactors)
        {
          ROS_INFO("[%s] Creating static state reactor: %s", STATE_NAME, demangleSymbol(sr->stateReactorType->name()).c_str());
          sr->factoryFunction(this);
        }

        for (auto &eg : staticDefinedEventGenerators)
        {
          ROS_INFO("[%s] Creating static event generator: %s", STATE_NAME, demangleSymbol(eg->eventGeneratorType->name()).c_str());
          eg->factoryFunction(this);
        }

        ROS_INFO("[%s] ---- END STATIC DESCRIPTION", STATE_NAME);
      }

      ROS_INFO("[%s] State runtime configuration", STATE_NAME);

      auto *derivedthis = static_cast<MostDerived *>(this);

      // second the orthogonals are internally configured
      this->getStateMachine().notifyOnRuntimeConfigured(derivedthis);

      // first we runtime configure the state, where we create client behaviors
      static_cast<MostDerived *>(this)->runtimeConfigure();

      this->getStateMachine().notifyOnRuntimeConfigurationFinished(derivedthis);

      ROS_INFO("[%s] State OnEntry", STATE_NAME);

      // finally we go to the derived state onEntry Function
      static_cast<MostDerived *>(this)->onEntry();

      // here orthogonals and client behaviors are entered OnEntry
      this->getStateMachine().notifyOnStateEntryEnd(derivedthis);
    }
  };
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_state_machine.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once

#include <boost/any.hpp>
#include <map>
#include <mutex>
#include <stack>

#include <smacc/common.h>
#include <smacc/introspection/introspection.h>
#include <smacc/introspection/smacc_state_machine_info.h>
#include <smacc/smacc_updatable.h>
#include <smacc/smacc_signal.h>

#include <smacc_msgs/SmaccStateMachine.h>
#include <smacc_msgs/SmaccTransitionLogEntry.h>
#include <smacc_msgs/SmaccStatus.h>
#include <smacc_msgs/SmaccGetTransitionHistory.h>

#include <smacc/smacc_state.h>
#include <smacc/smacc_state_reactor.h>
//#include <smacc/smacc_event_generator.h>
#include <smacc/callback_counter_semaphore.h>

namespace smacc
{

using namespace smacc::introspection;

enum class EventLifeTime{
    ABSOLUTE,
    CURRENT_STATE /*events are discarded if we are leaving the state it were created. I is used for client behaviors whose lifetime is associated to state*/
};

enum class StateMachineInternalAction
{
    STATE_CONFIGURING,
    STATE_ENTERING,
    STATE_STEADY,
    STATE_EXITING,
    TRANSITIONING
};



// This class describes the concept of Smacc State Machine in an abastract way.
// The SmaccStateMachineBase inherits from this state machine and from
// statechart::StateMachine<> (via multiple inheritance)
class ISmaccStateMachine
{
public:
    ISmaccStateMachine(SignalDetector *signalDetector);

    virtual ~ISmaccStateMachine();

    virtual void reset();

    virtual void stop();

    virtual void eStop();

    template <typename TOrthogonal>
    TOrthogonal *getOrthogonal();

    const std::map<std::string, std::shared_ptr<smacc::ISmaccOrthogonal>> &getOrthogonals() const;

    template <typename SmaccComponentType>
    void requiresComponent(SmaccComponentType *&storage);

    template <typename EventType>
    void postEvent(EventType *ev, EventLifeTime evlifetime = EventLifeTime::ABSOLUTE);

    template <typename EventType>
    void postEvent(EventLifeTime evlifetime = EventLifeTime::ABSOLUTE);

    void getTransitionLogHistory();

    template <typename T>
    bool getGlobalSMData(std::string name, T &ret);

    template <typename T>
    void setGlobalSMData(std::string name, T value);

    template <typename StateField, typename BehaviorType>
    void mapBehavior();

    std::string getStateMachineName();

    void state_machine_visualization(const ros::TimerEvent &);

    inline std::shared_ptr<SmaccStateInfo> getCurrentStateInfo() { return currentStateInfo_; }

    void publishTransition(const SmaccTransitionInfo &transitionInfo);

    /// this function should be implemented by the user to create the orthogonals
    virtual void onInitialize();

    bool getTransitionLogHistory(smacc_msgs::SmaccGetTransitionHistory::Request &req, smacc_msgs::SmaccGetTransitionHistory::Response &res);

    template <typename TSmaccSignal, typename TMemberFunctionPrototype, typename TSmaccObjectType>
    boost::signals2::connection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object);

    void disconnectSmaccSignalObject(void *object);

    template <typename StateType>
    void notifyOnStateEntryStart(StateType *state);

    template <typename StateType>
    void notifyOnStateEntryEnd(StateType *state);

    template <typename StateType>
    void notifyOnRuntimeConfigured(StateType *state);

    template <typename StateType>
    void notifyOnStateExitting(StateType *state);

    template <typename StateType>
    void notifyOnStateExited(StateType *state);

    template <typename StateType>
    void notifyOnRuntimeConfigurationFinished(StateType *state);

    inline uint64_t getCurrentStateCounter() const;

    inline ISmaccState *getCurrentState() const;

    inline const SmaccStateMachineInfo &getStateMachineInfo();

    template <typename InitialStateType>
    void buildStateMachineInfo();

    inline ros::NodeHandle getNode(){
        return nh_;
    };


protected:
    void checkStateMachineConsistence();

    void initializeROS(std::string smshortname);

    void onInitialized();

    template <typename TOrthogonal>
    void createOrthogonal();

    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    bool getParam(std::string param_name, T &param_storage);

    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    void setParam(std::string param_name, T param_val);

    // Delegates to ROS param access with the current NodeHandle
    template <typename T>
    bool param(std::string param_name, T &param_val, const T &default_val) const;

    // The node handle for this state
    ros::NodeHandle nh_;
    ros::NodeHandle private_nh_;

    ros::Timer timer_;
    ros::Publisher stateMachinePub_;
    ros::Publisher stateMachineStatusPub_;
    ros::Publisher transitionLogPub_;
    ros::ServiceServer transitionHistoryService_;

    // if it is null, you may be located in a transition. There is a small gap of time where internally
    // this currentState_ is null. This may change in the future.
    std::vector<ISmaccState*>  currentState_;

    std::shared_ptr<SmaccStateInfo> currentStateInfo_;

    smacc_msgs::SmaccStatus status_msg_;

    // orthogonals
    std::map<std::string, std::shared_ptr<smacc::ISmaccOrthogonal>> orthogonals_;

private:
    std::recursive_mutex m_mutex_;
    std::recursive_mutex eventQueueMutex_;

    StateMachineInternalAction stateMachineCurrentAction;

    std::map<void*, std::shared_ptr<CallbackCounterSemaphore>> stateCallbackConnections;

    // shared variables
    std::map<std::string, std::pair<std::function<std::string()>, boost::any>> globalData_;

    std::vector<smacc_msgs::SmaccTransitionLogEntry> transitionLogHistory_;

    smacc::SMRunMode runMode_;

    // Event to notify to the signaldetection thread that a request has been created...
    SignalDetector *signalDetector_;

    uint64_t stateSeqCounter_;

    void lockStateMachine(std::string msg);

    void unlockStateMachine(std::string msg);

    template <typename EventType>
    void propagateEventToStateReactors(ISmaccState *st, EventType *ev);

    std::shared_ptr<SmaccStateMachineInfo> stateMachineInfo_;

    void updateStatusMessage();

    friend class ISmaccState;
    friend class SignalDetector;
};
} // namespace smacc

#include <smacc/impl/smacc_state_impl.h>
#include <smacc/impl/smacc_client_impl.h>
#include <smacc/impl/smacc_component_impl.h>
#include <smacc/impl/smacc_orthogonal_impl.h>


================================================
FILE: smacc/include/smacc/smacc_state_machine_base.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/
#pragma once
#include <smacc/common.h>

#include <smacc/smacc_state_base.h>
#include <smacc/smacc_state_machine.h>

namespace smacc
{

/// State Machine
template <typename DerivedStateMachine, typename InitialStateType>
struct SmaccStateMachineBase : public ISmaccStateMachine, public sc::asynchronous_state_machine<DerivedStateMachine, InitialStateType, SmaccFifoScheduler, SmaccAllocator>
{
public:
    SmaccStateMachineBase(my_context ctx, SignalDetector *signalDetector)
        : ISmaccStateMachine(signalDetector),
          sc::asynchronous_state_machine<DerivedStateMachine, InitialStateType, SmaccFifoScheduler, SmaccAllocator>(ctx)
    {
    }

    virtual ~SmaccStateMachineBase()
    {
        //updateCurrentState<InitialStateType>(false);
    }

    virtual void reset() override
    {
        ISmaccStateMachine::reset();
        this->terminate();
        smacc::run<DerivedStateMachine>();
    }

    virtual void stop() override
    {
        ISmaccStateMachine::stop();
        this->terminate();
    }

    virtual void eStop() override
    {
        ISmaccStateMachine::eStop();
        this->terminate();
    }

    virtual void initiate_impl() override
    {
        // this is before because this creates orthogonals
        this->onInitialize();

        ROS_INFO("[SmaccStateMachine] Introspecting state machine via typeWalker");
        this->buildStateMachineInfo<InitialStateType>();

        ROS_INFO("[SmaccStateMachine] initiate_impl");
        auto shortname =  smacc::utils::cleanShortTypeName(typeid(DerivedStateMachine));

        this->initializeROS(shortname);

        ROS_INFO("[SmaccStateMachine] Initializing ROS communication mechanisms");
        this->onInitialized();

        ROS_INFO("[SmaccStateMachine] Initializing state machine");
        sc::state_machine<DerivedStateMachine, InitialStateType, SmaccAllocator>::initiate();
    }
};
} // namespace smacc


================================================
FILE: smacc/include/smacc/smacc_state_reactor.h
================================================
/*****************************************************************************************************************
 * ReelRobotix Inc. - Software License Agreement      Copyright (c) 2018
 * 	 Authors: Pablo Inigo Blasco, Brett Aldrich
 *
 ******************************************************************************************************************/

#pragma once

#include <functional>
#include <memory>
#include <vector>
#include <algorithm>
#include <smacc/introspection/introspection.h>
#include <boost/statechart/event.hpp>
#include <map>

namespace smacc
{
class ISmaccState;
class ISMaccStateMachine;

namespace state_reactors
{
struct EmptyObjectTag
{
};
} // namespace state_reactors

class StateReactor
{
public:
    ISmaccState *ownerState;
    std::function<void()> postEventFn;
    std::vector<const std::type_info *> eventTypes;
    std::map<const std::type_info *, std::function<void(void *)>> eventCallbacks_;

    StateReactor();

    virtual void onInitialized();

    virtual void onEntry();
    virtual void onExit();

    virtual void onEventNotified(const std::type_info *eventType);

    template <typename EventType>
    void postEvent(const EventType &ev);

    template <typename EventType>
    void postEvent();

    // type based event callback
    template <typename T, typename TClass>
    void createEventCallback(void (TClass::*callback)(T *), TClass *object);

    // type based event callback
    template <typename T>
    void createEventCallback(std::function<void(T *)> callback);

    void update();

    //must returns true when the output event is triggered
    virtual bool triggers() = 0;

    template <typename TEv>
    void addInputEv
Download .txt
gitextract_y9gdi5pk/

├── .codespell-ignore-words.txt
├── .github/
│   └── workflows/
│       ├── CI.yaml
│       ├── bloom_release.yml
│       ├── code_quality.yml
│       └── doxygen.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .vscode/
│   └── launch.json
├── LICENSE.txt
├── README.md
├── documentation/
│   ├── Dance_Bot FlowchartX.odp
│   ├── Dance_Bot FlowchartX.v2.odp
│   └── ReelSmacc.v2.odp
├── smacc/
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── include/
│   │   └── smacc/
│   │       ├── callback_counter_semaphore.h
│   │       ├── client_base_components/
│   │       │   ├── cp_ros_control_interface.h
│   │       │   └── cp_topic_subscriber.h
│   │       ├── client_bases/
│   │       │   ├── smacc_action_client.h
│   │       │   ├── smacc_action_client_base.h
│   │       │   ├── smacc_publisher_client.h
│   │       │   ├── smacc_service_client.h
│   │       │   ├── smacc_service_server_client.h
│   │       │   └── smacc_subscriber_client.h
│   │       ├── client_behavior_bases/
│   │       │   ├── cb_service_server_callback_base.h
│   │       │   └── cb_subscription_callback_base.h
│   │       ├── common.h
│   │       ├── component.h
│   │       ├── impl/
│   │       │   ├── smacc_asynchronous_client_behavior_impl.h
│   │       │   ├── smacc_client_behavior_impl.h
│   │       │   ├── smacc_client_impl.h
│   │       │   ├── smacc_component_impl.h
│   │       │   ├── smacc_event_generator_impl.h
│   │       │   ├── smacc_orthogonal_impl.h
│   │       │   ├── smacc_state_impl.h
│   │       │   ├── smacc_state_machine_impl.h
│   │       │   └── smacc_state_reactor_impl.h
│   │       ├── introspection/
│   │       │   ├── introspection.h
│   │       │   ├── smacc_state_info.h
│   │       │   ├── smacc_state_machine_info.h
│   │       │   ├── state_traits.h
│   │       │   └── string_type_walker.h
│   │       ├── smacc.h
│   │       ├── smacc_asynchronous_client_behavior.h
│   │       ├── smacc_client.h
│   │       ├── smacc_client_behavior.h
│   │       ├── smacc_client_behavior_base.h
│   │       ├── smacc_default_events.h
│   │       ├── smacc_event_generator.h
│   │       ├── smacc_fifo_scheduler.h
│   │       ├── smacc_fifo_worker.h
│   │       ├── smacc_orthogonal.h
│   │       ├── smacc_signal.h
│   │       ├── smacc_signal_detector.h
│   │       ├── smacc_state.h
│   │       ├── smacc_state_base.h
│   │       ├── smacc_state_machine.h
│   │       ├── smacc_state_machine_base.h
│   │       ├── smacc_state_reactor.h
│   │       ├── smacc_transition.h
│   │       ├── smacc_types.h
│   │       └── smacc_updatable.h
│   ├── package.xml
│   ├── rosdoc.yaml
│   ├── smacc_client_behavior_base.h
│   ├── src/
│   │   └── smacc/
│   │       ├── callback_counter_semaphore.cpp
│   │       ├── client.cpp
│   │       ├── client_bases/
│   │       │   └── smacc_action_client.cpp
│   │       ├── common.cpp
│   │       ├── components/
│   │       │   └── cp_ros_control_interface.cpp
│   │       ├── introspection/
│   │       │   ├── reflection.cpp
│   │       │   └── string_type_walker.cpp
│   │       ├── orthogonal.cpp
│   │       ├── signal_detector.cpp
│   │       ├── smacc_client_async_behavior.cpp
│   │       ├── smacc_client_behavior.cpp
│   │       ├── smacc_client_behavior_base.cpp
│   │       ├── smacc_component.cpp
│   │       ├── smacc_event_generator.cpp
│   │       ├── smacc_state.cpp
│   │       ├── smacc_state_info.cpp
│   │       ├── smacc_state_machine.cpp
│   │       ├── smacc_state_machine_info.cpp
│   │       ├── smacc_updatable.cpp
│   │       └── state_reactor.cpp
│   └── test/
│       └── type_info_unit_test.cpp
├── smacc_ci/
│   ├── .gitignore
│   ├── Doxyfile
│   ├── docker/
│   │   ├── ros_kinetic_ubuntu_16.04/
│   │   │   ├── Dockerfile
│   │   │   ├── build.sh
│   │   │   ├── examples/
│   │   │   │   └── run_sm_atomic.sh
│   │   │   └── run_bash.sh
│   │   ├── ros_melodic_ubuntu_18.04/
│   │   │   ├── Dockerfile
│   │   │   ├── build.sh
│   │   │   ├── examples/
│   │   │   │   └── run_sm_atomic.sh
│   │   │   └── run_bash.sh
│   │   └── ros_noetic_ubuntu_20.04/
│   │       ├── Dockerfile
│   │       ├── build.sh
│   │       ├── examples/
│   │       │   └── run_sm_atomic.sh
│   │       └── run_bash.sh
│   ├── gh-pages.sh
│   ├── packagecloud_docker/
│   │   ├── .gitignore
│   │   ├── Dockerfile
│   │   ├── build_ubuntu_16_04_kinetic.sh
│   │   ├── build_ubuntu_18_04_melodic.sh
│   │   ├── build_ubuntu_20_04_noetic.sh
│   │   ├── generate_debs.py
│   │   ├── generate_smacc_debs.bash
│   │   ├── local_build_18_04_melodic.sh
│   │   └── local_build_20_04_noetic.sh
│   ├── rosdep_kinetic.yaml
│   ├── rosdep_melodic.yaml
│   └── rosdep_noetic.yaml
├── smacc_client_library/
│   ├── battery_monitor_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── battery_monitor_client/
│   │   │       └── cl_battery_monitor.h
│   │   ├── package.xml
│   │   ├── server/
│   │   │   └── battery_monitor_node.py
│   │   └── src/
│   │       └── battery_monitor_client/
│   │           └── cl_battery_monitor.cpp
│   ├── keyboard_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── keyboard_client/
│   │   │       ├── cl_keyboard.h
│   │   │       └── client_behaviors/
│   │   │           └── cb_default_keyboard_behavior.h
│   │   ├── package.xml
│   │   ├── server/
│   │   │   └── keyboard_server_node/
│   │   │       └── keyboard_server_node.py
│   │   └── src/
│   │       └── keyboard_client/
│   │           └── cl_keyboard.cpp
│   ├── move_base_z_client/
│   │   ├── README.md
│   │   ├── custom_planners/
│   │   │   ├── backward_global_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── bgp_plugin.xml
│   │   │   │   ├── include/
│   │   │   │   │   └── backward_global_planner/
│   │   │   │   │       └── backward_global_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── backward_global_planner.cpp
│   │   │   ├── backward_local_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── blp_plugin.xml
│   │   │   │   ├── cfg/
│   │   │   │   │   └── BackwardLocalPlanner.cfg
│   │   │   │   ├── include/
│   │   │   │   │   └── backward_local_planner/
│   │   │   │   │       └── backward_local_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── backward_local_planner.cpp
│   │   │   ├── forward_global_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── fgp_plugin.xml
│   │   │   │   ├── include/
│   │   │   │   │   └── forward_global_planner/
│   │   │   │   │       ├── forward_global_planner.h
│   │   │   │   │       └── move_base_z_client_tools.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       ├── forward_global_planner.cpp
│   │   │   │       └── path_tools.cpp
│   │   │   ├── forward_local_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── cfg/
│   │   │   │   │   └── ForwardLocalPlanner.cfg
│   │   │   │   ├── flp_plugin.xml
│   │   │   │   ├── include/
│   │   │   │   │   └── forward_local_planner/
│   │   │   │   │       └── forward_local_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── forward_local_planner.cpp
│   │   │   ├── pure_spinning_local_planner/
│   │   │   │   ├── CHANGELOG.rst
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── cfg/
│   │   │   │   │   └── PureSpinningLocalPlanner.cfg
│   │   │   │   ├── config/
│   │   │   │   │   └── pure_spinning_local_planner.yaml
│   │   │   │   ├── include/
│   │   │   │   │   └── pure_spinning_local_planner/
│   │   │   │   │       └── pure_spinning_local_planner.h
│   │   │   │   ├── package.xml
│   │   │   │   ├── pslp_plugin.xml
│   │   │   │   ├── rosdoc.yaml
│   │   │   │   └── src/
│   │   │   │       └── pure_spinning_local_planner/
│   │   │   │           └── pure_spinning_local_planner.cpp
│   │   │   └── undo_path_global_planner/
│   │   │       ├── CHANGELOG.rst
│   │   │       ├── CMakeLists.txt
│   │   │       ├── include/
│   │   │       │   └── undo_path_global_planner/
│   │   │       │       └── undo_path_global_planner.h
│   │   │       ├── package.xml
│   │   │       ├── rosdoc.yaml
│   │   │       ├── src/
│   │   │       │   └── undo_path_global_planner.cpp
│   │   │       └── upgp_plugin.xml
│   │   └── move_base_z_client_plugin/
│   │       ├── CHANGELOG.rst
│   │       ├── CMakeLists.txt
│   │       ├── action/
│   │       │   └── OdomTracker.action
│   │       ├── cfg/
│   │       │   └── OdomTracker.cfg
│   │       ├── include/
│   │       │   └── move_base_z_client_plugin/
│   │       │       ├── client_behaviors/
│   │       │       │   ├── cb_absolute_rotate.h
│   │       │       │   ├── cb_move_base_client_behavior_base.h
│   │       │       │   ├── cb_navigate_backwards.h
│   │       │       │   ├── cb_navigate_forward.h
│   │       │       │   ├── cb_navigate_global_position.h
│   │       │       │   ├── cb_navigate_next_waypoint.h
│   │       │       │   ├── cb_rotate.h
│   │       │       │   ├── cb_undo_path_backwards.h
│   │       │       │   └── cb_undo_path_backwards2.h
│   │       │       ├── client_behaviors.h
│   │       │       ├── components/
│   │       │       │   ├── costmap_switch/
│   │       │       │   │   └── cp_costmap_switch.h
│   │       │       │   ├── odom_tracker/
│   │       │       │   │   └── odom_tracker.h
│   │       │       │   ├── planner_switcher/
│   │       │       │   │   └── planner_switcher.h
│   │       │       │   ├── pose/
│   │       │       │   │   └── cp_pose.h
│   │       │       │   └── waypoints_navigator/
│   │       │       │       ├── waypoints_event_dispatcher.h
│   │       │       │       └── waypoints_navigator.h
│   │       │       └── move_base_z_client_plugin.h
│   │       ├── package.xml
│   │       ├── rosdoc.yaml
│   │       └── src/
│   │           ├── client_behaviors/
│   │           │   ├── cb_absolute_rotate.cpp
│   │           │   ├── cb_move_base_client_behavior_base.cpp
│   │           │   ├── cb_navigate_backward.cpp
│   │           │   ├── cb_navigate_forward.cpp
│   │           │   ├── cb_navigate_global_position.cpp
│   │           │   ├── cb_navigate_next_waypoint.cpp
│   │           │   ├── cb_rotate.cpp
│   │           │   ├── cb_undo_path_backwards.cpp
│   │           │   └── cb_undo_path_backwards2.cpp
│   │           ├── components/
│   │           │   ├── costmap_switch/
│   │           │   │   └── cp_costmap_switch.cpp
│   │           │   ├── odom_tracker/
│   │           │   │   ├── odom_tracker.cpp
│   │           │   │   └── odom_tracker_node.cpp
│   │           │   ├── planner_switcher/
│   │           │   │   └── planner_switcher.cpp
│   │           │   ├── pose/
│   │           │   │   └── cp_pose.cpp
│   │           │   └── waypoints_navigator/
│   │           │       ├── waypoints_event_dispatcher.cpp
│   │           │       └── waypoints_navigator.cpp
│   │           └── move_base_z_client_plugin.cpp
│   ├── move_eye/
│   │   └── move_eye_client/
│   │       ├── CHANGELOG.rst
│   │       ├── CMakeLists.txt
│   │       ├── package.xml
│   │       └── src/
│   │           └── cl_move_eye.cpp
│   ├── move_group_interface_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── move_group_interface_client/
│   │   │       ├── cl_movegroup.h
│   │   │       ├── client_behaviors/
│   │   │       │   ├── cb_attach_object.h
│   │   │       │   ├── cb_circular_pivot_motion.h
│   │   │       │   ├── cb_detach_object.h
│   │   │       │   ├── cb_end_effector_rotate.h
│   │   │       │   ├── cb_execute_last_trajectory.h
│   │   │       │   ├── cb_move_cartesian_relative.h
│   │   │       │   ├── cb_move_cartesian_relative2.h
│   │   │       │   ├── cb_move_end_effector.h
│   │   │       │   ├── cb_move_end_effector_relative.h
│   │   │       │   ├── cb_move_end_effector_trajectory.h
│   │   │       │   ├── cb_move_joints.h
│   │   │       │   ├── cb_move_joints_relative.h
│   │   │       │   ├── cb_move_known_state.h
│   │   │       │   ├── cb_move_last_trajectory_initial_state.h
│   │   │       │   ├── cb_move_named_target.h
│   │   │       │   ├── cb_pouring_motion.h
│   │   │       │   └── cb_undo_last_trajectory.h
│   │   │       ├── client_behaviors.h
│   │   │       └── components/
│   │   │           ├── cp_grasping_objects.h
│   │   │           ├── cp_tf_listener.h
│   │   │           └── cp_trajectory_history.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── move_group_interface_client/
│   │           ├── cl_movegroup.cpp
│   │           ├── client_behaviors/
│   │           │   ├── cb_attach_object.cpp
│   │           │   ├── cb_circular_pivot_motion.cpp
│   │           │   ├── cb_detach_object.cpp
│   │           │   ├── cb_end_effector_rotate.cpp
│   │           │   ├── cb_execute_last_trajectory.cpp
│   │           │   ├── cb_move_cartesian_relative.cpp
│   │           │   ├── cb_move_end_effector.cpp
│   │           │   ├── cb_move_end_effector_relative.cpp
│   │           │   ├── cb_move_end_effector_trajectory.cpp
│   │           │   ├── cb_move_joints.cpp
│   │           │   ├── cb_move_known_state.cpp
│   │           │   ├── cb_move_last_trajectory_initial_state.cpp
│   │           │   ├── cb_move_named_target.cpp
│   │           │   ├── cb_pouring_motion.cpp
│   │           │   └── cb_undo_last_trajectory.cpp
│   │           └── components/
│   │               ├── cp_grasping_objects.cpp
│   │               └── cp_trajectory_history.cpp
│   ├── multirole_sensor_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── multirole_sensor_client/
│   │   │       ├── cl_multirole_sensor.h
│   │   │       └── client_behaviors/
│   │   │           └── cb_default_multirole_sensor_behavior.h
│   │   ├── package.xml
│   │   └── rosdoc.yaml
│   ├── ros_publisher_client/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── include/
│   │   │   └── ros_publisher_client/
│   │   │       ├── cl_ros_publisher.h
│   │   │       └── client_behaviors/
│   │   │           ├── cb_default_publish_loop.h
│   │   │           ├── cb_muted_behavior.h
│   │   │           └── cb_publish_once.h
│   │   └── package.xml
│   └── ros_timer_client/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── include/
│       │   └── ros_timer_client/
│       │       ├── cl_ros_timer.h
│       │       └── client_behaviors/
│       │           ├── cb_ros_timer.h
│       │           ├── cb_timer_countdown_loop.h
│       │           └── cb_timer_countdown_once.h
│       ├── package.xml
│       └── src/
│           └── ros_timer_client/
│               ├── cb_timer.cpp
│               ├── cb_timer_countdown_loop.cpp
│               ├── cb_timer_countdown_once.cpp
│               └── timer_client.cpp
├── smacc_diagnostics/
│   ├── readme.md
│   ├── scripts/
│   │   └── regex_template.py
│   ├── smacc_runtime_test/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── config/
│   │   │   └── state_machine_config_test_file.yaml
│   │   ├── launch/
│   │   │   └── meta_test.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── smacc_runtime_test_node.cpp
│   └── smacc_rviz_plugin/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── media/
│       │   └── .empty
│       ├── package.xml
│       ├── plugin_description.xml
│       └── src/
│           ├── imu_visual.cpp
│           ├── imu_visual.h
│           ├── smacc_rviz_display.cpp
│           └── smacc_rviz_display.h
├── smacc_event_generator_library/
│   ├── eg_conditional_generator/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── eg_conditional_generator/
│   │   │       └── eg_conditional_generator.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── eg_conditional_generator/
│   │           └── eg_conditional_generator.cpp
│   └── eg_random_generator/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── eg_random_generator/
│       │       └── eg_random_generator.h
│       ├── package.xml
│       └── src/
│           └── eg_random_generator/
│               └── eg_random_generator.cpp
├── smacc_msgs/
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── msg/
│   │   ├── SmaccContainerInitialStatusCmd.msg
│   │   ├── SmaccContainerStatus.msg
│   │   ├── SmaccContainerStructure.msg
│   │   ├── SmaccEvent.msg
│   │   ├── SmaccEventGenerator.msg
│   │   ├── SmaccOrthogonal.msg
│   │   ├── SmaccSMCommand.msg
│   │   ├── SmaccState.msg
│   │   ├── SmaccStateMachine.msg
│   │   ├── SmaccStateReactor.msg
│   │   ├── SmaccStatus.msg
│   │   ├── SmaccTransition.msg
│   │   └── SmaccTransitionLogEntry.msg
│   ├── package.xml
│   └── srv/
│       └── SmaccGetTransitionHistory.srv
├── smacc_sm_reference_library/
│   ├── sm_atomic/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── sm_atomic_config.yaml
│   │   │   └── sm_atomic_test.yaml
│   │   ├── include/
│   │   │   └── sm_atomic/
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic.launch
│   │   ├── package.xml
│   │   ├── src/
│   │   │   └── sm_atomic_node.cpp
│   │   └── test/
│   │       └── sm_atomic.test
│   ├── sm_atomic_cb/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_atomic_cb_config.yaml
│   │   ├── include/
│   │   │   └── sm_atomic_cb/
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic_cb.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic_cb.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_atomic_cb_node.cpp
│   ├── sm_atomic_mode_states/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── sm_atomic_config.yaml
│   │   │   └── sm_atomic_test.yaml
│   │   ├── include/
│   │   │   └── sm_atomic_mode_states/
│   │   │       ├── client_behaviors/
│   │   │       │   └── cb_updatable_test.h
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic_mode_states.h
│   │   │       └── states/
│   │   │           ├── ms_state_1.h
│   │   │           ├── ms_state_2.h
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic_mode_states.launch
│   │   ├── package.xml
│   │   ├── src/
│   │   │   └── sm_atomic_node.cpp
│   │   └── test/
│   │       └── sm_atomic.test
│   ├── sm_atomic_services/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── sm_atomic_services_config.yaml
│   │   │   └── sm_atomic_services_test.yaml
│   │   ├── include/
│   │   │   └── sm_atomic_services/
│   │   │       ├── clients/
│   │   │       │   ├── cl_service_client.h
│   │   │       │   ├── cl_service_server.h
│   │   │       │   └── client_behaviors/
│   │   │       │       └── cb_service_server.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_services.h
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_atomic_services.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_atomic_services.launch
│   │   ├── package.xml
│   │   ├── src/
│   │   │   └── sm_atomic_services_node.cpp
│   │   └── test/
│   │       └── sm_atomic_services.test
│   ├── sm_calendar_week/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_calendar_week_config.yaml
│   │   ├── include/
│   │   │   └── sm_calendar_week/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_weekend.h
│   │   │       │   └── ms_workweek.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_calendar_week.h
│   │   │       └── states/
│   │   │           ├── st_friday.h
│   │   │           ├── st_monday.h
│   │   │           ├── st_saturday.h
│   │   │           ├── st_sunday.h
│   │   │           ├── st_thursday.h
│   │   │           ├── st_tuesday.h
│   │   │           └── st_wednesday.h
│   │   ├── launch/
│   │   │   └── sm_calendar_week.launch
│   │   ├── package.xml
│   │   ├── package_REMOTE_32590.xml
│   │   └── src/
│   │       └── sm_calendar_week_node.cpp
│   ├── sm_dance_bot/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── rosconsole.config
│   │   │   └── sm_dance_bot_config.yaml
│   │   ├── docs/
│   │   │   └── Global Transition Rules.txt
│   │   ├── include/
│   │   │   └── sm_dance_bot/
│   │   │       ├── clients/
│   │   │       │   ├── cl_led/
│   │   │       │   │   ├── cl_led.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       ├── cb_led_off.h
│   │   │       │   │       └── cb_led_on.h
│   │   │       │   ├── cl_lidar/
│   │   │       │   │   ├── cl_lidar.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_lidar_sensor.h
│   │   │       │   ├── cl_service3/
│   │   │       │   │   ├── cl_service3.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_service3.h
│   │   │       │   ├── cl_string_publisher/
│   │   │       │   │   ├── cl_string_publisher.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_string_publisher.h
│   │   │       │   └── cl_temperature_sensor/
│   │   │       │       ├── cl_temperature_sensor.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_custom_condition_temperature_sensor.h
│   │   │       ├── modestates/
│   │   │       │   ├── ms_dance_bot_recovery_mode.h
│   │   │       │   └── ms_dance_bot_run_mode.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_led.h
│   │   │       │   ├── or_navigation.h
│   │   │       │   ├── or_obstacle_perception.h
│   │   │       │   ├── or_service3.h
│   │   │       │   ├── or_string_publisher.h
│   │   │       │   ├── or_temperature_sensor.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_dance_bot.h
│   │   │       ├── states/
│   │   │       │   ├── f_pattern_states/
│   │   │       │   │   ├── sti_fpattern_forward_1.h
│   │   │       │   │   ├── sti_fpattern_forward_2.h
│   │   │       │   │   ├── sti_fpattern_loop_start.h
│   │   │       │   │   ├── sti_fpattern_return_1.h
│   │   │       │   │   ├── sti_fpattern_rotate_1.h
│   │   │       │   │   └── sti_fpattern_rotate_2.h
│   │   │       │   ├── radial_motion_states/
│   │   │       │   │   ├── sti_radial_end_point.h
│   │   │       │   │   ├── sti_radial_loop_start.h
│   │   │       │   │   ├── sti_radial_return.h
│   │   │       │   │   └── sti_radial_rotate.h
│   │   │       │   ├── s_pattern_states/
│   │   │       │   │   ├── sti_spattern_forward_1.h
│   │   │       │   │   ├── sti_spattern_forward_2.h
│   │   │       │   │   ├── sti_spattern_forward_3.h
│   │   │       │   │   ├── sti_spattern_forward_4.h
│   │   │       │   │   ├── sti_spattern_loop_start.h
│   │   │       │   │   ├── sti_spattern_rotate_1.h
│   │   │       │   │   ├── sti_spattern_rotate_2.h
│   │   │       │   │   ├── sti_spattern_rotate_3.h
│   │   │       │   │   └── sti_spattern_rotate_4.h
│   │   │       │   ├── st_acquire_sensors.h
│   │   │       │   ├── st_event_count_down.h
│   │   │       │   ├── st_navigate_forward_1.h
│   │   │       │   ├── st_navigate_forward_2.h
│   │   │       │   ├── st_navigate_reverse_1.h
│   │   │       │   ├── st_navigate_reverse_2.h
│   │   │       │   ├── st_navigate_reverse_3.h
│   │   │       │   ├── st_navigate_to_waypoint_1.h
│   │   │       │   ├── st_navigate_to_waypoints_x.h
│   │   │       │   ├── st_rotate_degrees_1.h
│   │   │       │   ├── st_rotate_degrees_2.h
│   │   │       │   ├── st_rotate_degrees_3.h
│   │   │       │   ├── st_rotate_degrees_4.h
│   │   │       │   ├── st_rotate_degrees_5.h
│   │   │       │   └── st_rotate_degrees_6.h
│   │   │       └── superstates/
│   │   │           ├── ss_f_pattern_1.h
│   │   │           ├── ss_radial_pattern_1.h
│   │   │           ├── ss_radial_pattern_2.h
│   │   │           ├── ss_radial_pattern_3.h
│   │   │           └── ss_s_pattern_1.h
│   │   ├── launch/
│   │   │   ├── readme.md
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_dance_bot.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   ├── action_server_node_3/
│   │   │   │   └── src/
│   │   │   │       └── action_server_node_3.cpp
│   │   │   ├── led_action_server/
│   │   │   │   ├── action/
│   │   │   │   │   └── LEDControl.action
│   │   │   │   └── src/
│   │   │   │       └── led_action_server_node.cpp
│   │   │   ├── lidar_node/
│   │   │   │   └── src/
│   │   │   │       └── lidar_node.cpp
│   │   │   ├── service_node_3/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── service_node_3.py
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   ├── src/
│   │   │   ├── clients/
│   │   │   │   └── cl_led/
│   │   │   │       └── cl_led.cpp
│   │   │   └── sm_dance_bot.cpp
│   │   └── urdf/
│   │       └── empty.xacro
│   ├── sm_dance_bot_2/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── rosconsole.config
│   │   │   └── sm_dance_bot_2_config.yaml
│   │   ├── docs/
│   │   │   ├── Global Transition Rules.txt
│   │   │   └── StateChart - sm_dance_bot.odp
│   │   ├── include/
│   │   │   └── sm_dance_bot_2/
│   │   │       ├── clients/
│   │   │       │   ├── cl_led/
│   │   │       │   │   ├── cl_led.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       ├── cb_led_off.h
│   │   │       │   │       └── cb_led_on.h
│   │   │       │   ├── cl_lidar/
│   │   │       │   │   ├── cl_lidar.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_lidar_sensor.h
│   │   │       │   ├── cl_service3/
│   │   │       │   │   ├── cl_service3.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_service3.h
│   │   │       │   ├── cl_string_publisher/
│   │   │       │   │   ├── cl_string_publisher.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_string_publisher.h
│   │   │       │   └── cl_temperature_sensor/
│   │   │       │       ├── cl_temperature_sensor.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_custom_condition_temperature_sensor.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_led.h
│   │   │       │   ├── or_navigation.h
│   │   │       │   ├── or_obstacle_perception.h
│   │   │       │   ├── or_service3.h
│   │   │       │   ├── or_string_publisher.h
│   │   │       │   ├── or_temperature_sensor.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_dance_bot_2.h
│   │   │       └── states/
│   │   │           ├── ms_dance_bot_recovery_mode/
│   │   │           │   └── ms_dance_bot_recovery_mode.h
│   │   │           └── ms_dance_bot_run_mode/
│   │   │               ├── f_pattern_states/
│   │   │               │   ├── ss_f_pattern_1.h
│   │   │               │   ├── sti_fpattern_forward_1.h
│   │   │               │   ├── sti_fpattern_forward_2.h
│   │   │               │   ├── sti_fpattern_loop_start.h
│   │   │               │   ├── sti_fpattern_return_1.h
│   │   │               │   ├── sti_fpattern_rotate_1.h
│   │   │               │   └── sti_fpattern_rotate_2.h
│   │   │               ├── ms_dance_bot_run_mode.h
│   │   │               ├── radial_motion_states/
│   │   │               │   ├── ss_radial_pattern_1.h
│   │   │               │   ├── ss_radial_pattern_2.h
│   │   │               │   ├── ss_radial_pattern_3.h
│   │   │               │   ├── sti_radial_end_point.h
│   │   │               │   ├── sti_radial_loop_start.h
│   │   │               │   ├── sti_radial_return.h
│   │   │               │   └── sti_radial_rotate.h
│   │   │               ├── s_pattern_states/
│   │   │               │   ├── ss_s_pattern_1.h
│   │   │               │   ├── sti_spattern_forward_1.h
│   │   │               │   ├── sti_spattern_forward_2.h
│   │   │               │   ├── sti_spattern_forward_3.h
│   │   │               │   ├── sti_spattern_forward_4.h
│   │   │               │   ├── sti_spattern_loop_start.h
│   │   │               │   ├── sti_spattern_rotate_1.h
│   │   │               │   ├── sti_spattern_rotate_2.h
│   │   │               │   ├── sti_spattern_rotate_3.h
│   │   │               │   └── sti_spattern_rotate_4.h
│   │   │               ├── st_acquire_sensors.h
│   │   │               ├── st_event_count_down.h
│   │   │               ├── st_navigate_forward_1.h
│   │   │               ├── st_navigate_forward_2.h
│   │   │               ├── st_navigate_reverse_1.h
│   │   │               ├── st_navigate_reverse_2.h
│   │   │               ├── st_navigate_reverse_3.h
│   │   │               ├── st_navigate_to_waypoint_1.h
│   │   │               ├── st_navigate_to_waypoints_x.h
│   │   │               ├── st_rotate_degrees_1.h
│   │   │               ├── st_rotate_degrees_2.h
│   │   │               ├── st_rotate_degrees_3.h
│   │   │               ├── st_rotate_degrees_4.h
│   │   │               ├── st_rotate_degrees_5.h
│   │   │               └── st_rotate_degrees_6.h
│   │   ├── launch/
│   │   │   ├── readme.md
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_dance_bot_2.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   ├── action_server_node_3/
│   │   │   │   └── src/
│   │   │   │       └── action_server_node_3.cpp
│   │   │   ├── led_action_server/
│   │   │   │   ├── action/
│   │   │   │   │   └── LEDControl.action
│   │   │   │   └── src/
│   │   │   │       └── led_action_server_node.cpp
│   │   │   ├── lidar_node/
│   │   │   │   └── src/
│   │   │   │       └── lidar_node.cpp
│   │   │   ├── service_node_3/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── service_node_3.py
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   ├── src/
│   │   │   ├── clients/
│   │   │   │   └── cl_led/
│   │   │   │       └── cl_led.cpp
│   │   │   └── sm_dance_bot_2.cpp
│   │   └── urdf/
│   │       └── empty.xacro
│   ├── sm_dance_bot_strikes_back/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── rosconsole.config
│   │   │   └── sm_dancebot_strikes_back_config.yaml
│   │   ├── include/
│   │   │   └── sm_dance_bot_strikes_back/
│   │   │       ├── clients/
│   │   │       │   ├── cl_led/
│   │   │       │   │   ├── cl_led.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       ├── cb_led_off.h
│   │   │       │   │       └── cb_led_on.h
│   │   │       │   ├── cl_lidar/
│   │   │       │   │   ├── cl_lidar.h
│   │   │       │   │   ├── client_behaviors/
│   │   │       │   │   │   └── cb_lidar_sensor.h
│   │   │       │   │   └── components/
│   │   │       │   │       └── cp_lidar_data.h
│   │   │       │   ├── cl_service3/
│   │   │       │   │   ├── cl_service3.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_service3.h
│   │   │       │   ├── cl_string_publisher/
│   │   │       │   │   ├── cl_string_publisher.h
│   │   │       │   │   └── client_behaviors/
│   │   │       │   │       └── cb_string_publisher.h
│   │   │       │   └── cl_temperature_sensor/
│   │   │       │       ├── cl_temperature_sensor.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_custom_condition_temperature_sensor.h
│   │   │       ├── modestates/
│   │   │       │   ├── ms_dance_bot_recovery_mode.h
│   │   │       │   └── ms_dance_bot_run_mode.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_led.h
│   │   │       │   ├── or_navigation.h
│   │   │       │   ├── or_obstacle_perception.h
│   │   │       │   ├── or_service3.h
│   │   │       │   ├── or_string_publisher.h
│   │   │       │   ├── or_temperature_sensor.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_dance_bot_strikes_back.h
│   │   │       ├── states/
│   │   │       │   ├── f_pattern_states/
│   │   │       │   │   ├── sti_fpattern_forward_1.h
│   │   │       │   │   ├── sti_fpattern_forward_2.h
│   │   │       │   │   ├── sti_fpattern_loop_start.h
│   │   │       │   │   ├── sti_fpattern_return_1.h
│   │   │       │   │   ├── sti_fpattern_rotate_1.h
│   │   │       │   │   └── sti_fpattern_rotate_2.h
│   │   │       │   ├── radial_motion_states/
│   │   │       │   │   ├── sti_radial_end_point.h
│   │   │       │   │   ├── sti_radial_loop_start.h
│   │   │       │   │   ├── sti_radial_return.h
│   │   │       │   │   └── sti_radial_rotate.h
│   │   │       │   ├── s_pattern_states/
│   │   │       │   │   ├── sti_spattern_forward_1.h
│   │   │       │   │   ├── sti_spattern_forward_2.h
│   │   │       │   │   ├── sti_spattern_forward_3.h
│   │   │       │   │   ├── sti_spattern_forward_4.h
│   │   │       │   │   ├── sti_spattern_loop_start.h
│   │   │       │   │   ├── sti_spattern_rotate_1.h
│   │   │       │   │   ├── sti_spattern_rotate_2.h
│   │   │       │   │   ├── sti_spattern_rotate_3.h
│   │   │       │   │   └── sti_spattern_rotate_4.h
│   │   │       │   ├── st_acquire_sensors.h
│   │   │       │   ├── st_event_count_down.h
│   │   │       │   ├── st_fpattern_prealignment.h
│   │   │       │   ├── st_navigate_to_waypoints_x.h
│   │   │       │   └── st_spattern_prealignment.h
│   │   │       └── superstates/
│   │   │           ├── ss_f_pattern_1.h
│   │   │           ├── ss_radial_pattern_1.h
│   │   │           ├── ss_radial_pattern_2.h
│   │   │           ├── ss_radial_pattern_3.h
│   │   │           └── ss_s_pattern_1.h
│   │   ├── launch/
│   │   │   ├── readme.md
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_dance_bot_strikes_back.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   ├── action_server_node_3/
│   │   │   │   └── src/
│   │   │   │       └── action_server_node_3.cpp
│   │   │   ├── led_action_server/
│   │   │   │   ├── action/
│   │   │   │   │   └── LEDControl.action
│   │   │   │   └── src/
│   │   │   │       └── led_action_server_node.cpp
│   │   │   ├── lidar_node/
│   │   │   │   └── src/
│   │   │   │       └── lidar_node.cpp
│   │   │   ├── service_node_3/
│   │   │   │   ├── __init__.py
│   │   │   │   └── src/
│   │   │   │       └── service_node_3.py
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   ├── src/
│   │   │   ├── clients/
│   │   │   │   └── cl_led/
│   │   │   │       └── cl_led.cpp
│   │   │   └── sm_dance_bot_strikes_back.cpp
│   │   └── urdf/
│   │       └── empty.xacro
│   ├── sm_ferrari/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_three_some_config.yaml
│   │   ├── include/
│   │   │   └── sm_ferrari/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           └── cb_my_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_recover.h
│   │   │       │   └── ms_run.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_ferrari.h
│   │   │       ├── states/
│   │   │       │   ├── inner_states/
│   │   │       │   │   ├── sti_state_1.h
│   │   │       │   │   ├── sti_state_2.h
│   │   │       │   │   └── sti_state_3.h
│   │   │       │   ├── st_state_1.h
│   │   │       │   ├── st_state_2.h
│   │   │       │   ├── st_state_3.h
│   │   │       │   └── st_state_4.h
│   │   │       └── superstates/
│   │   │           ├── ss_superstate_1.h
│   │   │           └── ss_superstate_2.h
│   │   ├── launch/
│   │   │   └── sm_ferrari.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── temperature_sensor_node/
│   │   │       └── src/
│   │   │           └── temperature_sensor_node.cpp
│   │   └── src/
│   │       └── sm_ferrari_node.cpp
│   ├── sm_packml/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_packml_config.yaml
│   │   ├── include/
│   │   │   └── sm_packml/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_run.h
│   │   │       │   └── ms_stop.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_packml.h
│   │   │       └── states/
│   │   │           ├── st_aborted.h
│   │   │           ├── st_aborting.h
│   │   │           ├── st_clearing.h
│   │   │           ├── st_complete.h
│   │   │           ├── st_completing.h
│   │   │           ├── st_execute.h
│   │   │           ├── st_held.h
│   │   │           ├── st_holding.h
│   │   │           ├── st_idle.h
│   │   │           ├── st_resetting.h
│   │   │           ├── st_starting.h
│   │   │           ├── st_stopped.h
│   │   │           ├── st_stopping.h
│   │   │           ├── st_suspended.h
│   │   │           ├── st_suspending.h
│   │   │           ├── st_unholding.h
│   │   │           └── st_unsuspending.h
│   │   ├── launch/
│   │   │   └── sm_packML.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_packml_node.cpp
│   ├── sm_respira_1/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_respira_1_config.yaml
│   │   ├── include/
│   │   │   └── sm_respira_1/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_calibration.h
│   │   │       │   ├── ms_leaky_lung.h
│   │   │       │   ├── ms_patient_obstruction.h
│   │   │       │   ├── ms_run.h
│   │   │       │   └── ms_shutdown.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_respira_1.h
│   │   │       ├── states/
│   │   │       │   ├── ac_cycle_inner_states/
│   │   │       │   │   ├── sti_ac_cycle_dwell.h
│   │   │       │   │   ├── sti_ac_cycle_expire.h
│   │   │       │   │   ├── sti_ac_cycle_inspire.h
│   │   │       │   │   ├── sti_ac_cycle_loop.h
│   │   │       │   │   └── sti_ac_cycle_plateau.h
│   │   │       │   ├── cmv_cycle_inner_states/
│   │   │       │   │   ├── sti_cmv_cycle_dwell.h
│   │   │       │   │   ├── sti_cmv_cycle_expire.h
│   │   │       │   │   ├── sti_cmv_cycle_inspire.h
│   │   │       │   │   ├── sti_cmv_cycle_loop.h
│   │   │       │   │   └── sti_cmv_cycle_plateau.h
│   │   │       │   ├── ms_calibration_inner_states/
│   │   │       │   │   └── st_calibration_step_1.h
│   │   │       │   ├── ms_leaky_lung_inner_states/
│   │   │       │   │   ├── st_leaky_lung_step_1.h
│   │   │       │   │   ├── st_leaky_lung_step_2.h
│   │   │       │   │   └── st_leaky_lung_step_3.h
│   │   │       │   ├── ms_patient_obstruction_inner_states/
│   │   │       │   │   ├── st_patient_obstruction_step_1.h
│   │   │       │   │   └── st_patient_obstruction_step_2.h
│   │   │       │   ├── ms_shutdown_inner_states/
│   │   │       │   │   └── st_system_shutdown.h
│   │   │       │   ├── pc_cycle_inner_states/
│   │   │       │   │   ├── sti_pc_cycle_dwell.h
│   │   │       │   │   ├── sti_pc_cycle_expire.h
│   │   │       │   │   ├── sti_pc_cycle_inspire.h
│   │   │       │   │   ├── sti_pc_cycle_loop.h
│   │   │       │   │   └── sti_pc_cycle_plateau.h
│   │   │       │   ├── ps_cycle_inner_states/
│   │   │       │   │   ├── sti_ps_cycle_dwell.h
│   │   │       │   │   ├── sti_ps_cycle_expire.h
│   │   │       │   │   ├── sti_ps_cycle_inspire.h
│   │   │       │   │   ├── sti_ps_cycle_loop.h
│   │   │       │   │   └── sti_ps_cycle_plateau.h
│   │   │       │   └── st_observe.h
│   │   │       └── superstates/
│   │   │           ├── ss_ac_cycle.h
│   │   │           ├── ss_cmv_cycle.h
│   │   │           ├── ss_pc_cycle.h
│   │   │           └── ss_ps_cycle.h
│   │   ├── launch/
│   │   │   └── sm_respira_1.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_respira_1_node.cpp
│   ├── sm_ridgeback_barrel_search_1/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── radial_motion_sm_config.yaml
│   │   │   ├── rosconsole.config
│   │   │   └── sm_ridgeback_barrel_search_1_config.yaml
│   │   ├── include/
│   │   │   └── sm_ridgeback_barrel_search_1/
│   │   │       ├── clients/
│   │   │       │   └── opencv_perception_client/
│   │   │       │       └── cl_opencv_perception_client.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_navigation.h
│   │   │       │   └── or_perception.h
│   │   │       ├── sm_ridgeback_barrel_search_1.h
│   │   │       └── states/
│   │   │           ├── st_detect_items.h
│   │   │           └── st_navigate_to_waypoint_x.h
│   │   ├── launch/
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_ridgeback_barrel_search_1.launch
│   │   ├── msg/
│   │   │   └── DetectedBlobs.msg
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── opencv_perception_node/
│   │   │       ├── CMakeLists.txt2
│   │   │       └── opencv_perception_node.cpp
│   │   ├── simulation/
│   │   │   └── worlds/
│   │   │       └── opencv_world.sdf
│   │   ├── src/
│   │   │   └── sm_ridgeback_barrel_search_1.cpp
│   │   └── urdf/
│   │       ├── ridgeback.camera.gazebo
│   │       └── ridgeback.urdf.xacro
│   ├── sm_ridgeback_barrel_search_2/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   ├── move_base_client/
│   │   │   │   ├── backward_local_planner.yaml
│   │   │   │   ├── base_local_planner_params.yaml
│   │   │   │   ├── costmap_common_params.yaml
│   │   │   │   ├── forward_local_planner.yaml
│   │   │   │   ├── global_costmap_params.yaml
│   │   │   │   ├── local_costmap_params.yaml
│   │   │   │   └── waypoints_plan.yaml
│   │   │   ├── navigation.rviz
│   │   │   ├── rosconsole.config
│   │   │   └── sm_ridgeback_barrel_search_2_config.yaml
│   │   ├── include/
│   │   │   └── sm_ridgeback_barrel_search_2/
│   │   │       ├── clients/
│   │   │       │   └── opencv_perception_client/
│   │   │       │       └── cl_opencv_perception_client.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_navigation.h
│   │   │       │   └── or_perception.h
│   │   │       ├── sm_ridgeback_barrel_search_2.h
│   │   │       └── states/
│   │   │           ├── st_detect_items.h
│   │   │           └── st_navigate_to_waypoint_x.h
│   │   ├── launch/
│   │   │   ├── ridgeback_simulation.launch
│   │   │   └── sm_ridgeback_barrel_search_2.launch
│   │   ├── msg/
│   │   │   └── DetectedBlobs.msg
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── opencv_perception_node/
│   │   │       ├── CMakeLists.txt2
│   │   │       └── opencv_perception_node.cpp
│   │   ├── simulation/
│   │   │   └── worlds/
│   │   │       └── opencv_world.sdf
│   │   ├── src/
│   │   │   └── sm_ridgeback_barrel_search_2.cpp
│   │   └── urdf/
│   │       ├── ridgeback.camera.gazebo
│   │       └── ridgeback.urdf.xacro
│   ├── sm_ridgeback_floor_coverage_dynamic_1/
│   │   └── config/
│   │       └── move_base_client/
│   │           └── base_local_planner_params.yaml
│   ├── sm_ridgeback_floor_coverage_static_1/
│   │   └── config/
│   │       └── move_base_client/
│   │           └── base_local_planner_params.yaml
│   ├── sm_starcraft_ai/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_starcraft_ai_config.yaml
│   │   ├── include/
│   │   │   └── sm_starcraft_ai/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   └── ms_run.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_starcraft_ai.h
│   │   │       ├── states/
│   │   │       │   ├── attack_inner_states/
│   │   │       │   │   ├── sti_attack_1.h
│   │   │       │   │   ├── sti_attack_2.h
│   │   │       │   │   └── sti_attack_3.h
│   │   │       │   ├── build_inner_states/
│   │   │       │   │   ├── sti_build_1.h
│   │   │       │   │   ├── sti_build_2.h
│   │   │       │   │   └── sti_build_3.h
│   │   │       │   ├── move_inner_states/
│   │   │       │   │   ├── sti_move_1.h
│   │   │       │   │   ├── sti_move_2.h
│   │   │       │   │   └── sti_move_3.h
│   │   │       │   └── st_observe.h
│   │   │       └── superstates/
│   │   │           ├── ss_attack.h
│   │   │           ├── ss_build.h
│   │   │           └── ss_move.h
│   │   ├── launch/
│   │   │   └── sm_starcraft_ai.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_starcraft_ai_node.cpp
│   ├── sm_subscriber/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── config/
│   │   │   ├── rosconsole.config
│   │   │   └── sm_subscriber_config.yaml
│   │   ├── include/
│   │   │   └── sm_subscriber/
│   │   │       ├── clients/
│   │   │       │   └── cl_numbers_subscription/
│   │   │       │       ├── cl_numbers_subscription.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_post_custom_event.h
│   │   │       │           └── cb_print_message_number.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_subscriber.h
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_subscriber.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_subscriber.launch
│   │   ├── package.xml
│   │   ├── servers/
│   │   │   └── numbers_publisher/
│   │   │       └── numbers_publisher.cpp
│   │   └── src/
│   │       └── sm_subscriber_node.cpp
│   ├── sm_three_some/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_three_some_config.yaml
│   │   ├── include/
│   │   │   └── sm_three_some/
│   │   │       ├── clients/
│   │   │       │   └── cl_subscriber/
│   │   │       │       ├── cl_subscriber.h
│   │   │       │       └── client_behaviors/
│   │   │       │           ├── cb_default_subscriber_behavior.h
│   │   │       │           └── cb_watchdog_subscriber_behavior.h
│   │   │       ├── mode_states/
│   │   │       │   ├── ms_recover.h
│   │   │       │   └── ms_run.h
│   │   │       ├── orthogonals/
│   │   │       │   ├── or_keyboard.h
│   │   │       │   ├── or_subscriber.h
│   │   │       │   ├── or_timer.h
│   │   │       │   └── or_updatable_publisher.h
│   │   │       ├── sm_three_some.h
│   │   │       ├── states/
│   │   │       │   ├── inner_states/
│   │   │       │   │   ├── sti_state_1.h
│   │   │       │   │   ├── sti_state_2.h
│   │   │       │   │   └── sti_state_3.h
│   │   │       │   ├── st_state_1.h
│   │   │       │   ├── st_state_2.h
│   │   │       │   ├── st_state_3.h
│   │   │       │   └── st_state_4.h
│   │   │       └── superstates/
│   │   │           ├── ss_superstate_1.h
│   │   │           └── ss_superstate_2.h
│   │   ├── launch/
│   │   │   └── sm_three_some.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_three_some_node.cpp
│   ├── sm_update_loop/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── config/
│   │   │   └── sm_update_loop_config.yaml
│   │   ├── include/
│   │   │   └── sm_update_loop/
│   │   │       ├── orthogonals/
│   │   │       │   └── or_timer.h
│   │   │       ├── sm_update_loop.h
│   │   │       └── states/
│   │   │           ├── st_state_1.h
│   │   │           └── st_state_2.h
│   │   ├── launch/
│   │   │   └── sm_update_loop.launch
│   │   ├── package.xml
│   │   └── src/
│   │       └── sm_update_loop_node.cpp
│   └── sm_viewer_sim/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── config/
│       │   └── sm_viewer_sim_config.yaml
│       ├── include/
│       │   └── sm_viewer_sim/
│       │       ├── modestates/
│       │       │   ├── ms_recovery_mode.h
│       │       │   └── ms_run_mode.h
│       │       ├── orthogonals/
│       │       │   └── or_navigation.h
│       │       ├── sm_viewer_sim.h
│       │       └── states/
│       │           ├── st_st1.h
│       │           ├── st_st2.h
│       │           └── st_st3.h
│       ├── launch/
│       │   └── sm_viewer_sim.launch
│       ├── package.xml
│       └── src/
│           └── sm_viewer_sim.cpp
├── smacc_state_reactor_library/
│   ├── sr_all_events_go/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── sr_all_events_go/
│   │   │       └── sr_all_events_go.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── sr_all_events_go/
│   │           └── sr_all_events_go.cpp
│   ├── sr_conditional/
│   │   ├── CHANGELOG.rst
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── sr_conditional/
│   │   │       └── sr_conditional.h
│   │   ├── package.xml
│   │   └── src/
│   │       └── sr_conditional/
│   │           └── sr_conditional.cpp
│   └── sr_event_countdown/
│       ├── CHANGELOG.rst
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── sr_event_countdown/
│       │       └── sr_event_countdown.h
│       ├── package.xml
│       └── src/
│           └── sr_event_countdown/
│               └── sr_event_countdown.cpp
└── test/
    ├── sm_coretest_transition_speed_1/
    │   ├── CHANGELOG.rst
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── config/
    │   │   └── rosconsole.config
    │   ├── include/
    │   │   └── sm_coretest_transition_speed_1/
    │   │       ├── orthogonals/
    │   │       │   └── or_timer.h
    │   │       ├── sm_coretest_transition_speed_1.h
    │   │       └── states/
    │   │           ├── st_state_1.h
    │   │           └── st_state_2.h
    │   ├── launch/
    │   │   └── sm_coretest_transition_speed_1.launch
    │   ├── package.xml
    │   └── src/
    │       └── sm_coretest_transition_speed_1_node.cpp
    ├── sm_coretest_x_y_1/
    │   ├── CHANGELOG.rst
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── config/
    │   │   └── rosconsole.config
    │   ├── include/
    │   │   └── sm_coretest_x_y_1/
    │   │       ├── orthogonals/
    │   │       │   └── or_timer.h
    │   │       ├── sm_coretest_x_y_1.h
    │   │       └── states/
    │   │           ├── st_state_1.h
    │   │           └── st_state_2.h
    │   ├── launch/
    │   │   └── sm_coretest_x_y_1.launch
    │   ├── package.xml
    │   └── src/
    │       └── sm_coretest_x_y_1_node.cpp
    ├── sm_coretest_x_y_2/
    │   ├── CHANGELOG.rst
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── config/
    │   │   └── rosconsole.config
    │   ├── include/
    │   │   └── sm_coretest_x_y_2/
    │   │       ├── orthogonals/
    │   │       │   └── or_timer.h
    │   │       ├── sm_coretest_x_y_2.h
    │   │       └── states/
    │   │           ├── st_state_1.h
    │   │           └── st_state_2.h
    │   ├── launch/
    │   │   └── sm_coretest_x_y_2.launch
    │   ├── package.xml
    │   └── src/
    │       └── sm_coretest_x_y_2_node.cpp
    └── sm_coretest_x_y_3/
        ├── CHANGELOG.rst
        ├── CMakeLists.txt
        ├── README.md
        ├── config/
        │   └── rosconsole.config
        ├── include/
        │   └── sm_coretest_x_y_3/
        │       ├── orthogonals/
        │       │   └── or_timer.h
        │       ├── sm_coretest_x_y_3.h
        │       └── states/
        │           ├── st_state_1.h
        │           └── st_state_2.h
        ├── launch/
        │   └── sm_coretest_x_y_3.launch
        ├── package.xml
        └── src/
            └── sm_coretest_x_y_3_node.cpp
Download .txt
SYMBOL INDEX (780 symbols across 617 files)

FILE: smacc/include/smacc/callback_counter_semaphore.h
  function namespace (line 16) | namespace smacc

FILE: smacc/include/smacc/client_base_components/cp_ros_control_interface.h
  function namespace (line 5) | namespace smacc

FILE: smacc/include/smacc/client_base_components/cp_topic_subscriber.h
  function namespace (line 7) | namespace smacc

FILE: smacc/include/smacc/client_bases/smacc_action_client.h
  function namespace (line 13) | namespace smacc

FILE: smacc/include/smacc/client_bases/smacc_action_client_base.h
  function namespace (line 14) | namespace smacc

FILE: smacc/include/smacc/client_bases/smacc_publisher_client.h
  function namespace (line 12) | namespace smacc

FILE: smacc/include/smacc/client_bases/smacc_service_client.h
  function namespace (line 12) | namespace smacc

FILE: smacc/include/smacc/client_bases/smacc_service_server_client.h
  function namespace (line 9) | namespace smacc {

FILE: smacc/include/smacc/client_bases/smacc_subscriber_client.h
  function namespace (line 13) | namespace smacc

FILE: smacc/include/smacc/client_behavior_bases/cb_service_server_callback_base.h
  function namespace (line 4) | namespace smacc {

FILE: smacc/include/smacc/client_behavior_bases/cb_subscription_callback_base.h
  function namespace (line 9) | namespace smacc

FILE: smacc/include/smacc/common.h
  type boost (line 33) | typedef boost::statechart::processor_container<boost::statechart::fifo_s...
  function namespace (line 34) | namespace smacc

FILE: smacc/include/smacc/component.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_asynchronous_client_behavior_impl.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_client_behavior_impl.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_client_impl.h
  function namespace (line 12) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_component_impl.h
  function namespace (line 12) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_event_generator_impl.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_orthogonal_impl.h
  function namespace (line 12) | namespace smacc
  function virtual (line 134) | virtual smacc::introspection::TypeInfo::Ptr getType() override

FILE: smacc/include/smacc/impl/smacc_state_impl.h
  function namespace (line 18) | namespace smacc

FILE: smacc/include/smacc/impl/smacc_state_machine_impl.h
  function namespace (line 25) | namespace smacc
  function namespace (line 245) | namespace utils
  type ft (line 358) | typedef decltype(callback) ft;

FILE: smacc/include/smacc/impl/smacc_state_reactor_impl.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/introspection/introspection.h
  function namespace (line 27) | namespace smacc
  function automaticTransitionTag (line 163) | void>::type
  function automaticTransitionType (line 197) | void>::type
  type boost (line 204) | typedef boost::mpl::list<SUCCESS, ABORT, PREEMPT, CONTINUELOOP, ENDLOOP>...

FILE: smacc/include/smacc/introspection/smacc_state_info.h
  function namespace (line 13) | namespace smacc

FILE: smacc/include/smacc/introspection/smacc_state_machine_info.h
  function namespace (line 19) | namespace smacc
  type typename (line 391) | typedef typename std::remove_pointer<decltype(InitialStateType::smacc_in...
  type typename (line 395) | typedef typename InitialStateType::reactions reactions;

FILE: smacc/include/smacc/introspection/state_traits.h
  function namespace (line 3) | namespace smacc

FILE: smacc/include/smacc/introspection/string_type_walker.h
  function namespace (line 14) | namespace smacc

FILE: smacc/include/smacc/smacc_asynchronous_client_behavior.h
  function namespace (line 15) | namespace smacc

FILE: smacc/include/smacc/smacc_client.h
  function namespace (line 12) | namespace smacc
  function class (line 36) | class ISmaccClient

FILE: smacc/include/smacc/smacc_client_behavior.h
  function namespace (line 10) | namespace smacc

FILE: smacc/include/smacc/smacc_client_behavior_base.h
  function namespace (line 10) | namespace smacc

FILE: smacc/include/smacc/smacc_default_events.h
  function namespace (line 8) | namespace smacc

FILE: smacc/include/smacc/smacc_event_generator.h
  function namespace (line 17) | namespace smacc

FILE: smacc/include/smacc/smacc_fifo_scheduler.h
  type boost (line 4) | typedef boost::statechart::fifo_scheduler<SmaccFifoWorker, SmaccAllocato...

FILE: smacc/include/smacc/smacc_fifo_worker.h
  type std (line 4) | typedef std::allocator<boost::statechart::none> SmaccAllocator;
  type boost (line 5) | typedef boost::statechart::fifo_worker<SmaccAllocator> SmaccFifoWorker;

FILE: smacc/include/smacc/smacc_orthogonal.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/smacc_signal.h
  function namespace (line 12) | namespace smacc

FILE: smacc/include/smacc/smacc_signal_detector.h
  function namespace (line 12) | namespace smacc

FILE: smacc/include/smacc/smacc_state.h
  function namespace (line 9) | namespace smacc

FILE: smacc/include/smacc/smacc_state_base.h
  function namespace (line 13) | namespace smacc
  function virtual (line 79) | virtual ~SmaccState()
  function smacc (line 83) | const smacc::introspection::SmaccStateInfo *getStateInfo()
  function virtual (line 108) | virtual ISmaccState *getParentState()
  function exit (line 116) | void exit()
  function onEntry (line 139) | void onEntry()
  function onExit (line 145) | void onExit()
  function virtual (line 168) | virtual ISmaccStateMachine &getStateMachine()
  function std (line 229) | static std::shared_ptr<smacc::introspection::StateReactorHandler> static...
  function throwSequenceFinishedEvent (line 326) | void throwSequenceFinishedEvent()
  type typename (line 336) | typedef typename base_type::outermost_context_base_type
  type typename (line 338) | typedef typename base_type::inner_context_ptr_type inner_context_ptr_type;
  type typename (line 339) | typedef typename base_type::context_ptr_type context_ptr_type;
  type typename (line 340) | typedef typename base_type::inner_initial_list inner_initial_list;
  function initial_deep_construct (line 342) | static void initial_deep_construct(
  function deep_construct (line 349) | static void deep_construct(
  function inner_context_ptr_type (line 359) | static inner_context_ptr_type shallow_construct(
  function configure_orthogonal_internal (line 376) | void configure_orthogonal_internal(std::function<void(ISmaccState *state...
  function entryStateInternal (line 393) | void entryStateInternal()

FILE: smacc/include/smacc/smacc_state_machine.h
  type class (line 34) | enum class
  function StateMachineInternalAction (line 39) | enum class StateMachineInternalAction

FILE: smacc/include/smacc/smacc_state_machine_base.h
  function namespace (line 12) | namespace smacc
  function virtual (line 38) | virtual void stop() override
  function virtual (line 44) | virtual void eStop() override
  function virtual (line 50) | virtual void initiate_impl() override

FILE: smacc/include/smacc/smacc_state_reactor.h
  function namespace (line 17) | namespace smacc

FILE: smacc/include/smacc/smacc_transition.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/smacc_types.h
  function namespace (line 11) | namespace smacc

FILE: smacc/include/smacc/smacc_updatable.h
  function namespace (line 13) | namespace smacc

FILE: smacc/src/smacc/callback_counter_semaphore.cpp
  type smacc (line 15) | namespace smacc

FILE: smacc/src/smacc/client.cpp
  type smacc (line 11) | namespace smacc

FILE: smacc/src/smacc/client_bases/smacc_action_client.cpp
  type smacc (line 8) | namespace smacc
    type client_bases (line 10) | namespace client_bases

FILE: smacc/src/smacc/common.cpp
  type smacc (line 9) | namespace smacc
    type utils (line 11) | namespace utils
      function cleanShortTypeName (line 14) | std::string cleanShortTypeName(const std::type_info &tinfo)

FILE: smacc/src/smacc/components/cp_ros_control_interface.cpp
  type smacc (line 10) | namespace smacc
    type components (line 12) | namespace components

FILE: smacc/src/smacc/introspection/reflection.cpp
  type smacc (line 4) | namespace smacc
    type introspection (line 7) | namespace introspection
      function transitionInfoToMsg (line 9) | void transitionInfoToMsg(const SmaccTransitionInfo &transition, smac...

FILE: smacc/src/smacc/introspection/string_type_walker.cpp
  type smacc (line 23) | namespace smacc
    type introspection (line 25) | namespace introspection
      function replace (line 27) | bool replace(std::string& str, const std::string& from, const std::s...
      function replace_back (line 36) | std::string replace_back(std::string roottype, std::vector<std::pair...

FILE: smacc/src/smacc/orthogonal.cpp
  type smacc (line 5) | namespace smacc

FILE: smacc/src/smacc/signal_detector.cpp
  type smacc (line 11) | namespace smacc

FILE: smacc/src/smacc/smacc_client_async_behavior.cpp
  type smacc (line 3) | namespace smacc

FILE: smacc/src/smacc/smacc_client_behavior.cpp
  type smacc (line 3) | namespace smacc

FILE: smacc/src/smacc/smacc_client_behavior_base.cpp
  type smacc (line 3) | namespace smacc

FILE: smacc/src/smacc/smacc_component.cpp
  type smacc (line 8) | namespace smacc

FILE: smacc/src/smacc/smacc_event_generator.cpp
  type smacc (line 9) | namespace smacc

FILE: smacc/src/smacc/smacc_state.cpp
  type smacc (line 4) | namespace smacc

FILE: smacc/src/smacc/smacc_state_info.cpp
  type smacc (line 5) | namespace smacc
    function SmaccStateType (line 32) | SmaccStateType SmaccStateInfo::getStateLevel()

FILE: smacc/src/smacc/smacc_state_machine.cpp
  type smacc (line 12) | namespace smacc

FILE: smacc/src/smacc/smacc_state_machine_info.cpp
  type smacc (line 4) | namespace smacc

FILE: smacc/src/smacc/smacc_updatable.cpp
  type smacc (line 3) | namespace smacc

FILE: smacc/src/smacc/state_reactor.cpp
  type smacc (line 4) | namespace smacc
    type introspection (line 44) | namespace introspection

FILE: smacc/test/type_info_unit_test.cpp
  function TEST (line 9) | TEST(TestSuite, testCase2)
  function TEST (line 16) | TEST(TestSuite, testCase1)
  function main (line 38) | int main(int argc, char **argv)

FILE: smacc_ci/packagecloud_docker/generate_debs.py
  function build_deb_package (line 28) | def build_deb_package(
  function iterate_debian_generation (line 124) | def iterate_debian_generation(
  function get_identified_packages (line 150) | def get_identified_packages(workspace_folder):
  function push_debian_files_package_cloud (line 171) | def push_debian_files_package_cloud(repo_owner, reponame, osname, osvers...
  function remove_debian_files (line 195) | def remove_debian_files(repo_owner, reponame, osname, osversion, debianf...
  function create_and_push_smacc_debians (line 218) | def create_and_push_smacc_debians(osname, osversion, rosversion, reponam...

FILE: smacc_client_library/battery_monitor_client/include/battery_monitor_client/cl_battery_monitor.h
  function namespace (line 14) | namespace cl_battery_monitor

FILE: smacc_client_library/battery_monitor_client/src/battery_monitor_client/cl_battery_monitor.cpp
  type cl_battery_monitor (line 3) | namespace cl_battery_monitor

FILE: smacc_client_library/keyboard_client/include/keyboard_client/cl_keyboard.h
  function namespace (line 13) | namespace cl_keyboard

FILE: smacc_client_library/keyboard_client/include/keyboard_client/client_behaviors/cb_default_keyboard_behavior.h
  function namespace (line 8) | namespace cl_keyboard

FILE: smacc_client_library/keyboard_client/server/keyboard_server_node/keyboard_server_node.py
  function getKey (line 11) | def getKey():

FILE: smacc_client_library/keyboard_client/src/keyboard_client/cl_keyboard.cpp
  type cl_keyboard (line 3) | namespace cl_keyboard {

FILE: smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/include/backward_global_planner/backward_global_planner.h
  function namespace (line 13) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/src/backward_global_planner.cpp
  type cl_move_base_z (line 23) | namespace cl_move_base_z
    type backward_global_planner (line 25) | namespace backward_global_planner

FILE: smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/include/backward_local_planner/backward_local_planner.h
  type meter (line 16) | typedef double meter;
  type rad (line 17) | typedef double rad;
  function namespace (line 19) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/src/backward_local_planner.cpp
  type cl_move_base_z (line 10) | namespace cl_move_base_z
    type backward_local_planner (line 12) | namespace backward_local_planner
      function optionalRobotPose (line 307) | tf::Stamped<tf::Pose> optionalRobotPose(costmap_2d::Costmap2DROS *co...
      function optionalRobotPose (line 317) | tf::Stamped<tf::Pose> optionalRobotPose(costmap_2d::Costmap2DROS *co...

FILE: smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/include/forward_global_planner/forward_global_planner.h
  function namespace (line 12) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/include/forward_global_planner/move_base_z_client_tools.h
  function namespace (line 11) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/src/forward_global_planner.cpp
  type cl_move_base_z (line 19) | namespace cl_move_base_z
    type forward_global_planner (line 21) | namespace forward_global_planner

FILE: smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/src/path_tools.cpp
  type cl_move_base_z (line 11) | namespace cl_move_base_z
    function makePureSpinningSubPlan (line 13) | geometry_msgs::PoseStamped makePureSpinningSubPlan(const geometry_msgs...
    function makePureStraightSubPlan (line 61) | geometry_msgs::PoseStamped makePureStraightSubPlan(const geometry_msgs...

FILE: smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/include/forward_local_planner/forward_local_planner.h
  type meter (line 15) | typedef double meter;
  type rad (line 16) | typedef double rad;
  function namespace (line 18) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/src/forward_local_planner.cpp
  type cl_move_base_z (line 18) | namespace cl_move_base_z
    type forward_local_planner (line 20) | namespace forward_local_planner
      function optionalRobotPose (line 206) | tf::Stamped<tf::Pose> optionalRobotPose(costmap_2d::Costmap2DROS *co...
      function optionalRobotPose (line 216) | tf::Stamped<tf::Pose> optionalRobotPose(costmap_2d::Costmap2DROS *co...
      function clamp (line 224) | void clamp(geometry_msgs::Twist &cmd_vel, double max_linear_x_speed_...

FILE: smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/include/pure_spinning_local_planner/pure_spinning_local_planner.h
  type meter (line 16) | typedef double meter;
  type rad (line 17) | typedef double rad;
  type rad_s (line 18) | typedef double rad_s;
  function namespace (line 20) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/src/pure_spinning_local_planner/pure_spinning_local_planner.cpp
  type cl_move_base_z (line 8) | namespace cl_move_base_z
    type pure_spinning_local_planner (line 10) | namespace pure_spinning_local_planner
      function optionalRobotPose (line 14) | tf::Stamped<tf::Pose> optionalRobotPose(costmap_2d::Costmap2DROS *co...
      function optionalRobotPose (line 24) | tf::Stamped<tf::Pose> optionalRobotPose(costmap_2d::Costmap2DROS *co...
      function publishGoalMarker (line 145) | void publishGoalMarker(double x, double y, double phi)

FILE: smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/include/undo_path_global_planner/undo_path_global_planner.h
  function namespace (line 13) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/src/undo_path_global_planner.cpp
  type cl_move_base_z (line 23) | namespace cl_move_base_z
    type undo_path_global_planner (line 25) | namespace undo_path_global_planner

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_absolute_rotate.h
  function namespace (line 12) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_move_base_client_behavior_base.h
  function namespace (line 15) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_backwards.h
  function namespace (line 12) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_forward.h
  function namespace (line 12) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_global_position.h
  function namespace (line 12) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_next_waypoint.h
  function namespace (line 11) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_rotate.h
  function namespace (line 11) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_undo_path_backwards.h
  function namespace (line 11) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_undo_path_backwards2.h
  function namespace (line 14) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/costmap_switch/cp_costmap_switch.h
  type class (line 27) | enum class
  function virtual (line 39) | virtual void onInitialize() override;

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/odom_tracker/odom_tracker.h
  function namespace (line 27) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/planner_switcher/planner_switcher.h
  function namespace (line 17) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/pose/cp_pose.h
  function namespace (line 16) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/waypoints_navigator/waypoints_event_dispatcher.h
  function namespace (line 11) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/waypoints_navigator/waypoints_navigator.h
  function namespace (line 14) | namespace cl_move_base_z
  function class (line 32) | class WaypointNavigator : public smacc::ISmaccComponent

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/move_base_z_client_plugin.h
  function namespace (line 14) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_absolute_rotate.cpp
  type cl_move_base_z (line 6) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_move_base_client_behavior_base.cpp
  type cl_move_base_z (line 8) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_navigate_backward.cpp
  type cl_move_base_z (line 6) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_navigate_forward.cpp
  type cl_move_base_z (line 4) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_navigate_global_position.cpp
  type cl_move_base_z (line 6) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_navigate_next_waypoint.cpp
  type cl_move_base_z (line 4) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_rotate.cpp
  type cl_move_base_z (line 5) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_undo_path_backwards.cpp
  type cl_move_base_z (line 5) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_undo_path_backwards2.cpp
  type cl_move_base_z (line 5) | namespace cl_move_base_z
    function sgn (line 8) | int sgn(T val)

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/costmap_switch/cp_costmap_switch.cpp
  type cl_move_base_z (line 3) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/odom_tracker/odom_tracker.cpp
  type cl_move_base_z (line 10) | namespace cl_move_base_z
    type odom_tracker (line 12) | namespace odom_tracker

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/odom_tracker/odom_tracker_node.cpp
  class OdomTrackerActionServer (line 16) | class OdomTrackerActionServer
    method OdomTrackerActionServer (line 22) | OdomTrackerActionServer()
    method execute (line 32) | void execute(const OdomTrackerGoalConstPtr &goal) // Note: "Action" is...
    method run (line 87) | void run()
  function main (line 101) | int main(int argc, char **argv)

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/planner_switcher/planner_switcher.cpp
  type cl_move_base_z (line 9) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/pose/cp_pose.cpp
  type cl_move_base_z (line 10) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/waypoints_navigator/waypoints_event_dispatcher.cpp
  type cl_move_base_z (line 3) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/components/waypoints_navigator/waypoints_navigator.cpp
  type cl_move_base_z (line 12) | namespace cl_move_base_z

FILE: smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/move_base_z_client_plugin.cpp
  type cl_move_base_z (line 9) | namespace cl_move_base_z

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/cl_movegroup.h
  function namespace (line 18) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_attach_object.h
  function namespace (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_circular_pivot_motion.h
  function namespace (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_detach_object.h
  function namespace (line 13) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_end_effector_rotate.h
  function namespace (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_execute_last_trajectory.h
  function namespace (line 11) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_cartesian_relative.h
  function namespace (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_cartesian_relative2.h
  function namespace (line 13) | namespace cl_move_group_interface
  function virtual (line 35) | virtual void generateTrajectory() override

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_end_effector.h
  function namespace (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_end_effector_relative.h
  function namespace (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_end_effector_trajectory.h
  function namespace (line 14) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_joints.h
  function namespace (line 14) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_known_state.h
  function namespace (line 13) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_last_trajectory_initial_state.h
  function namespace (line 11) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_move_named_target.h
  function namespace (line 14) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_pouring_motion.h
  function namespace (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/client_behaviors/cb_undo_last_trajectory.h
  function namespace (line 11) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/components/cp_grasping_objects.h
  function namespace (line 8) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/components/cp_tf_listener.h
  function namespace (line 17) | namespace cl_move_base_z
  function getLastTransform (line 62) | void getLastTransform(std::string &targetPoseFrameName, std::string &ref...

FILE: smacc_client_library/move_group_interface_client/include/move_group_interface_client/components/cp_trajectory_history.h
  function namespace (line 13) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/cl_movegroup.cpp
  type cl_move_group_interface (line 8) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_attach_object.cpp
  type cl_move_group_interface (line 10) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_circular_pivot_motion.cpp
  type cl_move_group_interface (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_detach_object.cpp
  type cl_move_group_interface (line 10) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_end_effector_rotate.cpp
  type cl_move_group_interface (line 3) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_execute_last_trajectory.cpp
  type cl_move_group_interface (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_cartesian_relative.cpp
  type cl_move_group_interface (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_end_effector.cpp
  type cl_move_group_interface (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_end_effector_relative.cpp
  type cl_move_group_interface (line 12) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_end_effector_trajectory.cpp
  type cl_move_group_interface (line 14) | namespace cl_move_group_interface
    function ComputeJointTrajectoryErrorCode (line 36) | ComputeJointTrajectoryErrorCode CbMoveEndEffectorTrajectory::computeJo...

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_joints.cpp
  type cl_move_group_interface (line 10) | namespace cl_move_group_interface
    function currentJointStatesToString (line 35) | std::string currentJointStatesToString(moveit::planning_interface::Mov...

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_known_state.cpp
  type cl_move_group_interface (line 13) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_last_trajectory_initial_state.cpp
  type cl_move_group_interface (line 10) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_move_named_target.cpp
  type cl_move_group_interface (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_pouring_motion.cpp
  type cl_move_group_interface (line 11) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/client_behaviors/cb_undo_last_trajectory.cpp
  type cl_move_group_interface (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/components/cp_grasping_objects.cpp
  type cl_move_group_interface (line 3) | namespace cl_move_group_interface

FILE: smacc_client_library/move_group_interface_client/src/move_group_interface_client/components/cp_trajectory_history.cpp
  type cl_move_group_interface (line 9) | namespace cl_move_group_interface

FILE: smacc_client_library/multirole_sensor_client/include/multirole_sensor_client/cl_multirole_sensor.h
  function namespace (line 11) | namespace cl_multirole_sensor

FILE: smacc_client_library/multirole_sensor_client/include/multirole_sensor_client/client_behaviors/cb_default_multirole_sensor_behavior.h
  function namespace (line 6) | namespace cl_multirole_sensor

FILE: smacc_client_library/ros_publisher_client/include/ros_publisher_client/cl_ros_publisher.h
  function namespace (line 6) | namespace cl_ros_publisher

FILE: smacc_client_library/ros_publisher_client/include/ros_publisher_client/client_behaviors/cb_default_publish_loop.h
  function namespace (line 6) | namespace cl_ros_publisher
  function virtual (line 36) | virtual void onEntry() override
  function virtual (line 41) | virtual void update()
  function virtual (line 47) | virtual void onExit() override

FILE: smacc_client_library/ros_publisher_client/include/ros_publisher_client/client_behaviors/cb_muted_behavior.h
  function namespace (line 6) | namespace cl_ros_publisher

FILE: smacc_client_library/ros_publisher_client/include/ros_publisher_client/client_behaviors/cb_publish_once.h
  function namespace (line 6) | namespace cl_ros_publisher

FILE: smacc_client_library/ros_timer_client/include/ros_timer_client/cl_ros_timer.h
  function namespace (line 7) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/include/ros_timer_client/client_behaviors/cb_ros_timer.h
  function namespace (line 6) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/include/ros_timer_client/client_behaviors/cb_timer_countdown_loop.h
  function namespace (line 6) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/include/ros_timer_client/client_behaviors/cb_timer_countdown_once.h
  function namespace (line 6) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/src/ros_timer_client/cb_timer.cpp
  type cl_ros_timer (line 3) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/src/ros_timer_client/cb_timer_countdown_loop.cpp
  type cl_ros_timer (line 3) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/src/ros_timer_client/cb_timer_countdown_once.cpp
  type cl_ros_timer (line 3) | namespace cl_ros_timer

FILE: smacc_client_library/ros_timer_client/src/ros_timer_client/timer_client.cpp
  type cl_ros_timer (line 3) | namespace cl_ros_timer

FILE: smacc_diagnostics/scripts/regex_template.py
  class TypeInfo (line 4) | class TypeInfo:
    method __init__ (line 5) | def __init__(self, tkey, codedtype, finaltype):
    method __str__ (line 11) | def __str__(self):
  function getRootTypeInfo (line 15) | def getRootTypeInfo(inputtext):

FILE: smacc_diagnostics/smacc_runtime_test/src/smacc_runtime_test_node.cpp
  class SmaccTestRuntimeNode (line 8) | class SmaccTestRuntimeNode
    method tryTestPolicyFactory (line 41) | std::shared_ptr<TestPolicy> tryTestPolicyFactory(std::string matchname...
    method init (line 61) | void init()
    method success (line 99) | void success(std::string msg)
    method failure (line 105) | void failure(std::string msg)
    method update (line 111) | void update()
    method onRosOutCallback (line 119) | void onRosOutCallback(const rosgraph_msgs::Log& msg)
    method onSmaccTransitionCallback (line 124) | void onSmaccTransitionCallback(const smacc_msgs::SmaccTransitionLogEnt...
  class TimeoutFailureTestPolicy (line 9) | class TimeoutFailureTestPolicy
    method init (line 136) | virtual void init(XmlRpc::XmlRpcValue& initXmlRpcValue) override
    method update (line 145) | virtual void update()
  class ReachedStateSuccessTestPolicy (line 10) | class ReachedStateSuccessTestPolicy
    method init (line 161) | virtual void init(XmlRpc::XmlRpcValue& initXmlRpcValue) override
    method update (line 178) | virtual void update()
  class TestPolicy (line 13) | class TestPolicy
    method init (line 18) | virtual void init(XmlRpc::XmlRpcValue& initXmlRpcValue)
    method update (line 22) | virtual void update()
  class SmaccTestRuntimeNode (line 28) | class SmaccTestRuntimeNode
    method tryTestPolicyFactory (line 41) | std::shared_ptr<TestPolicy> tryTestPolicyFactory(std::string matchname...
    method init (line 61) | void init()
    method success (line 99) | void success(std::string msg)
    method failure (line 105) | void failure(std::string msg)
    method update (line 111) | void update()
    method onRosOutCallback (line 119) | void onRosOutCallback(const rosgraph_msgs::Log& msg)
    method onSmaccTransitionCallback (line 124) | void onSmaccTransitionCallback(const smacc_msgs::SmaccTransitionLogEnt...
  class TimeoutFailureTestPolicy (line 131) | class TimeoutFailureTestPolicy : public TestPolicy
    method init (line 136) | virtual void init(XmlRpc::XmlRpcValue& initXmlRpcValue) override
    method update (line 145) | virtual void update()
  class ReachedStateSuccessTestPolicy (line 158) | class ReachedStateSuccessTestPolicy : public TestPolicy
    method init (line 161) | virtual void init(XmlRpc::XmlRpcValue& initXmlRpcValue) override
    method update (line 178) | virtual void update()
  function main (line 185) | int main(int argc, char** argv)

FILE: smacc_diagnostics/smacc_rviz_plugin/src/imu_visual.cpp
  type smacc_rviz_plugin (line 38) | namespace smacc_rviz_plugin

FILE: smacc_diagnostics/smacc_rviz_plugin/src/imu_visual.h
  function namespace (line 39) | namespace smacc_rviz_plugin

FILE: smacc_diagnostics/smacc_rviz_plugin/src/smacc_rviz_display.cpp
  type smacc_rviz_plugin (line 45) | namespace smacc_rviz_plugin

FILE: smacc_diagnostics/smacc_rviz_plugin/src/smacc_rviz_display.h
  function namespace (line 50) | namespace smacc_rviz_plugin

FILE: smacc_event_generator_library/eg_conditional_generator/include/eg_conditional_generator/eg_conditional_generator.h
  function namespace (line 9) | namespace smacc

FILE: smacc_event_generator_library/eg_conditional_generator/src/eg_conditional_generator/eg_conditional_generator.cpp
  type smacc (line 3) | namespace smacc
    type event_generators (line 5) | namespace event_generators

FILE: smacc_event_generator_library/eg_random_generator/include/eg_random_generator/eg_random_generator.h
  function namespace (line 9) | namespace smacc

FILE: smacc_event_generator_library/eg_random_generator/src/eg_random_generator/eg_random_generator.cpp
  type smacc (line 3) | namespace smacc
    type state_reactors (line 5) | namespace state_reactors

FILE: smacc_sm_reference_library/sm_atomic/include/sm_atomic/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_atomic

FILE: smacc_sm_reference_library/sm_atomic/include/sm_atomic/sm_atomic.h
  function namespace (line 16) | namespace sm_atomic

FILE: smacc_sm_reference_library/sm_atomic/include/sm_atomic/states/st_state_1.h
  function namespace (line 3) | namespace sm_atomic

FILE: smacc_sm_reference_library/sm_atomic/include/sm_atomic/states/st_state_2.h
  function namespace (line 3) | namespace sm_atomic

FILE: smacc_sm_reference_library/sm_atomic/src/sm_atomic_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_atomic_cb/include/sm_atomic_cb/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_atomic_cb

FILE: smacc_sm_reference_library/sm_atomic_cb/include/sm_atomic_cb/sm_atomic_cb.h
  function namespace (line 16) | namespace sm_atomic_cb

FILE: smacc_sm_reference_library/sm_atomic_cb/include/sm_atomic_cb/states/st_state_1.h
  function namespace (line 3) | namespace sm_atomic_cb

FILE: smacc_sm_reference_library/sm_atomic_cb/include/sm_atomic_cb/states/st_state_2.h
  function namespace (line 3) | namespace sm_atomic_cb

FILE: smacc_sm_reference_library/sm_atomic_cb/src/sm_atomic_cb_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/client_behaviors/cb_updatable_test.h
  function virtual (line 13) | virtual void onEntry()
  function virtual (line 18) | virtual void onExit()
  function virtual (line 23) | virtual void update() override

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_atomic_mode_states

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/sm_atomic_mode_states.h
  function namespace (line 17) | namespace sm_atomic_mode_states

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/states/ms_state_1.h
  function namespace (line 3) | namespace sm_atomic_mode_states

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/states/ms_state_2.h
  function namespace (line 3) | namespace sm_atomic_mode_states

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/states/st_state_1.h
  function namespace (line 3) | namespace sm_atomic_mode_states

FILE: smacc_sm_reference_library/sm_atomic_mode_states/include/sm_atomic_mode_states/states/st_state_2.h
  function namespace (line 3) | namespace sm_atomic_mode_states

FILE: smacc_sm_reference_library/sm_atomic_mode_states/src/sm_atomic_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/clients/cl_service_client.h
  function namespace (line 6) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/clients/cl_service_server.h
  function namespace (line 6) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/clients/client_behaviors/cb_service_server.h
  function namespace (line 4) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/orthogonals/or_services.h
  function namespace (line 4) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/sm_atomic_services.h
  function namespace (line 20) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/states/st_state_1.h
  function namespace (line 3) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/include/sm_atomic_services/states/st_state_2.h
  function namespace (line 3) | namespace sm_atomic_services

FILE: smacc_sm_reference_library/sm_atomic_services/src/sm_atomic_services_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/clients/cl_subscriber/cl_subscriber.h
  function namespace (line 6) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/clients/cl_subscriber/client_behaviors/cb_default_subscriber_behavior.h
  function namespace (line 5) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/clients/cl_subscriber/client_behaviors/cb_watchdog_subscriber_behavior.h
  function namespace (line 5) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/mode_states/ms_weekend.h
  function namespace (line 2) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/mode_states/ms_workweek.h
  function namespace (line 2) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/orthogonals/or_keyboard.h
  function namespace (line 5) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/orthogonals/or_timer.h
  function namespace (line 6) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/sm_calendar_week.h
  function namespace (line 28) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_friday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_monday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_saturday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_sunday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_thursday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_tuesday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/include/sm_calendar_week/states/st_wednesday.h
  function namespace (line 1) | namespace sm_calendar_week

FILE: smacc_sm_reference_library/sm_calendar_week/src/sm_calendar_week_node.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_led/cl_led.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_led/client_behaviors/cb_led_off.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_led/client_behaviors/cb_led_on.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_lidar/cl_lidar.h
  function namespace (line 7) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_lidar/client_behaviors/cb_lidar_sensor.h
  function namespace (line 7) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_service3/cl_service3.h
  function namespace (line 5) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_service3/client_behaviors/cb_service3.h
  function namespace (line 4) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_string_publisher/cl_string_publisher.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_string_publisher/client_behaviors/cb_string_publisher.h
  function namespace (line 7) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_temperature_sensor/cl_temperature_sensor.h
  function namespace (line 7) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/clients/cl_temperature_sensor/client_behaviors/cb_custom_condition_temperature_sensor.h
  function namespace (line 7) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/modestates/ms_dance_bot_recovery_mode.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/modestates/ms_dance_bot_run_mode.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_led.h
  function namespace (line 5) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_navigation.h
  function namespace (line 10) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_obstacle_perception.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_service3.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_string_publisher.h
  function namespace (line 5) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_temperature_sensor.h
  function namespace (line 8) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_timer.h
  function namespace (line 5) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_updatable_publisher.h
  function namespace (line 6) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/sm_dance_bot.h
  function namespace (line 55) | namespace sm_dance_bot
  function namespace (line 118) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/f_pattern_states/sti_fpattern_forward_1.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/f_pattern_states/sti_fpattern_forward_2.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/f_pattern_states/sti_fpattern_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/f_pattern_states/sti_fpattern_return_1.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/f_pattern_states/sti_fpattern_rotate_1.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/f_pattern_states/sti_fpattern_rotate_2.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/radial_motion_states/sti_radial_end_point.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/radial_motion_states/sti_radial_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/radial_motion_states/sti_radial_return.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/radial_motion_states/sti_radial_rotate.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_forward_1.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_forward_2.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_forward_3.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_forward_4.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_rotate_1.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_rotate_2.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_rotate_3.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/s_pattern_states/sti_spattern_rotate_4.h
  function namespace (line 1) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_acquire_sensors.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_event_count_down.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_forward_1.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_forward_2.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_reverse_1.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_reverse_2.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_reverse_3.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_to_waypoint_1.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_navigate_to_waypoints_x.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_rotate_degrees_1.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_rotate_degrees_2.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_rotate_degrees_3.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_rotate_degrees_4.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_rotate_degrees_5.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/states/st_rotate_degrees_6.h
  function namespace (line 2) | namespace sm_dance_bot

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/superstates/ss_f_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot {

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/superstates/ss_radial_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot {

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/superstates/ss_radial_pattern_2.h
  function namespace (line 3) | namespace sm_dance_bot {

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/superstates/ss_radial_pattern_3.h
  function namespace (line 3) | namespace sm_dance_bot {

FILE: smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/superstates/ss_s_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot {

FILE: smacc_sm_reference_library/sm_dance_bot/servers/led_action_server/src/led_action_server_node.cpp
  class LEDActionServer (line 22) | class LEDActionServer
    method LEDActionServer (line 38) | LEDActionServer()
    method publishFeedback (line 48) | void publishFeedback()  // Note: "Action" is not appended to DoDishes ...
    method execute (line 60) | void execute(const sm_dance_bot::LEDControlGoalConstPtr& goal)  // Not...
    method run (line 101) | void run()
    method publishStateMarker (line 121) | void publishStateMarker()
  function main (line 177) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_dance_bot/servers/service_node_3/src/service_node_3.py
  function set_bool_service (line 10) | def set_bool_service(req):

FILE: smacc_sm_reference_library/sm_dance_bot/servers/temperature_sensor_node/src/temperature_sensor_node.cpp
  function main (line 4) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_dance_bot/src/clients/cl_led/cl_led.cpp
  type sm_dance_bot (line 9) | namespace sm_dance_bot
    type cl_led (line 11) | namespace cl_led

FILE: smacc_sm_reference_library/sm_dance_bot/src/sm_dance_bot.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_led/cl_led.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_led/client_behaviors/cb_led_off.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_led/client_behaviors/cb_led_on.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_lidar/cl_lidar.h
  function namespace (line 7) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_lidar/client_behaviors/cb_lidar_sensor.h
  function namespace (line 7) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_service3/cl_service3.h
  function namespace (line 5) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_service3/client_behaviors/cb_service3.h
  function namespace (line 4) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_string_publisher/cl_string_publisher.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_string_publisher/client_behaviors/cb_string_publisher.h
  function namespace (line 7) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_temperature_sensor/cl_temperature_sensor.h
  function namespace (line 7) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/clients/cl_temperature_sensor/client_behaviors/cb_custom_condition_temperature_sensor.h
  function namespace (line 7) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_led.h
  function namespace (line 5) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_navigation.h
  function namespace (line 10) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_obstacle_perception.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_service3.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_string_publisher.h
  function namespace (line 5) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_temperature_sensor.h
  function namespace (line 8) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_timer.h
  function namespace (line 5) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/orthogonals/or_updatable_publisher.h
  function namespace (line 6) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/sm_dance_bot_2.h
  function namespace (line 55) | namespace sm_dance_bot_2
  function namespace (line 118) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_recovery_mode/ms_dance_bot_recovery_mode.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/ss_f_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot_2 {

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/sti_fpattern_forward_1.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/sti_fpattern_forward_2.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/sti_fpattern_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/sti_fpattern_return_1.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/sti_fpattern_rotate_1.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/f_pattern_states/sti_fpattern_rotate_2.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/ms_dance_bot_run_mode.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/ss_radial_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot_2 {

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/ss_radial_pattern_2.h
  function namespace (line 3) | namespace sm_dance_bot_2 {

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/ss_radial_pattern_3.h
  function namespace (line 3) | namespace sm_dance_bot_2 {

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/sti_radial_end_point.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/sti_radial_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/sti_radial_return.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/radial_motion_states/sti_radial_rotate.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/ss_s_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot_2 {

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_forward_1.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_forward_2.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_forward_3.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_forward_4.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_rotate_1.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_rotate_2.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_rotate_3.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/s_pattern_states/sti_spattern_rotate_4.h
  function namespace (line 1) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_acquire_sensors.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_event_count_down.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_forward_1.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_forward_2.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_reverse_1.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_reverse_2.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_reverse_3.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_to_waypoint_1.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_navigate_to_waypoints_x.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_rotate_degrees_1.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_rotate_degrees_2.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_rotate_degrees_3.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_rotate_degrees_4.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_rotate_degrees_5.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/include/sm_dance_bot_2/states/ms_dance_bot_run_mode/st_rotate_degrees_6.h
  function namespace (line 2) | namespace sm_dance_bot_2

FILE: smacc_sm_reference_library/sm_dance_bot_2/servers/led_action_server/src/led_action_server_node.cpp
  class LEDActionServer (line 22) | class LEDActionServer
    method LEDActionServer (line 38) | LEDActionServer()
    method publishFeedback (line 48) | void publishFeedback()  // Note: "Action" is not appended to DoDishes ...
    method execute (line 60) | void execute(const sm_dance_bot_2::LEDControlGoalConstPtr& goal)  // N...
    method run (line 101) | void run()
    method publishStateMarker (line 121) | void publishStateMarker()
  function main (line 177) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_dance_bot_2/servers/service_node_3/src/service_node_3.py
  function set_bool_service (line 9) | def set_bool_service(req):

FILE: smacc_sm_reference_library/sm_dance_bot_2/servers/temperature_sensor_node/src/temperature_sensor_node.cpp
  function main (line 4) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_dance_bot_2/src/clients/cl_led/cl_led.cpp
  type sm_dance_bot_2 (line 9) | namespace sm_dance_bot_2
    type cl_led (line 11) | namespace cl_led

FILE: smacc_sm_reference_library/sm_dance_bot_2/src/sm_dance_bot_2.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_led/cl_led.h
  function namespace (line 6) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_led/client_behaviors/cb_led_off.h
  function namespace (line 6) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_led/client_behaviors/cb_led_on.h
  function namespace (line 6) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_lidar/cl_lidar.h
  function namespace (line 7) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_lidar/client_behaviors/cb_lidar_sensor.h
  function namespace (line 7) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_lidar/components/cp_lidar_data.h
  function namespace (line 4) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_service3/cl_service3.h
  function namespace (line 5) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_service3/client_behaviors/cb_service3.h
  function namespace (line 4) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_string_publisher/cl_string_publisher.h
  function namespace (line 6) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_string_publisher/client_behaviors/cb_string_publisher.h
  function namespace (line 7) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_temperature_sensor/cl_temperature_sensor.h
  function namespace (line 7) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/clients/cl_temperature_sensor/client_behaviors/cb_custom_condition_temperature_sensor.h
  function namespace (line 7) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/modestates/ms_dance_bot_recovery_mode.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/modestates/ms_dance_bot_run_mode.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_led.h
  function namespace (line 5) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_navigation.h
  function namespace (line 10) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_obstacle_perception.h
  function namespace (line 7) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_service3.h
  function namespace (line 6) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_string_publisher.h
  function namespace (line 5) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_temperature_sensor.h
  function namespace (line 8) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_timer.h
  function namespace (line 5) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/orthogonals/or_updatable_publisher.h
  function namespace (line 6) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/sm_dance_bot_strikes_back.h
  function namespace (line 55) | namespace sm_dance_bot_strikes_back
  function namespace (line 106) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/f_pattern_states/sti_fpattern_forward_1.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/f_pattern_states/sti_fpattern_forward_2.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/f_pattern_states/sti_fpattern_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/f_pattern_states/sti_fpattern_return_1.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/f_pattern_states/sti_fpattern_rotate_1.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/f_pattern_states/sti_fpattern_rotate_2.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/radial_motion_states/sti_radial_end_point.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/radial_motion_states/sti_radial_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/radial_motion_states/sti_radial_return.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/radial_motion_states/sti_radial_rotate.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_forward_1.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_forward_2.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_forward_3.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_forward_4.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_loop_start.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_rotate_1.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_rotate_2.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_rotate_3.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/s_pattern_states/sti_spattern_rotate_4.h
  function namespace (line 1) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/st_acquire_sensors.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/st_event_count_down.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/st_fpattern_prealignment.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/st_navigate_to_waypoints_x.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/states/st_spattern_prealignment.h
  function namespace (line 2) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/superstates/ss_f_pattern_1.h
  function namespace (line 5) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/superstates/ss_radial_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot_strikes_back {

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/superstates/ss_radial_pattern_2.h
  function namespace (line 3) | namespace sm_dance_bot_strikes_back {

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/superstates/ss_radial_pattern_3.h
  function namespace (line 3) | namespace sm_dance_bot_strikes_back {

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/include/sm_dance_bot_strikes_back/superstates/ss_s_pattern_1.h
  function namespace (line 3) | namespace sm_dance_bot_strikes_back

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/servers/led_action_server/src/led_action_server_node.cpp
  class LEDActionServer (line 22) | class LEDActionServer
    method LEDActionServer (line 38) | LEDActionServer()
    method publishFeedback (line 48) | void publishFeedback()  // Note: "Action" is not appended to DoDishes ...
    method execute (line 60) | void execute(const sm_dance_bot_strikes_back::LEDControlGoalConstPtr& ...
    method run (line 101) | void run()
    method publishStateMarker (line 121) | void publishStateMarker()
  function main (line 177) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/servers/service_node_3/src/service_node_3.py
  function set_bool_service (line 9) | def set_bool_service(req):

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/servers/temperature_sensor_node/src/temperature_sensor_node.cpp
  function main (line 4) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/src/clients/cl_led/cl_led.cpp
  type sm_dance_bot_strikes_back (line 9) | namespace sm_dance_bot_strikes_back
    type cl_led (line 11) | namespace cl_led

FILE: smacc_sm_reference_library/sm_dance_bot_strikes_back/src/sm_dance_bot_strikes_back.cpp
  function main (line 2) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/clients/cl_subscriber/cl_subscriber.h
  function namespace (line 6) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/clients/cl_subscriber/client_behaviors/cb_my_subscriber_behavior.h
  function namespace (line 5) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/mode_states/ms_recover.h
  function namespace (line 2) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/mode_states/ms_run.h
  function namespace (line 2) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/orthogonals/or_keyboard.h
  function namespace (line 5) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/orthogonals/or_subscriber.h
  function namespace (line 6) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/orthogonals/or_timer.h
  function namespace (line 6) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/orthogonals/or_updatable_publisher.h
  function namespace (line 7) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/sm_ferrari.h
  function namespace (line 36) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/inner_states/sti_state_1.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/inner_states/sti_state_2.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/inner_states/sti_state_3.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/st_state_1.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/st_state_2.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/st_state_3.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/states/st_state_4.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/superstates/ss_superstate_1.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/include/sm_ferrari/superstates/ss_superstate_2.h
  function namespace (line 1) | namespace sm_ferrari

FILE: smacc_sm_reference_library/sm_ferrari/servers/temperature_sensor_node/src/temperature_sensor_node.cpp
  function main (line 4) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_ferrari/src/sm_ferrari_node.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/clients/cl_subscriber/cl_subscriber.h
  function namespace (line 6) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/clients/cl_subscriber/client_behaviors/cb_default_subscriber_behavior.h
  function namespace (line 5) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/clients/cl_subscriber/client_behaviors/cb_watchdog_subscriber_behavior.h
  function namespace (line 5) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/mode_states/ms_run.h
  function namespace (line 2) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/mode_states/ms_stop.h
  function namespace (line 2) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/orthogonals/or_keyboard.h
  function namespace (line 5) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/orthogonals/or_subscriber.h
  function namespace (line 6) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/orthogonals/or_timer.h
  function namespace (line 6) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/orthogonals/or_updatable_publisher.h
  function namespace (line 7) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/sm_packml.h
  function namespace (line 41) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_aborted.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_aborting.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_clearing.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_complete.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_completing.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_execute.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_held.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_holding.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_idle.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_resetting.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_starting.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_stopped.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_stopping.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_suspended.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_suspending.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_unholding.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/include/sm_packml/states/st_unsuspending.h
  function namespace (line 1) | namespace sm_packml

FILE: smacc_sm_reference_library/sm_packml/src/sm_packml_node.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/clients/cl_subscriber/cl_subscriber.h
  function namespace (line 6) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/clients/cl_subscriber/client_behaviors/cb_default_subscriber_behavior.h
  function namespace (line 5) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/clients/cl_subscriber/client_behaviors/cb_watchdog_subscriber_behavior.h
  function namespace (line 5) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/mode_states/ms_calibration.h
  function namespace (line 2) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/mode_states/ms_leaky_lung.h
  function namespace (line 2) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/mode_states/ms_patient_obstruction.h
  function namespace (line 2) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/mode_states/ms_run.h
  function namespace (line 2) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/mode_states/ms_shutdown.h
  function namespace (line 2) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/orthogonals/or_keyboard.h
  function namespace (line 5) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/orthogonals/or_subscriber.h
  function namespace (line 6) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/orthogonals/or_timer.h
  function namespace (line 6) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/orthogonals/or_updatable_publisher.h
  function namespace (line 7) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/sm_respira_1.h
  function namespace (line 41) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ac_cycle_inner_states/sti_ac_cycle_dwell.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ac_cycle_inner_states/sti_ac_cycle_expire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ac_cycle_inner_states/sti_ac_cycle_inspire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ac_cycle_inner_states/sti_ac_cycle_loop.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ac_cycle_inner_states/sti_ac_cycle_plateau.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/cmv_cycle_inner_states/sti_cmv_cycle_dwell.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/cmv_cycle_inner_states/sti_cmv_cycle_expire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/cmv_cycle_inner_states/sti_cmv_cycle_inspire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/cmv_cycle_inner_states/sti_cmv_cycle_loop.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/cmv_cycle_inner_states/sti_cmv_cycle_plateau.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_calibration_inner_states/st_calibration_step_1.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_leaky_lung_inner_states/st_leaky_lung_step_1.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_leaky_lung_inner_states/st_leaky_lung_step_2.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_leaky_lung_inner_states/st_leaky_lung_step_3.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_patient_obstruction_inner_states/st_patient_obstruction_step_1.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_patient_obstruction_inner_states/st_patient_obstruction_step_2.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ms_shutdown_inner_states/st_system_shutdown.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/pc_cycle_inner_states/sti_pc_cycle_dwell.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/pc_cycle_inner_states/sti_pc_cycle_expire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/pc_cycle_inner_states/sti_pc_cycle_inspire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/pc_cycle_inner_states/sti_pc_cycle_loop.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/pc_cycle_inner_states/sti_pc_cycle_plateau.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ps_cycle_inner_states/sti_ps_cycle_dwell.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ps_cycle_inner_states/sti_ps_cycle_expire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ps_cycle_inner_states/sti_ps_cycle_inspire.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ps_cycle_inner_states/sti_ps_cycle_loop.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/ps_cycle_inner_states/sti_ps_cycle_plateau.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/states/st_observe.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/superstates/ss_ac_cycle.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/superstates/ss_cmv_cycle.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/superstates/ss_pc_cycle.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/include/sm_respira_1/superstates/ss_ps_cycle.h
  function namespace (line 1) | namespace sm_respira_1

FILE: smacc_sm_reference_library/sm_respira_1/src/sm_respira_1_node.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/include/sm_ridgeback_barrel_search_1/clients/opencv_perception_client/cl_opencv_perception_client.h
  function namespace (line 6) | namespace sm_ridgeback_barrel_search_1

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/include/sm_ridgeback_barrel_search_1/orthogonals/or_navigation.h
  function namespace (line 11) | namespace sm_ridgeback_barrel_search_1

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/include/sm_ridgeback_barrel_search_1/orthogonals/or_perception.h
  function namespace (line 6) | namespace sm_ridgeback_barrel_search_1

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/include/sm_ridgeback_barrel_search_1/sm_ridgeback_barrel_search_1.h
  function namespace (line 17) | namespace sm_ridgeback_barrel_search_1

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/include/sm_ridgeback_barrel_search_1/states/st_detect_items.h
  function namespace (line 2) | namespace sm_ridgeback_barrel_search_1

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/include/sm_ridgeback_barrel_search_1/states/st_navigate_to_waypoint_x.h
  function namespace (line 2) | namespace sm_ridgeback_barrel_search_1

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/servers/opencv_perception_node/opencv_perception_node.cpp
  function segmentColor (line 13) | void segmentColor(const cv::Mat& inputRGB, int hueMean, int hueWindow, c...
  function testImage (line 21) | int testImage(cv::Mat& input, cv::Mat& debugImage, std::string colorName...
  function testRed (line 67) | int testRed(cv::Mat& input, cv::Mat& debugImage)
  function testBlue (line 72) | int testBlue(cv::Mat& input, cv::Mat& debugImage)
  function testGreen (line 77) | int testGreen(cv::Mat& input, cv::Mat& debugImage)
  function testRed (line 82) | int testRed(std::string path, cv::Mat& debugImage)
  function testBlue (line 88) | int testBlue(std::string path, cv::Mat& debugImage)
  function testGreen (line 94) | int testGreen(std::string path, cv::Mat& debugImage)
  function update (line 100) | void update()
  function callback (line 104) | void callback(const sensor_msgs::Image& img)
  function main (line 137) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_1/src/sm_ridgeback_barrel_search_1.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/include/sm_ridgeback_barrel_search_2/clients/opencv_perception_client/cl_opencv_perception_client.h
  function namespace (line 6) | namespace sm_ridgeback_barrel_search_2

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/include/sm_ridgeback_barrel_search_2/orthogonals/or_navigation.h
  function namespace (line 10) | namespace sm_ridgeback_barrel_search_2

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/include/sm_ridgeback_barrel_search_2/orthogonals/or_perception.h
  function namespace (line 6) | namespace sm_ridgeback_barrel_search_2

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/include/sm_ridgeback_barrel_search_2/sm_ridgeback_barrel_search_2.h
  function namespace (line 17) | namespace sm_ridgeback_barrel_search_2

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/include/sm_ridgeback_barrel_search_2/states/st_detect_items.h
  function namespace (line 2) | namespace sm_ridgeback_barrel_search_2

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/include/sm_ridgeback_barrel_search_2/states/st_navigate_to_waypoint_x.h
  function namespace (line 2) | namespace sm_ridgeback_barrel_search_2

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/servers/opencv_perception_node/opencv_perception_node.cpp
  function segmentColor (line 13) | void segmentColor(const cv::Mat& inputRGB, int hueMean, int hueWindow, c...
  function testImage (line 21) | int testImage(cv::Mat& input, cv::Mat& debugImage, std::string colorName...
  function testRed (line 65) | int testRed(cv::Mat& input, cv::Mat& debugImage)
  function testBlue (line 70) | int testBlue(cv::Mat& input, cv::Mat& debugImage)
  function testGreen (line 75) | int testGreen(cv::Mat& input, cv::Mat& debugImage)
  function testRed (line 80) | int testRed(std::string path, cv::Mat& debugImage)
  function testBlue (line 86) | int testBlue(std::string path, cv::Mat& debugImage)
  function testGreen (line 92) | int testGreen(std::string path, cv::Mat& debugImage)
  function update (line 98) | void update()
  function callback (line 102) | void callback(const sensor_msgs::Image& img)
  function main (line 133) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_ridgeback_barrel_search_2/src/sm_ridgeback_barrel_search_2.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/clients/cl_subscriber/cl_subscriber.h
  function namespace (line 6) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/clients/cl_subscriber/client_behaviors/cb_default_subscriber_behavior.h
  function namespace (line 5) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/clients/cl_subscriber/client_behaviors/cb_watchdog_subscriber_behavior.h
  function namespace (line 5) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/mode_states/ms_run.h
  function namespace (line 2) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/orthogonals/or_keyboard.h
  function namespace (line 5) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/orthogonals/or_subscriber.h
  function namespace (line 6) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/orthogonals/or_timer.h
  function namespace (line 6) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/orthogonals/or_updatable_publisher.h
  function namespace (line 7) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/sm_starcraft_ai.h
  function namespace (line 42) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/attack_inner_states/sti_attack_1.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/attack_inner_states/sti_attack_2.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/attack_inner_states/sti_attack_3.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/build_inner_states/sti_build_1.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/build_inner_states/sti_build_2.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/build_inner_states/sti_build_3.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/move_inner_states/sti_move_1.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/move_inner_states/sti_move_2.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/move_inner_states/sti_move_3.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/states/st_observe.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/superstates/ss_attack.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/superstates/ss_build.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/include/sm_starcraft_ai/superstates/ss_move.h
  function namespace (line 1) | namespace sm_starcraft_ai

FILE: smacc_sm_reference_library/sm_starcraft_ai/src/sm_starcraft_ai_node.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/clients/cl_numbers_subscription/cl_numbers_subscription.h
  function namespace (line 7) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/clients/cl_numbers_subscription/client_behaviors/cb_post_custom_event.h
  function namespace (line 5) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/clients/cl_numbers_subscription/client_behaviors/cb_print_message_number.h
  function namespace (line 6) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/orthogonals/or_subscriber.h
  function namespace (line 6) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/sm_subscriber.h
  function namespace (line 23) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/states/st_state_1.h
  function namespace (line 3) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/include/sm_subscriber/states/st_state_2.h
  function namespace (line 3) | namespace sm_subscriber

FILE: smacc_sm_reference_library/sm_subscriber/servers/numbers_publisher/numbers_publisher.cpp
  function main (line 4) | int main(int argc, char** argv)

FILE: smacc_sm_reference_library/sm_subscriber/src/sm_subscriber_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/clients/cl_subscriber/cl_subscriber.h
  function namespace (line 6) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/clients/cl_subscriber/client_behaviors/cb_default_subscriber_behavior.h
  function namespace (line 5) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/clients/cl_subscriber/client_behaviors/cb_watchdog_subscriber_behavior.h
  function namespace (line 5) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/mode_states/ms_recover.h
  function namespace (line 2) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/mode_states/ms_run.h
  function namespace (line 2) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/orthogonals/or_keyboard.h
  function namespace (line 5) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/orthogonals/or_subscriber.h
  function namespace (line 6) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/orthogonals/or_timer.h
  function namespace (line 6) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/orthogonals/or_updatable_publisher.h
  function namespace (line 7) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/sm_three_some.h
  function namespace (line 42) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/inner_states/sti_state_1.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/inner_states/sti_state_2.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/inner_states/sti_state_3.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/st_state_1.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/st_state_2.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/st_state_3.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/states/st_state_4.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/superstates/ss_superstate_1.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/include/sm_three_some/superstates/ss_superstate_2.h
  function namespace (line 1) | namespace sm_three_some

FILE: smacc_sm_reference_library/sm_three_some/src/sm_three_some_node.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_update_loop/include/sm_update_loop/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_update_loop

FILE: smacc_sm_reference_library/sm_update_loop/include/sm_update_loop/sm_update_loop.h
  function namespace (line 16) | namespace sm_update_loop

FILE: smacc_sm_reference_library/sm_update_loop/include/sm_update_loop/states/st_state_1.h
  function namespace (line 3) | namespace sm_update_loop

FILE: smacc_sm_reference_library/sm_update_loop/include/sm_update_loop/states/st_state_2.h
  function namespace (line 3) | namespace sm_update_loop

FILE: smacc_sm_reference_library/sm_update_loop/src/sm_update_loop_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/modestates/ms_recovery_mode.h
  function namespace (line 3) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/modestates/ms_run_mode.h
  function namespace (line 3) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/orthogonals/or_navigation.h
  function namespace (line 5) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/sm_viewer_sim.h
  function namespace (line 15) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/states/st_st1.h
  function namespace (line 3) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/states/st_st2.h
  function namespace (line 3) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/include/sm_viewer_sim/states/st_st3.h
  function namespace (line 4) | namespace sm_viewer_sim

FILE: smacc_sm_reference_library/sm_viewer_sim/src/sm_viewer_sim.cpp
  function main (line 3) | int main(int argc, char **argv)

FILE: smacc_state_reactor_library/sr_all_events_go/include/sr_all_events_go/sr_all_events_go.h
  function namespace (line 8) | namespace smacc

FILE: smacc_state_reactor_library/sr_all_events_go/src/sr_all_events_go/sr_all_events_go.cpp
  type smacc (line 5) | namespace smacc
    type state_reactors (line 7) | namespace state_reactors

FILE: smacc_state_reactor_library/sr_conditional/include/sr_conditional/sr_conditional.h
  function namespace (line 8) | namespace smacc

FILE: smacc_state_reactor_library/sr_conditional/src/sr_conditional/sr_conditional.cpp
  type smacc (line 3) | namespace smacc
    type state_reactors (line 5) | namespace state_reactors

FILE: smacc_state_reactor_library/sr_event_countdown/include/sr_event_countdown/sr_event_countdown.h
  function namespace (line 8) | namespace smacc

FILE: smacc_state_reactor_library/sr_event_countdown/src/sr_event_countdown/sr_event_countdown.cpp
  type smacc (line 6) | namespace smacc
    type state_reactors (line 8) | namespace state_reactors

FILE: test/sm_coretest_transition_speed_1/include/sm_coretest_transition_speed_1/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_coretest_transition_speed_1

FILE: test/sm_coretest_transition_speed_1/include/sm_coretest_transition_speed_1/sm_coretest_transition_speed_1.h
  function namespace (line 16) | namespace sm_coretest_transition_speed_1

FILE: test/sm_coretest_transition_speed_1/include/sm_coretest_transition_speed_1/states/st_state_1.h
  function namespace (line 4) | namespace sm_coretest_transition_speed_1

FILE: test/sm_coretest_transition_speed_1/include/sm_coretest_transition_speed_1/states/st_state_2.h
  function namespace (line 3) | namespace sm_coretest_transition_speed_1

FILE: test/sm_coretest_transition_speed_1/src/sm_coretest_transition_speed_1_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: test/sm_coretest_x_y_1/include/sm_coretest_x_y_1/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_coretest_x_y_1

FILE: test/sm_coretest_x_y_1/include/sm_coretest_x_y_1/sm_coretest_x_y_1.h
  function namespace (line 16) | namespace sm_coretest_x_y_1

FILE: test/sm_coretest_x_y_1/include/sm_coretest_x_y_1/states/st_state_1.h
  function namespace (line 4) | namespace sm_coretest_x_y_1

FILE: test/sm_coretest_x_y_1/include/sm_coretest_x_y_1/states/st_state_2.h
  function namespace (line 3) | namespace sm_coretest_x_y_1

FILE: test/sm_coretest_x_y_1/src/sm_coretest_x_y_1_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: test/sm_coretest_x_y_2/include/sm_coretest_x_y_2/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_coretest_x_y_2

FILE: test/sm_coretest_x_y_2/include/sm_coretest_x_y_2/sm_coretest_x_y_2.h
  function namespace (line 16) | namespace sm_coretest_x_y_2

FILE: test/sm_coretest_x_y_2/include/sm_coretest_x_y_2/states/st_state_1.h
  function namespace (line 4) | namespace sm_coretest_x_y_2

FILE: test/sm_coretest_x_y_2/include/sm_coretest_x_y_2/states/st_state_2.h
  function namespace (line 3) | namespace sm_coretest_x_y_2

FILE: test/sm_coretest_x_y_2/src/sm_coretest_x_y_2_node.cpp
  function main (line 4) | int main(int argc, char **argv)

FILE: test/sm_coretest_x_y_3/include/sm_coretest_x_y_3/orthogonals/or_timer.h
  function namespace (line 4) | namespace sm_coretest_x_y_3

FILE: test/sm_coretest_x_y_3/include/sm_coretest_x_y_3/sm_coretest_x_y_3.h
  function namespace (line 16) | namespace sm_coretest_x_y_3

FILE: test/sm_coretest_x_y_3/include/sm_coretest_x_y_3/states/st_state_1.h
  function namespace (line 4) | namespace sm_coretest_x_y_3

FILE: test/sm_coretest_x_y_3/include/sm_coretest_x_y_3/states/st_state_2.h
  function namespace (line 3) | namespace sm_coretest_x_y_3

FILE: test/sm_coretest_x_y_3/src/sm_coretest_x_y_3_node.cpp
  function main (line 4) | int main(int argc, char **argv)
Condensed preview — 1000 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,387K chars).
[
  {
    "path": ".codespell-ignore-words.txt",
    "chars": 3,
    "preview": "ba\n"
  },
  {
    "path": ".github/workflows/CI.yaml",
    "chars": 474,
    "preview": "name: Noetic Continuous Integration\n\non:\n  push:\n  pull_request:\n\njobs:\n  CI:\n    runs-on: ubuntu-latest\n    container: "
  },
  {
    "path": ".github/workflows/bloom_release.yml",
    "chars": 1281,
    "preview": "name: bloom-release\n\non:\n  push:\n    paths:\n      - package.xml\n      - '*/package.xml'\n      - '.github/workflows/bloom"
  },
  {
    "path": ".github/workflows/code_quality.yml",
    "chars": 350,
    "preview": "name: Code Format & Quality\n\non:\n  pull_request:\n  push:\n\njobs:\n  pre-commit:\n    runs-on: ubuntu-latest\n    steps:\n    "
  },
  {
    "path": ".github/workflows/doxygen.yml",
    "chars": 585,
    "preview": "name: Doxygen\n\non:\n  push:\n    branches: [noetic-devel]\n\njobs:\n  doxygen:\n    runs-on: ubuntu-20.04\n    steps:\n      - u"
  },
  {
    "path": ".gitignore",
    "chars": 22,
    "preview": "build\ninstall\nlog\nbin\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 2567,
    "preview": "# To use:\n#\n#     pre-commit run -a\n#\n# Or:\n#\n#     pre-commit install  # (runs every time you commit in git)\n#\n# To upd"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 2451,
    "preview": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n"
  },
  {
    "path": "LICENSE.txt",
    "chars": 1511,
    "preview": "BSD 3-Clause License\n\nCopyright (c) Reelrobotix, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary "
  },
  {
    "path": "README.md",
    "chars": 9059,
    "preview": "\n## Continuous Integration:\n\n\n| ROS Distro  | Code Format & Quality | Documentation | Binary Packages |\n| :-----------: "
  },
  {
    "path": "smacc/CHANGELOG.rst",
    "chars": 5554,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package smacc\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nForthcoming\n-----------\n\n* Progress"
  },
  {
    "path": "smacc/CMakeLists.txt",
    "chars": 2511,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(smacc)\n\n## Compile as C++11, supported in ROS Kinetic and newer\n# add_compil"
  },
  {
    "path": "smacc/include/smacc/callback_counter_semaphore.h",
    "chars": 978,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/client_base_components/cp_ros_control_interface.h",
    "chars": 1401,
    "preview": "#pragma once\n#include <smacc/component.h>\n#include <controller_manager_msgs/ControllerState.h>\n\nnamespace smacc\n{\nnamesp"
  },
  {
    "path": "smacc/include/smacc/client_base_components/cp_topic_subscriber.h",
    "chars": 3065,
    "preview": "#pragma once\n#include <smacc/component.h>\n#include <smacc/smacc_signal.h>\n#include <boost/optional/optional_io.hpp>\n#inc"
  },
  {
    "path": "smacc/include/smacc/client_bases/smacc_action_client.h",
    "chars": 1323,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/client_bases/smacc_action_client_base.h",
    "chars": 8946,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/client_bases/smacc_publisher_client.h",
    "chars": 1544,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/client_bases/smacc_service_client.h",
    "chars": 1552,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/client_bases/smacc_service_server_client.h",
    "chars": 1970,
    "preview": "#pragma once\n\n#include <smacc/smacc_client.h>\n#include <smacc/smacc_signal.h>\n#include <std_srvs/Empty.h>\n\n#include <boo"
  },
  {
    "path": "smacc/include/smacc/client_bases/smacc_subscriber_client.h",
    "chars": 3158,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/client_behavior_bases/cb_service_server_callback_base.h",
    "chars": 683,
    "preview": "#pragma once\n#include <smacc/smacc_client_behavior.h>\n\nnamespace smacc {\ntemplate <typename TService>\nclass CbServiceSer"
  },
  {
    "path": "smacc/include/smacc/client_behavior_bases/cb_subscription_callback_base.h",
    "chars": 889,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/common.h",
    "chars": 1622,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/component.h",
    "chars": 1914,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_asynchronous_client_behavior_impl.h",
    "chars": 1831,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_client_behavior_impl.h",
    "chars": 2094,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_client_impl.h",
    "chars": 3538,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_component_impl.h",
    "chars": 1639,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_event_generator_impl.h",
    "chars": 887,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_orthogonal_impl.h",
    "chars": 5483,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_state_impl.h",
    "chars": 8825,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_state_machine_impl.h",
    "chars": 23091,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/impl/smacc_state_reactor_impl.h",
    "chars": 2759,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/introspection/introspection.h",
    "chars": 7297,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/introspection/smacc_state_info.h",
    "chars": 5121,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/introspection/smacc_state_machine_info.h",
    "chars": 16310,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/introspection/state_traits.h",
    "chars": 2025,
    "preview": "#pragma once\n\nnamespace smacc\n{\n    template <typename T, typename TransitionTagName>\n    class HasSpecificNamedOnExit\n "
  },
  {
    "path": "smacc/include/smacc/introspection/string_type_walker.h",
    "chars": 1705,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc.h",
    "chars": 520,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_asynchronous_client_behavior.h",
    "chars": 3323,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_client.h",
    "chars": 3074,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_client_behavior.h",
    "chars": 674,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_client_behavior_base.h",
    "chars": 1792,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_default_events.h",
    "chars": 4371,
    "preview": "#pragma once\n\n#include <boost/statechart/state.hpp>\n#include <boost/statechart/event.hpp>\n\n#include <smacc/smacc_types.h"
  },
  {
    "path": "smacc/include/smacc/smacc_event_generator.h",
    "chars": 1244,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_fifo_scheduler.h",
    "chars": 180,
    "preview": "#include <boost/statechart/fifo_scheduler.hpp>\n#include <smacc/smacc_fifo_worker.h>\n\ntypedef boost::statechart::fifo_sch"
  },
  {
    "path": "smacc/include/smacc/smacc_fifo_worker.h",
    "chars": 194,
    "preview": "#pragma once\n#include <boost/statechart/fifo_worker.hpp>\n\ntypedef std::allocator<boost::statechart::none> SmaccAllocator"
  },
  {
    "path": "smacc/include/smacc/smacc_orthogonal.h",
    "chars": 1898,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_signal.h",
    "chars": 1172,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_signal_detector.h",
    "chars": 3515,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_state.h",
    "chars": 3313,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_state_base.h",
    "chars": 17576,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_state_machine.h",
    "chars": 6797,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_state_machine_base.h",
    "chars": 2263,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_state_reactor.h",
    "chars": 2383,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_transition.h",
    "chars": 2520,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_types.h",
    "chars": 1814,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/include/smacc/smacc_updatable.h",
    "chars": 818,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/package.xml",
    "chars": 1076,
    "preview": "<?xml version=\"1.0\" ?>\n<package format=\"2\">\n  <name>smacc</name>\n    <version>1.4.16</version>\n\n  <description>SMACC is "
  },
  {
    "path": "smacc/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc/smacc_client_behavior_base.h",
    "chars": 13,
    "preview": "#pragma once\n"
  },
  {
    "path": "smacc/src/smacc/callback_counter_semaphore.cpp",
    "chars": 2301,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/client.cpp",
    "chars": 1242,
    "preview": "\n/*****************************************************************************************************************\n * R"
  },
  {
    "path": "smacc/src/smacc/client_bases/smacc_action_client.cpp",
    "chars": 595,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/common.cpp",
    "chars": 1014,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/components/cp_ros_control_interface.cpp",
    "chars": 3079,
    "preview": "#include <smacc/client_base_components/cp_ros_control_interface.h>\n\n#include <controller_manager_msgs/ListControllerType"
  },
  {
    "path": "smacc/src/smacc/introspection/reflection.cpp",
    "chars": 1281,
    "preview": "#include <smacc/introspection/introspection.h>\n#include <ros/ros.h>\n\nnamespace smacc\n{\n\nnamespace introspection\n{\nvoid t"
  },
  {
    "path": "smacc/src/smacc/introspection/string_type_walker.cpp",
    "chars": 10118,
    "preview": "\n/*****************************************************************************************************************\n *\n "
  },
  {
    "path": "smacc/src/smacc/orthogonal.cpp",
    "chars": 3675,
    "preview": "#include <smacc/impl/smacc_state_machine_impl.h>\n#include <smacc/smacc_client_behavior.h>\n#include <smacc/smacc_orthogon"
  },
  {
    "path": "smacc/src/smacc/signal_detector.cpp",
    "chars": 11005,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/smacc_client_async_behavior.cpp",
    "chars": 2747,
    "preview": "#include <smacc/smacc_asynchronous_client_behavior.h>\n\nnamespace smacc\n{\n    void SmaccAsyncClientBehavior::executeOnEnt"
  },
  {
    "path": "smacc/src/smacc/smacc_client_behavior.cpp",
    "chars": 372,
    "preview": "#include <smacc/smacc_client_behavior.h>\n\nnamespace smacc\n{\n    void SmaccClientBehavior::onEntry()\n    {\n        ROS_DE"
  },
  {
    "path": "smacc/src/smacc/smacc_client_behavior_base.cpp",
    "chars": 1056,
    "preview": "#include <smacc/smacc_client_behavior.h>\n\nnamespace smacc\n{\nISmaccClientBehavior::ISmaccClientBehavior()\n{\n  stateMachin"
  },
  {
    "path": "smacc/src/smacc/smacc_component.cpp",
    "chars": 965,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/smacc_event_generator.cpp",
    "chars": 881,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/smacc_state.cpp",
    "chars": 2538,
    "preview": "#include <smacc/smacc_state.h>\n#include <smacc/smacc_state_machine.h>\n\nnamespace smacc\n{\nstd::string ISmaccState::getCla"
  },
  {
    "path": "smacc/src/smacc/smacc_state_info.cpp",
    "chars": 2772,
    "preview": "#include <smacc/introspection/introspection.h>\n#include <ros/ros.h>\n#include <smacc/common.h>\n\nnamespace smacc\n{\nusing n"
  },
  {
    "path": "smacc/src/smacc/smacc_state_machine.cpp",
    "chars": 7785,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc/src/smacc/smacc_state_machine_info.cpp",
    "chars": 8929,
    "preview": "#include <smacc/introspection/introspection.h>\n#include <smacc/smacc_state_machine.h>\n\nnamespace smacc\n{\n    void SmaccS"
  },
  {
    "path": "smacc/src/smacc/smacc_updatable.cpp",
    "chars": 695,
    "preview": "#include <smacc/smacc_updatable.h>\n\nnamespace smacc\n{\n\nISmaccUpdatable::ISmaccUpdatable()\n    : lastUpdate_(0)\n{\n}\n\nISma"
  },
  {
    "path": "smacc/src/smacc/state_reactor.cpp",
    "chars": 1017,
    "preview": "#include <smacc/smacc_state_reactor.h>\n#include <ros/ros.h>\n\nnamespace smacc\n{\n\nStateReactor::StateReactor()\n{\n}\n\nvoid S"
  },
  {
    "path": "smacc/test/type_info_unit_test.cpp",
    "chars": 1128,
    "preview": "// Bring in my package's API, which is what I'm testing\n#include <smacc/introspection/string_type_walker.h>\n// Bring in "
  },
  {
    "path": "smacc_ci/.gitignore",
    "chars": 16,
    "preview": "token_file.json\n"
  },
  {
    "path": "smacc_ci/Doxyfile",
    "chars": 106345,
    "preview": "# Doxyfile 1.8.11\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org)"
  },
  {
    "path": "smacc_ci/docker/ros_kinetic_ubuntu_16.04/Dockerfile",
    "chars": 973,
    "preview": "FROM ros:kinetic-robot\n\nENV PATH /usr/local/nvidia/bin:${PATH}\nENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvid"
  },
  {
    "path": "smacc_ci/docker/ros_kinetic_ubuntu_16.04/build.sh",
    "chars": 61,
    "preview": "#!/bin/bash\nsudo docker build -t smacc_kinetic_ubuntu_1604 .\n"
  },
  {
    "path": "smacc_ci/docker/ros_kinetic_ubuntu_16.04/examples/run_sm_atomic.sh",
    "chars": 256,
    "preview": "#!/bin/bash\n./build.sh\nxhost +\nsudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it smacc_kinetic_ub"
  },
  {
    "path": "smacc_ci/docker/ros_kinetic_ubuntu_16.04/run_bash.sh",
    "chars": 151,
    "preview": "#!/bin/bash\n./build.sh\nxhost +\nsudo docker run --gpus device=0 -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it "
  },
  {
    "path": "smacc_ci/docker/ros_melodic_ubuntu_18.04/Dockerfile",
    "chars": 984,
    "preview": "FROM ros:melodic-ros-base-bionic\n\nENV PATH /usr/local/nvidia/bin:${PATH}\nENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/"
  },
  {
    "path": "smacc_ci/docker/ros_melodic_ubuntu_18.04/build.sh",
    "chars": 61,
    "preview": "#!/bin/bash\nsudo docker build -t smacc_melodic_ubuntu_1804 .\n"
  },
  {
    "path": "smacc_ci/docker/ros_melodic_ubuntu_18.04/examples/run_sm_atomic.sh",
    "chars": 256,
    "preview": "#!/bin/bash\n./build.sh\nxhost +\nsudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it smacc_kinetic_ub"
  },
  {
    "path": "smacc_ci/docker/ros_melodic_ubuntu_18.04/run_bash.sh",
    "chars": 135,
    "preview": "#!/bin/bash\n./build.sh\nxhost +\nsudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it smacc_melodic_ub"
  },
  {
    "path": "smacc_ci/docker/ros_noetic_ubuntu_20.04/Dockerfile",
    "chars": 979,
    "preview": "FROM ros:noetic-ros-base-focal\n\nENV PATH /usr/local/nvidia/bin:${PATH}\nENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/lo"
  },
  {
    "path": "smacc_ci/docker/ros_noetic_ubuntu_20.04/build.sh",
    "chars": 60,
    "preview": "#!/bin/bash\nsudo docker build -t smacc_noetic_ubuntu_2004 .\n"
  },
  {
    "path": "smacc_ci/docker/ros_noetic_ubuntu_20.04/examples/run_sm_atomic.sh",
    "chars": 256,
    "preview": "#!/bin/bash\n./build.sh\nxhost +\nsudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it smacc_kinetic_ub"
  },
  {
    "path": "smacc_ci/docker/ros_noetic_ubuntu_20.04/run_bash.sh",
    "chars": 134,
    "preview": "#!/bin/bash\n./build.sh\nxhost +\nsudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it smacc_noetic_ubu"
  },
  {
    "path": "smacc_ci/gh-pages.sh",
    "chars": 2955,
    "preview": "#!/bin/bash\n\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\n\nGITHUB_USER=robosoft-ai\nCATKIN_WORKSPACE_ROOT=`rea"
  },
  {
    "path": "smacc_ci/packagecloud_docker/.gitignore",
    "chars": 13,
    "preview": "*.private.sh\n"
  },
  {
    "path": "smacc_ci/packagecloud_docker/Dockerfile",
    "chars": 3851,
    "preview": "\nARG ROS_DOCKER_BASE\nFROM $ROS_DOCKER_BASE\n\nARG UBUNTU_VERSION\nARG ROS_VERSION_NAME\nARG GITHUB_USER\nARG GITHUB_TOKEN\nARG"
  },
  {
    "path": "smacc_ci/packagecloud_docker/build_ubuntu_16_04_kinetic.sh",
    "chars": 416,
    "preview": "#!/bin/bash\necho \"build docker image with github user: $1\"\necho \"build docker image with packagecloud user: $3\"\nsudo doc"
  },
  {
    "path": "smacc_ci/packagecloud_docker/build_ubuntu_18_04_melodic.sh",
    "chars": 416,
    "preview": "#!/bin/bash\necho \"build docker image with github user: $1\"\necho \"build docker image with packagecloud user: $3\"\nsudo doc"
  },
  {
    "path": "smacc_ci/packagecloud_docker/build_ubuntu_20_04_noetic.sh",
    "chars": 444,
    "preview": "#!/bin/bash\necho \"build docker image with github user: $1\"\necho \"build docker image with packagecloud user: $3\"\nsudo doc"
  },
  {
    "path": "smacc_ci/packagecloud_docker/generate_debs.py",
    "chars": 11219,
    "preview": "# Copyright 2021 RobosoftAI Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use t"
  },
  {
    "path": "smacc_ci/packagecloud_docker/generate_smacc_debs.bash",
    "chars": 960,
    "preview": "#!/bin/bash\n\nSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" >/dev/null 2>&1 && pwd )\"\n\nROS_VERSION_NAME=$1\nSOURCE_"
  },
  {
    "path": "smacc_ci/packagecloud_docker/local_build_18_04_melodic.sh",
    "chars": 663,
    "preview": "export ROS_VERSION_NAME=\"melodic\"\nexport UBUNTU_VERSION=\"bionic\"\nGITHUB_USER=\"$1\"\nGITHUB_TOKEN=\"$2\"\nPACKAGE_CLOUD_USER=\""
  },
  {
    "path": "smacc_ci/packagecloud_docker/local_build_20_04_noetic.sh",
    "chars": 661,
    "preview": "export ROS_VERSION_NAME=\"noetic\"\nexport UBUNTU_VERSION=\"bionic\"\nGITHUB_USER=\"$1\"\nGITHUB_TOKEN=\"$2\"\nPACKAGE_CLOUD_USER=\"$"
  },
  {
    "path": "smacc_ci/rosdep_kinetic.yaml",
    "chars": 987,
    "preview": "smacc_msgs:\n  ubuntu: [ros-kinetic-smacc-msgs]\nsmacc:\n  ubuntu: [ros-kinetic-smacc]\nsmacc_navigation_plugin:\n  ubuntu: ["
  },
  {
    "path": "smacc_ci/rosdep_melodic.yaml",
    "chars": 918,
    "preview": "smacc_msgs:\n  ubuntu: [ros-melodic-smacc-msgs]\nsmacc:\n  ubuntu: [ros-melodic-smacc]\nsmacc_navigation_plugin:\n  ubuntu: ["
  },
  {
    "path": "smacc_ci/rosdep_noetic.yaml",
    "chars": 903,
    "preview": "smacc_msgs:\n  ubuntu: [ros-noetic-smacc-msgs]\nsmacc:\n  ubuntu: [ros-noetic-smacc]\nsmacc_navigation_plugin:\n  ubuntu: [ro"
  },
  {
    "path": "smacc_client_library/battery_monitor_client/CHANGELOG.rst",
    "chars": 840,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package battery_monitor_client\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/battery_monitor_client/CMakeLists.txt",
    "chars": 6121,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(battery_monitor_client)\n\n## Compile as C++11, supported in ROS Kinetic and n"
  },
  {
    "path": "smacc_client_library/battery_monitor_client/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "smacc_client_library/battery_monitor_client/include/battery_monitor_client/cl_battery_monitor.h",
    "chars": 770,
    "preview": "#pragma once\n\n#include <smacc/smacc.h>\n#include <smacc/client_bases/smacc_subscriber_client.h>\n#include <sensor_msgs/Bat"
  },
  {
    "path": "smacc_client_library/battery_monitor_client/package.xml",
    "chars": 649,
    "preview": "<?xml version=\"1.0\"?>\n<package format=\"2\">\n  <name>battery_monitor_client</name>\n    <version>1.4.16</version>\n  <descri"
  },
  {
    "path": "smacc_client_library/battery_monitor_client/server/battery_monitor_node.py",
    "chars": 572,
    "preview": "#!/usr/bin/env python\nimport rospy\nimport numpy\n\nfrom sensor_msgs.msg import BatteryState\n\nif __name__ == \"__main__\":\n  "
  },
  {
    "path": "smacc_client_library/battery_monitor_client/src/battery_monitor_client/cl_battery_monitor.cpp",
    "chars": 326,
    "preview": "#include <battery_monitor_client/cl_battery_monitor.h>\n\nnamespace cl_battery_monitor\n{\n\nClBatteryMonitor::ClBatteryMonit"
  },
  {
    "path": "smacc_client_library/keyboard_client/CHANGELOG.rst",
    "chars": 3091,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package keyboard_client\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nForth"
  },
  {
    "path": "smacc_client_library/keyboard_client/CMakeLists.txt",
    "chars": 7042,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(keyboard_client)\n\n## Compile as C++11, supported in ROS Kinetic and newer\n# "
  },
  {
    "path": "smacc_client_library/keyboard_client/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "smacc_client_library/keyboard_client/include/keyboard_client/cl_keyboard.h",
    "chars": 8951,
    "preview": "#pragma once\n\n#include <smacc/smacc.h>\n#include <smacc/client_bases/smacc_subscriber_client.h>\n\n#include <boost/asio/pos"
  },
  {
    "path": "smacc_client_library/keyboard_client/include/keyboard_client/client_behaviors/cb_default_keyboard_behavior.h",
    "chars": 4229,
    "preview": "#pragma once\n\n#include <keyboard_client/cl_keyboard.h>\n#include <smacc/smacc_client_behavior.h>\n\n#include <std_msgs/UInt"
  },
  {
    "path": "smacc_client_library/keyboard_client/package.xml",
    "chars": 628,
    "preview": "<?xml version=\"1.0\"?>\n<package format=\"2\">\n  <name>keyboard_client</name>\n    <version>1.4.16</version>\n  <description>T"
  },
  {
    "path": "smacc_client_library/keyboard_client/server/keyboard_server_node/keyboard_server_node.py",
    "chars": 803,
    "preview": "#!/usr/bin/env python\nimport rospy\nfrom std_msgs.msg import UInt16\n\nimport sys\nimport select\nimport termios\nimport tty\n\n"
  },
  {
    "path": "smacc_client_library/keyboard_client/src/keyboard_client/cl_keyboard.cpp",
    "chars": 558,
    "preview": "#include <keyboard_client/cl_keyboard.h>\n\nnamespace cl_keyboard {\nClKeyboard::ClKeyboard() {\n  initialized_ = false;\n  t"
  },
  {
    "path": "smacc_client_library/move_base_z_client/README.md",
    "chars": 549,
    "preview": "<h2>Description</h2>\nThe MoveBaseZ client extends the ROS navigation stack in a high level way. It provides specialized "
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/CHANGELOG.rst",
    "chars": 223,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package backward_global_planner\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/CMakeLists.txt",
    "chars": 4479,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(backward_global_planner)\n\n## Compile as C++11, supported in ROS Kinetic and "
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/bgp_plugin.xml",
    "chars": 282,
    "preview": "<library path=\"libbackward_global_planner\">\n  <class name=\"backward_global_planner/BackwardGlobalPlanner\" type=\"cl_move_"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/include/backward_global_planner/backward_global_planner.h",
    "chars": 1852,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/package.xml",
    "chars": 806,
    "preview": "<?xml version=\"1.0\"?>\n<package format=\"2\">\n  <name>backward_global_planner</name>\n    <version>1.4.16</version>\n  <descr"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_global_planner/src/backward_global_planner.cpp",
    "chars": 8123,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/CHANGELOG.rst",
    "chars": 160,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package backward_local_planner\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/CMakeLists.txt",
    "chars": 5048,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(backward_local_planner)\n\n## Compile as C++11, supported in ROS Kinetic and n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/blp_plugin.xml",
    "chars": 276,
    "preview": "<library path=\"libbackward_local_planner\">\n  <class name=\"backward_local_planner/BackwardLocalPlanner\" type=\"cl_move_bas"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/cfg/BackwardLocalPlanner.cfg",
    "chars": 1166,
    "preview": "#!/usr/bin/env python\nPACKAGE = \"backward_local_planner\"\n\nfrom dynamic_reconfigure.parameter_generator_catkin import *\n\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/include/backward_local_planner/backward_local_planner.h",
    "chars": 5223,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/package.xml",
    "chars": 1780,
    "preview": "<?xml version=\"1.0\" ?>\n<package format=\"2\">\n   <name>backward_local_planner</name>\n     <version>1.4.16</version>\n   <de"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/backward_local_planner/src/backward_local_planner.cpp",
    "chars": 44422,
    "preview": "#include <angles/angles.h>\n#include <pluginlib/class_list_macros.h>\n#include <backward_local_planner/backward_local_plan"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/CHANGELOG.rst",
    "chars": 220,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package forward_global_planner\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/CMakeLists.txt",
    "chars": 4528,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(forward_global_planner)\n\n## Compile as C++11, supported in ROS Kinetic and n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/fgp_plugin.xml",
    "chars": 277,
    "preview": "<library path=\"libforward_global_planner\">\n  <class name=\"forward_global_planner/ForwardGlobalPlanner\" type=\"cl_move_bas"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/include/forward_global_planner/forward_global_planner.h",
    "chars": 1410,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/include/forward_global_planner/move_base_z_client_tools.h",
    "chars": 1037,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/package.xml",
    "chars": 724,
    "preview": "<?xml version=\"1.0\" ?>\n<package format=\"2\">\n  <name>forward_global_planner</name>\n    <version>1.4.16</version>\n  <descr"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/src/forward_global_planner.cpp",
    "chars": 4554,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_global_planner/src/path_tools.cpp",
    "chars": 3899,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/CHANGELOG.rst",
    "chars": 217,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package forward_local_planner\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/CMakeLists.txt",
    "chars": 1972,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(forward_local_planner)\n\nfind_package(catkin REQUIRED\n  roscpp\n  costmap_2d\n "
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/cfg/ForwardLocalPlanner.cfg",
    "chars": 902,
    "preview": "#!/usr/bin/env python\nPACKAGE = \"forward_local_planner\"\n\nfrom dynamic_reconfigure.parameter_generator_catkin import *\n\ng"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/flp_plugin.xml",
    "chars": 271,
    "preview": "<library path=\"libforward_local_planner\">\n  <class name=\"forward_local_planner/ForwardLocalPlanner\" type=\"cl_move_base_z"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/include/forward_local_planner/forward_local_planner.h",
    "chars": 3335,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/package.xml",
    "chars": 829,
    "preview": "<?xml version=\"1.0\" ?>\n<package format=\"2\">\n  <name>forward_local_planner</name>\n    <version>1.4.16</version>\n  <descri"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/forward_local_planner/src/forward_local_planner.cpp",
    "chars": 18118,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/CHANGELOG.rst",
    "chars": 1379,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package pure_spinning_local_planner\n^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/CMakeLists.txt",
    "chars": 4335,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(pure_spinning_local_planner)\n\n## Compile as C++11, supported in ROS Kinetic "
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/cfg/PureSpinningLocalPlanner.cfg",
    "chars": 540,
    "preview": "#!/usr/bin/env python\nPACKAGE = \"pure_spinning_local_planner\"\n\nfrom dynamic_reconfigure.parameter_generator_catkin impor"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/config/pure_spinning_local_planner.yaml",
    "chars": 110,
    "preview": "k_betta: 1.0\nyaw_goal_tolerance: 0.02\nmax_angular_z_speed: 2.0 # rad/s\nintermediate_goals_yaw_tolerance: 0.04\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/include/pure_spinning_local_planner/pure_spinning_local_planner.h",
    "chars": 2905,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/package.xml",
    "chars": 983,
    "preview": "<?xml version=\"1.0\"?>\n<package format=\"2\">\n  <name>pure_spinning_local_planner</name>\n    <version>1.4.16</version>\n  <d"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/pslp_plugin.xml",
    "chars": 299,
    "preview": "<library path=\"libpure_spinning_local_planner\">\n  <class name=\"pure_spinning_local_planner/PureSpinningLocalPlanner\" typ"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/pure_spinning_local_planner/src/pure_spinning_local_planner/pure_spinning_local_planner.cpp",
    "chars": 4871,
    "preview": "\n#include <angles/angles.h>\n#include <pure_spinning_local_planner/pure_spinning_local_planner.h>\n#include <pluginlib/cla"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/CHANGELOG.rst",
    "chars": 222,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package backward_global_planner\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/CMakeLists.txt",
    "chars": 4438,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(undo_path_global_planner)\n\n## Compile as C++11, supported in ROS Kinetic and"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/include/undo_path_global_planner/undo_path_global_planner.h",
    "chars": 2004,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/package.xml",
    "chars": 794,
    "preview": "<?xml version=\"1.0\"?>\n<package format=\"2\">\n  <name>undo_path_global_planner</name>\n    <version>1.4.16</version>\n  <desc"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/src/undo_path_global_planner.cpp",
    "chars": 15625,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/custom_planners/undo_path_global_planner/upgp_plugin.xml",
    "chars": 285,
    "preview": "<library path=\"libundo_path_global_planner\">\n  <class name=\"undo_path_global_planner/UndoPathGlobalPlanner\" type=\"cl_mov"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/CHANGELOG.rst",
    "chars": 223,
    "preview": "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nChangelog for package smacc_navigation_plugin\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/CMakeLists.txt",
    "chars": 5623,
    "preview": "cmake_minimum_required(VERSION 3.8)\nproject(move_base_z_client_plugin)\n\nfind_package(catkin REQUIRED smacc pluginlib tf "
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/action/OdomTracker.action",
    "chars": 312,
    "preview": "uint8 command\n\n# Possible command values\nuint8 RECORD_PATH = 0\nuint8 CLEAR_BACKWARDS = 1\nuint8 IDLE = 2 # do nothing\nuin"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/cfg/OdomTracker.cfg",
    "chars": 545,
    "preview": "#!/usr/bin/env python\nPACKAGE = \"move_base_z_client_plugin\"\n\nfrom dynamic_reconfigure.parameter_generator_catkin import "
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_absolute_rotate.h",
    "chars": 1255,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_move_base_client_behavior_base.h",
    "chars": 1612,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_backwards.h",
    "chars": 1175,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_forward.h",
    "chars": 1504,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_global_position.h",
    "chars": 1460,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_navigate_next_waypoint.h",
    "chars": 797,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_rotate.h",
    "chars": 745,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_undo_path_backwards.h",
    "chars": 1126,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors/cb_undo_path_backwards2.h",
    "chars": 1761,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/client_behaviors.h",
    "chars": 633,
    "preview": "#pragma once\n#include <move_base_z_client_plugin/client_behaviors/cb_rotate.h>\n#include <move_base_z_client_plugin/clien"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/costmap_switch/cp_costmap_switch.h",
    "chars": 2100,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/odom_tracker/odom_tracker.h",
    "chars": 4919,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/planner_switcher/planner_switcher.h",
    "chars": 1390,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/pose/cp_pose.h",
    "chars": 1644,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/waypoints_navigator/waypoints_event_dispatcher.h",
    "chars": 63665,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/components/waypoints_navigator/waypoints_navigator.h",
    "chars": 1833,
    "preview": "\n/*****************************************************************************************************************\n * R"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/include/move_base_z_client_plugin/move_base_z_client_plugin.h",
    "chars": 1120,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/package.xml",
    "chars": 790,
    "preview": "<?xml version=\"1.0\"?>\n<package format=\"2\">\n  <name>move_base_z_client_plugin</name>\n\n    <version>1.4.16</version>\n  <de"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/rosdoc.yaml",
    "chars": 106,
    "preview": " - builder: doxygen\n   name: C++ API\n   output_dir: c++\n   file_patterns: '*.c *.cpp *.h *.cc *.hh *.dox'\n"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_absolute_rotate.cpp",
    "chars": 6196,
    "preview": "\n#include <move_base_z_client_plugin/client_behaviors/cb_absolute_rotate.h>\n#include <move_base_z_client_plugin/componen"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_move_base_client_behavior_base.cpp",
    "chars": 747,
    "preview": "/*****************************************************************************************************************\n * Re"
  },
  {
    "path": "smacc_client_library/move_base_z_client/move_base_z_client_plugin/src/client_behaviors/cb_navigate_backward.cpp",
    "chars": 2315,
    "preview": "#include <move_base_z_client_plugin/client_behaviors/cb_navigate_backwards.h>\n#include <move_base_z_client_plugin/compon"
  }
]

// ... and 800 more files (download for full content)

About this extraction

This page contains the full source code of the reelrbtx/SMACC GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1000 files (2.1 MB), approximately 617.6k tokens, and a symbol index with 780 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!