ros2_control - rolling
Loading...
Searching...
No Matches
gpio_command_controller.hpp
1// Copyright 2022 ICUBE Laboratory, University of Strasbourg
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef GPIO_CONTROLLERS__GPIO_COMMAND_CONTROLLER_HPP_
16#define GPIO_CONTROLLERS__GPIO_COMMAND_CONTROLLER_HPP_
17
18#include <memory>
19#include <string>
20#include <unordered_map>
21#include <vector>
22
23#include "control_msgs/msg/dynamic_interface_group_values.hpp"
24#include "controller_interface/controller_interface.hpp"
25#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
26#include "rclcpp_lifecycle/state.hpp"
27#include "realtime_tools/realtime_buffer.hpp"
28#include "realtime_tools/realtime_publisher.hpp"
29
30#include "gpio_controllers/gpio_command_controller_parameters.hpp"
31
32namespace gpio_controllers
33{
34using CmdType = control_msgs::msg::DynamicInterfaceGroupValues;
35using StateType = control_msgs::msg::DynamicInterfaceGroupValues;
36using CallbackReturn = controller_interface::CallbackReturn;
37using InterfacesNames = std::vector<std::string>;
38using MapOfReferencesToCommandInterfaces = std::unordered_map<
39 std::string, std::reference_wrapper<hardware_interface::LoanedCommandInterface>>;
40using MapOfReferencesToStateInterfaces =
41 std::unordered_map<std::string, std::reference_wrapper<hardware_interface::LoanedStateInterface>>;
42using StateInterfaces =
43 std::vector<std::reference_wrapper<hardware_interface::LoanedStateInterface>>;
44
46{
47public:
49
51
53
54 CallbackReturn on_init() override;
55
56 CallbackReturn on_configure(const rclcpp_lifecycle::State & previous_state) override;
57
58 CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override;
59
60 CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override;
61
62 controller_interface::return_type update(
63 const rclcpp::Time & time, const rclcpp::Duration & period) override;
64
65private:
66 void store_command_interface_types();
67 void store_state_interface_types();
68 void initialize_gpio_state_msg();
69 void update_gpios_states();
70 controller_interface::return_type update_gpios_commands();
71 template <typename T>
72 std::unordered_map<std::string, std::reference_wrapper<T>> create_map_of_references_to_interfaces(
73 const InterfacesNames & interfaces_from_params, std::vector<T> & configured_interfaces);
74 template <typename T>
75 bool check_if_configured_interfaces_matches_received(
76 const InterfacesNames & interfaces_from_params, const T & configured_interfaces);
77 void apply_state_value(
78 StateType & state_msg, std::size_t gpio_index, std::size_t interface_index) const;
79 void apply_command(
80 const CmdType & gpio_commands, std::size_t gpio_index,
81 std::size_t command_interface_index) const;
82 bool should_broadcast_all_interfaces_of_configured_gpios() const;
83 void set_all_state_interfaces_of_configured_gpios();
84 InterfacesNames get_gpios_state_interfaces_names(const std::string & gpio_name) const;
85 bool update_dynamic_map_parameters();
86 std::vector<hardware_interface::ComponentInfo> get_gpios_from_urdf() const;
87
88protected:
89 InterfacesNames command_interface_types_;
90 InterfacesNames state_interface_types_;
91 MapOfReferencesToCommandInterfaces command_interfaces_map_;
92 MapOfReferencesToStateInterfaces state_interfaces_map_;
93
95 rclcpp::Subscription<CmdType>::SharedPtr gpios_command_subscriber_{};
96
97 std::shared_ptr<rclcpp::Publisher<StateType>> gpio_state_publisher_{};
98 std::shared_ptr<realtime_tools::RealtimePublisher<StateType>> realtime_gpio_state_publisher_{};
99
100 std::shared_ptr<gpio_command_controller_parameters::ParamListener> param_listener_{};
101 gpio_command_controller_parameters::Params params_;
102};
103
104} // namespace gpio_controllers
105
106#endif // GPIO_CONTROLLERS__GPIO_COMMAND_CONTROLLER_HPP_
Definition controller_interface.hpp:27
Definition gpio_command_controller.hpp:46
controller_interface::return_type update(const rclcpp::Time &time, const rclcpp::Duration &period) override
Definition gpio_command_controller.cpp:151
controller_interface::InterfaceConfiguration command_interface_configuration() const override
Get configuration for controller's required command interfaces.
Definition gpio_command_controller.cpp:106
CallbackReturn on_init() override
Extending interface with initialization method which is individual for each controller.
Definition gpio_command_controller.cpp:54
controller_interface::InterfaceConfiguration state_interface_configuration() const override
Get configuration for controller's required state interfaces.
Definition gpio_command_controller.cpp:115
Definition realtime_buffer.hpp:44
Configuring what command/state interfaces to claim.
Definition controller_interface_base.hpp:57