Go to the documentation of this file.
17 #ifndef GAZEBO_PHYSICS_WORLD_HH_
18 #define GAZEBO_PHYSICS_WORLD_HH_
27 #include <boost/enable_shared_from_this.hpp>
74 class GZ_PHYSICS_VISIBLE
World :
75 public boost::enable_shared_from_this<World>
80 public:
explicit World(
const std::string &_name =
"");
88 public:
void Load(sdf::ElementPtr _sdf);
92 public:
const sdf::ElementPtr SDF();
97 public:
void Save(
const std::string &_filename);
107 public:
void Run(
const unsigned int _iterations = 0);
111 public:
bool Running()
const;
124 public:
void Clear();
128 public: std::string Name()
const;
153 public: ignition::math::Vector3d Gravity()
const;
157 public:
void SetGravity(
const ignition::math::Vector3d &_gravity);
161 public:
void SetGravitySDF(
const ignition::math::Vector3d &_gravity);
165 public:
virtual ignition::math::Vector3d MagneticField()
const;
169 public:
void SetMagneticField(
const ignition::math::Vector3d &_mag);
173 public:
unsigned int ModelCount()
const;
180 public:
ModelPtr ModelByIndex(
const unsigned int _index)
const;
184 public:
Model_V Models()
const;
188 public:
unsigned int LightCount()
const;
192 public:
Light_V Lights()
const;
201 public:
void ResetTime();
204 public:
void Reset();
208 public:
void PrintEntityTree();
233 public:
bool IsPaused()
const;
237 public:
void SetPaused(
const bool _p);
244 public:
BasePtr BaseByName(
const std::string &_name)
const;
251 public:
ModelPtr ModelByName(
const std::string &_name)
const;
258 public:
LightPtr LightByName(
const std::string &_name)
const;
265 public:
EntityPtr EntityByName(
const std::string &_name)
const;
275 const ignition::math::Vector3d &_pt)
const;
283 const ignition::math::Vector3d &_pt)
const;
287 public:
void SetState(
const WorldState &_state);
292 public:
void InsertModelFile(
const std::string &_sdfFilename);
297 public:
void InsertModelString(
const std::string &_sdfString);
302 public:
void InsertModelSDF(
const sdf::SDF &_sdf);
307 public: std::string StripWorldName(
const std::string &_name)
const;
312 public:
void EnableAllModels();
317 public:
void DisableAllModels();
321 public:
void Step(
const unsigned int _steps);
327 public:
void LoadPlugin(
const std::string &_filename,
328 const std::string &_name,
329 sdf::ElementPtr _sdf);
333 public:
void RemovePlugin(
const std::string &_name);
337 public: std::mutex &WorldPoseMutex()
const;
341 public:
bool PhysicsEnabled()
const;
345 public:
void SetPhysicsEnabled(
const bool _enable);
349 public:
bool WindEnabled()
const;
353 public:
void SetWindEnabled(
const bool _enable);
357 public:
bool AtmosphereEnabled()
const;
361 public:
void SetAtmosphereEnabled(
const bool _enable);
364 public:
void UpdateStateSDF();
368 public:
bool IsLoaded()
const;
372 public:
void ClearModels();
394 public: uint32_t Iterations()
const;
398 public: msgs::Scene SceneMsg()
const;
404 public:
void RunBlocking(
const unsigned int _iterations = 0);
410 public:
void RemoveModel(
ModelPtr _model);
416 public:
void RemoveModel(
const std::string &_name);
420 public:
void ResetPhysicsStates();
428 public:
void _AddDirty(
Entity *_entity);
432 public:
bool SensorsInitialized()
const;
438 public:
void _SetSensorsInitialized(
const bool _init);
449 public: std::string UniqueModelName(
const std::string &_name);
458 private:
ModelPtr ModelById(
const unsigned int _id)
const;
464 private:
void LoadPlugins();
469 private:
void LoadEntities(sdf::ElementPtr _sdf,
BasePtr _parent);
481 public:
LightPtr LoadLight(
const sdf::ElementPtr &_sdf,
497 private:
void RunLoop();
500 private:
void Step();
503 private:
void LogStep();
506 private:
void Update();
510 private:
void OnPause(
bool _p);
513 private:
void OnStep();
517 private:
void OnControl(ConstWorldControlPtr &_data);
521 private:
void OnPlaybackControl(ConstLogPlaybackControlPtr &_data);
525 private:
void OnRequest(ConstRequestPtr &_msg);
531 private:
void BuildSceneMsg(msgs::Scene &_scene,
BasePtr _entity);
535 private:
void JointLog(ConstJointPtr &_msg);
539 private:
void OnFactoryMsg(ConstFactoryPtr &_data);
543 private:
void OnModelMsg(ConstModelPtr &_msg);
546 private:
void ModelUpdateTBB();
549 private:
void ModelUpdateSingleLoop();
553 private:
void LoadPlugin(sdf::ElementPtr _sdf);
558 private:
void FillModelMsg(msgs::Model &_msg,
ModelPtr _model);
562 private:
void ProcessEntityMsgs();
566 private:
void ProcessRequestMsgs();
570 private:
void ProcessFactoryMsgs();
574 private:
void ProcessModelMsgs();
578 private:
void ProcessLightFactoryMsgs();
582 private:
void ProcessLightModifyMsgs();
586 private:
void ProcessPlaybackControlMsgs();
589 private:
bool OnLog(std::ostringstream &_stream);
593 private:
void LogModelResources();
596 private:
void ProcessMessages();
599 private:
void PublishWorldStats();
602 private:
void LogWorker();
605 private:
void RegisterIntrospectionItems();
608 private:
void UnregisterIntrospectionItems();
613 private:
void OnLightFactoryMsg(ConstLightPtr &_msg);
618 private:
void OnLightModifyMsg(ConstLightPtr &_msg);
636 private:
bool PluginInfoService(
const ignition::msgs::StringMsg &_request,
637 ignition::msgs::Plugin_V &_plugins);
641 private: std::unique_ptr<WorldPrivate> dataPtr;
void _AddDirty(Entity *_entity)
boost::shared_ptr< Actor > ActorPtr
Definition: PhysicsTypes.hh:97
A complete URI.
Definition: URI.hh:176
PhysicsEnginePtr Physics() const
Return the physics engine.
Forward declarations for the common classes.
Definition: Animation.hh:26
void PublishModelPose(physics::ModelPtr _model)
Publish pose updates for a model.
A Time class, can be used to hold wall- or sim-time. stored as sec and nano-sec.
Definition: Time.hh:47
void SetPhysicsEnabled(const bool _enable)
enable/disable physics engine during World::Update.
Base type.
Definition: Base.hh:77
void InsertModelSDF(const sdf::SDF &_sdf)
Insert a model using SDF.
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:93
std::vector< ModelPtr > Model_V
Definition: PhysicsTypes.hh:205
msgs::Scene SceneMsg() const
Get the current scene in message form.
common::SphericalCoordinatesPtr SphericalCoords() const
Return the spherical coordinates converter.
Forward declarations for transport.
void Init()
Initialize the world.
bool Running() const
Return the running state of the world.
void ResetEntities(Base::EntityType _type=Base::BASE)
Reset with options.
std::mutex & WorldPoseMutex() const
Get the set world pose mutex.
void Run(const unsigned int _iterations=0)
Run the world in a thread.
default namespace for gazebo
void SetWindEnabled(const bool _enable)
enable/disable wind.
bool IsLoaded() const
Return true if the world has been loaded.
void PublishModelScale(physics::ModelPtr _model)
Publish scale updates for a model.
void UpdateStateSDF()
Update the state SDF value from the current state.
bool WindEnabled() const
check if wind is enabled/disabled.
void Step(const unsigned int _steps)
Step the world forward in time.
void DisableAllModels()
Disable all links in all the models.
LightPtr LoadLight(const sdf::ElementPtr &_sdf, const BasePtr &_parent)
Load a light.
void PrintEntityTree()
Print Entity tree.
void InsertModelString(const std::string &_sdfString)
Insert a model from an SDF string.
void SetAtmosphereEnabled(const bool _enable)
enable/disable atmosphere model.
void EnableAllModels()
Enable all links in all the models.
void SetGravity(const ignition::math::Vector3d &_gravity)
Set the gravity vector.
boost::shared_ptr< Road > RoadPtr
Definition: PhysicsTypes.hh:161
This models a base atmosphere class to serve as a common interface to any derived atmosphere models.
Definition: Atmosphere.hh:42
void RemoveModel(ModelPtr _model)
Remove a model.
unsigned int LightCount() const
Get the number of lights.
boost::shared_ptr< Light > LightPtr
Definition: PhysicsTypes.hh:105
The world provides access to all other object within a simulated environment.
Definition: World.hh:74
PresetManagerPtr PresetMgr() const
Return the preset manager.
void ResetPhysicsStates()
Reset the velocity, acceleration, force and torque of all child models.
void Save(const std::string &_filename)
Save a world to a file.
void Load(sdf::ElementPtr _sdf)
Load the world using SDF parameters.
Light_V Lights() const
Get a list of all the lights.
void SetSimTime(const common::Time &_t)
Set the sim time.
boost::shared_ptr< SphericalCoordinates > SphericalCoordinatesPtr
Definition: CommonTypes.hh:121
Base class for wind.
Definition: Wind.hh:41
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:77
void Fini()
Finalize the world.
Simbody physics engine.
Definition: SimbodyPhysics.hh:42
common::Time PauseTime() const
Get the amount of time simulation has been paused.
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
void Clear()
Remove all entities from the world.
void ResetTime()
Reset simulation time back to zero.
void Stop()
Stop the world.
Model_V Models() const
Get a list of all the models.
void _SetSensorsInitialized(const bool _init)
void RemovePlugin(const std::string &_name)
Remove a running plugin.
EntityPtr EntityBelowPoint(const ignition::math::Vector3d &_pt) const
Get the nearest entity below a point.
void SetMagneticField(const ignition::math::Vector3d &_mag)
Set the magnetic field vector.
EntityPtr EntityByName(const std::string &_name) const
Get a pointer to an Entity based on a name.
boost::shared_ptr< Entity > EntityPtr
Definition: PhysicsTypes.hh:85
void LoadPlugin(const std::string &_filename, const std::string &_name, sdf::ElementPtr _sdf)
Load a plugin.
bool IsPaused() const
Returns the state of the simulation true if paused.
Base class for all physics objects in Gazebo.
Definition: Entity.hh:52
common::Time StartTime() const
Get the wall time simulation was started.
void Reset()
Reset time and model poses, configurations in simulation.
void SetState(const WorldState &_state)
Set the current world state.
boost::shared_ptr< PhysicsEngine > PhysicsEnginePtr
Definition: PhysicsTypes.hh:125
void SetGravitySDF(const ignition::math::Vector3d &_gravity)
Set the gravity sdf value.
physics::Wind & Wind() const
Get a reference to the wind used by the world.
ignition::math::Vector3d Gravity() const
Return the gravity vector.
void PublishLightPose(const physics::LightPtr _light)
Publish pose updates for a light.
BasePtr BaseByName(const std::string &_name) const
Get an element by name.
uint32_t Iterations() const
Get the total number of iterations.
void InsertModelFile(const std::string &_sdfFilename)
Insert a model from an SDF file.
void ClearModels()
Remove all entities from the world.
std::string StripWorldName(const std::string &_name) const
Return a version of the name with "<world_name>::" removed.
Store state information of a physics::World object.
Definition: WorldState.hh:47
EntityType
Unique identifiers for all entity types.
Definition: Base.hh:75
common::Time RealTime() const
Get the real time (elapsed time).
ModelPtr ModelByIndex(const unsigned int _index) const
Get a model based on an index.
LightPtr LightByName(const std::string &_name) const
Get a light by name.
unsigned int ModelCount() const
Get the number of models.
World(const std::string &_name="")
Constructor.
void SetPaused(const bool _p)
Set whether the simulation is paused.
ModelPtr ModelByName(const std::string &_name) const
Get a model by name.
void RunBlocking(const unsigned int _iterations=0)
Run the world.
boost::shared_ptr< PresetManager > PresetManagerPtr
Definition: PhysicsTypes.hh:129
bool AtmosphereEnabled() const
check if atmosphere model is enabled/disabled.
const sdf::ElementPtr SDF()
Get the SDF of the world in the current state.
bool SensorsInitialized() const
Get whether sensors have been initialized.
std::string UniqueModelName(const std::string &_name)
Get a model name which doesn't equal any existing model's name, by appending numbers to the given nam...
common::Time SimTime() const
Get the world simulation time, note if you want the PC wall clock call common::Time::GetWallTime.
DART Link class.
Definition: DARTLink.hh:39
bool PhysicsEnabled() const
check if physics engine is enabled/disabled.
std::string Name() const
Get the name of the world.
common::URI URI() const
Return the URI of the world.
std::vector< LightPtr > Light_V
Definition: PhysicsTypes.hh:221
ModelPtr ModelBelowPoint(const ignition::math::Vector3d &_pt) const
Get the nearest model below and not encapsulating a point.
physics::Atmosphere & Atmosphere() const
Get a reference to the atmosphere model used by the world.
virtual ignition::math::Vector3d MagneticField() const
Return the magnetic field vector.