ConverterTools.cpp
Go to the documentation of this file.
1#include "ConverterTools.h"
2
3#include <SimoxUtility/algorithm/advanced.h>
4#include <SimoxUtility/algorithm/get_map_keys_values.h>
5
8
10{
11
12 std::optional<std::string>
13 exteroception::findByPrefix(const std::string& key, const std::set<std::string>& prefixes)
14 {
15 for (const auto& prefix : prefixes)
16 {
17 if (simox::alg::starts_with(key, prefix))
18 {
19 return prefix;
20 }
21 }
22 return std::nullopt;
23 }
24} // namespace armarx::armem::server::robot_state
25
27{
29 {
30 {
31 vector3fSetters["X"] = [](Eigen::Vector3f& v, float f) { v.x() = f; };
32 vector3fSetters["Y"] = [](Eigen::Vector3f& v, float f) { v.y() = f; };
33 vector3fSetters["Z"] = [](Eigen::Vector3f& v, float f) { v.z() = f; };
37 vector3fSetters["Rotation"] = vector3fSetters["Z"];
38 }
39 {
40 platformPoseGetters["acceleration"] = [](prop::arondto::Platform& p)
41 { return &p.acceleration; };
42 platformPoseGetters["relativePosition"] = [](prop::arondto::Platform& p)
43 { return &p.relativePosition; };
44 platformPoseGetters["velocity"] = [](prop::arondto::Platform& p)
45 { return &p.velocity; };
46 platformIgnored.insert("absolutePosition");
47 }
48 {
49 ftGetters["gravCompF"] = [](prop::arondto::ForceTorque& ft)
50 { return &ft.gravityCompensationForce; };
51 ftGetters["gravCompT"] = [](prop::arondto::ForceTorque& ft)
52 { return &ft.gravityCompensationTorque; };
53 ftGetters["f"] = [](prop::arondto::ForceTorque& ft) { return &ft.force; };
54 ftGetters["t"] = [](prop::arondto::ForceTorque& ft) { return &ft.torque; };
55 }
56 {
57 jointGetters["acceleration"] = [](prop::arondto::Joints& j) { return &j.acceleration; };
58 jointGetters["gravityTorque"] = [](prop::arondto::Joints& j)
59 { return &j.gravityTorque; };
60 jointGetters["inertiaTorque"] = [](prop::arondto::Joints& j)
61 { return &j.inertiaTorque; };
62 jointGetters["inverseDynamicsTorque"] = [](prop::arondto::Joints& j)
63 { return &j.inverseDynamicsTorque; };
64 jointGetters["position"] = [](prop::arondto::Joints& j) { return &j.position; };
65 jointGetters["torque"] = [](prop::arondto::Joints& j) { return &j.torque; };
66 jointGetters["velocity"] = [](prop::arondto::Joints& j) { return &j.velocity; };
67 }
68 {
69
70#define ADD_SCALAR_SETTER(container, name, type) \
71 container[#name] = [](prop::arondto::Joints& dto, \
72 const std::vector<std::string>& split, \
73 const ConverterValue& value) \
74 { dto.name[split.at(1)] = getValueAs<type>(value); }
75
76 ADD_SCALAR_SETTER(jointSetters, position, float);
77 ADD_SCALAR_SETTER(jointSetters, velocity, float);
78 ADD_SCALAR_SETTER(jointSetters, acceleration, float);
79
80 ADD_SCALAR_SETTER(jointSetters, relativePosition, float);
81 ADD_SCALAR_SETTER(jointSetters, filteredVelocity, float);
82
83 ADD_SCALAR_SETTER(jointSetters, currentTarget, float);
84 ADD_SCALAR_SETTER(jointSetters, positionTarget, float);
85 ADD_SCALAR_SETTER(jointSetters, velocityTarget, float);
86
87 ADD_SCALAR_SETTER(jointSetters, torque, float);
88 ADD_SCALAR_SETTER(jointSetters, inertiaTorque, float);
89 ADD_SCALAR_SETTER(jointSetters, gravityTorque, float);
90 ADD_SCALAR_SETTER(jointSetters, gravityCompensatedTorque, float);
91 ADD_SCALAR_SETTER(jointSetters, inverseDynamicsTorque, float);
92 ADD_SCALAR_SETTER(jointSetters, torqueTicks, int);
93
94 ADD_SCALAR_SETTER(jointSetters, positionTarget, float);
95 ADD_SCALAR_SETTER(jointSetters, currentTarget, float);
96 ADD_SCALAR_SETTER(jointSetters, positionTarget, float);
97
98 // "temperature" handled below
99 // ADD_SCALAR_SETTER(jointSetters, temperature, float);
100
101 ADD_SCALAR_SETTER(jointSetters, motorCurrent, float);
102 ADD_SCALAR_SETTER(jointSetters, maxTargetCurrent, float);
103
104 ADD_SCALAR_SETTER(jointSetters, sensorBoardUpdateRate, float);
105 ADD_SCALAR_SETTER(jointSetters, I2CUpdateRate, float);
106
107 ADD_SCALAR_SETTER(jointSetters, JointStatusEmergencyStop, bool);
108 ADD_SCALAR_SETTER(jointSetters, JointStatusEnabled, bool);
109 ADD_SCALAR_SETTER(jointSetters, JointStatusError, int);
110 ADD_SCALAR_SETTER(jointSetters, JointStatusOperation, int);
111
112
113#define ADD_VECTOR3_SETTER(container, name, type) \
114 container[#name] = [this](prop::arondto::Joints& dto, \
115 const std::vector<std::string>& split, \
116 const ConverterValue& value) \
117 { \
118 auto& vec = dto.name[split.at(1)]; \
119 auto& setter = this -> vector3fSetters.at(split.at(3)); \
120 setter(vec, getValueAs<type>(value)); \
121 }
122
123 ADD_VECTOR3_SETTER(jointSetters, angularVelocity, float);
124 ADD_VECTOR3_SETTER(jointSetters, linearAcceleration, float);
125
126 // ADD_GETTER(jointVectorGetters, orientation, float);
127 }
128 }
129
130} // namespace armarx::armem::server::robot_state::exteroception
std::map< std::string, std::function< std::map< std::string, float > *(prop::arondto::Joints &)> > jointGetters
std::map< std::string, std::function< Eigen::Vector3f *(prop::arondto::ForceTorque &)> > ftGetters
std::map< std::string, std::function< Eigen::Vector3f *(prop::arondto::Platform &)> > platformPoseGetters
std::map< std::string, std::function< void(Eigen::Vector3f &, float)> > vector3fSetters
#define ADD_SCALAR_SETTER(container, name, type)
#define ADD_VECTOR3_SETTER(container, name, type)
std::optional< std::string > findByPrefix(const std::string &key, const std::set< std::string > &prefixes)
Search.