ros2_control - rolling
Loading...
Searching...
No Matches
hardware_info.hpp
1// Copyright 2020 ros2_control Development Team
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__HARDWARE_INFO_HPP_
16#define HARDWARE_INTERFACE__HARDWARE_INFO_HPP_
17
18#include <fmt/compile.h>
19
20#include <string>
21#include <unordered_map>
22#include <variant>
23#include <vector>
24
25#include "joint_limits/joint_limits.hpp"
26
27namespace hardware_interface
28{
34{
39 std::string name;
41 std::string min = "";
43 std::string max = "";
45 std::string initial_value = "";
47 std::string data_type = "double";
49 int size;
55 std::unordered_map<std::string, std::string> parameters;
56};
57
60{
61 std::size_t joint_index;
62 std::size_t mimicked_joint_index;
63 double multiplier = 1.0;
64 double offset = 0.0;
65};
66
69{
70 NOT_SET,
71 TRUE,
72 FALSE
73};
74
80{
82 std::string name;
84 std::string type;
85
87 MimicAttribute is_mimic = MimicAttribute::NOT_SET;
88
93 std::vector<InterfaceInfo> command_interfaces;
98 std::vector<InterfaceInfo> state_interfaces;
100 std::unordered_map<std::string, std::string> parameters;
101};
102
105{
106 std::string name;
107 std::vector<std::string> state_interfaces;
108 std::vector<std::string> command_interfaces;
109 std::string role;
110 double mechanical_reduction = 1.0;
111 double offset = 0.0;
112};
113
116{
117 std::string name;
118 std::vector<std::string> state_interfaces;
119 std::vector<std::string> command_interfaces;
120 std::string role;
121 double mechanical_reduction = 1.0;
122 double offset = 0.0;
123};
124
127{
128 std::string name;
129 std::string type;
130 std::vector<JointInfo> joints;
131 std::vector<ActuatorInfo> actuators;
133 std::unordered_map<std::string, std::string> parameters;
134};
135
140using HANDLE_DATATYPE = std::variant<std::monostate, double, bool>;
142{
143public:
144 enum Value : int8_t
145 {
146 UNKNOWN = -1,
147 DOUBLE,
148 BOOL
149 };
150
151 HandleDataType() = default;
152 constexpr HandleDataType(Value value) : value_(value) {} // NOLINT(runtime/explicit)
153 explicit HandleDataType(const std::string & data_type)
154 {
155 if (data_type == "double")
156 {
157 value_ = DOUBLE;
158 }
159 else if (data_type == "bool")
160 {
161 value_ = BOOL;
162 }
163 else
164 {
165 value_ = UNKNOWN;
166 }
167 }
168
169 operator Value() const { return value_; }
170
171 explicit operator bool() const = delete;
172
173 constexpr bool operator==(HandleDataType other) const { return value_ == other.value_; }
174 constexpr bool operator!=(HandleDataType other) const { return value_ != other.value_; }
175
176 constexpr bool operator==(Value other) const { return value_ == other; }
177 constexpr bool operator!=(Value other) const { return value_ != other; }
178
179 std::string to_string() const
180 {
181 switch (value_)
182 {
183 case DOUBLE:
184 return "double";
185 case BOOL:
186 return "bool";
187 default:
188 return "unknown";
189 }
190 }
191
198 {
199 switch (value_)
200 {
201 case DOUBLE:
202 return true;
203 case BOOL:
204 return true; // bool can be converted to double
205 default:
206 return false; // unknown type cannot be converted
207 }
208 }
209
217 double cast_to_double(const HANDLE_DATATYPE & value) const
218 {
219 switch (value_)
220 {
221 case DOUBLE:
222 return std::get<double>(value);
223 case BOOL:
224 return static_cast<double>(std::get<bool>(value));
225 default:
226 throw std::runtime_error(
227 fmt::format(FMT_COMPILE("Data type : '{}' cannot be casted to double."), to_string()));
228 }
229 }
230
231 HandleDataType from_string(const std::string & data_type) { return HandleDataType(data_type); }
232
233private:
234 Value value_ = UNKNOWN;
235};
236
242{
243 InterfaceDescription(const std::string & prefix_name_in, const InterfaceInfo & interface_info_in)
244 : prefix_name(prefix_name_in),
245 interface_info(interface_info_in),
247 {
248 }
249
253 std::string prefix_name;
254
259
263 std::string interface_name;
264
265 const std::string & get_prefix_name() const { return prefix_name; }
266
267 const std::string & get_interface_name() const { return interface_info.name; }
268
269 const std::string & get_name() const { return interface_name; }
270
271 const std::string & get_data_type_string() const { return interface_info.data_type; }
272
273 HandleDataType get_data_type() const { return HandleDataType(interface_info.data_type); }
274};
275
277{
281 std::string scheduling_policy = "synchronized";
283 std::vector<int> cpu_affinity_cores = {};
285 bool print_warnings = true;
286};
287
289#ifdef _MSC_VER
290#pragma warning(push)
291#pragma warning(disable : 4996)
292#else
293#pragma GCC diagnostic push
294#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
295#endif
297{
299 std::string name;
301 std::string type;
303 std::string group;
305 unsigned int rw_rate;
309 [[deprecated("Use async_params instead.")]] int thread_priority;
315 std::unordered_map<std::string, std::string> hardware_parameters;
320 std::vector<ComponentInfo> joints;
324 std::vector<MimicJoint> mimic_joints;
329 std::vector<ComponentInfo> sensors;
334 std::vector<ComponentInfo> gpios;
339 std::vector<TransmissionInfo> transmissions;
343 std::string original_xml;
347 std::unordered_map<std::string, joint_limits::JointLimits> limits;
348
354 std::unordered_map<std::string, joint_limits::SoftJointLimits> soft_limits;
355};
356#ifdef _MSC_VER
357#pragma warning(pop)
358#else
359#pragma GCC diagnostic pop
360#endif
361
362} // namespace hardware_interface
363#endif // HARDWARE_INTERFACE__HARDWARE_INFO_HPP_
Definition hardware_info.hpp:142
bool is_castable_to_double() const
Check if the HandleDataType can be casted to double.
Definition hardware_info.hpp:197
double cast_to_double(const HANDLE_DATATYPE &value) const
Cast the given value to double.
Definition hardware_info.hpp:217
Definition actuator.hpp:22
MimicAttribute
This enum is used to store the mimic attribute of a joint.
Definition hardware_info.hpp:69
std::variant< std::monostate, double, bool > HANDLE_DATATYPE
Definition hardware_info.hpp:140
Contains semantic info about a given actuator loaded from URDF for a transmission.
Definition hardware_info.hpp:116
Definition hardware_info.hpp:80
std::vector< InterfaceInfo > command_interfaces
Definition hardware_info.hpp:93
std::unordered_map< std::string, std::string > parameters
(Optional) Key-value pairs of component parameters, e.g. min/max values or serial number.
Definition hardware_info.hpp:100
std::vector< InterfaceInfo > state_interfaces
Definition hardware_info.hpp:98
std::string name
Name of the component.
Definition hardware_info.hpp:82
MimicAttribute is_mimic
Hold the value of the mimic attribute if given, NOT_SET otherwise.
Definition hardware_info.hpp:87
std::string type
Type of the component: sensor, joint, or GPIO.
Definition hardware_info.hpp:84
Definition hardware_info.hpp:277
bool print_warnings
Whether to print warnings when the async thread doesn't meet its deadline.
Definition hardware_info.hpp:285
std::string scheduling_policy
Scheduling policy for the async worker thread.
Definition hardware_info.hpp:281
int thread_priority
Thread priority for the async worker thread.
Definition hardware_info.hpp:279
std::vector< int > cpu_affinity_cores
CPU affinity cores for the async worker thread.
Definition hardware_info.hpp:283
This structure stores information about hardware defined in a robot's URDF.
Definition hardware_info.hpp:297
std::string type
Type of the hardware: actuator, sensor or system.
Definition hardware_info.hpp:301
int thread_priority
Async thread priority.
Definition hardware_info.hpp:309
std::vector< MimicJoint > mimic_joints
Definition hardware_info.hpp:324
std::string hardware_plugin_name
Name of the pluginlib plugin of the hardware that will be loaded.
Definition hardware_info.hpp:313
std::unordered_map< std::string, joint_limits::JointLimits > limits
Definition hardware_info.hpp:347
HardwareAsyncParams async_params
Async Parameters.
Definition hardware_info.hpp:311
std::unordered_map< std::string, std::string > hardware_parameters
(Optional) Key-value pairs for hardware parameters.
Definition hardware_info.hpp:315
std::string group
Hardware group to which the hardware belongs.
Definition hardware_info.hpp:303
bool is_async
Component is async.
Definition hardware_info.hpp:307
std::unordered_map< std::string, joint_limits::SoftJointLimits > soft_limits
Definition hardware_info.hpp:354
std::vector< ComponentInfo > gpios
Definition hardware_info.hpp:334
std::vector< ComponentInfo > joints
Definition hardware_info.hpp:320
std::string original_xml
Definition hardware_info.hpp:343
std::string name
Name of the hardware.
Definition hardware_info.hpp:299
std::vector< ComponentInfo > sensors
Definition hardware_info.hpp:329
std::vector< TransmissionInfo > transmissions
Definition hardware_info.hpp:339
unsigned int rw_rate
Component's read and write rates in Hz.
Definition hardware_info.hpp:305
Definition hardware_info.hpp:242
InterfaceInfo interface_info
Definition hardware_info.hpp:258
std::string interface_name
Definition hardware_info.hpp:263
std::string prefix_name
Definition hardware_info.hpp:253
Definition hardware_info.hpp:34
std::string max
(Optional) Maximal allowed values of the interface.
Definition hardware_info.hpp:43
std::string initial_value
(Optional) Initial value of the interface.
Definition hardware_info.hpp:45
std::string name
Definition hardware_info.hpp:39
int size
(Optional) If the handle is an array, the size of the array.
Definition hardware_info.hpp:49
std::string min
(Optional) Minimal allowed values of the interface.
Definition hardware_info.hpp:41
std::string data_type
(Optional) The datatype of the interface, e.g. "bool", "int".
Definition hardware_info.hpp:47
std::unordered_map< std::string, std::string > parameters
Definition hardware_info.hpp:55
bool enable_limits
(Optional) enable or disable the limits for the command interfaces
Definition hardware_info.hpp:51
Contains semantic info about a given joint loaded from URDF for a transmission.
Definition hardware_info.hpp:105
This structure stores information about a joint that is mimicking another joint.
Definition hardware_info.hpp:60
Contains semantic info about a given transmission loaded from URDF.
Definition hardware_info.hpp:127
std::unordered_map< std::string, std::string > parameters
(Optional) Key-value pairs of custom parameters
Definition hardware_info.hpp:133