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
44namespace 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
83 Eigen::Matrix4f pose;
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
92 NameValueMap jointAngles;
93 NameValueMap jointVelocities;
94 NameValueMap jointTorques;
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;
113 IceUtil::Time timestamp;
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:
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,
262 Eigen::Matrix4f pose = Eigen::Matrix4f::Identity(),
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,
305 const Eigen::Matrix4f& pose = Eigen::Matrix4f::Identity(),
306 VirtualRobot::SceneObject::Physics::SimulationType simType =
307 VirtualRobot::SceneObject::Physics::eUnknown,
308 const std::string& localFilename = "");
309
310 virtual bool addObstacle(VirtualRobot::SceneObjectPtr o,
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
434 addObstacleEngine(VirtualRobot::SceneObjectPtr o,
435 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
436 virtual bool removeObstacleEngine(const std::string& name) = 0;
437
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
458 virtual VirtualRobot::SceneObjectPtr getFloor() = 0;
459 virtual void setupFloorEngine(bool enable, const std::string& floorTexture) = 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,
471 NameValueMap& jointAngles,
472 NameValueMap& jointVelocities,
473 NameValueMap& jointTorques,
474 Eigen::Vector3f& linearVelocity,
475 Eigen::Vector3f& angularVelocity) = 0;
476
477 virtual bool updateForceTorqueSensor(ForceTorqueInfo& ftInfo) = 0;
478
479 virtual bool
480 synchronizeSceneObjectPoses(VirtualRobot::SceneObjectPtr currentObjEngine,
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
class A(deque< T, A >)) ARMARX_OVERLOAD_STD_HASH_FOR_ITERABLE((class T
Enables hashing of std::list.
The SimulatedWorldData class This data is queried by the simulated in order to offer it via topics.
EIGEN_MAKE_ALIGNED_OPERATOR_NEW std::vector< RobotInfo > robots
SimulatedWorldData simReportData
virtual ~SimulatedWorld() override=default
virtual bool removeObstacle(const std::string &name)
virtual void stepPhysicsRealTime()=0
Perform one simulation step.
std::map< std::string, float > engineMtxAccTime
virtual float getRobotJointAngle(const std::string &robotName, const std::string &nodeName)=0
virtual float getRobotMaxTorque(const std::string &robotName, const std::string &nodeName)=0
virtual SimulatedWorldData copyReportData()
virtual void setRobotNodeSimType(const std::string &robotName, const std::string &robotNodeName, VirtualRobot::SceneObject::Physics::SimulationType simType)=0
virtual bool objectGraspedEngine(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName, Eigen::Matrix4f &storeLocalTransform)=0
create a joint
virtual Eigen::Vector3f getRobotAngularVelocity(const std::string &robotName, const std::string &nodeName)=0
virtual bool synchronizeSimulationData()
synchronizeSimulationData Update the sim data according to the internal physics models.
virtual float getSimulationStepDuration()
getSimulationStepDuration
virtual bool objectReleasedEngine(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName)=0
remove a joint
std::map< std::string, IceUtil::Time > engineMtxLastTime
virtual std::vector< VirtualRobot::SceneObjectPtr > getObjects()=0
virtual SceneVisuData copySceneVisuData()
copySceneVisuData Creates a copy of the visualization data
virtual std::vector< SimDynamics::DynamicsEngine::DynamicsContactInfo > copyContacts()=0
virtual bool synchronizeRobotNodePoses(const std::string &robotName, std::map< std::string, armarx::PoseBasePtr > &objMap)=0
virtual std::map< std::string, float > getRobotJointVelocities(const std::string &robotName)=0
std::vector< GraspingInfo > attachedObjects
virtual bool synchronizeSimulationDataEngine()=0
virtual float getRobotMass(const std::string &robotName)=0
virtual void objectReleased(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName)
remove a joint
virtual std::map< std::string, VirtualRobot::RobotPtr > getRobots()=0
virtual int getFixedTimeStepMS()=0
virtual SimulatedWorldData & getReportData()
virtual void setRobotAngularVelocity(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
virtual void setRobotLinearVelocityRobotRootFrame(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
virtual void actuateRobotJointsTorque(const std::string &robotName, const std::map< std::string, float > &torques)=0
virtual void stepPhysicsFixedTimeStep()=0
Perform one simulation step.
virtual bool hasObject(const std::string &instanceName)=0
virtual ScopedRecursiveLockPtr getScopedSyncLock(const std::string &callStr)
MutexPtrType::element_type MutexType
virtual bool removeRobots()
virtual bool resetData()
resetData Clears all data
virtual bool removeRobotEngine(const std::string &robotName)=0
virtual ScopedRecursiveLockPtr getScopedEngineLock(const std::string &callStr)
virtual Eigen::Matrix4f getRobotPose(const std::string &robotName)=0
virtual bool addScene(const std::string &filename, VirtualRobot::SceneObject::Physics::SimulationType simType=VirtualRobot::SceneObject::Physics::eUnknown)
Load and add an Scene (VirtualRobot xml file).
virtual void setRobotPose(const std::string &robotName, const Eigen::Matrix4f &globalPose)=0
virtual void resetSimTime()
std::map< std::string, IceUtil::Time > syncMtxLastTime
virtual float getSyncEngineTime()
virtual float getRobotJointLimitLo(const std::string &robotName, const std::string &nodeName)=0
virtual void setRobotLinearVelocity(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
virtual void applyTorqueRobotNode(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &torque)=0
virtual Eigen::Vector3f getRobotLinearVelocity(const std::string &robotName, const std::string &nodeName)=0
std::map< std::string, int > syncMtxAccCalls
virtual bool synchronizeObjects()=0
virtual bool addScene(VirtualRobot::ScenePtr scene, VirtualRobot::SceneObject::Physics::SimulationType simType=VirtualRobot::SceneObject::Physics::eUnknown)
virtual void applyForceObject(const std::string &objectName, const Eigen::Vector3f &force)=0
virtual bool addObstacleEngine(VirtualRobot::SceneObjectPtr o, VirtualRobot::SceneObject::Physics::SimulationType simType)=0
virtual std::map< std::string, float > getRobotJointTorques(const std::string &robotName)=0
virtual bool removeObstacles()
virtual void setupFloorEngine(bool enable, const std::string &floorTexture)=0
virtual bool addRobotEngine(VirtualRobot::RobotPtr robot, double pid_p, double pid_i, double pid_d, const std::string &filename, bool staticRobot, bool selfCollisions)=0
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.
virtual void actuateRobotJointsVel(const std::string &robotName, const std::map< std::string, float > &velocities)=0
decltype(&SimDynamics::DynamicsEngine::setMutex) setMutexFunc
virtual void setupFloor(bool enable, const std::string &floorTexture)
std::scoped_lock< MutexType > ScopedRecursiveLock
virtual bool hasRobot(const std::string &robotName)=0
std::map< std::string, int > engineMtxAccCalls
virtual double getCurrentSimTime()
virtual bool synchronizeRobots()
virtual void actuateRobotJointsPos(const std::string &robotName, const std::map< std::string, float > &angles)=0
virtual ForceTorqueDataSeq getRobotForceTorqueSensors(const std::string &robotName)=0
virtual VirtualRobot::RobotPtr adaptRobotToWorld(VirtualRobot::RobotPtr)
virtual bool getRobotStatus(const std::string &robotName, NameValueMap &jointAngles, NameValueMap &jointVelocities, NameValueMap &jointTorques, Eigen::Vector3f &linearVelocity, Eigen::Vector3f &angularVelocity)=0
std::map< std::string, float > syncMtxAccTime
virtual bool synchronizeSceneObjectPoses(VirtualRobot::SceneObjectPtr currentObjEngine, std::map< std::string, armarx::PoseBasePtr > &objMap)=0
virtual void applyForceRobotNode(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &force)=0
virtual std::map< std::string, float > getRobotJointAngles(const std::string &robotName)=0
virtual armarx::DistanceInfo getDistance(const std::string &robotName, const std::string &robotNodeName, const std::string &worldObjectName)=0
virtual bool hasRobotNode(const std::string &robotName, const std::string &robotNodeName)=0
virtual bool removeRobot(const std::string &robotName)
virtual Eigen::Matrix4f getRobotNodePose(const std::string &robotName, const std::string &robotNodeName)=0
virtual void setRobotAngularVelocityRobotRootFrame(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel)=0
virtual std::vector< std::string > getRobotNames()=0
virtual void applyTorqueObject(const std::string &objectName, const Eigen::Vector3f &torque)=0
virtual void objectGrasped(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName)
create a joint
virtual VirtualRobot::RobotPtr getRobot(const std::string &robotName)=0
virtual float getRobotJointLimitHi(const std::string &robotName, const std::string &nodeName)=0
virtual bool updateForceTorqueSensor(ForceTorqueInfo &ftInfo)=0
virtual armarx::DistanceInfo getRobotNodeDistance(const std::string &robotName, const std::string &robotNodeName1, const std::string &robotNodeName2)=0
virtual VirtualRobot::SceneObjectPtr getFloor()=0
virtual float getSimulationStepTimeMeasured()
getSimulationStepTimeMeasured
virtual float getRobotJointVelocity(const std::string &robotName, const std::string &nodeName)=0
virtual int getRobotJointAngleCount()
virtual void setRobotMaxTorque(const std::string &robotName, const std::string &nodeName, float maxTorque)=0
virtual void setObjectSimType(const std::string &objectName, VirtualRobot::SceneObject::Physics::SimulationType simType)=0
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).
virtual Eigen::Matrix4f getObjectPose(const std::string &objectName)=0
virtual bool removeObstacleEngine(const std::string &name)=0
virtual void updateContacts(bool enable)
virtual FramedPosePtr toFramedPose(const Eigen::Matrix4f &globalPose, const std::string &robotName, const std::string &frameName)=0
toFramedPose Constructs a framed pose
virtual void enableLogging(const std::string &robotName, const std::string &logFile)
MutexPtrType synchronizeMutex
virtual std::vector< std::string > getObstacleNames()=0
virtual void actuateRobotJoints(const std::string &robotName, const std::map< std::string, float > &angles, const std::map< std::string, float > &velocities)=0
typename argType< setMutexFunc >::type MutexPtrType
virtual void activateObject(const std::string &objectName)
virtual void setObjectPose(const std::string &objectName, const Eigen::Matrix4f &globalPose)=0
std::shared_ptr< ScopedRecursiveLock > ScopedRecursiveLockPtr
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< ForceTorqueInfo > ForceTorqueInfoPtr
std::shared_ptr< RobotInfo > RobotInfoPtr
std::shared_ptr< SimulatedWorld > SimulatedWorldPtr
std::shared_ptr< SimulatedWorldData > SimualtedWorldDataPtr
IceInternal::Handle< FramedPose > FramedPosePtr
Definition FramedPose.h:272
SimulatorForceTorqueListenerInterfacePrx prx
Eigen::Vector3f currentTorque
VirtualRobot::ForceTorqueSensorPtr ftSensor
Eigen::Vector3f currentForce
NameValueMap jointVelocities
Eigen::Matrix4f pose
std::vector< ForceTorqueInfo > forceTorqueSensors
NameValueMap jointAngles
std::map< std::string, Eigen::Matrix4f > robotNodePoses
SimulatorRobotListenerInterfacePrx simulatorRobotListenerPrx
Eigen::Vector3f angularVelocity
Eigen::Vector3f linearVelocity
std::string robotName
std::string robotTopicName
NameValueMap jointTorques
EIGEN_MAKE_ALIGNED_OPERATOR_NEW RobotInfo()