HumanPoseMMMBody68.cpp
Go to the documentation of this file.
1 #include "HumanPoseMMMBody68.h"
2 
4 
6 
8 
9 namespace armarx::viz
10 {
11 
13 
14  void
16  HumanPoseLayers& layers,
17  const std::string& prefix)
18  {
20  static const int segmentThickness = 20;
21  static const int jointThickness = 30;
22  static const float thinFactor = 1. / 3.;
23 
24  // Segments.
25  for (const auto& [index1, index2] : Segments)
26  {
27  const std::string& name1 = JointNames.map().left.at(index1);
28  const std::string& name2 = JointNames.map().left.at(index2);
29 
30  // Only draw segment if start end end are in keypoint map.
31  if (pose.keypoints.find(name1) == pose.keypoints.end() or
32  pose.keypoints.find(name2) == pose.keypoints.end())
33  {
34  continue;
35  }
36 
37  const armarx::armem::human::PoseKeypoint p1 = pose.keypoints.at(name1);
38  const armarx::armem::human::PoseKeypoint p2 = pose.keypoints.at(name2);
39 
40  const Eigen::Vector3f pos1 = p1.positionGlobal->toEigen();
41  const Eigen::Vector3f pos2 = p2.positionGlobal->toEigen();
42 
43  if (pos1.allFinite() and pos2.allFinite())
44  {
45  if (pos1 == Eigen::Vector3f(0, 0, 0) or pos2 == Eigen::Vector3f(0, 0, 0))
46  {
47  continue;
48  }
49 
50  const armarx::viz::Color color = Colors.at(index2);
51 
52  const float scale = (index2 > Joints::WristRight && index2 <= Joints::HandTCPRight)
53  ? thinFactor
54  : 1.;
56  armarx::viz::Cylinder(prefix + "::" + p1.label + "_" + p2.label)
57  .fromTo(pos1, pos2)
58  .radius(scale * segmentThickness)
59  .color(color);
60  layers.skeleton.add(line);
61  }
62  }
63 
64  // Keypoints.
65  for (auto const& [id, name] : JointNames.map())
66  {
67  if (pose.keypoints.find(name) != pose.keypoints.end())
68  {
70 
71  const armarx::viz::Color color = Colors.at(id);
72  const float scale =
73  (id > Joints::WristRight && id <= Joints::HandTCPRight) ? thinFactor : 1.;
74  armarx::viz::Sphere sphere = armarx::viz::Sphere(prefix + "::" + name)
75  .position(kp.positionGlobal->toEigen())
76  .radius(scale * jointThickness)
77  .color(color);
78  layers.skeleton.add(sphere);
79  }
80  }
81  }
82 
83 } // namespace armarx::viz
armarx::viz::Cylinder::radius
Cylinder & radius(float r)
Definition: Elements.h:76
armarx::viz::Cylinder::fromTo
Cylinder & fromTo(Eigen::Vector3f from, Eigen::Vector3f to)
Definition: Elements.cpp:93
armarx::viz::mmm_body_68::addPoseToLayer
void addPoseToLayer(const armarx::armem::human::HumanPose &pose, HumanPoseLayers &layers, const std::string &prefix)
Definition: HumanPoseMMMBody68.cpp:15
armarx::armem::human::PoseKeypoint::label
std::string label
Definition: types.h:19
armarx::viz::Layer::add
void add(ElementT const &element)
Definition: Layer.h:31
armarx::human::pose::model::mmm_body_68
This file is part of ArmarX.
Definition: mmm_body_68.h:27
armarx::viz::Sphere
Definition: Elements.h:133
Elements.h
armarx::viz::HumanPoseLayers::skeleton
viz::Layer & skeleton
Definition: HumanPose.h:16
armarx::viz::ElementOps::position
DerivedT & position(float x, float y, float z)
Definition: ElementOps.h:136
ARMARX_TRACE
#define ARMARX_TRACE
Definition: trace.h:77
armarx::armem::human::PoseKeypoint
Definition: types.h:17
armarx::human::pose::model::k4a_bt_body_32::JointNames
const simox::meta::EnumNames< Joints > JointNames
Names of the joints as defined in the body model.
Definition: k4a_bt_body_32.h:77
armarx::viz::Cylinder
Definition: Elements.h:71
armarx::viz::Sphere::radius
Sphere & radius(float r)
Definition: Elements.h:138
armarx::human::pose::model::k4a_bt_body_32::Segments
const std::vector< std::pair< Joints, Joints > > Segments
Segments (defined by pairs of joints) as defined in the body model.
Definition: k4a_bt_body_32.h:113
armarx::viz::Color
Definition: Color.h:12
armarx::armem::human::HumanPose
Definition: types.h:30
HumanPoseMMMBody68.h
armarx::viz::ElementOps::color
DerivedT & color(Color color)
Definition: ElementOps.h:218
armarx::armem::human::PoseKeypoint::positionGlobal
std::optional< armarx::FramedPosition > positionGlobal
Definition: types.h:26
mmm_body_68.h
armarx::viz::HumanPoseLayers
Definition: HumanPose.h:14
armarx::armem::human::HumanPose::keypoints
KeyPointMap keypoints
Definition: types.h:35
Logging.h
armarx::viz
This file is part of ArmarX.
Definition: ArVizStorage.cpp:418
armarx::human::pose::model::k4a_bt_body_32::Colors
const std::map< Joints, simox::Color > Colors
Definition: k4a_bt_body_32.h:147