15 #ifndef NAV2_BEHAVIOR_TREE__PLUGINS__CONTROL__PAUSE_RESUME_CONTROLLER_HPP_
16 #define NAV2_BEHAVIOR_TREE__PLUGINS__CONTROL__PAUSE_RESUME_CONTROLLER_HPP_
24 #include "rclcpp/rclcpp.hpp"
25 #include "rclcpp/callback_group.hpp"
26 #include "rclcpp/executors/single_threaded_executor.hpp"
27 #include "behaviortree_cpp/control_node.h"
28 #include "nav2_ros_common/service_server.hpp"
31 #include "std_srvs/srv/trigger.hpp"
34 namespace nav2_behavior_tree
37 using Trigger = std_srvs::srv::Trigger;
39 enum state_t {RESUMED, PAUSED, PAUSE_REQUESTED, ON_PAUSE, RESUME_REQUESTED, ON_RESUME};
40 const std::map<state_t, std::string> state_names = {
43 {PAUSE_REQUESTED,
"PAUSE_REQUESTED"},
44 {ON_PAUSE,
"ON_PAUSE"},
45 {RESUME_REQUESTED,
"RESUME_REQUESTED"},
46 {ON_RESUME,
"ON_RESUME"}
48 const std::map<state_t, uint16_t> child_indices = {
90 const std::string & xml_tag_name,
91 const BT::NodeConfiguration & conf);
97 BT::NodeStatus
tick()
override;
103 BT::InputPort<std::string>(
104 "pause_service_name",
105 "Name of the service to pause"),
106 BT::InputPort<std::string>(
107 "resume_service_name",
108 "Name of the service to resume"),
112 [[nodiscard]]
inline state_t getState()
const
119 void pauseServiceCallback(
120 const std::shared_ptr<rmw_request_id_t>,
121 const std::shared_ptr<Trigger::Request> request,
122 std::shared_ptr<Trigger::Response> response);
125 void resumeServiceCallback(
126 const std::shared_ptr<rmw_request_id_t>,
127 const std::shared_ptr<Trigger::Request> request,
128 std::shared_ptr<Trigger::Response> response);
140 void switchToNextState();
142 rclcpp::Logger logger_{rclcpp::get_logger(
"PauseResumeController")};
143 rclcpp::CallbackGroup::SharedPtr cb_group_;
144 rclcpp::executors::SingleThreadedExecutor::SharedPtr executor_;
145 nav2::ServiceServer<Trigger>::SharedPtr pause_srv_;
146 nav2::ServiceServer<Trigger>::SharedPtr resume_srv_;
PauseResumeController(const std::string &xml_tag_name, const BT::NodeConfiguration &conf)
Constructor.
BT::NodeStatus tick() override
Handle transitions if requested and tick child related to the actual state.
static BT::PortsList providedPorts()
Declare ports.
void halt() override
Reset state and go to Idle.