15 #ifndef LIFECYCLE_DEVICE_MANAGER_NODE_HPP
16 #define LIFECYCLE_DEVICE_MANAGER_NODE_HPP
23 #include "lifecycle_msgs/msg/state.hpp"
24 #include "lifecycle_msgs/msg/transition.hpp"
25 #include "lifecycle_msgs/srv/change_state.hpp"
26 #include "lifecycle_msgs/srv/get_state.hpp"
29 #include "rclcpp/rclcpp.hpp"
30 #include "rclcpp_lifecycle/lifecycle_node.hpp"
33 #include "canopen_interfaces/srv/co_node.hpp"
35 using namespace std::chrono_literals;
74 : rclcpp_lifecycle::LifecycleNode(
"lifecycle_manager", node_options)
76 this->declare_parameter(
"container_name",
"");
77 cbg_clients = this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
80 void init(std::shared_ptr<ros2_canopen::ConfigurationManager> config);
84 std::shared_ptr<ros2_canopen::ConfigurationManager>
config_;
95 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
on_configure(
96 const rclcpp_lifecycle::State & state);
107 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
on_activate(
108 const rclcpp_lifecycle::State & state);
119 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
on_deactivate(
120 const rclcpp_lifecycle::State & state);
130 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
on_cleanup(
131 const rclcpp_lifecycle::State & state);
141 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
on_shutdown(
142 const rclcpp_lifecycle::State & state);
144 std::map<uint8_t, rclcpp::Client<lifecycle_msgs::srv::GetState>::SharedPtr>
146 std::map<uint8_t, rclcpp::Client<lifecycle_msgs::srv::ChangeState>::SharedPtr>
154 rclcpp::Client<canopen_interfaces::srv::CONode>::SharedPtr
156 rclcpp::Client<canopen_interfaces::srv::CONode>::SharedPtr
163 template <
typename FutureT,
typename WaitTimeT>
166 auto end = std::chrono::steady_clock::now() + time_to_wait;
167 std::chrono::milliseconds wait_period(100);
168 std::future_status status = std::future_status::timeout;
171 auto now = std::chrono::steady_clock::now();
172 auto time_left = end - now;
173 if (time_left <= std::chrono::seconds(0))
177 status = future.wait_for((time_left < wait_period) ? time_left : wait_period);
178 }
while (rclcpp::ok() && status != std::future_status::ready);
189 virtual unsigned int get_state(uint8_t node_id, std::chrono::seconds time_out);
200 virtual bool change_state(uint8_t node_id, uint8_t transition, std::chrono::seconds time_out);
Lifecycle Device Manager Node.
Definition: lifecycle_manager.hpp:66
virtual bool bring_down_driver(std::string device_name)
Brings down the driver with specified node_id.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state)
Callback for the Deactivate Transition.
std::future_status wait_for_result(FutureT &future, WaitTimeT time_to_wait)
Definition: lifecycle_manager.hpp:164
virtual bool bring_down_all()
Brings down master and all drivers.
std::map< std::string, uint8_t > device_names_to_ids
Definition: lifecycle_manager.hpp:148
virtual bool bring_down_master()
Bring down master.
std::map< uint8_t, rclcpp::Client< lifecycle_msgs::srv::GetState >::SharedPtr > drivers_get_state_clients
stores node_id and get_state client
Definition: lifecycle_manager.hpp:145
virtual bool bring_up_master()
Brings up master.
uint8_t master_id_
Stores master id.
Definition: lifecycle_manager.hpp:159
rclcpp::CallbackGroup::SharedPtr cbg_clients
Definition: lifecycle_manager.hpp:83
LifecycleManager(const rclcpp::NodeOptions &node_options)
Construct a new Lifecycle Device Manager Node object.
Definition: lifecycle_manager.hpp:73
virtual unsigned int get_state(uint8_t node_id, std::chrono::seconds time_out)
Get the lifecycle state of a driver node.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(const rclcpp_lifecycle::State &state)
Callback for the Activate Transition.
virtual bool load_from_config()
Load information from configuration.
std::string container_name_
Stores name of the associated device_container.
Definition: lifecycle_manager.hpp:160
std::shared_ptr< ros2_canopen::ConfigurationManager > config_
Definition: lifecycle_manager.hpp:84
rclcpp::Client< canopen_interfaces::srv::CONode >::SharedPtr add_driver_client_
Service client object for adding a driver.
Definition: lifecycle_manager.hpp:155
virtual bool bring_up_all()
Brings up master and all drivers.
void init(std::shared_ptr< ros2_canopen::ConfigurationManager > config)
virtual bool bring_up_driver(std::string device_name)
Brings up the drivers with specified node_id.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state)
Callback for the Cleanup Transition.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state)
Callback for the Shutdown Transition.
rclcpp::Client< canopen_interfaces::srv::CONode >::SharedPtr remove_driver_client_
Service client object for removing a driver.
Definition: lifecycle_manager.hpp:157
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(const rclcpp_lifecycle::State &state)
Callback for the Configure Transition.
virtual bool change_state(uint8_t node_id, uint8_t transition, std::chrono::seconds time_out)
Change the lifecycle state of a driver node.
std::map< uint8_t, rclcpp::Client< lifecycle_msgs::srv::ChangeState >::SharedPtr > drivers_change_state_clients
stores node_id and change_state client
Definition: lifecycle_manager.hpp:147
Definition: configuration_manager.hpp:28