IkDemo.cpp
Go to the documentation of this file.
1 #include "IkDemo.h"
2 
3 #include <SimoxUtility/algorithm/string.h>
4 #include <SimoxUtility/meta/EnumNames.hpp>
5 #include <SimoxUtility/math/pose/invert.h>
6 
7 #include <VirtualRobot/Robot.h>
8 #include <VirtualRobot/XML/RobotIO.h>
9 #include <VirtualRobot/IK/CompositeDiffIK/CompositeDiffIK.h>
10 #include <VirtualRobot/IK/CompositeDiffIK/ManipulabilityNullspaceGradient.h>
11 #include <VirtualRobot/IK/CompositeDiffIK/SoechtingNullspaceGradient.h>
12 
15 
18 
19 #include "PoseGizmo.h"
20 
21 
22 namespace viz = armarx::viz;
23 
24 
26 {
27 
28  enum class IkMethod
29  {
32  };
33  const simox::meta::EnumNames<IkMethod> IkMethodNames =
34  {
35  { IkMethod::SimpleDiffIk, "Simple Diff IK" },
36  { IkMethod::CompositeDiffIk, "Composite Diff IK" },
37  };
38 
39  struct Manipulator
40  {
42  {
43  gizmo.box.color(simox::Color::cyan(255, 64));
44  }
45  virtual ~Manipulator()
46  {
47  }
48 
50  {
51  bool updated = false;
52  if (interaction.layer() == gizmo.layer.data_.name)
53  {
54  updated |= gizmo.handleInteraction(interaction, stage);
55  }
56  return updated;
57  }
58 
59  virtual void visualize(viz::Client& arviz) = 0;
60  virtual void runIk(IkDemo::Robot& robot) = 0;
61 
63  };
64 
65 
66  struct TcpManipulator : public Manipulator
67  {
69  {
70  std::vector<std::string> options;
71  for (IkMethod method : IkMethodNames.values())
72  {
73  options.push_back("Use " + IkMethodNames.to_name(method));
74  }
75  gizmo.box
76  .size({75, 100, 200})
77  .enable(viz::interaction().selection().transform().hideDuringTransform()
78  .contextMenu(options));
79  };
80 
81  void visualize(viz::Client& arviz) override
82  {
83  gizmo.setLayer(arviz.layer(tcp->getName()));
84  gizmo.update();
85  }
86 
88  {
89  bool updated = Manipulator::handle(interaction, stage);
90 
91  if (interaction.layer() == gizmo.layer.data_.name)
92  {
93  switch (interaction.type())
94  {
95  case viz::InteractionFeedbackType::ContextMenuChosen:
96  {
97  int i = 0;
98  for (IkMethod method : IkMethodNames.values())
99  {
100  if (i == interaction.chosenContextMenuEntry())
101  {
102  this->method = method;
103  updated |= true;
104  ARMARX_IMPORTANT << "[" << tcp->getName() << "] Using " << IkMethodNames.to_name(method);
105  break;
106  }
107  ++i;
108  }
109  } break;
110  default:
111  break;
112  }
113  }
114 
115  return updated;
116  }
117 
118  void runIk(IkDemo::Robot& robot) override
119  {
120  const Eigen::Matrix4f tcpPoseInRobotFrame =
121  simox::math::inverted_pose(robot.robot->getGlobalPose()) * gizmo.getCurrent();
122 
123  switch (method)
124  {
126  {
128  armarx::SimpleDiffIK::Result result = ik.CalculateDiffIK(tcpPoseInRobotFrame, nodeSet, tcp);
129 
130  if (result.reached)
131  {
132  gizmo.box.color(simox::Color::kit_green(64));
133 
134  std::map<std::string, float> jointValues;
135  size_t i = 0;
136  for (const auto& rn : nodeSet->getAllRobotNodes())
137  {
138  jointValues[rn->getName()] = result.jointValues(i);
139  ++i;
140  }
141 
142  robot.robot->setJointValues(jointValues);
143  }
144  else
145  {
146  gizmo.box.color(simox::Color::red(255, 64));
147  }
148  } break;
149 
151  {
152  // Code taken from: simox/VirtualRobot/examples/RobotViewer/DiffIKWidget.cpp
153 
154  const float jointLimitAvoidance = 0;
155  const float kGainManipulabilityAsNullspace = 0.01;
156  const float kSoechtingAsNullspace = 0.0;
157  const int steps = 100;
158 
159  VirtualRobot::CompositeDiffIK ik(nodeSet);
160  Eigen::Matrix4f pose = tcpPoseInRobotFrame;
161 
162  const bool ori = true;
163  VirtualRobot::CompositeDiffIK::TargetPtr target1 = ik.addTarget(
164  tcp, pose, ori ? VirtualRobot::IKSolver::All : VirtualRobot::IKSolver::Position);
165 
166 
167  if (jointLimitAvoidance > 0)
168  {
169  VirtualRobot::CompositeDiffIK::NullspaceJointLimitAvoidancePtr nsjla(
170  new VirtualRobot::CompositeDiffIK::NullspaceJointLimitAvoidance(nodeSet));
171  nsjla->kP = jointLimitAvoidance;
172  for (auto node : nodeSet->getAllRobotNodes())
173  {
174  if (node->isLimitless())
175  {
176  nsjla->setWeight(node->getName(), 0);
177  }
178  }
179  ik.addNullspaceGradient(nsjla);
180  }
181 
182  VirtualRobot::NullspaceManipulabilityPtr nsman = nullptr;
183  if (kGainManipulabilityAsNullspace > 0)
184  {
185 #if 0
186  std::cout << "Adding manipulability as nullspace target" << std::endl;
187  auto manipTracking = getManipulabilityTracking(nodeSet, nullptr);
188  if (!manipTracking)
189  {
190  std::cout << "Manip tracking zero!" << std::endl;
191  return;
192  }
193  Eigen::MatrixXd followManip = readFollowManipulability();
194  if (followManip.rows() != manipTracking->getTaskVars())
195  {
196  std::cout << "Wrong manipulability matrix!" << std::endl;
197  return;
198  }
199  nsman = VirtualRobot::NullspaceManipulabilityPtr(new VirtualRobot::NullspaceManipulability(manipTracking, followManip, Eigen::MatrixXd(), true));
200  nsman->kP = kGainManipulabilityAsNullspace;
201  ik.addNullspaceGradient(nsman);
202 #endif
203  }
204 
205  if (kSoechtingAsNullspace > 0)
206  {
207  if (robot.robot->getName() == "Armar6" and nodeSet->getName() == "RightArm")
208  {
209  std::cout << "Adding soechting nullspace" << std::endl;
210  VirtualRobot::SoechtingNullspaceGradient::ArmJoints armjoints;
211  armjoints.clavicula = robot.robot->getRobotNode("ArmR1_Cla1");
212  armjoints.shoulder1 = robot.robot->getRobotNode("ArmR2_Sho1");
213  armjoints.shoulder2 = robot.robot->getRobotNode("ArmR3_Sho2");
214  armjoints.shoulder3 = robot.robot->getRobotNode("ArmR4_Sho3");
215  armjoints.elbow = robot.robot->getRobotNode("ArmR5_Elb1");
216 
217  auto gradient = std::make_shared<VirtualRobot::SoechtingNullspaceGradient>(
218  target1, "ArmR2_Sho1", VirtualRobot::Soechting::ArmType::Right, armjoints);
219 
220  gradient->kP = kSoechtingAsNullspace;
221  ik.addNullspaceGradient(gradient);
222  }
223  else if (robot.robot->getName() == "Armar6" and nodeSet->getName() == "LeftArm")
224  {
225  std::cout << "Adding soechting nullspace" << std::endl;
226  VirtualRobot::SoechtingNullspaceGradient::ArmJoints armjoints;
227  armjoints.clavicula = robot.robot->getRobotNode("ArmL1_Cla1");
228  armjoints.shoulder1 = robot.robot->getRobotNode("ArmL2_Sho1");
229  armjoints.shoulder2 = robot.robot->getRobotNode("ArmL3_Sho2");
230  armjoints.shoulder3 = robot.robot->getRobotNode("ArmL4_Sho3");
231  armjoints.elbow = robot.robot->getRobotNode("ArmL5_Elb1");
232 
233  auto gradient = std::make_shared<VirtualRobot::SoechtingNullspaceGradient>(
234  target1, "ArmL2_Sho1", VirtualRobot::Soechting::ArmType::Left, armjoints);
235  gradient->kP = kSoechtingAsNullspace;
236  ik.addNullspaceGradient(gradient);
237  }
238  else
239  {
240  ARMARX_INFO << "Soechting currently supports only Armar6 and RightArm/LeftArm robot node set "
241  "for first robot node set for demonstration purposes.";
242  }
243  }
244 
245  {
246  VirtualRobot::CompositeDiffIK::Parameters cp;
247  cp.resetRnsValues = false;
248  cp.returnIKSteps = true;
249  cp.steps = 1;
250  VirtualRobot::CompositeDiffIK::SolveState state;
251  ik.solve(cp, state);
252 
253  int i = 0;
254  while (i < steps or (steps < 0 and not ik.getLastResult().reached and i < 1000))
255  {
256  ik.step(cp, state, i);
257  i++;
258  }
259 
260  if (ik.getLastResult().reached)
261  {
262  gizmo.box.color(simox::Color::kit_green(64));
263  robot.robot->setJointValues(ik.getRobotNodeSet()->getJointValueMap());
264  }
265  else
266  {
267  gizmo.box.color(simox::Color::red(255, 64));
268  }
269  }
270  } break;
271  }
272  }
273 
274 
275  VirtualRobot::RobotNodeSetPtr nodeSet;
276  VirtualRobot::RobotNodePtr tcp;
277 
279  };
280 
281 
283  {
285  {
286  gizmo.box.size({1000, 1000, 100});
287  }
288 
289  void visualize(viz::Client& arviz) override
290  {
291  gizmo.setLayer(arviz.layer(root->getName()));
292  gizmo.update();
293  }
294  void runIk(IkDemo::Robot& robot) override
295  {
296  robot.robot->setGlobalPose(gizmo.getCurrent());
297  }
298 
299  VirtualRobot::RobotNodePtr root;
300  };
301 
302 
303 
305  {
306  }
307 
309  {
310  }
311 
312 
314  robotFile("armar6_rt/robotmodel/Armar6-SH/Armar6-SH.xml"),
315  robotNodeSetNamesStr(simox::alg::join({"LeftArm", "RightArm"}, "; "))
316  {
317  }
318 
319 
320  std::vector<std::string> IkDemo::Params::robotNodeSetNames() const
321  {
322  bool trim = true;
323  return simox::alg::split(robotNodeSetNamesStr, ";", trim);
324  }
325 
326 
328  {
329  defs.optional(params.robotFile, "p.robotFile",
330  "The ArmarX data path to the robot XML file."
331  "\n For ARMAR-III: 'RobotAPI/robots/Armar3/ArmarIII.xml'"
332  "\n For ARMAR-6: 'armar6_rt/robotmodel/Armar6-SH/Armar6-SH.xml'"
333  );
334  defs.optional(params.robotNodeSetNamesStr, "p.robotNodeSetNames",
335  "Names of robot node sets for TCPs.");
336  }
337 
338 
340  {
341  this->stage.reset();
342 
343  {
345  robot.robot = VirtualRobot::RobotIO::loadRobot(params.robotFile, VirtualRobot::RobotIO::eStructure);
346 
347  robot.layer = remote.arviz->layer("Robot");
348 
349  robot.visu.file("", robot.robot->getFilename()).joints(robot.robot->getJointValues());
351  stage.add(robot.layer);
352  }
353 
354  {
355  auto root = robot.robot->getRootNode();
356 
357  std::unique_ptr<PlatformManipulator> manip = std::make_unique<PlatformManipulator>();
358 
359  manip->gizmo.initial = root->getGlobalPose();
360  manip->root = root;
361 
362  manipulators.emplace_back(std::move(manip));
363  }
364 
365  for (const std::string& rnsName : params.robotNodeSetNames())
366  {
367  ARMARX_CHECK(robot.robot->hasRobotNodeSet(rnsName)) << VAROUT(rnsName) << " must exist.";
368 
369  const auto& rns = robot.robot->getRobotNodeSet(rnsName);
370  const auto tcp = rns->getTCP();
371  ARMARX_CHECK_NOT_NULL(tcp) << VAROUT(rnsName) << " must have a TCP.";
372 
373  std::unique_ptr<TcpManipulator> manip = std::make_unique<TcpManipulator>();
374 
375  manip->gizmo.initial = tcp->getGlobalPose();
376  manip->tcp = tcp;
377  manip->nodeSet = rns;
378 
379  manipulators.emplace_back(std::move(manip));
380  }
381 
382  for (auto& manip : manipulators)
383  {
384  manip->visualize(remote.arviz.value());
385  stage.add(manip->gizmo.layer);
386  }
387 
388  runIk();
389 
390  viz::CommitResult result = remote.arviz->commit(stage);
391  ARMARX_VERBOSE << "Initial commit at revision: " << result.revision();
392  }
393 
394 
396  {
397  viz::CommitResult result = remote.arviz->commit(stage);
398 
399  // Reset the stage, so that it can be rebuild during the interaction handling
400  stage.reset();
401 
402  for (auto& manip : manipulators)
403  {
404  stage.requestInteraction(manip->gizmo.layer);
405  }
406 
407  viz::InteractionFeedbackRange interactions = result.interactions();
408 
409  bool updated = false;
410  for (viz::InteractionFeedback const& inter : interactions)
411  {
412  for (auto& manip : manipulators)
413  {
414  updated |= manip->handle(inter, &stage);
415  }
416  }
417  if (updated)
418  {
419  runIk();
420  }
421  }
422 
423 
425  {
426  for (auto& manip : manipulators)
427  {
428  manip->runIk(robot);
429  }
430 
431  robot.visu.pose(robot.robot->getGlobalPose());
432  robot.visu.joints(robot.robot->getJointValues());
433  stage.add(robot.layer);
434  }
435 
436 }
armar6::skills::components::armar6_ik_demo::TcpManipulator::visualize
void visualize(viz::Client &arviz) override
Definition: IkDemo.cpp:81
Client.h
armarx::ArmarXDataPath::resolvePath
static std::string resolvePath(const std::string &path, bool verbose=true)
Resolves environment variables and home paths and tries to make path absolute.
Definition: ArmarXDataPath.cpp:542
armarx::viz::StagedCommit::add
void add(Layer const &layer)
Stage a layer to be committed later via client.apply(*this)
Definition: Client.h:37
ARMARX_VERBOSE
#define ARMARX_VERBOSE
Definition: Logging.h:180
armarx::viz::PoseGizmo::box
viz::Box box
Definition: PoseGizmo.h:35
armar6::skills::components::armar6_ik_demo::Manipulator::runIk
virtual void runIk(IkDemo::Robot &robot)=0
armar6::skills::components::armar6_ik_demo::IkMethod
IkMethod
Definition: IkDemo.cpp:28
armar6::skills::components::armar6_ik_demo::IkDemo::Params::robotNodeSetNames
std::vector< std::string > robotNodeSetNames() const
Definition: IkDemo.cpp:320
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armar6::skills::components::armar6_ik_demo::IkDemo::defineProperties
void defineProperties(armarx::PropertyDefinitionContainer &defs)
Definition: IkDemo.cpp:327
armarx::viz::CommitResult::revision
long revision() const
Definition: Client.h:76
armarx::viz::interaction
InteractionDescription interaction()
Definition: ElementOps.h:101
armar6::skills::components::armar6_ik_demo::TcpManipulator::nodeSet
VirtualRobot::RobotNodeSetPtr nodeSet
Definition: IkDemo.cpp:275
armarx::SimpleDiffIK::Result::reached
bool reached
Definition: SimpleDiffIK.h:74
armarx::SimpleDiffIK
Definition: SimpleDiffIK.h:37
armarx::SimpleDiffIK::CalculateDiffIK
static Result CalculateDiffIK(const Eigen::Matrix4f targetPose, VirtualRobot::RobotNodeSetPtr rns, VirtualRobot::RobotNodePtr tcp=VirtualRobot::RobotNodePtr(), Parameters params=Parameters())
Definition: SimpleDiffIK.cpp:33
armarx::viz::Robot::file
Robot & file(std::string const &project, std::string const &filename)
Definition: Robot.h:14
ARMARX_CHECK_NOT_NULL
#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...
Definition: ExpressionException.h:206
armar6::skills::components::armar6_ik_demo::IkDemo::runIk
void runIk()
Definition: IkDemo.cpp:424
armar6::skills::components::armar6_ik_demo::IkDemo::robot
Robot robot
Definition: IkDemo.h:60
armar6::skills::components::armar6_ik_demo::TcpManipulator
Definition: IkDemo.cpp:66
armar6::skills::components::armar6_ik_demo::PlatformManipulator
Definition: IkDemo.cpp:282
armar6::skills::components::armar6_ik_demo::IkDemo::IkDemo
IkDemo()
Definition: IkDemo.cpp:304
armar6::skills::components::armar6_ik_demo::PlatformManipulator::visualize
void visualize(viz::Client &arviz) override
Definition: IkDemo.cpp:289
armar6::skills::components::armar6_ik_demo::IkDemo::Params::robotFile
std::string robotFile
Definition: IkDemo.h:24
armar6::skills::components::armar6_ik_demo::PlatformManipulator::runIk
void runIk(IkDemo::Robot &robot) override
Definition: IkDemo.cpp:294
armar6::skills::components::armar6_ik_demo::TcpManipulator::method
IkMethod method
Definition: IkDemo.cpp:278
armar6::skills::components::armar6_ik_demo::TcpManipulator::handle
bool handle(viz::InteractionFeedback const &interaction, viz::StagedCommit *stage) override
Definition: IkDemo.cpp:87
armar6::skills::components::armar6_ik_demo::PlatformManipulator::root
VirtualRobot::RobotNodePtr root
Definition: IkDemo.cpp:299
armarx::viz::Layer::add
void add(ElementT const &element)
Definition: Layer.h:29
armarx::viz::StagedCommit
A staged commit prepares multiple layers to be committed.
Definition: Client.h:31
armar6::skills::components::armar6_ik_demo::IkDemo::update
void update()
Definition: IkDemo.cpp:395
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::SimpleDiffIK::Result::jointValues
Eigen::VectorXf jointValues
Definition: SimpleDiffIK.h:69
armarx::viz::StagedCommit::reset
void reset()
Reset all staged layers and interaction requests.
Definition: Client.h:64
armarx::viz::Robot::joints
Robot & joints(std::map< std::string, float > const &values)
Definition: Robot.h:57
armar6::skills::components::armar6_ik_demo::Manipulator::~Manipulator
virtual ~Manipulator()
Definition: IkDemo.cpp:45
armar6::skills::components::armar6_ik_demo::IkDemo::Robot::layer
armarx::viz::Layer layer
Definition: IkDemo.h:36
armar6::skills::components::armar6_ik_demo::Manipulator::handle
virtual bool handle(viz::InteractionFeedback const &interaction, viz::StagedCommit *stage)
Definition: IkDemo.cpp:49
armarx::viz::Layer::data_
data::LayerUpdate data_
Definition: Layer.h:53
armarx::viz::CommitResult::interactions
InteractionFeedbackRange interactions() const
Definition: Client.h:81
armar6::skills::components::armar6_ik_demo::IkDemo::params
Params params
Definition: IkDemo.h:59
armarx::viz::StagedCommit::requestInteraction
void requestInteraction(Layer const &layer)
Request interaction feedback for a particular layer.
Definition: Client.h:55
armar6::skills::components::armar6_ik_demo::PlatformManipulator::PlatformManipulator
PlatformManipulator()
Definition: IkDemo.cpp:284
SimpleDiffIK.h
armar6::skills::components::armar6_ik_demo::IkMethod::SimpleDiffIk
@ SimpleDiffIk
armarx::viz::InteractionFeedbackRange
Definition: Interaction.h:135
armarx::viz::CommitResult
Definition: Client.h:74
armarx::viz::InteractionFeedback
Definition: Interaction.h:57
armarx::PropertyDefinitionContainer
PropertyDefinitionContainer.
Definition: PropertyDefinitionContainer.h:53
armar6::skills::components::armar6_ik_demo::TcpManipulator::tcp
VirtualRobot::RobotNodePtr tcp
Definition: IkDemo.cpp:276
armar6::skills::components::armar6_ik_demo::IkDemo::Params::robotNodeSetNamesStr
std::string robotNodeSetNamesStr
Definition: IkDemo.h:25
armarx::viz::PoseGizmo::update
void update()
Definition: PoseGizmo.cpp:22
armar6::skills::components::armar6_ik_demo::Manipulator
Definition: IkDemo.cpp:39
armarx::red
QColor red()
Definition: StyleSheets.h:76
armarx::viz::PoseGizmo::getCurrent
Eigen::Matrix4f getCurrent() const
Definition: PoseGizmo.cpp:95
armar6::skills::components::armar6_ik_demo::Manipulator::visualize
virtual void visualize(viz::Client &arviz)=0
PoseGizmo.h
IkDemo.h
armar6::skills::components::armar6_ik_demo::IkDemo::start
void start()
Definition: IkDemo.cpp:339
armarx::viz::PoseGizmo::handleInteraction
bool handleInteraction(const viz::InteractionFeedback &interaction, viz::StagedCommit *stage)
Definition: PoseGizmo.cpp:37
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::SimpleDiffIK::Result
Definition: SimpleDiffIK.h:67
armar6::skills::components::armar6_ik_demo::IkDemo::manipulators
std::vector< std::unique_ptr< Manipulator > > manipulators
Definition: IkDemo.h:64
armar6::skills::components::armar6_ik_demo::IkDemo::stage
armarx::viz::StagedCommit stage
Definition: IkDemo.h:62
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
PropertyDefinitionContainer.h
armarx::viz::ElementOps::pose
DerivedT & pose(Eigen::Matrix4f const &pose)
Definition: ElementOps.h:159
armarx::PropertyDefinitionContainer::optional
decltype(auto) optional(PropertyType &setter, const std::string &name, const std::string &description="", PropertyDefinitionBase::PropertyConstness constness=PropertyDefinitionBase::eConstant)
Definition: PropertyDefinitionContainer.h:84
armar6::skills::components::armar6_ik_demo::IkMethod::CompositeDiffIk
@ CompositeDiffIk
VAROUT
#define VAROUT(x)
Definition: StringHelpers.h:182
armarx::transform
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT > >
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition: algorithm.h:315
armarx::viz::Box::size
Box & size(Eigen::Vector3f const &s)
Definition: Elements.h:55
armarx::viz::ElementOps::color
DerivedT & color(Color color)
Definition: ElementOps.h:195
armar6::skills::components::armar6_ik_demo::Manipulator::gizmo
viz::PoseGizmo gizmo
Definition: IkDemo.cpp:62
armarx::viz::PoseGizmo
Definition: PoseGizmo.h:11
armar6::skills::components::armar6_ik_demo::IkDemo::Remote::arviz
std::optional< armarx::viz::Client > arviz
Definition: IkDemo.h:30
armar6::skills::components::armar6_ik_demo::IkDemo::Robot::robot
VirtualRobot::RobotPtr robot
Definition: IkDemo.h:34
armar6::skills::components::armar6_ik_demo::IkDemo::remote
Remote remote
Definition: IkDemo.h:58
armar6::skills::components::armar6_ik_demo::TcpManipulator::runIk
void runIk(IkDemo::Robot &robot) override
Definition: IkDemo.cpp:118
armar6::skills::components::armar6_ik_demo::IkMethodNames
const simox::meta::EnumNames< IkMethod > IkMethodNames
Definition: IkDemo.cpp:33
armarx::navigation::core::Position
Eigen::Vector3f Position
Definition: basic_types.h:36
armar6::skills::components::armar6_ik_demo::IkDemo::Robot
Definition: IkDemo.h:32
armarx::viz::PoseGizmo::setLayer
void setLayer(const viz::Layer &layer)
Definition: PoseGizmo.cpp:15
armarx::viz::Client::layer
Layer layer(std::string const &name) const
Definition: Client.cpp:73
armarx::viz::PoseGizmo::layer
viz::Layer layer
Definition: PoseGizmo.h:33
armarx::viz::Client
Definition: Client.h:109
armar6::skills::components::armar6_ik_demo::IkDemo::Params::Params
Params()
Definition: IkDemo.cpp:313
ArmarXDataPath.h
armar6::skills::components::armar6_ik_demo::TcpManipulator::TcpManipulator
TcpManipulator()
Definition: IkDemo.cpp:68
simox
Definition: Impl.cpp:40
Left
bool Left(const point2d &a, const point2d &b, const point2d &c)
Definition: gdiam.cpp:1617
armar6::skills::components::armar6_ik_demo
Definition: ComponentInterface.ice:27
armarx::viz
This file is part of ArmarX.
Definition: ArVizStorage.cpp:370
armar6::skills::components::armar6_ik_demo::IkDemo::~IkDemo
~IkDemo()
Definition: IkDemo.cpp:308
armar6::skills::components::armar6_ik_demo::IkDemo::Robot::visu
armarx::viz::Robot visu
Definition: IkDemo.h:37
armar6::skills::components::armar6_ik_demo::Manipulator::Manipulator
Manipulator()
Definition: IkDemo.cpp:41
armarx::split
std::vector< std::string > split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
Definition: StringHelpers.cpp:36