grasp_candidate_drawer.cpp
Go to the documentation of this file.
2
3#include <utility>
4
5#include <SimoxUtility/math/pose/pose.h>
6#include <VirtualRobot/Nodes/RobotNode.h>
7
9
10namespace armarx
11{
17
18 void
20 {
21 _color_offset = 0;
22 }
23
24 void
25 grasp_candidate_drawer::draw(const armarx::grasping::GraspCandidatePtr& gc,
27 {
28 draw(gc, l, simox::color::GlasbeyLUT::at(_color_offset, 255));
29 }
30
31 void
33 {
34 draw(gch, l, simox::color::GlasbeyLUT::at(_color_offset, 255));
35 }
36
37 void
38 grasp_candidate_drawer::draw(const armarx::grasping::GraspCandidatePtr& gc,
40 const armarx::viz::Color& color)
41 {
45 }
46
47 void
50 const armarx::viz::Color& color)
51 {
55 const auto& s = side(gch);
56 const std::string name = "grasp_" + s.name + "_" + std::to_string(_color_offset++);
57 l.add(armarx::viz::Robot(name + "_robot")
58 .file(s.hand_model_package, s.hand_model_path)
59 .overrideColor(color)
60 .pose(gch.getGraspPoseInGlobal() * s.tcp_2_hroot));
61 const Eigen::Vector3f targ = gch.getGraspPositionInGlobal();
62 const Eigen::Vector3f appr = gch.getApproachVector();
63 const Eigen::Vector3f from = targ - appr * length_approach;
64 l.add(armarx::viz::Arrow(name + "_approach")
65 .color(color)
66 .width(width_approach)
67 .fromTo(from, targ));
68 }
69
70 void
73 float ax_len,
74 float ax_width,
75 const armarx::viz::Color& color_up,
76 const armarx::viz::Color& color_trans)
77 {
78 draw(side.name, side, l, ax_len, ax_width, color_up, color_trans);
79 }
80
81 void
82 grasp_candidate_drawer::draw(const std::string& name,
85 float ax_len,
86 float ax_width,
87 const armarx::viz::Color& color_up,
88 const armarx::viz::Color& color_trans)
89 {
90 draw(side,
91 l,
92 side.nh_arm_w_rob.getTCP()->getGlobalPose(),
93 ax_len,
94 ax_width,
95 color_up,
96 color_trans);
97 }
98
99 void
102 const Eigen::Matrix4f& gpose,
103 float ax_len,
104 float ax_width,
105 const armarx::viz::Color& color_up,
106 const armarx::viz::Color& color_trans)
107 {
108 draw("", side, l, gpose, ax_len, ax_width, color_up, color_trans);
109 }
110
111 void
112 grasp_candidate_drawer::draw(const std::string& name,
115 const Eigen::Matrix4f& gpose,
116 float ax_len,
117 float ax_width,
118 const armarx::viz::Color& color_up,
119 const armarx::viz::Color& color_trans)
120 {
121 const Eigen::Vector3f hand_up =
122 simox::math::orientation(gpose) * side.hand_up.normalized() * ax_len;
123
124 const Eigen::Vector3f transversal_outward =
125 simox::math::orientation(gpose) * side.hand_transverse.normalized() * ax_len;
126
127 const Eigen::Vector3f tcp_pos = simox::math::position(gpose);
128
129 l.add(armarx::viz::Arrow(name + "hand_up")
130 .color(color_up)
131 .width(ax_width)
132 .fromTo(tcp_pos, tcp_pos + hand_up));
133 l.add(armarx::viz::Arrow(name + "transversal_outward")
134 .color(color_trans)
135 .width(ax_width)
136 .fromTo(tcp_pos, tcp_pos + transversal_outward));
137 }
138
139 const grasp_candidate_drawer::side_data&
140 grasp_candidate_drawer::side(const armarx::GraspCandidateHelper& gch)
141 {
143 const std::string& s = gch.getGraspCandidate()->side;
144 if (_sides.count(s))
145 {
146 return _sides.at(s);
147 }
150 const auto nh = rnh->getArm(s);
151 const auto nh_w_rob = nh.addRobot(robot);
152 auto& data = _sides[s];
153 data.name = s;
154 data.hand_model_package = nh.getHandModelPackage();
155 data.hand_model_path = nh.getHandModelPath();
156 data.tcp_2_hroot = nh_w_rob.getTcp2HandRootTransform();
157 return data;
158 }
159} // namespace armarx
uint8_t data[1]
Eigen::Vector3f getApproachVector() const
Eigen::Matrix4f getGraspPoseInGlobal() const
Eigen::Vector3f getGraspPositionInGlobal() const
const grasping::GraspCandidatePtr getGraspCandidate() const
DerivedT & pose(Eigen::Matrix4f const &pose)
Definition ElementOps.h:176
Robot & overrideColor(Color c)
Definition Robot.h:50
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< class RobotNameHelper > RobotNameHelperPtr
void draw(const armarx::grasping::GraspCandidatePtr &gc, armarx::viz::Layer &l)
grasp_candidate_drawer(armarx::RobotNameHelperPtr rnh, const VirtualRobot::RobotPtr &robot)
void add(ElementT const &element)
Definition Layer.h:31
#define ARMARX_TRACE
Definition trace.h:77