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