Go to the documentation of this file.
29 #include <VirtualRobot/XML/mujoco/RobotMjcf.h>
36 #include <MujocoX/libraries/MJCF/Document.h>
37 #include <MujocoX/libraries/Simulation/MujocoSim.h>
38 #include <MujocoX/libraries/Simulation/SimCallbackListener.h>
39 #include <MujocoX/libraries/Simulation/SimEntity.h>
64 void initialize(
int stepTimeMs,
bool floorEnabled,
const std::string& floorTexture);
78 const std::map<std::string, float>& angles,
79 const std::map<std::string, float>& velocities)
override;
81 const std::map<std::string, float>& angles)
override;
83 const std::map<std::string, float>& velocities)
override;
85 const std::map<std::string, float>& torques)
override;
88 const std::string& robotNodeName,
89 const Eigen::Vector3f& force)
override;
91 const std::string& robotNodeName,
92 const Eigen::Vector3f& torque)
override;
95 const Eigen::Vector3f& force)
override;
97 const Eigen::Vector3f& torque)
override;
99 virtual std::map<std::string, float>
102 const std::string& nodeName)
override;
104 virtual std::map<std::string, float>
107 const std::string& nodeName)
override;
109 virtual std::map<std::string, float>
111 virtual ForceTorqueDataSeq
124 const std::string& robotNodeName)
override;
126 const std::string& nodeName)
override;
128 const std::string& nodeName)
override;
131 const std::string& robotNodeName,
132 const Eigen::Vector3f& vel)
override;
134 const std::string& robotNodeName,
135 const Eigen::Vector3f& vel)
override;
138 const std::string& robotNodeName,
139 const Eigen::Vector3f& vel)
override;
141 const std::string& robotNodeName,
142 const Eigen::Vector3f& vel)
override;
144 virtual bool hasObject(
const std::string& instanceName)
override;
146 virtual bool hasRobot(
const std::string& robotName)
override;
148 const std::string& robotNodeName)
override;
150 virtual std::vector<VirtualRobot::SceneObjectPtr>
getObjects()
override;
153 virtual std::map<std::string, VirtualRobot::RobotPtr>
getRobots()
override;
156 const std::string& nodeName)
override;
158 const std::string& nodeName)
override;
161 const std::string& nodeName)
override;
163 const std::string& nodeName,
164 float maxTorque)
override;
166 virtual float getRobotMass(
const std::string& robotName)
override;
169 const std::string& robotNodeName1,
170 const std::string& robotNodeName2)
override;
171 virtual DistanceInfo
getDistance(
const std::string& robotName,
172 const std::string& robotNodeName,
173 const std::string& worldObjectName)
override;
175 virtual std::vector<SimDynamics::DynamicsEngine::DynamicsContactInfo>
179 const std::string& robotName,
180 const std::string& frameName)
override;
184 VirtualRobot::SceneObject::Physics::SimulationType simType)
override;
188 const std::string& robotNodeName,
189 VirtualRobot::SceneObject::Physics::SimulationType simType)
override;
197 VirtualRobot::SceneObject::Physics::SimulationType simType)
override;
206 bool selfCollisions)
override;
210 const std::string& robotNodeName,
211 const std::string& objectName,
214 const std::string& robotNodeName,
215 const std::string& objectName)
override;
219 virtual void setupFloorEngine(
bool enable,
const std::string& floorTexture)
override;
228 std::map<std::string, PoseBasePtr>& objMap)
override;
231 std::map<std::string, PoseBasePtr>& objMap)
override;
237 Eigen::Vector3f& linearVelocity,
238 Eigen::Vector3f& angularVelocity)
override;
246 virtual void onLoadModel(mujoco::Model& model)
override;
247 virtual void onMakeData(mujoco::Model& model, mujoco::Data&
data)
override;
252 static const std::filesystem::path BASE_MJCF_FILENAME;
254 static const std::filesystem::path TEMP_DIR;
256 static const std::filesystem::path TEMP_MODEL_FILE;
258 static const std::filesystem::path TEMP_MESH_DIR_REL;
260 static const std::filesystem::path TEMP_MESH_DIR;
263 static const std::string FLOOR_NAME;
265 static const std::string OBJECT_CLASS_NAME;
269 VirtualRobot::ObstaclePtr makeFloorObject(mujoco::Model& model,
270 const mujoco::SimGeom& floorGeom)
const;
273 VirtualRobot::mujoco::RobotMjcf
278 void reloadModel(
bool request =
true);
287 mjcf::Document mjcfDocument;
290 SimMJCF simMjcf{mjcfDocument, lengthScaling,
"MujocoPhysicsWorld"};
294 mujoco::MujocoSim sim;
297 std::chrono::milliseconds fixedTimeStep;
305 std::filesystem::path floorTextureFile;
309 std::map<std::string, mujoco::SimObject> obstacles;
312 std::map<std::string, mujoco::SimObject> objects;
315 std::map<std::string, mujoco::SimRobot> robots;
321 std::vector<mjContact> contacts;
virtual bool addRobotEngine(VirtualRobot::RobotPtr robot, double pid_p, double pid_i, double pid_d, const std::string &filename, bool staticRobot, bool selfCollisions) override
virtual FramedPosePtr toFramedPose(const Eigen::Matrix4f &globalPose, const std::string &robotName, const std::string &frameName) override
toFramedPose Constructs a framed pose
virtual void stepPhysicsFixedTimeStep() override
Perform one simulation step.
virtual bool synchronizeRobotNodePoses(const std::string &robotName, std::map< std::string, PoseBasePtr > &objMap) override
virtual bool hasRobot(const std::string &robotName) override
virtual bool synchronizeSimulationDataEngine() override
According to other SimulatedWorlds, this method's only job is to update contacts.
virtual void setRobotAngularVelocity(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel) override
virtual VirtualRobot::SceneObjectPtr getFloor() override
virtual void applyTorqueObject(const std::string &objectName, const Eigen::Vector3f &torque) override
virtual void setRobotNodeSimType(const std::string &robotName, const std::string &robotNodeName, VirtualRobot::SceneObject::Physics::SimulationType simType) override
MatrixXX< 4, 4, float > Matrix4f
The MujocoPhysicsWorld class encapsulates the whole physics simulation and the corresponding data.
virtual float getRobotJointLimitHi(const std::string &robotName, const std::string &nodeName) override
virtual float getRobotMaxTorque(const std::string &robotName, const std::string &nodeName) override
virtual bool synchronizeSceneObjectPoses(VirtualRobot::SceneObjectPtr currentObjEngine, std::map< std::string, PoseBasePtr > &objMap) override
virtual float getRobotJointLimitLo(const std::string &robotName, const std::string &nodeName) override
virtual std::map< std::string, float > getRobotJointAngles(const std::string &robotName) override
The SimulatedWorld class encapsulates the whole physics simulation and the corresponding data.
virtual void onLoadModel(mujoco::Model &model) override
Sets time step and fetches entity IDs.
virtual Eigen::Matrix4f getRobotNodePose(const std::string &robotName, const std::string &robotNodeName) override
virtual Eigen::Vector3f getRobotLinearVelocity(const std::string &robotName, const std::string &nodeName) override
virtual void actuateRobotJointsPos(const std::string &robotName, const std::map< std::string, float > &angles) override
virtual bool objectGraspedEngine(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName, Eigen::Matrix4f &storeLocalTransform) override
create a joint
virtual DistanceInfo getRobotNodeDistance(const std::string &robotName, const std::string &robotNodeName1, const std::string &robotNodeName2) override
virtual void applyForceRobotNode(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &force) override
virtual void applyForceObject(const std::string &objectName, const Eigen::Vector3f &force) override
virtual VirtualRobot::RobotPtr getRobot(const std::string &robotName) override
virtual bool objectReleasedEngine(const std::string &robotName, const std::string &robotNodeName, const std::string &objectName) override
remove a joint
virtual ForceTorqueDataSeq getRobotForceTorqueSensors(const std::string &robotName) override
virtual bool hasObject(const std::string &instanceName) override
virtual void onMakeData(mujoco::Model &model, mujoco::Data &data) override
virtual void setRobotPose(const std::string &robotName, const Eigen::Matrix4f &globalPose) override
virtual void actuateRobotJoints(const std::string &robotName, const std::map< std::string, float > &angles, const std::map< std::string, float > &velocities) override
virtual bool removeRobotEngine(const std::string &robotName) override
virtual bool removeObstacleEngine(const std::string &name) override
virtual Eigen::Vector3f getRobotAngularVelocity(const std::string &robotName, const std::string &nodeName) override
std::shared_ptr< MujocoPhysicsWorld > MujocoPhysicsWorldPtr
virtual bool addObstacleEngine(VirtualRobot::SceneObjectPtr o, VirtualRobot::SceneObject::Physics::SimulationType simType) override
virtual void setupFloorEngine(bool enable, const std::string &floorTexture) override
const KinematicUnitDatafieldCreator jointVelocities("jointVelocities")
virtual void setRobotLinearVelocity(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel) override
virtual void applyTorqueRobotNode(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &torque) override
virtual ~MujocoPhysicsWorld() override=default
virtual std::map< std::string, float > getRobotJointTorques(const std::string &robotName) override
virtual std::map< std::string, VirtualRobot::RobotPtr > getRobots() override
virtual std::vector< std::string > getObstacleNames() override
void initialize(int stepTimeMs, bool floorEnabled, const std::string &floorTexture)
Initialize *this.
virtual void actuateRobotJointsTorque(const std::string &robotName, const std::map< std::string, float > &torques) override
virtual std::vector< VirtualRobot::SceneObjectPtr > getObjects() override
virtual std::vector< std::string > getRobotNames() override
virtual std::map< std::string, float > getRobotJointVelocities(const std::string &robotName) override
const KinematicUnitDatafieldCreator jointAngles("jointAngles")
virtual int getContactCount() override
virtual bool getRobotStatus(const std::string &robotName, NameValueMap &jointAngles, NameValueMap &jointVelocities, NameValueMap &jointTorques, Eigen::Vector3f &linearVelocity, Eigen::Vector3f &angularVelocity) override
virtual float getRobotJointAngle(const std::string &robotName, const std::string &nodeName) override
virtual void setObjectPose(const std::string &objectName, const Eigen::Matrix4f &globalPose) override
virtual void actuateRobotJointsVel(const std::string &robotName, const std::map< std::string, float > &velocities) override
boost::intrusive_ptr< SceneObject > SceneObjectPtr
virtual void setObjectSimType(const std::string &objectName, VirtualRobot::SceneObject::Physics::SimulationType simType) override
virtual void setRobotAngularVelocityRobotRootFrame(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel) override
virtual Eigen::Matrix4f getRobotPose(const std::string &robotName) override
virtual void setRobotMaxTorque(const std::string &robotName, const std::string &nodeName, float maxTorque) override
virtual float getRobotJointVelocity(const std::string &robotName, const std::string &nodeName) override
const KinematicUnitDatafieldCreator jointTorques("jointTorques")
virtual int getFixedTimeStepMS() override
virtual bool updateForceTorqueSensor(ForceTorqueInfo &ftInfo) override
virtual bool synchronizeObjects() override
virtual DistanceInfo getDistance(const std::string &robotName, const std::string &robotNodeName, const std::string &worldObjectName) override
virtual bool hasRobotNode(const std::string &robotName, const std::string &robotNodeName) override
virtual float getRobotMass(const std::string &robotName) override
This file offers overloads of toIce() and fromIce() functions for STL container types.
virtual std::vector< SimDynamics::DynamicsEngine::DynamicsContactInfo > copyContacts() override
virtual void stepPhysicsRealTime() override
Perform one simulation step.
std::shared_ptr< class Robot > RobotPtr
virtual Eigen::Matrix4f getObjectPose(const std::string &objectName) override
virtual void setRobotLinearVelocityRobotRootFrame(const std::string &robotName, const std::string &robotNodeName, const Eigen::Vector3f &vel) override