GraspCandidateVisu.cpp
Go to the documentation of this file.
2
5
6namespace armarx::grasping
7{
11
12 void
13 GraspCandidateVisu::visualize(const grasping::GraspCandidateDict& candidates,
14 viz::Client& arviz)
15 {
16 viz::Layer graspsLayer = arviz.layer("Grasps");
17 viz::Layer graspsNonReachableLayer = arviz.layer("Grasps Non-Reachable");
18
19 visualize(candidates, graspsLayer, graspsNonReachableLayer);
20 arviz.commit({graspsLayer, graspsNonReachableLayer});
21 }
22
23 void
24 GraspCandidateVisu::visualize(const std::string& id,
25 const GraspCandidate& candidate,
26 viz::Layer& layerReachable,
27 viz::Layer& layerNonReachable)
28 {
29 int alpha = alpha_default;
30 if (auto it = alphasByKey.find(id); it != alphasByKey.end())
31 {
32 alpha = it->second;
33 }
34
35 ARMARX_CHECK(candidate.tcpPoseInHandRoot)
36 << "Candidate needs to have tcpPoseInHandRoot to be visualized!";
37 viz::Robot hand = visualize("Grasp_" + id, candidate, alpha);
38
39 if (candidate.reachabilityInfo && candidate.reachabilityInfo->reachable)
40 {
41 layerReachable.add(hand);
42 }
43 else
44 {
45 layerNonReachable.add(hand);
46 }
47 }
48
49 void
50 GraspCandidateVisu::visualize(const grasping::GraspCandidateDict& candidates,
51 viz::Layer& layerReachable,
52 viz::Layer& layerNonReachable)
53 {
54 for (auto& [id, candidate] : candidates)
55 {
56 visualize(id, *candidate, layerReachable, layerNonReachable);
57 }
58 }
59
61 GraspCandidateVisu::visualize(const std::string& name, const GraspCandidate& candidate)
62 {
63 return visualize(name, candidate, alpha_default);
64 }
65
67 GraspCandidateVisu::visualize(const std::string& name,
68 const grasping::GraspCandidate& candidate,
69 int alpha)
70 {
71 bool isReachable = candidate.reachabilityInfo && candidate.reachabilityInfo->reachable;
72 viz::Color color = isReachable ? viz::Color::green() : viz::Color::orange();
73 color.a = alpha;
74
75 Eigen::Matrix4f tcp2handRoot = fromIce(candidate.tcpPoseInHandRoot).inverse();
76 Eigen::Matrix4f graspPose = PosePtr::dynamicCast(candidate.graspPose)->toEigen();
77 std::string modelFile = "rt/robotmodel/Armar6-SH/Armar6-" + candidate.side + "Hand-v3.xml";
78
79 viz::Robot hand = viz::RobotHand(name)
80 .file("Armar6RT", modelFile)
81 .pose(fromIce(candidate.robotPose) * graspPose * tcp2handRoot)
82 .overrideColor(color);
83
84 return hand;
85 }
86} // namespace armarx::grasping
std::map< std::string, int > alphasByKey
void visualize(const grasping::GraspCandidateDict &candidates, viz::Client &arviz)
virtual Layer layer(std::string const &name) const
Definition Client.cpp:80
CommitResult commit(StagedCommit const &commit)
Definition Client.cpp:89
DerivedT & pose(Eigen::Matrix4f const &pose)
Definition ElementOps.h:176
Left or right hand of a robot.
Definition RobotHand.h:19
Robot & file(std::string const &project, std::string const &filename)
Definition Robot.h:16
Robot & overrideColor(Color c)
Definition Robot.h:50
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
void fromIce(const std::map< IceKeyT, IceValueT > &iceMap, boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
void add(ElementT const &element)
Definition Layer.h:31