SimulatedWorld.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2013-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package ArmarXSimulation::Simulator
19  * @author Nikolaus Vahrenkamp ( vahrenkamp at kit dot edu )
20  * @date 2016
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 
25 #pragma once
26 
27 
28 // just needed for SceneData
30 
33 
34 #include <ArmarXSimulation/interface/simulator/SimulatorInterface.h>
35 
36 // only needed for contact info, could be replaced with a generic struct
37 #include <mutex>
38 
39 #include <Eigen/Core>
40 #include <Eigen/Geometry>
41 
42 #include <SimDynamics/DynamicsEngine/DynamicsEngine.h>
43 
44 namespace armarx
45 {
46 
48  {
50  {
51  currentForce.setZero();
52  currentTorque.setZero();
53  enable = true;
54  }
55 
56  std::string robotName;
57  std::string robotNodeName;
58  std::string sensorName;
59  VirtualRobot::ForceTorqueSensorPtr
60  ftSensor; // be sure to just access this object when the engine mutex is set!
61  bool enable;
62  Eigen::Vector3f currentForce;
63  Eigen::Vector3f currentTorque;
64 
65  std::string topicName;
66  SimulatorForceTorqueListenerInterfacePrx prx;
67  };
68 
69  using ForceTorqueInfoPtr = std::shared_ptr<ForceTorqueInfo>;
70 
71  struct RobotInfo
72  {
73  public:
74  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
75 
77  {
78  linearVelocity.setZero();
79  angularVelocity.setZero();
80  pose.setIdentity();
81  }
82 
84  std::map<std::string, Eigen::Matrix4f> robotNodePoses;
85 
86  // the topic on which we publish the robot's data
87  std::string robotName;
88  std::string robotTopicName;
89  SimulatorRobotListenerInterfacePrx simulatorRobotListenerPrx;
90 
91  // current values to be reported
95 
96  Eigen::Vector3f linearVelocity;
97  Eigen::Vector3f angularVelocity;
98 
99  std::vector<ForceTorqueInfo> forceTorqueSensors;
100  };
101 
102  using RobotInfoPtr = std::shared_ptr<RobotInfo>;
103 
104  /*!
105  * \brief The SimulatedWorldData class This data is queried by the simulated in order to offer it via topics.
106  */
108  {
109  public:
110  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
111 
112  std::vector<RobotInfo> robots;
114  // todo: objects (currently no need to populate objects via this channel)
115  };
116 
117  using SimualtedWorldDataPtr = std::shared_ptr<SimulatedWorldData>;
118 
119  template <typename>
120  struct argType;
121 
122  template <typename R, typename A>
123  struct argType<R (SimDynamics::DynamicsEngine::*)(A)>
124  {
125  using type = A;
126  };
127 
128  /*!
129  * \brief The SimulatedWorld class encapsulates the whole physics simulation and the corresponding data
130  *
131  */
132  class SimulatedWorld : public Logging
133  {
134  public:
135  SimulatedWorld();
136  virtual ~SimulatedWorld() override = default;
137 
138 
139  // needs to be implemented by derived classes
140  virtual void actuateRobotJoints(const std::string& robotName,
141  const std::map<std::string, float>& angles,
142  const std::map<std::string, float>& velocities) = 0;
143  virtual void actuateRobotJointsPos(const std::string& robotName,
144  const std::map<std::string, float>& angles) = 0;
145  virtual void actuateRobotJointsVel(const std::string& robotName,
146  const std::map<std::string, float>& velocities) = 0;
147  virtual void actuateRobotJointsTorque(const std::string& robotName,
148  const std::map<std::string, float>& torques) = 0;
149  virtual void setRobotPose(const std::string& robotName,
150  const Eigen::Matrix4f& globalPose) = 0;
151 
152  virtual void applyForceRobotNode(const std::string& robotName,
153  const std::string& robotNodeName,
154  const Eigen::Vector3f& force) = 0;
155  virtual void applyTorqueRobotNode(const std::string& robotName,
156  const std::string& robotNodeName,
157  const Eigen::Vector3f& torque) = 0;
158 
159  virtual void applyForceObject(const std::string& objectName,
160  const Eigen::Vector3f& force) = 0;
161  virtual void applyTorqueObject(const std::string& objectName,
162  const Eigen::Vector3f& torque) = 0;
163 
164  virtual bool hasObject(const std::string& instanceName) = 0;
165 
166  virtual std::map<std::string, float> getRobotJointAngles(const std::string& robotName) = 0;
167  virtual float getRobotJointAngle(const std::string& robotName,
168  const std::string& nodeName) = 0;
169  virtual std::map<std::string, float>
170  getRobotJointVelocities(const std::string& robotName) = 0;
171  virtual float getRobotJointVelocity(const std::string& robotName,
172  const std::string& nodeName) = 0;
173  virtual std::map<std::string, float> getRobotJointTorques(const std::string& robotName) = 0;
174  virtual ForceTorqueDataSeq getRobotForceTorqueSensors(const std::string& robotName) = 0;
175 
176  virtual float getRobotJointLimitLo(const std::string& robotName,
177  const std::string& nodeName) = 0;
178  virtual float getRobotJointLimitHi(const std::string& robotName,
179  const std::string& nodeName) = 0;
180  virtual Eigen::Matrix4f getRobotPose(const std::string& robotName) = 0;
181 
182  virtual float getRobotMaxTorque(const std::string& robotName,
183  const std::string& nodeName) = 0;
184  virtual void setRobotMaxTorque(const std::string& robotName,
185  const std::string& nodeName,
186  float maxTorque) = 0;
187 
188  virtual Eigen::Matrix4f getRobotNodePose(const std::string& robotName,
189  const std::string& robotNodeName) = 0;
190 
191  virtual Eigen::Vector3f getRobotLinearVelocity(const std::string& robotName,
192  const std::string& nodeName) = 0;
193  virtual Eigen::Vector3f getRobotAngularVelocity(const std::string& robotName,
194  const std::string& nodeName) = 0;
195 
196  virtual void setRobotLinearVelocity(const std::string& robotName,
197  const std::string& robotNodeName,
198  const Eigen::Vector3f& vel) = 0;
199  virtual void setRobotAngularVelocity(const std::string& robotName,
200  const std::string& robotNodeName,
201  const Eigen::Vector3f& vel) = 0;
202  virtual void setRobotLinearVelocityRobotRootFrame(const std::string& robotName,
203  const std::string& robotNodeName,
204  const Eigen::Vector3f& vel) = 0;
205  virtual void setRobotAngularVelocityRobotRootFrame(const std::string& robotName,
206  const std::string& robotNodeName,
207  const Eigen::Vector3f& vel) = 0;
208 
209  virtual Eigen::Matrix4f getObjectPose(const std::string& objectName) = 0;
210 
211  virtual void setObjectPose(const std::string& objectName,
212  const Eigen::Matrix4f& globalPose) = 0;
213  virtual void activateObject(const std::string& objectName);
214 
215 
216  virtual VirtualRobot::RobotPtr getRobot(const std::string& robotName) = 0;
217  virtual std::map<std::string, VirtualRobot::RobotPtr> getRobots() = 0;
218  virtual bool hasRobot(const std::string& robotName) = 0;
219  virtual bool hasRobotNode(const std::string& robotName,
220  const std::string& robotNodeName) = 0;
221  virtual float getRobotMass(const std::string& robotName) = 0;
222 
223  virtual armarx::DistanceInfo getRobotNodeDistance(const std::string& robotName,
224  const std::string& robotNodeName1,
225  const std::string& robotNodeName2) = 0;
226  virtual armarx::DistanceInfo getDistance(const std::string& robotName,
227  const std::string& robotNodeName,
228  const std::string& worldObjectName) = 0;
229 
230 
231  //! create a joint
232  virtual void objectGrasped(const std::string& robotName,
233  const std::string& robotNodeName,
234  const std::string& objectName);
235 
236  //! remove a joint
237  virtual void objectReleased(const std::string& robotName,
238  const std::string& robotNodeName,
239  const std::string& objectName);
240 
241 
242  virtual std::vector<SimDynamics::DynamicsEngine::DynamicsContactInfo> copyContacts() = 0;
243 
244  /**
245  * Load and add a robot
246  */
247  /*!
248  * \brief addRobot Load and add int to the scene
249  * \param filename The absolute filename
250  * \param pose The initial pose (4x4matrix, in MM)
251  * \param filenameLocal The local filename (i.e. not the absolute one)
252  * \param pid_p PID control paramters, currently all joints use the same pid values
253  * \param pid_i PID control paramters, currently all joints use the same pid values
254  * \param pid_d PID control paramters, currently all joints use the same pid values
255  * \param staticRobot If set, the robot is added as a static/fixed kinematic object which does not move due to physics (it may be actuated by setting the position of the joints)
256  * \param scaling The scaling of the robot (1 = no scaling).
257  * \param colModel Use the collision model for visualization.
258  * \return
259  */
260  virtual bool addRobot(std::string& robotInstanceName,
261  const std::string& filename,
263  const std::string& filenameLocal = "",
264  double pid_p = 10.0,
265  double pid_i = 0,
266  double pid_d = 0,
267  bool staticRobot = false,
268  float scaling = 1.0f,
269  bool colModel = false,
270  const std::map<std::string, float>& initConfig = {},
271  bool selfCollisions = false);
272  virtual bool addRobot(VirtualRobot::RobotPtr robot,
273  double pid_p,
274  double pid_i,
275  double pid_d,
276  const std::string& filename,
277  bool staticRobot = false,
278  float scaling = 1.0f,
279  bool colModel = false,
280  bool selfCollisions = false);
282 
283  /*!
284  * \brief toFramedPose Constructs a framed pose
285  * \param globalPose
286  * \param robotName
287  * \param frameName
288  * \return
289  */
290  virtual FramedPosePtr toFramedPose(const Eigen::Matrix4f& globalPose,
291  const std::string& robotName,
292  const std::string& frameName) = 0;
293 
294  /**
295  * Load and add an Obstacle (VirtualRobot xml file).
296  * \param filename The obstacle xml file
297  * \param pose The inital pose (mm)
298  * \param simType eUnknown: use sim type of SceneObject,
299  to overwrite internal simType use:
300  eStatic: cannot move, but collide;
301  eKinematic: can be moved, but no dynamics;
302  eDynamic: full dynamic simulation
303  */
304  virtual bool addObstacle(const std::string& filename,
306  VirtualRobot::SceneObject::Physics::SimulationType simType =
307  VirtualRobot::SceneObject::Physics::eUnknown,
308  const std::string& localFilename = "");
309 
311  VirtualRobot::SceneObject::Physics::SimulationType simType =
312  VirtualRobot::SceneObject::Physics::eUnknown,
313  const std::string& filename = "",
314  const std::string& objectClassName = "",
315  ObjectVisuPrimitivePtr primitiveData = {},
316  const std::string& project = "");
317 
318  /**
319  * Load and add an Scene (VirtualRobot xml file).
320  * \param filename The scene xml fil
321  * \param simType eStatic: cannot move, but collide; eKinematic: can be moved, but no dynamics; eDynamic: full dynamic simulation
322  */
323  virtual bool addScene(const std::string& filename,
324  VirtualRobot::SceneObject::Physics::SimulationType simType =
325  VirtualRobot::SceneObject::Physics::eUnknown);
326  virtual bool addScene(VirtualRobot::ScenePtr scene,
327  VirtualRobot::SceneObject::Physics::SimulationType simType =
328  VirtualRobot::SceneObject::Physics::eUnknown);
329 
330  virtual void
331  setRobotNodeSimType(const std::string& robotName,
332  const std::string& robotNodeName,
333  VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
334  virtual void
335  setObjectSimType(const std::string& objectName,
336  VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
337  virtual std::vector<VirtualRobot::SceneObjectPtr> getObjects() = 0;
338 
339  /**
340  * Perform one simulation step. Calculates the delta update time from the time that has passed since the last call.
341  * This updates all models.
342  */
343  virtual void stepPhysicsRealTime() = 0;
344 
345  /**
346  * Perform one simulation step.
347  * This updates all models.
348  */
349  virtual void stepPhysicsFixedTimeStep() = 0;
350 
351  /*!
352  * \brief
353  * \return The number of steps * the timestep in MS
354  */
355  virtual int getFixedTimeStepMS() = 0;
356 
357  using setMutexFunc = decltype(&SimDynamics::DynamicsEngine::setMutex);
359  using MutexType = MutexPtrType::element_type;
360 
361  using ScopedRecursiveLock = std::scoped_lock<MutexType>;
362  using ScopedRecursiveLockPtr = std::shared_ptr<ScopedRecursiveLock>;
363 
364 
365  virtual ScopedRecursiveLockPtr getScopedEngineLock(const std::string& callStr);
366 
367  virtual ScopedRecursiveLockPtr getScopedSyncLock(const std::string& callStr);
368 
369  virtual void enableLogging(const std::string& robotName, const std::string& logFile);
370 
371  virtual float getSimTime();
372  virtual float getSyncEngineTime();
373 
374  virtual bool removeObstacles();
375  virtual bool removeRobots();
376  virtual bool removeRobot(const std::string& robotName);
377 
378  virtual bool removeObstacle(const std::string& name);
379 
380 
381  virtual double getCurrentSimTime();
382  virtual void resetSimTime();
383 
384  virtual int getRobotJointAngleCount(); //Data->robotJointAngles.size();
385  virtual int getContactCount(); //contacts.size();
386  virtual int getObjectCount(); //objects.size();
387 
388 
389  // protect access with mutex or use copyReportData
391 
393 
394  /*!
395  * \brief resetData Clears all data
396  */
397  virtual bool resetData();
398 
399  /*!
400  * \brief copySceneVisuData Creates a copy of the visualization data
401  * \return The copy
402  */
403  virtual SceneVisuData copySceneVisuData();
404 
405  /*!
406  * \brief synchronizeSimulationData Update the sim data according to the internal physics models.
407  * \return true on success.
408  */
409  virtual bool synchronizeSimulationData();
410 
411  virtual void updateContacts(bool enable);
412 
413  virtual void setupFloor(bool enable, const std::string& floorTexture);
414 
415  /*!
416  * \brief getSimulationStepDuration
417  * \return The requested duration of the last simulation step (in ms)
418  */
419  virtual float getSimulationStepDuration();
420 
421  /*!
422  * \brief getSimulationStepTimeMeasured
423  * \return How long it took to simulate the last sim step.
424  */
425  virtual float getSimulationStepTimeMeasured();
426 
427  virtual std::vector<std::string> getObstacleNames() = 0;
428  virtual std::vector<std::string> getRobotNames() = 0;
429 
430 
431  protected:
432  // needs to be implemented in derived classes
433  virtual bool
435  VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
436  virtual bool removeObstacleEngine(const std::string& name) = 0;
437 
438  virtual bool addRobotEngine(VirtualRobot::RobotPtr robot,
439  double pid_p,
440  double pid_i,
441  double pid_d,
442  const std::string& filename,
443  bool staticRobot,
444  bool selfCollisions) = 0;
445  virtual bool removeRobotEngine(const std::string& robotName) = 0;
446 
447 
448  //! create a joint
449  virtual bool objectGraspedEngine(const std::string& robotName,
450  const std::string& robotNodeName,
451  const std::string& objectName,
452  Eigen::Matrix4f& storeLocalTransform) = 0;
453  //! remove a joint
454  virtual bool objectReleasedEngine(const std::string& robotName,
455  const std::string& robotNodeName,
456  const std::string& objectName) = 0;
457 
459  virtual void setupFloorEngine(bool enable, const std::string& floorTexture) = 0;
460  virtual bool synchronizeSimulationDataEngine() = 0;
461 
462 
463  // synchronize visu data
464  virtual bool synchronizeObjects() = 0;
465 
466  virtual bool
467  synchronizeRobotNodePoses(const std::string& robotName,
468  std::map<std::string, armarx::PoseBasePtr>& objMap) = 0;
469 
470  virtual bool getRobotStatus(const std::string& robotName,
474  Eigen::Vector3f& linearVelocity,
475  Eigen::Vector3f& angularVelocity) = 0;
476 
477  virtual bool updateForceTorqueSensor(ForceTorqueInfo& ftInfo) = 0;
478 
479  virtual bool
481  std::map<std::string, armarx::PoseBasePtr>& objMap) = 0;
482 
483  // synchronize visu data (and robot report data for topics)
484  virtual bool synchronizeRobots();
485 
486  double currentSimTimeSec = 0.0;
487  double currentSyncTimeSec = 0.0;
488 
491 
493 
495  {
496  std::string robotName;
497  std::string robotNodeName;
498  std::string objectName;
500  };
501 
502  std::vector<GraspingInfo> attachedObjects;
503 
504  SceneVisuData simVisuData;
507  float simTimeStepMS; // simulation step in MS
508 
509 
511 
513 
514 
515  std::map<std::string, int> engineMtxAccCalls;
516  std::map<std::string, float> engineMtxAccTime;
517  std::map<std::string, IceUtil::Time> engineMtxLastTime;
518  std::map<std::string, int> syncMtxAccCalls;
519  std::map<std::string, float> syncMtxAccTime;
520  std::map<std::string, IceUtil::Time> syncMtxLastTime;
521  };
522 
523  using SimulatedWorldPtr = std::shared_ptr<SimulatedWorld>;
524 } // namespace armarx
armarx::SimulatedWorld::getRobotNodeDistance
virtual armarx::DistanceInfo getRobotNodeDistance(const std::string &robotName, const std::string &robotNodeName1, const std::string &robotNodeName2)=0
armarx::SimulatedWorld::simStepExecutionDurationMS
float simStepExecutionDurationMS
Definition: SimulatedWorld.h:510
armarx::SimulatedWorldData::robots
EIGEN_MAKE_ALIGNED_OPERATOR_NEW std::vector< RobotInfo > robots
Definition: SimulatedWorld.h:112
armarx::SimulatedWorld::MutexPtrType
typename argType< setMutexFunc >::type MutexPtrType
Definition: SimulatedWorld.h:358
armarx::SimulatedWorld::getFixedTimeStepMS
virtual int getFixedTimeStepMS()=0
armarx::SimulatedWorld::adaptRobotToWorld
virtual VirtualRobot::RobotPtr adaptRobotToWorld(VirtualRobot::RobotPtr)
Definition: SimulatedWorld.cpp:460
armarx::ForceTorqueInfo::sensorName
std::string sensorName
Definition: SimulatedWorld.h:58
armarx::RobotInfo::jointTorques
NameValueMap jointTorques
Definition: SimulatedWorld.h:94
armarx::SimulatedWorld::synchronizeSceneObjectPoses
virtual bool synchronizeSceneObjectPoses(VirtualRobot::SceneObjectPtr currentObjEngine, std::map< std::string, armarx::PoseBasePtr > &objMap)=0
armarx::SimulatedWorld::simVisuData
SceneVisuData simVisuData
Definition: SimulatedWorld.h:504
armarx::SimulatedWorld::setMutexFunc
decltype(&SimDynamics::DynamicsEngine::setMutex) setMutexFunc
Definition: SimulatedWorld.h:357
armarx::SimulatedWorld::SimulatedWorld
SimulatedWorld()
Definition: SimulatedWorld.cpp:54
armarx::SimulatedWorld::objectGraspedEngine
virtual bool objectGraspedEngine(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName, Eigen::Matrix4f &storeLocalTransform)=0
create a joint
armarx::SimulatedWorld::GraspingInfo::node2objectTransformation
Eigen::Matrix4f node2objectTransformation
Definition: SimulatedWorld.h:499
armarx::SimulatedWorld::getScopedSyncLock
virtual ScopedRecursiveLockPtr getScopedSyncLock(const std::string &callStr)
Definition: SimulatedWorld.cpp:749
armarx::SimulatedWorld::collectContacts
bool collectContacts
Definition: SimulatedWorld.h:492
armarx::ForceTorqueInfo::robotName
std::string robotName
Definition: SimulatedWorld.h:56
armarx::SimulatedWorld::getRobotForceTorqueSensors
virtual ForceTorqueDataSeq getRobotForceTorqueSensors(const std::string &robotName)=0
armarx::SimulatedWorld::setObjectPose
virtual void setObjectPose(const std::string &objectName, const Eigen::Matrix4f &globalPose)=0
armarx::SimulatedWorld::addRobot
virtual bool addRobot(std::string &robotInstanceName, const std::string &filename, Eigen::Matrix4f pose=Eigen::Matrix4f::Identity(), const std::string &filenameLocal="", double pid_p=10.0, double pid_i=0, double pid_d=0, bool staticRobot=false, float scaling=1.0f, bool colModel=false, const std::map< std::string, float > &initConfig={}, bool selfCollisions=false)
Load and add a robot.
Definition: SimulatedWorld.cpp:337
armarx::SimulatedWorld::~SimulatedWorld
virtual ~SimulatedWorld() override=default
armarx::SimulatedWorld::updateContacts
virtual void updateContacts(bool enable)
Definition: SimulatedWorld.cpp:934
armarx::SimulatedWorld::synchronizeMutex
MutexPtrType synchronizeMutex
Definition: SimulatedWorld.h:490
armarx::RobotInfo::jointVelocities
NameValueMap jointVelocities
Definition: SimulatedWorld.h:93
armarx::SimulatedWorld::hasObject
virtual bool hasObject(const std::string &instanceName)=0
armarx::SimulatedWorld::getRobotJointAngleCount
virtual int getRobotJointAngleCount()
Definition: SimulatedWorld.cpp:947
armarx::SimulatedWorld::applyForceRobotNode
virtual void applyForceRobotNode(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &force)=0
armarx::SimulatedWorld::setRobotPose
virtual void setRobotPose(const std::string &robotName, const Eigen::Matrix4f &globalPose)=0
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
Pose.h
armarx::SimulatedWorld::engineMtxAccCalls
std::map< std::string, int > engineMtxAccCalls
Definition: SimulatedWorld.h:515
armarx::RobotInfoPtr
std::shared_ptr< RobotInfo > RobotInfoPtr
Definition: SimulatedWorld.h:102
armarx::ForceTorqueInfo::topicName
std::string topicName
Definition: SimulatedWorld.h:65
armarx::SimulatedWorld::maxRealTimeSimSpeed
float maxRealTimeSimSpeed
Definition: SimulatedWorld.h:506
armarx::SimulatedWorld::GraspingInfo::robotName
std::string robotName
Definition: SimulatedWorld.h:496
armarx::SimulatedWorld::applyTorqueObject
virtual void applyTorqueObject(const std::string &objectName, const Eigen::Vector3f &torque)=0
armarx::RobotInfo::angularVelocity
Eigen::Vector3f angularVelocity
Definition: SimulatedWorld.h:97
armarx::SimulatedWorldData::timestamp
IceUtil::Time timestamp
Definition: SimulatedWorld.h:113
armarx::ForceTorqueInfo
Definition: SimulatedWorld.h:47
armarx::SimulatedWorld::setRobotMaxTorque
virtual void setRobotMaxTorque(const std::string &robotName, const std::string &nodeName, float maxTorque)=0
armarx::SimulatedWorld::synchronizeRobots
virtual bool synchronizeRobots()
Definition: SimulatedWorld.cpp:824
armarx::SimulatedWorld::enableLogging
virtual void enableLogging(const std::string &robotName, const std::string &logFile)
Definition: SimulatedWorld.cpp:806
armarx::SimulatedWorld::synchronizeSimulationData
virtual bool synchronizeSimulationData()
synchronizeSimulationData Update the sim data according to the internal physics models.
Definition: SimulatedWorld.cpp:882
armarx::SimulatedWorld::setRobotAngularVelocityRobotRootFrame
virtual void setRobotAngularVelocityRobotRootFrame(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
armarx::RobotInfo::robotName
std::string robotName
Definition: SimulatedWorld.h:87
armarx::SimulatedWorld
The SimulatedWorld class encapsulates the whole physics simulation and the corresponding data.
Definition: SimulatedWorld.h:132
armarx::SimulatedWorld::simTimeStepMS
float simTimeStepMS
Definition: SimulatedWorld.h:507
armarx::SimulatedWorld::getCurrentSimTime
virtual double getCurrentSimTime()
Definition: SimulatedWorld.cpp:82
armarx::SimulatedWorld::attachedObjects
std::vector< GraspingInfo > attachedObjects
Definition: SimulatedWorld.h:502
armarx::SimulatedWorld::setRobotLinearVelocity
virtual void setRobotLinearVelocity(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
armarx::SimulatedWorld::addObstacle
virtual bool addObstacle(const std::string &filename, const Eigen::Matrix4f &pose=Eigen::Matrix4f::Identity(), VirtualRobot::SceneObject::Physics::SimulationType simType=VirtualRobot::SceneObject::Physics::eUnknown, const std::string &localFilename="")
Load and add an Obstacle (VirtualRobot xml file).
Definition: SimulatedWorld.cpp:603
armarx::SimulatedWorld::resetData
virtual bool resetData()
resetData Clears all data
Definition: SimulatedWorld.cpp:72
armarx::SimulatedWorld::getSimTime
virtual float getSimTime()
Definition: SimulatedWorld.cpp:812
armarx::SimulatedWorld::getRobotMaxTorque
virtual float getRobotMaxTorque(const std::string &robotName, const std::string &nodeName)=0
scene3D::ScenePtr
std::shared_ptr< Scene > ScenePtr
Definition: PointerDefinitions.h:36
armarx::SimulatedWorld::objectReleasedEngine
virtual bool objectReleasedEngine(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName)=0
remove a joint
armarx::SimulatedWorld::synchronizeDurationMS
float synchronizeDurationMS
Definition: SimulatedWorld.h:512
armarx::RobotInfo::robotNodePoses
std::map< std::string, Eigen::Matrix4f > robotNodePoses
Definition: SimulatedWorld.h:84
armarx::SimualtedWorldDataPtr
std::shared_ptr< SimulatedWorldData > SimualtedWorldDataPtr
Definition: SimulatedWorld.h:117
armarx::SimulatedWorld::synchronizeRobotNodePoses
virtual bool synchronizeRobotNodePoses(const std::string &robotName, std::map< std::string, armarx::PoseBasePtr > &objMap)=0
armarx::SimulatedWorld::updateForceTorqueSensor
virtual bool updateForceTorqueSensor(ForceTorqueInfo &ftInfo)=0
armarx::SimulatedWorld::removeRobotEngine
virtual bool removeRobotEngine(const std::string &robotName)=0
armarx::SimulatedWorld::getRobotNodePose
virtual Eigen::Matrix4f getRobotNodePose(const std::string &robotName, const std::string &robotNodeName)=0
armarx::SimulatedWorld::getRobotNames
virtual std::vector< std::string > getRobotNames()=0
armarx::SimulatedWorld::simReportData
SimulatedWorldData simReportData
Definition: SimulatedWorld.h:505
project
std::string project
Definition: VisualizationRobot.cpp:85
armarx::SimulatedWorld::activateObject
virtual void activateObject(const std::string &objectName)
Definition: SimulatedWorld.cpp:66
armarx::SimulatedWorld::getScopedEngineLock
virtual ScopedRecursiveLockPtr getScopedEngineLock(const std::string &callStr)
Definition: SimulatedWorld.cpp:716
armarx::ForceTorqueInfo::robotNodeName
std::string robotNodeName
Definition: SimulatedWorld.h:57
armarx::ForceTorqueInfo::prx
SimulatorForceTorqueListenerInterfacePrx prx
Definition: SimulatedWorld.h:66
IceInternal::Handle< FramedPose >
armarx::SimulatedWorld::objectReleased
virtual void objectReleased(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName)
remove a joint
Definition: SimulatedWorld.cpp:208
armarx::SimulatedWorld::getFloor
virtual VirtualRobot::SceneObjectPtr getFloor()=0
armarx::SimulatedWorld::copyReportData
virtual SimulatedWorldData copyReportData()
Definition: SimulatedWorld.cpp:120
armarx::SimulatedWorld::syncMtxAccCalls
std::map< std::string, int > syncMtxAccCalls
Definition: SimulatedWorld.h:518
armarx::SimulatedWorld::getRobotPose
virtual Eigen::Matrix4f getRobotPose(const std::string &robotName)=0
armarx::SimulatedWorld::addObstacleEngine
virtual bool addObstacleEngine(VirtualRobot::SceneObjectPtr o, VirtualRobot::SceneObject::Physics::SimulationType simType)=0
armarx::SimulatedWorld::getObstacleNames
virtual std::vector< std::string > getObstacleNames()=0
armarx::SimulatedWorld::getSyncEngineTime
virtual float getSyncEngineTime()
Definition: SimulatedWorld.cpp:818
armarx::RobotInfo::jointAngles
NameValueMap jointAngles
Definition: SimulatedWorld.h:92
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
armarx::SimulatedWorld::removeObstacle
virtual bool removeObstacle(const std::string &name)
Definition: SimulatedWorld.cpp:301
armarx::SimulatedWorld::setRobotAngularVelocity
virtual void setRobotAngularVelocity(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
armarx::SimulatedWorld::toFramedPose
virtual FramedPosePtr toFramedPose(const Eigen::Matrix4f &globalPose, const std::string &robotName, const std::string &frameName)=0
toFramedPose Constructs a framed pose
armarx::ForceTorqueInfo::currentForce
Eigen::Vector3f currentForce
Definition: SimulatedWorld.h:62
armarx::ForceTorqueInfo::currentTorque
Eigen::Vector3f currentTorque
Definition: SimulatedWorld.h:63
armarx::SimulatedWorld::GraspingInfo
Definition: SimulatedWorld.h:494
armarx::SimulatedWorld::getRobotAngularVelocity
virtual Eigen::Vector3f getRobotAngularVelocity(const std::string &robotName, const std::string &nodeName)=0
armarx::SimulatedWorld::engineMtxAccTime
std::map< std::string, float > engineMtxAccTime
Definition: SimulatedWorld.h:516
armarx::SimulatedWorld::getRobotJointLimitLo
virtual float getRobotJointLimitLo(const std::string &robotName, const std::string &nodeName)=0
FramedPose.h
armarx::SimulatedWorld::getRobot
virtual VirtualRobot::RobotPtr getRobot(const std::string &robotName)=0
armarx::SimulatedWorld::engineMutex
MutexPtrType engineMutex
Definition: SimulatedWorld.h:489
armarx::SimulatedWorld::removeObstacleEngine
virtual bool removeObstacleEngine(const std::string &name)=0
armarx::SimulatedWorld::setRobotNodeSimType
virtual void setRobotNodeSimType(const std::string &robotName, const std::string &robotNodeName, VirtualRobot::SceneObject::Physics::SimulationType simType)=0
armarx::SimulatedWorld::setupFloorEngine
virtual void setupFloorEngine(bool enable, const std::string &floorTexture)=0
armarx::SimulatedWorld::ScopedRecursiveLockPtr
std::shared_ptr< ScopedRecursiveLock > ScopedRecursiveLockPtr
Definition: SimulatedWorld.h:362
armarx::argType
Definition: SimulatedWorld.h:120
armarx::SimulatedWorld::objectGrasped
virtual void objectGrasped(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName)
create a joint
Definition: SimulatedWorld.cpp:245
armarx::SimulatedWorld::hasRobot
virtual bool hasRobot(const std::string &robotName)=0
armarx::SimulatedWorld::ScopedRecursiveLock
std::scoped_lock< MutexType > ScopedRecursiveLock
Definition: SimulatedWorld.h:361
armarx::ForceTorqueInfo::ftSensor
VirtualRobot::ForceTorqueSensorPtr ftSensor
Definition: SimulatedWorld.h:60
armarx::SimulatedWorld::getDistance
virtual armarx::DistanceInfo getDistance(const std::string &robotName, const std::string &robotNodeName, const std::string &worldObjectName)=0
armarx::SimulatedWorld::engineMtxLastTime
std::map< std::string, IceUtil::Time > engineMtxLastTime
Definition: SimulatedWorld.h:517
armarx::ForceTorqueInfo::ForceTorqueInfo
ForceTorqueInfo()
Definition: SimulatedWorld.h:49
filename
std::string filename
Definition: VisualizationRobot.cpp:86
armarx::RobotInfo::forceTorqueSensors
std::vector< ForceTorqueInfo > forceTorqueSensors
Definition: SimulatedWorld.h:99
armarx::SimulatedWorld::stepPhysicsFixedTimeStep
virtual void stepPhysicsFixedTimeStep()=0
Perform one simulation step.
armarx::channels::KinematicUnitObserver::jointVelocities
const KinematicUnitDatafieldCreator jointVelocities("jointVelocities")
armarx::SimulatedWorld::removeRobot
virtual bool removeRobot(const std::string &robotName)
Definition: SimulatedWorld.cpp:466
armarx::SimulatedWorld::actuateRobotJointsTorque
virtual void actuateRobotJointsTorque(const std::string &robotName, const std::map< std::string, float > &torques)=0
armarx::SimulatedWorld::getRobotMass
virtual float getRobotMass(const std::string &robotName)=0
armarx::RobotInfo::linearVelocity
Eigen::Vector3f linearVelocity
Definition: SimulatedWorld.h:96
armarx::SimulatedWorld::syncMtxAccTime
std::map< std::string, float > syncMtxAccTime
Definition: SimulatedWorld.h:519
armarx::SimulatedWorld::stepPhysicsRealTime
virtual void stepPhysicsRealTime()=0
Perform one simulation step.
armarx::SimulatedWorld::GraspingInfo::robotNodeName
std::string robotNodeName
Definition: SimulatedWorld.h:497
armarx::SimulatedWorld::copyContacts
virtual std::vector< SimDynamics::DynamicsEngine::DynamicsContactInfo > copyContacts()=0
armarx::SimulatedWorld::getSimulationStepTimeMeasured
virtual float getSimulationStepTimeMeasured()
getSimulationStepTimeMeasured
Definition: SimulatedWorld.cpp:800
armarx::SimulatedWorld::getSimulationStepDuration
virtual float getSimulationStepDuration()
getSimulationStepDuration
Definition: SimulatedWorld.cpp:794
armarx::SimulatedWorld::synchronizeSimulationDataEngine
virtual bool synchronizeSimulationDataEngine()=0
armarx::SimulatedWorld::setRobotLinearVelocityRobotRootFrame
virtual void setRobotLinearVelocityRobotRootFrame(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::SimulatedWorld::copySceneVisuData
virtual SceneVisuData copySceneVisuData()
copySceneVisuData Creates a copy of the visualization data
Definition: SimulatedWorld.cpp:940
armarx::SimulatedWorld::hasRobotNode
virtual bool hasRobotNode(const std::string &robotName, const std::string &robotNodeName)=0
armarx::SimulatedWorld::getRobotLinearVelocity
virtual Eigen::Vector3f getRobotLinearVelocity(const std::string &robotName, const std::string &nodeName)=0
armarx::SimulatedWorld::applyTorqueRobotNode
virtual void applyTorqueRobotNode(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &torque)=0
armarx::RobotInfo::simulatorRobotListenerPrx
SimulatorRobotListenerInterfacePrx simulatorRobotListenerPrx
Definition: SimulatedWorld.h:89
armarx::RobotInfo
Definition: SimulatedWorld.h:71
armarx::RobotInfo::RobotInfo
EIGEN_MAKE_ALIGNED_OPERATOR_NEW RobotInfo()
Definition: SimulatedWorld.h:76
armarx::SimulatedWorld::getObjects
virtual std::vector< VirtualRobot::SceneObjectPtr > getObjects()=0
armarx::SimulatedWorld::actuateRobotJointsVel
virtual void actuateRobotJointsVel(const std::string &robotName, const std::map< std::string, float > &velocities)=0
armarx::SimulatedWorld::removeRobots
virtual bool removeRobots()
Definition: SimulatedWorld.cpp:98
A
class A(deque< T, A >)) ARMARX_OVERLOAD_STD_HASH_FOR_ITERABLE((class T
Enables hashing of std::list.
armarx::argType< R(SimDynamics::DynamicsEngine::*)(A)>::type
A type
Definition: SimulatedWorld.h:125
armarx::SimulatedWorld::getObjectCount
virtual int getObjectCount()
Definition: SimulatedWorld.cpp:967
armarx::control::njoint_controller::platform::platform_follower_controller::NameValueMap
std::map< std::string, float > NameValueMap
Definition: PlatformFollowerController.h:88
armarx::channels::KinematicUnitObserver::jointAngles
const KinematicUnitDatafieldCreator jointAngles("jointAngles")
armarx::SimulatedWorld::getRobotJointLimitHi
virtual float getRobotJointLimitHi(const std::string &robotName, const std::string &nodeName)=0
armarx::SimulatedWorld::syncMtxLastTime
std::map< std::string, IceUtil::Time > syncMtxLastTime
Definition: SimulatedWorld.h:520
armarx::SimulatedWorld::actuateRobotJointsPos
virtual void actuateRobotJointsPos(const std::string &robotName, const std::map< std::string, float > &angles)=0
armarx::SimulatedWorld::applyForceObject
virtual void applyForceObject(const std::string &objectName, const Eigen::Vector3f &force)=0
armarx::SimulatedWorldPtr
std::shared_ptr< SimulatedWorld > SimulatedWorldPtr
Definition: SimulatedWorld.h:523
armarx::SimulatedWorld::addRobotEngine
virtual bool addRobotEngine(VirtualRobot::RobotPtr robot, double pid_p, double pid_i, double pid_d, const std::string &filename, bool staticRobot, bool selfCollisions)=0
armarx::Logging
Base Class for all Logging classes.
Definition: Logging.h:239
armarx::RobotInfo::robotTopicName
std::string robotTopicName
Definition: SimulatedWorld.h:88
armarx::SimulatedWorld::currentSyncTimeSec
double currentSyncTimeSec
Definition: SimulatedWorld.h:487
armarx::SimulatedWorld::setObjectSimType
virtual void setObjectSimType(const std::string &objectName, VirtualRobot::SceneObject::Physics::SimulationType simType)=0
armarx::SimulatedWorld::addScene
virtual bool addScene(const std::string &filename, VirtualRobot::SceneObject::Physics::SimulationType simType=VirtualRobot::SceneObject::Physics::eUnknown)
Load and add an Scene (VirtualRobot xml file).
Definition: SimulatedWorld.cpp:532
armarx::SimulatedWorld::currentSimTimeSec
double currentSimTimeSec
Definition: SimulatedWorld.h:486
armarx::SimulatedWorld::resetSimTime
virtual void resetSimTime()
Definition: SimulatedWorld.cpp:92
scene3D::SceneObjectPtr
boost::intrusive_ptr< SceneObject > SceneObjectPtr
Definition: PointerDefinitions.h:40
armarx::SimulatedWorld::MutexType
MutexPtrType::element_type MutexType
Definition: SimulatedWorld.h:359
armarx::SimulatedWorld::getObjectPose
virtual Eigen::Matrix4f getObjectPose(const std::string &objectName)=0
armarx::SimulatedWorld::setupFloor
virtual void setupFloor(bool enable, const std::string &floorTexture)
Definition: SimulatedWorld.cpp:782
armarx::SimulatedWorld::getReportData
virtual SimulatedWorldData & getReportData()
Definition: SimulatedWorld.cpp:114
armarx::SimulatedWorld::GraspingInfo::objectName
std::string objectName
Definition: SimulatedWorld.h:498
Logging.h
armarx::SimulatedWorld::actuateRobotJoints
virtual void actuateRobotJoints(const std::string &robotName, const std::map< std::string, float > &angles, const std::map< std::string, float > &velocities)=0
armarx::SimulatedWorld::getRobotStatus
virtual bool getRobotStatus(const std::string &robotName, NameValueMap &jointAngles, NameValueMap &jointVelocities, NameValueMap &jointTorques, Eigen::Vector3f &linearVelocity, Eigen::Vector3f &angularVelocity)=0
armarx::SimulatedWorld::getRobotJointVelocity
virtual float getRobotJointVelocity(const std::string &robotName, const std::string &nodeName)=0
armarx::channels::KinematicUnitObserver::jointTorques
const KinematicUnitDatafieldCreator jointTorques("jointTorques")
armarx::SimulatedWorld::removeObstacles
virtual bool removeObstacles()
Definition: SimulatedWorld.cpp:282
armarx::ForceTorqueInfo::enable
bool enable
Definition: SimulatedWorld.h:61
armarx::SimulatedWorld::getRobots
virtual std::map< std::string, VirtualRobot::RobotPtr > getRobots()=0
armarx::SimulatedWorld::getRobotJointAngle
virtual float getRobotJointAngle(const std::string &robotName, const std::string &nodeName)=0
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::RobotInfo::pose
Eigen::Matrix4f pose
Definition: SimulatedWorld.h:83
armarx::SimulatedWorld::getRobotJointAngles
virtual std::map< std::string, float > getRobotJointAngles(const std::string &robotName)=0
armarx::SimulatedWorld::getRobotJointTorques
virtual std::map< std::string, float > getRobotJointTorques(const std::string &robotName)=0
armarx::SimulatedWorld::getContactCount
virtual int getContactCount()
Definition: SimulatedWorld.cpp:960
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19
armarx::ForceTorqueInfoPtr
std::shared_ptr< ForceTorqueInfo > ForceTorqueInfoPtr
Definition: SimulatedWorld.h:69
armarx::SimulatedWorld::synchronizeObjects
virtual bool synchronizeObjects()=0
armarx::SimulatedWorldData
The SimulatedWorldData class This data is queried by the simulated in order to offer it via topics.
Definition: SimulatedWorld.h:107
armarx::SimulatedWorld::getRobotJointVelocities
virtual std::map< std::string, float > getRobotJointVelocities(const std::string &robotName)=0