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#include <map>
29#include <memory>
30#include <mutex>
31#include <string>
32#include <vector>
33
34#include <Eigen/Core>
35#include <Eigen/Geometry>
36
37#include <IceUtil/Time.h>
38
39#include <VirtualRobot/SceneObject.h>
40#include <VirtualRobot/VirtualRobot.h>
41
43
44#include <RobotAPI/interface/core/NameValueMap.h>
45#include <RobotAPI/interface/core/PoseBase.h>
48
49#include <ArmarXSimulation/interface/simulator/SimulatorInterface.h>
50
51#include <SimDynamics/DynamicsEngine/DynamicsEngine.h>
52
53namespace armarx
54{
55
57 {
59 {
60 currentForce.setZero();
61 currentTorque.setZero();
62 enable = true;
63 }
64
65 std::string robotName;
66 std::string robotNodeName;
67 std::string sensorName;
68 VirtualRobot::ForceTorqueSensorPtr
69 ftSensor; // be sure to just access this object when the engine mutex is set!
70 bool enable;
71 Eigen::Vector3f currentForce;
72 Eigen::Vector3f currentTorque;
73
74 std::string topicName;
75 SimulatorForceTorqueListenerInterfacePrx prx;
76 };
77
78 using ForceTorqueInfoPtr = std::shared_ptr<ForceTorqueInfo>;
79
80 struct RobotInfo
81 {
82 public:
83 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
84
86 {
87 linearVelocity.setZero();
88 angularVelocity.setZero();
89 pose.setIdentity();
90 }
91
92 Eigen::Matrix4f pose;
93 std::map<std::string, Eigen::Matrix4f> robotNodePoses;
94
95 // the topic on which we publish the robot's data
96 std::string robotName;
97 std::string robotTopicName;
98 SimulatorRobotListenerInterfacePrx simulatorRobotListenerPrx;
99
100 // current values to be reported
101 NameValueMap jointAngles;
102 NameValueMap jointVelocities;
103 NameValueMap jointTorques;
104
105 Eigen::Vector3f linearVelocity;
106 Eigen::Vector3f angularVelocity;
107
108 std::vector<ForceTorqueInfo> forceTorqueSensors;
109 };
110
111 using RobotInfoPtr = std::shared_ptr<RobotInfo>;
112
113 /*!
114 * \brief The SimulatedWorldData class This data is queried by the simulated in order to offer it via topics.
115 */
117 {
118 public:
119 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
120
121 std::vector<RobotInfo> robots;
122 IceUtil::Time timestamp;
123 // todo: objects (currently no need to populate objects via this channel)
124 };
125
126 using SimualtedWorldDataPtr = std::shared_ptr<SimulatedWorldData>;
127
128 template <typename>
129 struct argType;
130
131 template <typename R, typename A>
132 struct argType<R (SimDynamics::DynamicsEngine::*)(A)>
133 {
134 using type = A;
135 };
136
137 /*!
138 * \brief The SimulatedWorld class encapsulates the whole physics simulation and the corresponding data
139 *
140 */
141 class SimulatedWorld : public Logging
142 {
143 public:
145 virtual ~SimulatedWorld() override = default;
146
147
148 // needs to be implemented by derived classes
149 virtual void actuateRobotJoints(const std::string& robotName,
150 const std::map<std::string, float>& angles,
151 const std::map<std::string, float>& velocities) = 0;
152 virtual void actuateRobotJointsPos(const std::string& robotName,
153 const std::map<std::string, float>& angles) = 0;
154 virtual void actuateRobotJointsVel(const std::string& robotName,
155 const std::map<std::string, float>& velocities) = 0;
156 virtual void actuateRobotJointsTorque(const std::string& robotName,
157 const std::map<std::string, float>& torques) = 0;
158 virtual void setRobotPose(const std::string& robotName,
159 const Eigen::Matrix4f& globalPose) = 0;
160
161 virtual void applyForceRobotNode(const std::string& robotName,
162 const std::string& robotNodeName,
163 const Eigen::Vector3f& force) = 0;
164 virtual void applyTorqueRobotNode(const std::string& robotName,
165 const std::string& robotNodeName,
166 const Eigen::Vector3f& torque) = 0;
167
168 virtual void applyForceObject(const std::string& objectName,
169 const Eigen::Vector3f& force) = 0;
170 virtual void applyTorqueObject(const std::string& objectName,
171 const Eigen::Vector3f& torque) = 0;
172
173 virtual bool hasObject(const std::string& instanceName) = 0;
174
175 virtual std::map<std::string, float> getRobotJointAngles(const std::string& robotName) = 0;
176 virtual float getRobotJointAngle(const std::string& robotName,
177 const std::string& nodeName) = 0;
178 virtual std::map<std::string, float>
179 getRobotJointVelocities(const std::string& robotName) = 0;
180 virtual float getRobotJointVelocity(const std::string& robotName,
181 const std::string& nodeName) = 0;
182 virtual std::map<std::string, float> getRobotJointTorques(const std::string& robotName) = 0;
183 virtual ForceTorqueDataSeq getRobotForceTorqueSensors(const std::string& robotName) = 0;
184
185 virtual float getRobotJointLimitLo(const std::string& robotName,
186 const std::string& nodeName) = 0;
187 virtual float getRobotJointLimitHi(const std::string& robotName,
188 const std::string& nodeName) = 0;
189 virtual Eigen::Matrix4f getRobotPose(const std::string& robotName) = 0;
190
191 virtual float getRobotMaxTorque(const std::string& robotName,
192 const std::string& nodeName) = 0;
193 virtual void setRobotMaxTorque(const std::string& robotName,
194 const std::string& nodeName,
195 float maxTorque) = 0;
196
197 virtual Eigen::Matrix4f getRobotNodePose(const std::string& robotName,
198 const std::string& robotNodeName) = 0;
199
200 virtual Eigen::Vector3f getRobotLinearVelocity(const std::string& robotName,
201 const std::string& nodeName) = 0;
202 virtual Eigen::Vector3f getRobotAngularVelocity(const std::string& robotName,
203 const std::string& nodeName) = 0;
204
205 virtual void setRobotLinearVelocity(const std::string& robotName,
206 const std::string& robotNodeName,
207 const Eigen::Vector3f& vel) = 0;
208 virtual void setRobotAngularVelocity(const std::string& robotName,
209 const std::string& robotNodeName,
210 const Eigen::Vector3f& vel) = 0;
211 virtual void setRobotLinearVelocityRobotRootFrame(const std::string& robotName,
212 const std::string& robotNodeName,
213 const Eigen::Vector3f& vel) = 0;
214 virtual void setRobotAngularVelocityRobotRootFrame(const std::string& robotName,
215 const std::string& robotNodeName,
216 const Eigen::Vector3f& vel) = 0;
217
218 virtual Eigen::Matrix4f getObjectPose(const std::string& objectName) = 0;
219
220 virtual void setObjectPose(const std::string& objectName,
221 const Eigen::Matrix4f& globalPose) = 0;
222 virtual void activateObject(const std::string& objectName);
223
224
225 virtual VirtualRobot::RobotPtr getRobot(const std::string& robotName) = 0;
226 virtual std::map<std::string, VirtualRobot::RobotPtr> getRobots() = 0;
227 virtual bool hasRobot(const std::string& robotName) = 0;
228 virtual bool hasRobotNode(const std::string& robotName,
229 const std::string& robotNodeName) = 0;
230 virtual float getRobotMass(const std::string& robotName) = 0;
231
232 virtual armarx::DistanceInfo getRobotNodeDistance(const std::string& robotName,
233 const std::string& robotNodeName1,
234 const std::string& robotNodeName2) = 0;
235 virtual armarx::DistanceInfo getDistance(const std::string& robotName,
236 const std::string& robotNodeName,
237 const std::string& worldObjectName) = 0;
238
239
240 //! create a joint
241 virtual void objectGrasped(const std::string& robotName,
242 const std::string& robotNodeName,
243 const std::string& objectName);
244
245 //! remove a joint
246 virtual void objectReleased(const std::string& robotName,
247 const std::string& robotNodeName,
248 const std::string& objectName);
249
250
251 virtual std::vector<SimDynamics::DynamicsEngine::DynamicsContactInfo> copyContacts() = 0;
252
253 /**
254 * Load and add a robot
255 */
256 /*!
257 * \brief addRobot Load and add int to the scene
258 * \param filename The absolute filename
259 * \param pose The initial pose (4x4matrix, in MM)
260 * \param filenameLocal The local filename (i.e. not the absolute one)
261 * \param pid_p PID control paramters, currently all joints use the same pid values
262 * \param pid_i PID control paramters, currently all joints use the same pid values
263 * \param pid_d PID control paramters, currently all joints use the same pid values
264 * \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)
265 * \param scaling The scaling of the robot (1 = no scaling).
266 * \param colModel Use the collision model for visualization.
267 * \return
268 */
269 virtual bool addRobot(std::string& robotInstanceName,
270 const std::string& filename,
271 Eigen::Matrix4f pose = Eigen::Matrix4f::Identity(),
272 const std::string& filenameLocal = "",
273 double pid_p = 10.0,
274 double pid_i = 0,
275 double pid_d = 0,
276 bool staticRobot = false,
277 float scaling = 1.0f,
278 bool colModel = false,
279 const std::map<std::string, float>& initConfig = {},
280 bool selfCollisions = false);
281 virtual bool addRobot(VirtualRobot::RobotPtr robot,
282 double pid_p,
283 double pid_i,
284 double pid_d,
285 const std::string& filename,
286 bool staticRobot = false,
287 float scaling = 1.0f,
288 bool colModel = false,
289 bool selfCollisions = false);
291
292 /*!
293 * \brief toFramedPose Constructs a framed pose
294 * \param globalPose
295 * \param robotName
296 * \param frameName
297 * \return
298 */
299 virtual FramedPosePtr toFramedPose(const Eigen::Matrix4f& globalPose,
300 const std::string& robotName,
301 const std::string& frameName) = 0;
302
303 /**
304 * Load and add an Obstacle (VirtualRobot xml file).
305 * \param filename The obstacle xml file
306 * \param pose The inital pose (mm)
307 * \param simType eUnknown: use sim type of SceneObject,
308 to overwrite internal simType use:
309 eStatic: cannot move, but collide;
310 eKinematic: can be moved, but no dynamics;
311 eDynamic: full dynamic simulation
312 */
313 virtual bool addObstacle(const std::string& filename,
314 const Eigen::Matrix4f& pose = Eigen::Matrix4f::Identity(),
315 VirtualRobot::SceneObject::Physics::SimulationType simType =
316 VirtualRobot::SceneObject::Physics::eUnknown,
317 const std::string& localFilename = "");
318
319 virtual bool addObstacle(VirtualRobot::SceneObjectPtr o,
320 VirtualRobot::SceneObject::Physics::SimulationType simType =
321 VirtualRobot::SceneObject::Physics::eUnknown,
322 const std::string& filename = "",
323 const std::string& objectClassName = "",
324 ObjectVisuPrimitivePtr primitiveData = {},
325 const std::string& project = "");
326
327 /**
328 * Load and add an Scene (VirtualRobot xml file).
329 * \param filename The scene xml fil
330 * \param simType eStatic: cannot move, but collide; eKinematic: can be moved, but no dynamics; eDynamic: full dynamic simulation
331 */
332 virtual bool addScene(const std::string& filename,
333 VirtualRobot::SceneObject::Physics::SimulationType simType =
334 VirtualRobot::SceneObject::Physics::eUnknown);
335 virtual bool addScene(VirtualRobot::ScenePtr scene,
336 VirtualRobot::SceneObject::Physics::SimulationType simType =
337 VirtualRobot::SceneObject::Physics::eUnknown);
338
339 virtual void
340 setRobotNodeSimType(const std::string& robotName,
341 const std::string& robotNodeName,
342 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
343 virtual void
344 setObjectSimType(const std::string& objectName,
345 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
346 virtual std::vector<VirtualRobot::SceneObjectPtr> getObjects() = 0;
347
348 /**
349 * Perform one simulation step. Calculates the delta update time from the time that has passed since the last call.
350 * This updates all models.
351 */
352 virtual void stepPhysicsRealTime() = 0;
353
354 /**
355 * Perform one simulation step.
356 * This updates all models.
357 */
358 virtual void stepPhysicsFixedTimeStep() = 0;
359
360 /*!
361 * \brief
362 * \return The number of steps * the timestep in MS
363 */
364 virtual int getFixedTimeStepMS() = 0;
365
366 using setMutexFunc = decltype(&SimDynamics::DynamicsEngine::setMutex);
368 using MutexType = MutexPtrType::element_type;
369
370 using ScopedRecursiveLock = std::scoped_lock<MutexType>;
371 using ScopedRecursiveLockPtr = std::shared_ptr<ScopedRecursiveLock>;
372
373
374 virtual ScopedRecursiveLockPtr getScopedEngineLock(const std::string& callStr);
375
376 virtual ScopedRecursiveLockPtr getScopedSyncLock(const std::string& callStr);
377
378 virtual void enableLogging(const std::string& robotName, const std::string& logFile);
379
380 virtual float getSimTime();
381 virtual float getSyncEngineTime();
382
383 virtual bool removeObstacles();
384 virtual bool removeRobots();
385 virtual bool removeRobot(const std::string& robotName);
386
387 virtual bool removeObstacle(const std::string& name);
388
389
390 virtual double getCurrentSimTime();
391 virtual void resetSimTime();
392
393 virtual int getRobotJointAngleCount(); //Data->robotJointAngles.size();
394 virtual int getContactCount(); //contacts.size();
395 virtual int getObjectCount(); //objects.size();
396
397
398 // protect access with mutex or use copyReportData
400
402
403 /*!
404 * \brief resetData Clears all data
405 */
406 virtual bool resetData();
407
408 /*!
409 * \brief copySceneVisuData Creates a copy of the visualization data
410 * \return The copy
411 */
412 virtual SceneVisuData copySceneVisuData();
413
414 /*!
415 * \brief synchronizeSimulationData Update the sim data according to the internal physics models.
416 * \return true on success.
417 */
418 virtual bool synchronizeSimulationData();
419
420 virtual void updateContacts(bool enable);
421
422 virtual void setupFloor(bool enable, const std::string& floorTexture);
423
424 /*!
425 * \brief getSimulationStepDuration
426 * \return The requested duration of the last simulation step (in ms)
427 */
428 virtual float getSimulationStepDuration();
429
430 /*!
431 * \brief getSimulationStepTimeMeasured
432 * \return How long it took to simulate the last sim step.
433 */
434 virtual float getSimulationStepTimeMeasured();
435
436 virtual std::vector<std::string> getObstacleNames() = 0;
437 virtual std::vector<std::string> getRobotNames() = 0;
438
439
440 protected:
441 // needs to be implemented in derived classes
442 virtual bool
443 addObstacleEngine(VirtualRobot::SceneObjectPtr o,
444 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
445 virtual bool removeObstacleEngine(const std::string& name) = 0;
446
448 double pid_p,
449 double pid_i,
450 double pid_d,
451 const std::string& filename,
452 bool staticRobot,
453 bool selfCollisions) = 0;
454 virtual bool removeRobotEngine(const std::string& robotName) = 0;
455
456
457 //! create a joint
458 virtual bool objectGraspedEngine(const std::string& robotName,
459 const std::string& robotNodeName,
460 const std::string& objectName,
461 Eigen::Matrix4f& storeLocalTransform) = 0;
462 //! remove a joint
463 virtual bool objectReleasedEngine(const std::string& robotName,
464 const std::string& robotNodeName,
465 const std::string& objectName) = 0;
466
467 virtual VirtualRobot::SceneObjectPtr getFloor() = 0;
468 virtual void setupFloorEngine(bool enable, const std::string& floorTexture) = 0;
470
471
472 // synchronize visu data
473 virtual bool synchronizeObjects() = 0;
474
475 virtual bool
476 synchronizeRobotNodePoses(const std::string& robotName,
477 std::map<std::string, armarx::PoseBasePtr>& objMap) = 0;
478
479 virtual bool getRobotStatus(const std::string& robotName,
480 NameValueMap& jointAngles,
481 NameValueMap& jointVelocities,
482 NameValueMap& jointTorques,
483 Eigen::Vector3f& linearVelocity,
484 Eigen::Vector3f& angularVelocity) = 0;
485
486 virtual bool updateForceTorqueSensor(ForceTorqueInfo& ftInfo) = 0;
487
488 virtual bool
489 synchronizeSceneObjectPoses(VirtualRobot::SceneObjectPtr currentObjEngine,
490 std::map<std::string, armarx::PoseBasePtr>& objMap) = 0;
491
492 // synchronize visu data (and robot report data for topics)
493 virtual bool synchronizeRobots();
494
495 double currentSimTimeSec = 0.0;
496 double currentSyncTimeSec = 0.0;
497
500
502
504 {
505 std::string robotName;
506 std::string robotNodeName;
507 std::string objectName;
509 };
510
511 std::vector<GraspingInfo> attachedObjects;
512
513 SceneVisuData simVisuData;
516 float simTimeStepMS; // simulation step in MS
517
518
520
522
523
524 std::map<std::string, int> engineMtxAccCalls;
525 std::map<std::string, float> engineMtxAccTime;
526 std::map<std::string, IceUtil::Time> engineMtxLastTime;
527 std::map<std::string, int> syncMtxAccCalls;
528 std::map<std::string, float> syncMtxAccTime;
529 std::map<std::string, IceUtil::Time> syncMtxLastTime;
530 };
531
532 using SimulatedWorldPtr = std::shared_ptr<SimulatedWorld>;
533} // 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()