ros2_control - rolling
Loading...
Searching...
No Matches
data.hpp
1
20#pragma once
21
22#include <Eigen/Core>
23#include <Eigen/Geometry>
24#include <hardware_interface/types/hardware_interface_type_values.hpp>
25#include "control_toolbox/pid_ros.hpp"
26
27#include <random>
28#include <string>
29#include <vector>
30
32{
33
45enum class ActuatorType
46{
47 UNKNOWN,
48 MOTOR,
49 POSITION,
50 VELOCITY,
51 PASSIVE,
52 CUSTOM
53};
54
59{
60 explicit InterfaceData(const std::string& command_interface) : command_interface_(command_interface)
61 {
62 }
63
64 std::string command_interface_;
65 double command_ = std::numeric_limits<double>::quiet_NaN();
66 double state_ = std::numeric_limits<double>::quiet_NaN();
67
68 // this is the "sink" that will be part of the transmission Joint/Actuator handles
69 double transmission_passthrough_ = std::numeric_limits<double>::quiet_NaN();
70};
71
94{
95 std::string joint_name = "";
99 std::shared_ptr<control_toolbox::PidROS> pos_pid{ nullptr };
100 std::shared_ptr<control_toolbox::PidROS> vel_pid{ nullptr };
101 ActuatorType actuator_type{ ActuatorType::UNKNOWN };
102 int mj_joint_type = -1;
103 int mj_pos_adr = -1;
104 int mj_vel_adr = -1;
105 int mj_actuator_id = -1;
106
107 // Booleans record whether or not we should be writing commands to these interfaces
108 // based on if they have been claimed.
109 bool is_position_control_enabled{ false };
110 bool is_position_pid_control_enabled{ false };
111 bool is_velocity_pid_control_enabled{ false };
112 bool is_velocity_control_enabled{ false };
113 bool is_effort_control_enabled{ false };
114 bool has_pos_pid{ false };
115 bool has_vel_pid{ false };
116
117 void copy_state_to_transmission()
118 {
119 position_interface.transmission_passthrough_ = position_interface.state_;
120 velocity_interface.transmission_passthrough_ = velocity_interface.state_;
121 effort_interface.transmission_passthrough_ = effort_interface.state_;
122 }
123
124 void copy_command_from_transmission()
125 {
126 position_interface.command_ = position_interface.transmission_passthrough_;
127 velocity_interface.command_ = velocity_interface.transmission_passthrough_;
128 effort_interface.command_ = effort_interface.transmission_passthrough_;
129 }
130
131 void copy_command_to_state()
132 {
133 position_interface.state_ = position_interface.command_;
134 velocity_interface.state_ = velocity_interface.command_;
135 effort_interface.state_ = effort_interface.command_;
136 }
137};
138
154{
155 std::string name = "";
159
160 std::vector<std::string> command_interfaces = {};
161
162 bool is_mimic{ false };
163 long int mimicked_joint_index;
164 double mimic_multiplier;
165
166 bool is_position_control_enabled{ false };
167 bool is_velocity_control_enabled{ false };
168 bool is_effort_control_enabled{ false };
169
170 void copy_state_from_transmission()
171 {
172 position_interface.state_ = position_interface.transmission_passthrough_;
173 velocity_interface.state_ = velocity_interface.transmission_passthrough_;
174 effort_interface.state_ = effort_interface.transmission_passthrough_;
175 }
176
177 void copy_command_to_transmission()
178 {
179 position_interface.transmission_passthrough_ = position_interface.command_;
180 velocity_interface.transmission_passthrough_ = velocity_interface.command_;
181 effort_interface.transmission_passthrough_ = effort_interface.command_;
182 }
183
184 void copy_state_to_command()
185 {
186 position_interface.command_ = position_interface.state_;
187 velocity_interface.command_ = velocity_interface.state_;
188 effort_interface.command_ = effort_interface.state_;
189 }
190};
191
192template <typename T>
194{
195 std::string name;
196 T data;
197 int mj_sensor_index;
198};
199
206{
207 kGaussian,
208 kUniform,
209};
210
216{
217 NoiseDistribution distribution = NoiseDistribution::kGaussian;
218 std::mt19937 rng{ std::random_device{}() };
219};
220
231{
232 std::string name;
235
236 double force_noise_stddev = 0.0;
237 double torque_noise_stddev = 0.0;
238 NoiseState noise;
239};
240
254{
255 std::string name;
257 SensorData<Eigen::Vector3d> angular_velocity;
258 SensorData<Eigen::Vector3d> linear_acceleration;
259
260 double orientation_noise_stddev = 0.0;
261 double angular_velocity_noise_stddev = 0.0;
262 double linear_acceleration_noise_stddev = 0.0;
263 NoiseState noise;
264
265 // Diagonal-only (independent per-axis noise) covariance, derived from the *_noise_stddev fields above at
266 // registration time. Left at all-zero (as before noise support existed) when noise is not configured.
267 std::vector<double> orientation_covariance;
268 std::vector<double> angular_velocity_covariance;
269 std::vector<double> linear_acceleration_covariance;
270};
271
282{
283 std::string name;
286
287 double position_noise_stddev = 0.0;
288 double orientation_noise_stddev = 0.0;
289 NoiseState noise;
290};
291
299{
300 std::string name;
301 SensorData<Eigen::Vector3d> magnetic_field;
302
303 double magnetic_field_noise_stddev = 0.0;
304 NoiseState noise;
305};
306
307} // namespace mujoco_ros2_control
constexpr char HW_IF_EFFORT[]
Constant defining effort interface name.
Definition hardware_interface_type_values.hpp:27
constexpr char HW_IF_VELOCITY[]
Constant defining velocity interface name.
Definition hardware_interface_type_values.hpp:23
constexpr char HW_IF_POSITION[]
Constant defining position interface name.
Definition hardware_interface_type_values.hpp:21
Definition data.hpp:32
ActuatorType
Definition data.hpp:46
NoiseDistribution
Definition data.hpp:206
Definition data.hpp:231
Definition data.hpp:254
Definition data.hpp:216
Definition data.hpp:194
Definition data.hpp:282
Definition data.hpp:154