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; };
34  vector3fSetters["x"] = vector3fSetters["X"];
35  vector3fSetters["y"] = vector3fSetters["Y"];
36  vector3fSetters["z"] = vector3fSetters["Z"];
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
armarx::human::pose::model::k4a_bt_body_32::Joints
Joints
Joints with index as defined in the body model.
Definition: k4a_bt_body_32.h:38
ADD_VECTOR3_SETTER
#define ADD_VECTOR3_SETTER(container, name, type)
armarx::armem::server::robot_state::exteroception::findByPrefix
std::optional< std::string > findByPrefix(const std::string &key, const std::set< std::string > &prefixes)
Search.
Definition: ConverterTools.cpp:13
ConverterTools.h
armarx::starts_with
bool starts_with(const std::string &haystack, const std::string &needle)
Definition: StringHelpers.cpp:47
armarx::armem::server::robot_state::exteroception::ConverterTools::platformIgnored
std::set< std::string > platformIgnored
Definition: ConverterTools.h:91
Dict.h
armarx::armem::server::robot_state::exteroception::ConverterTools::vector3fSetters
std::map< std::string, std::function< void(Eigen::Vector3f &, float)> > vector3fSetters
Definition: ConverterTools.h:76
armarx::armem::server::robot_state
Definition: RobotStateMemory.cpp:40
RobotUnitDataStreamingReceiver.h
armarx::armem::server::robot_state::exteroception::ConverterTools::ftGetters
std::map< std::string, std::function< Eigen::Vector3f *(prop::arondto::ForceTorque &)> > ftGetters
Definition: ConverterTools.h:94
armarx::armem::server::robot_state::exteroception::ConverterTools::ConverterTools
ConverterTools()
Definition: ConverterTools.cpp:28
armarx::armem::server::robot_state::exteroception::ConverterTools::platformPoseGetters
std::map< std::string, std::function< Eigen::Vector3f *(prop::arondto::Platform &)> > platformPoseGetters
Definition: ConverterTools.h:90
armarx::armem::server::robot_state::exteroception::ConverterTools::jointSetters
std::map< std::string, JointSetter > jointSetters
Definition: ConverterTools.h:87
armarx::armem::server::robot_state::exteroception
Definition: ArmarDEConverter.cpp:18
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
ADD_SCALAR_SETTER
#define ADD_SCALAR_SETTER(container, name, type)
armarx::armem::server::robot_state::exteroception::ConverterTools::jointGetters
std::map< std::string, std::function< std::map< std::string, float > *(prop::arondto::Joints &)> > jointGetters
Definition: ConverterTools.h:79