.. _program_listing_file__tmp_ws_src_ros2_planning_system_plansys2_lifecycle_manager_include_plansys2_lifecycle_manager_lifecycle_manager.hpp: Program Listing for File lifecycle_manager.hpp ============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/ros2_planning_system/plansys2_lifecycle_manager/include/plansys2_lifecycle_manager/lifecycle_manager.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2019 Intelligent Robotics Lab // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef PLANSYS2_LIFECYCLE_MANAGER__LIFECYCLE_MANAGER_HPP_ #define PLANSYS2_LIFECYCLE_MANAGER__LIFECYCLE_MANAGER_HPP_ #include #include #include #include #include "lifecycle_msgs/msg/state.hpp" #include "lifecycle_msgs/msg/transition.hpp" #include "lifecycle_msgs/srv/change_state.hpp" #include "lifecycle_msgs/srv/get_state.hpp" #include "rclcpp/rclcpp.hpp" #include "rcutils/logging_macros.h" namespace plansys2 { template std::future_status wait_for_result( FutureT & future, WaitTimeT time_to_wait) { auto end = std::chrono::steady_clock::now() + time_to_wait; std::chrono::milliseconds wait_period(100); std::future_status status = std::future_status::timeout; do { auto now = std::chrono::steady_clock::now(); auto time_left = end - now; if (time_left <= std::chrono::seconds(0)) {break;} status = future.wait_for((time_left < wait_period) ? time_left : wait_period); } while (rclcpp::ok() && status != std::future_status::ready); return status; } class LifecycleServiceClient : public rclcpp::Node { public: explicit LifecycleServiceClient(const std::string & node_name, const std::string & managed_node); void init(); unsigned int get_state(std::chrono::seconds time_out = std::chrono::seconds(3)); bool change_state( std::uint8_t transition, std::chrono::seconds time_out = std::chrono::seconds(3)); private: std::shared_ptr> client_get_state_; std::shared_ptr> client_change_state_; std::string managed_node_; }; bool startup_function( std::map> & manager_nodes, std::chrono::seconds timeout); } // namespace plansys2 #endif // PLANSYS2_LIFECYCLE_MANAGER__LIFECYCLE_MANAGER_HPP_