aron_conversions.cpp
Go to the documentation of this file.
1 #include "aron_conversions.h"
2 
3 #include <VirtualRobot/MathTools.h>
4 
6 
7 #include <dmp/representation/dmp/umitsmp.h>
8 
9 namespace armarx::armem
10 {
11 
12  void
13  fromAron(const arondto::Trajectory& dto, DMP::SampledTrajectoryV2& bo, bool taskspace)
14  {
15  std::map<double, DMP::DVec> traj_map;
16  if (taskspace)
17  {
18  for (auto element : dto.taskSpace.steps)
19  {
20  DMP::DVec pose;
21  pose.push_back(element.pose(0, 3));
22  pose.push_back(element.pose(1, 3));
23  pose.push_back(element.pose(2, 3));
25  VirtualRobot::MathTools::eigen4f2quat(element.pose);
26  pose.push_back(quat.w);
27  pose.push_back(quat.x);
28  pose.push_back(quat.y);
29  pose.push_back(quat.z);
30  traj_map.insert(std::make_pair(element.timestep, pose));
31  }
32  }
33  else
34  {
35  for (auto element : dto.jointSpace.steps)
36  {
37  DMP::DVec jointvalues;
38  for (auto angle : element.jointValues)
39  {
40  jointvalues.push_back(double(angle));
41  }
42  traj_map.insert(std::make_pair(element.timestep, jointvalues));
43  }
44  }
45  }
46 
47  void
49  const DMP::SampledTrajectoryV2& bo_taskspace,
50  const DMP::SampledTrajectoryV2& bo_jointspace,
51  const std::string name)
52  {
53  dto.name = name;
54  std::map<std::string, std::vector<float>> mapJointSpace;
55 
56  // taskspace
57  std::map<double, DMP::DVec> ts_map = bo_taskspace.getPositionData();
58  for (std::pair<double, DMP::DVec> element : ts_map)
59  {
60  Eigen::Vector3f vec(element.second.at(0), element.second.at(1), element.second.at(2));
61  Eigen::Matrix<float, 4, 4> poseMatrix =
62  VirtualRobot::MathTools::quat2eigen4f(element.second.at(4),
63  element.second.at(5),
64  element.second.at(6),
65  element.second.at(3));
66  poseMatrix.block<3, 1>(0, 3) = vec;
67  arondto::TSElement tselement;
68  tselement.timestep = element.first;
69  tselement.pose = poseMatrix;
70  dto.taskSpace.steps.push_back(tselement);
71  }
72 
73  // jointspace
74  std::map<double, DMP::DVec> js_map = bo_jointspace.getPositionData();
75  for (std::pair<double, DMP::DVec> element : js_map)
76  {
77  std::vector<float> configvec;
78  for (double el : element.second)
79  {
80  configvec.push_back(float(el));
81  }
82  arondto::JSElement jselement;
83  jselement.timestep = element.first;
84  jselement.jointValues = configvec;
85  dto.jointSpace.steps.push_back(jselement);
86  }
87  }
88 
89 } // namespace armarx::armem
aron_conversions.h
armarx::armem::toAron
void toAron(arondto::MemoryID &dto, const MemoryID &bo)
Definition: aron_conversions.cpp:19
armarx::armem
Definition: LegacyRobotStateMemoryAdapter.cpp:32
armarx::VariantType::Quaternion
const VariantTypeId Quaternion
Definition: Pose.h:39
armarx::control::common::mp::DVec
Ice::DoubleSeq DVec
Definition: MP.h:47
armarx::VariantType::Trajectory
const VariantTypeId Trajectory
Definition: Trajectory.h:44
aron_conversions.h
armarx::armem::fromAron
void fromAron(const arondto::MemoryID &dto, MemoryID &bo)
Definition: aron_conversions.cpp:8
angle
double angle(const Point &a, const Point &b, const Point &c)
Definition: point.hpp:109
Eigen::Matrix
Definition: EigenForwardDeclarations.h:27
armarx::aron::bo
const std::optional< BoT > & bo
Definition: aron_conversions.h:174