15#ifndef HARDWARE_INTERFACE__HARDWARE_INFO_HPP_
16#define HARDWARE_INTERFACE__HARDWARE_INFO_HPP_
18#include <fmt/compile.h>
21#include <unordered_map>
25#include "joint_limits/joint_limits.hpp"
61 std::size_t joint_index;
62 std::size_t mimicked_joint_index;
63 double multiplier = 1.0;
110 std::vector<std::string> state_interfaces;
111 std::vector<std::string> command_interfaces;
113 double mechanical_reduction = 1.0;
121 std::vector<std::string> state_interfaces;
122 std::vector<std::string> command_interfaces;
124 double mechanical_reduction = 1.0;
133 std::vector<JointInfo> joints;
134 std::vector<ActuatorInfo> actuators;
144 std::monostate, double, float, bool, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t>;
166 if (data_type ==
"double")
170 else if (data_type ==
"bool")
174 else if (data_type ==
"float32")
178 else if (data_type ==
"uint8")
182 else if (data_type ==
"int8")
186 else if (data_type ==
"uint16")
190 else if (data_type ==
"int16")
194 else if (data_type ==
"uint32")
198 else if (data_type ==
"int32")
208 operator Value()
const {
return value_; }
210 explicit operator bool()
const =
delete;
212 constexpr bool operator==(
HandleDataType other)
const {
return value_ == other.value_; }
213 constexpr bool operator!=(
HandleDataType other)
const {
return value_ != other.value_; }
215 constexpr bool operator==(Value other)
const {
return value_ == other; }
216 constexpr bool operator!=(Value other)
const {
return value_ != other; }
218 std::string to_string()
const
281 return std::get<double>(value);
283 return static_cast<double>(std::get<float>(value));
285 return static_cast<double>(std::get<bool>(value));
287 return static_cast<double>(std::get<uint8_t>(value));
289 return static_cast<double>(std::get<int8_t>(value));
291 return static_cast<double>(std::get<uint16_t>(value));
293 return static_cast<double>(std::get<int16_t>(value));
295 return static_cast<double>(std::get<uint32_t>(value));
297 return static_cast<double>(std::get<int32_t>(value));
299 throw std::runtime_error(
300 fmt::format(FMT_COMPILE(
"Data type : '{}' cannot be casted to double."), to_string()));
307 Value value_ = UNKNOWN;
338 const std::string & get_prefix_name()
const {
return prefix_name; }
364#pragma warning(disable : 4996)
366#pragma GCC diagnostic push
367#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
420 std::unordered_map<std::string, joint_limits::JointLimits>
limits;
427 std::unordered_map<std::string, joint_limits::SoftJointLimits>
soft_limits;
432#pragma GCC diagnostic pop
Definition hardware_info.hpp:146
bool is_castable_to_double() const
Check if the HandleDataType can be casted to double.
Definition hardware_info.hpp:250
double cast_to_double(const HANDLE_DATATYPE &value) const
Cast the given value to double.
Definition hardware_info.hpp:276
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, float, bool, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t > HANDLE_DATATYPE
Definition hardware_info.hpp:144
Contains semantic info about a given actuator loaded from URDF for a transmission.
Definition hardware_info.hpp:119
Definition hardware_info.hpp:80
bool enable_limits
Whether limits are enabled for this component (set at joint level with <limits enable="....
Definition hardware_info.hpp:90
std::vector< InterfaceInfo > command_interfaces
Definition hardware_info.hpp:96
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:103
std::vector< InterfaceInfo > state_interfaces
Definition hardware_info.hpp:101
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:350
bool print_warnings
Whether to print warnings when the async thread doesn't meet its deadline.
Definition hardware_info.hpp:358
std::string scheduling_policy
Scheduling policy for the async worker thread.
Definition hardware_info.hpp:354
int thread_priority
Thread priority for the async worker thread.
Definition hardware_info.hpp:352
std::vector< int > cpu_affinity_cores
CPU affinity cores for the async worker thread.
Definition hardware_info.hpp:356
This structure stores information about hardware defined in a robot's URDF.
Definition hardware_info.hpp:370
std::string type
Type of the hardware: actuator, sensor or system.
Definition hardware_info.hpp:374
int thread_priority
Async thread priority.
Definition hardware_info.hpp:382
std::vector< MimicJoint > mimic_joints
Definition hardware_info.hpp:397
std::string hardware_plugin_name
Name of the pluginlib plugin of the hardware that will be loaded.
Definition hardware_info.hpp:386
std::unordered_map< std::string, joint_limits::JointLimits > limits
Definition hardware_info.hpp:420
HardwareAsyncParams async_params
Async Parameters.
Definition hardware_info.hpp:384
std::unordered_map< std::string, std::string > hardware_parameters
(Optional) Key-value pairs for hardware parameters.
Definition hardware_info.hpp:388
std::string group
Hardware group to which the hardware belongs.
Definition hardware_info.hpp:376
bool is_async
Component is async.
Definition hardware_info.hpp:380
std::unordered_map< std::string, joint_limits::SoftJointLimits > soft_limits
Definition hardware_info.hpp:427
std::vector< ComponentInfo > gpios
Definition hardware_info.hpp:407
std::vector< ComponentInfo > joints
Definition hardware_info.hpp:393
std::string original_xml
Definition hardware_info.hpp:416
std::string name
Name of the hardware.
Definition hardware_info.hpp:372
std::vector< ComponentInfo > sensors
Definition hardware_info.hpp:402
std::vector< TransmissionInfo > transmissions
Definition hardware_info.hpp:412
unsigned int rw_rate
Component's read and write rates in Hz.
Definition hardware_info.hpp:378
Definition hardware_info.hpp:315
InterfaceInfo interface_info
Definition hardware_info.hpp:331
std::string interface_name
Definition hardware_info.hpp:336
std::string prefix_name
Definition hardware_info.hpp:326
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:53
bool enable_limits
(Optional) enable or disable the limits for the command interfaces
Definition hardware_info.hpp:55
Contains semantic info about a given joint loaded from URDF for a transmission.
Definition hardware_info.hpp:108
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:130
std::unordered_map< std::string, std::string > parameters
(Optional) Key-value pairs of custom parameters
Definition hardware_info.hpp:136