34#include <ArmarXSimulation/interface/simulator/SimulatorInterface.h>
40#include <Eigen/Geometry>
42#include <SimDynamics/DynamicsEngine/DynamicsEngine.h>
59 VirtualRobot::ForceTorqueSensorPtr
66 SimulatorForceTorqueListenerInterfacePrx
prx;
74 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
110 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
122 template <
typename R,
typename A>
123 struct argType<R (SimDynamics::DynamicsEngine::*)(A)>
141 const std::map<std::string, float>& angles,
142 const std::map<std::string, float>& velocities) = 0;
144 const std::map<std::string, float>& angles) = 0;
146 const std::map<std::string, float>& velocities) = 0;
148 const std::map<std::string, float>& torques) = 0;
150 const Eigen::Matrix4f& globalPose) = 0;
153 const std::string& robotNodeName,
154 const Eigen::Vector3f& force) = 0;
156 const std::string& robotNodeName,
157 const Eigen::Vector3f& torque) = 0;
160 const Eigen::Vector3f& force) = 0;
162 const Eigen::Vector3f& torque) = 0;
164 virtual bool hasObject(
const std::string& instanceName) = 0;
168 const std::string& nodeName) = 0;
169 virtual std::map<std::string, float>
172 const std::string& nodeName) = 0;
177 const std::string& nodeName) = 0;
179 const std::string& nodeName) = 0;
180 virtual Eigen::Matrix4f
getRobotPose(
const std::string& robotName) = 0;
183 const std::string& nodeName) = 0;
185 const std::string& nodeName,
186 float maxTorque) = 0;
189 const std::string& robotNodeName) = 0;
192 const std::string& nodeName) = 0;
194 const std::string& nodeName) = 0;
197 const std::string& robotNodeName,
198 const Eigen::Vector3f& vel) = 0;
200 const std::string& robotNodeName,
201 const Eigen::Vector3f& vel) = 0;
203 const std::string& robotNodeName,
204 const Eigen::Vector3f& vel) = 0;
206 const std::string& robotNodeName,
207 const Eigen::Vector3f& vel) = 0;
212 const Eigen::Matrix4f& globalPose) = 0;
217 virtual std::map<std::string, VirtualRobot::RobotPtr>
getRobots() = 0;
218 virtual bool hasRobot(
const std::string& robotName) = 0;
220 const std::string& robotNodeName) = 0;
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;
233 const std::string& robotNodeName,
234 const std::string& objectName);
238 const std::string& robotNodeName,
239 const std::string& objectName);
242 virtual std::vector<SimDynamics::DynamicsEngine::DynamicsContactInfo>
copyContacts() = 0;
260 virtual bool addRobot(std::string& robotInstanceName,
261 const std::string& filename,
262 Eigen::Matrix4f pose = Eigen::Matrix4f::Identity(),
263 const std::string& filenameLocal =
"",
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);
276 const std::string& filename,
277 bool staticRobot =
false,
278 float scaling = 1.0f,
279 bool colModel =
false,
280 bool selfCollisions =
false);
291 const std::string& robotName,
292 const std::string& frameName) = 0;
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 =
"");
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 =
"");
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);
332 const std::string& robotNodeName,
333 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
336 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
337 virtual std::vector<VirtualRobot::SceneObjectPtr>
getObjects() = 0;
369 virtual void enableLogging(
const std::string& robotName,
const std::string& logFile);
376 virtual bool removeRobot(
const std::string& robotName);
413 virtual void setupFloor(
bool enable,
const std::string& floorTexture);
435 VirtualRobot::SceneObject::Physics::SimulationType simType) = 0;
442 const std::string& filename,
444 bool selfCollisions) = 0;
450 const std::string& robotNodeName,
451 const std::string& objectName,
452 Eigen::Matrix4f& storeLocalTransform) = 0;
455 const std::string& robotNodeName,
456 const std::string& objectName) = 0;
458 virtual VirtualRobot::SceneObjectPtr
getFloor() = 0;
468 std::map<std::string, armarx::PoseBasePtr>& objMap) = 0;
471 NameValueMap& jointAngles,
472 NameValueMap& jointVelocities,
473 NameValueMap& jointTorques,
474 Eigen::Vector3f& linearVelocity,
475 Eigen::Vector3f& angularVelocity) = 0;
481 std::map<std::string, armarx::PoseBasePtr>& objMap) = 0;
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 int getObjectCount()
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 int getContactCount()
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
SceneVisuData simVisuData
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
float synchronizeDurationMS
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
double currentSyncTimeSec
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
float maxRealTimeSimSpeed
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
float simStepExecutionDurationMS
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 float getSimTime()
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
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
SimulatorForceTorqueListenerInterfacePrx prx
Eigen::Vector3f currentTorque
VirtualRobot::ForceTorqueSensorPtr ftSensor
Eigen::Vector3f currentForce
std::string robotNodeName
NameValueMap jointVelocities
std::vector< ForceTorqueInfo > forceTorqueSensors
std::map< std::string, Eigen::Matrix4f > robotNodePoses
SimulatorRobotListenerInterfacePrx simulatorRobotListenerPrx
Eigen::Vector3f angularVelocity
Eigen::Vector3f linearVelocity
std::string robotTopicName
NameValueMap jointTorques
EIGEN_MAKE_ALIGNED_OPERATOR_NEW RobotInfo()
Eigen::Matrix4f node2objectTransformation
std::string robotNodeName