ros2_control - galactic
Loading...
Searching...
No Matches
resource_manager.hpp
1// Copyright 2020 Open Source Robotics Foundation, Inc.
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 HARDWARE_INTERFACE__RESOURCE_MANAGER_HPP_
16#define HARDWARE_INTERFACE__RESOURCE_MANAGER_HPP_
17
18#include <memory>
19#include <mutex>
20#include <string>
21#include <unordered_map>
22#include <vector>
23
24#include "hardware_interface/hardware_info.hpp"
25#include "hardware_interface/loaned_command_interface.hpp"
26#include "hardware_interface/loaned_state_interface.hpp"
27#include "rclcpp_lifecycle/state.hpp"
28
29namespace hardware_interface
30{
31class ActuatorInterface;
32class SensorInterface;
33class SystemInterface;
34class ResourceStorage;
35
36class HARDWARE_INTERFACE_PUBLIC ResourceManager
37{
38public:
41
43
55 explicit ResourceManager(const std::string & urdf, bool validate_interfaces = true);
56
57 ResourceManager(const ResourceManager &) = delete;
58
60
62
71 void load_urdf(const std::string & urdf, bool validate_interfaces = true);
72
74
82 LoanedStateInterface claim_state_interface(const std::string & key);
83
85
90 std::vector<std::string> state_interface_keys() const;
91
93
96 bool state_interface_exists(const std::string & key) const;
97
99
107 bool command_interface_is_claimed(const std::string & key) const;
108
110
118 LoanedCommandInterface claim_command_interface(const std::string & key);
119
121
126 std::vector<std::string> command_interface_keys() const;
127
129
133 bool command_interface_exists(const std::string & key) const;
134
136
139 size_t actuator_components_size() const;
140
142
151 void import_component(std::unique_ptr<ActuatorInterface> actuator);
152
154
157 size_t sensor_components_size() const;
158
160
169 void import_component(std::unique_ptr<SensorInterface> sensor);
170
172
175 size_t system_components_size() const;
176
178
187 void import_component(std::unique_ptr<SystemInterface> system);
188
190
202 void import_component(
203 std::unique_ptr<ActuatorInterface> actuator, const HardwareInfo & hardware_info);
204
206
218 void import_component(
219 std::unique_ptr<SensorInterface> sensor, const HardwareInfo & hardware_info);
220
222
234 void import_component(
235 std::unique_ptr<SystemInterface> system, const HardwareInfo & hardware_info);
236
238
241 std::unordered_map<std::string, rclcpp_lifecycle::State> get_components_states();
242
244
258 bool prepare_command_mode_switch(
259 const std::vector<std::string> & start_interfaces,
260 const std::vector<std::string> & stop_interfaces);
261
263
273 bool perform_command_mode_switch(
274 const std::vector<std::string> & start_interfaces,
275 const std::vector<std::string> & stop_interfaces);
276
278 void start_components();
279
281 void stop_components();
282
284 void read();
285
287 void write();
288
289private:
290 void validate_storage(const std::vector<hardware_interface::HardwareInfo> & hardware_info) const;
291
292 void release_command_interface(const std::string & key);
293
294 std::unordered_map<std::string, bool> claimed_command_interface_map_;
295
296 mutable std::recursive_mutex resource_lock_;
297 std::unique_ptr<ResourceStorage> resource_storage_;
298};
299
300} // namespace hardware_interface
301#endif // HARDWARE_INTERFACE__RESOURCE_MANAGER_HPP_
Definition loaned_command_interface.hpp:27
Definition loaned_state_interface.hpp:27
Definition resource_manager.hpp:37
Definition actuator.hpp:29
This structure stores information about hardware defined in a robot's URDF.
Definition hardware_info.hpp:101