25 #include <boost/thread.hpp>
26 #include <boost/enable_shared_from_this.hpp>
27 #include <boost/shared_ptr.hpp>
64 public:
explicit World(
const std::string &_name =
"");
72 public:
void Load(sdf::ElementPtr _sdf);
77 public:
void Save(
const std::string &_filename);
87 public:
void Run(
unsigned int _iterations = 0);
91 public:
bool GetRunning()
const;
104 public:
void Clear();
108 public: std::string GetName()
const;
121 public:
unsigned int GetModelCount()
const;
128 public:
ModelPtr GetModel(
unsigned int _index)
const;
132 public:
Model_V GetModels()
const;
141 public:
void ResetTime();
144 public:
void Reset();
149 public:
EntityPtr GetSelectedEntity()
const;
153 public:
void PrintEntityTree();
178 public:
bool IsPaused()
const;
182 public:
void SetPaused(
bool _p);
189 public:
BasePtr GetByName(
const std::string &_name);
196 public:
ModelPtr GetModel(
const std::string &_name);
203 public:
EntityPtr GetEntity(
const std::string &_name);
223 public:
void SetState(
const WorldState &_state);
228 public:
void InsertModelFile(
const std::string &_sdfFilename);
233 public:
void InsertModelString(
const std::string &_sdfString);
238 public:
void InsertModelSDF(
const sdf::SDF &_sdf);
243 public: std::string StripWorldName(
const std::string &_name)
const;
248 public:
void EnableAllModels();
253 public:
void DisableAllModels();
262 public:
void Step(
unsigned int _steps);
268 public:
void LoadPlugin(
const std::string &_filename,
269 const std::string &_name,
270 sdf::ElementPtr _sdf);
274 public:
void RemovePlugin(
const std::string &_name);
279 {
return this->setWorldPoseMutex;}
284 {
return this->enablePhysicsEngine;}
289 {this->enablePhysicsEngine = _enable;}
292 public:
void UpdateStateSDF();
296 public:
bool IsLoaded()
const;
300 public:
void ClearModels();
310 public: uint32_t GetIterations()
const;
314 public: msgs::Scene GetSceneMsg()
const;
320 public:
void RunBlocking(
unsigned int _iterations = 0);
326 public:
void RemoveModel(
ModelPtr _model);
332 public:
void RemoveModel(
const std::string &_name);
341 private:
ModelPtr GetModelById(
unsigned int _id);
347 private:
void LoadPlugins();
352 private:
void LoadEntities(sdf::ElementPtr _sdf,
BasePtr _parent);
373 private:
void RunLoop();
376 private:
void Step();
379 private:
void LogStep();
382 private:
void Update();
386 private:
void OnPause(
bool _p);
389 private:
void OnStep();
393 private:
void OnControl(ConstWorldControlPtr &_data);
397 private:
void OnRequest(ConstRequestPtr &_msg);
401 private:
void SetSelectedEntityCB(
const std::string &_name);
407 private:
void BuildSceneMsg(msgs::Scene &_scene,
BasePtr _entity);
411 private:
void JointLog(ConstJointPtr &_msg);
415 private:
void OnFactoryMsg(ConstFactoryPtr &_data);
419 private:
void OnModelMsg(ConstModelPtr &_msg);
422 private:
void ModelUpdateTBB();
425 private:
void ModelUpdateSingleLoop();
429 private:
void LoadPlugin(sdf::ElementPtr _sdf);
434 private:
void FillModelMsg(msgs::Model &_msg,
ModelPtr _model);
438 private:
void ProcessEntityMsgs();
442 private:
void ProcessRequestMsgs();
446 private:
void ProcessFactoryMsgs();
450 private:
void ProcessModelMsgs();
453 private:
bool OnLog(std::ostringstream &_stream);
456 private:
void ProcessMessages();
459 private:
void PublishWorldStats();
462 private:
void LogWorker();
466 private:
void OnLightMsg(ConstLightPtr &_msg);
481 private: boost::thread *thread;
490 private: std::string name;
505 private:
int stepInc;
559 private: msgs::WorldStatistics worldStatsMsg;
562 private: msgs::Scene sceneMsg;
565 private: void (
World::*modelUpdateFunc)();
577 private: boost::recursive_mutex *receiveMutex;
580 private: boost::mutex *loadModelMutex;
586 private: boost::mutex *setWorldPoseMutex;
594 private: boost::recursive_mutex *worldUpdateMutex;
597 private: sdf::ElementPtr sdf;
600 private: std::vector<WorldPluginPtr> plugins;
603 private: std::list<std::string> deleteEntity;
611 private: std::list<msgs::Request> requestMsgs;
614 private: std::list<msgs::Factory> factoryMsgs;
617 private: std::list<msgs::Model> modelMsgs;
620 private:
bool needsReset;
623 private:
bool resetAll;
626 private:
bool resetTimeOnly;
629 private:
bool resetModelOnly;
632 private:
bool initialized;
635 private:
bool loaded;
638 private:
bool enablePhysicsEngine;
644 private:
bool pluginsLoaded;
656 private: std::deque<WorldState> states[2];
659 private:
int currentStateBuffer;
662 private:
int stateToggle;
664 private: sdf::ElementPtr logPlayStateSDF;
669 private: sdf::SDFPtr factorySDF;
672 private: std::set<ModelPtr> publishModelPoses;
678 private: uint64_t iterations;
681 private: uint64_t stopIterations;
684 private: boost::condition_variable logCondition;
688 private: boost::condition_variable logContinueCondition;
691 private: uint64_t logPrevIteration;
697 private: boost::mutex logMutex;
700 private: boost::mutex logBufferMutex;
703 private: boost::mutex entityDeleteMutex;
706 private: boost::thread *logThread;
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:65
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:81
The Vector3 class represents the generic vector containing 3 elements.
Definition: Vector3.hh:43
void EnablePhysicsEngine(bool _enable)
enable/disable physics engine during World::Update.
Definition: World.hh:288
boost::shared_ptr< Subscriber > SubscriberPtr
Definition: TransportTypes.hh:48
Forward declarations for transport.
#define GAZEBO_DEPRECATED(version)
Definition: CommonTypes.hh:44
Information for use in an update event.
Definition: UpdateInfo.hh:30
default namespace for gazebo
bool GetEnablePhysicsEngine()
check if physics engine is enabled/disabled.
Definition: World.hh:283
boost::shared_ptr< PhysicsEngine > PhysicsEnginePtr
Definition: PhysicsTypes.hh:105
The world provides access to all other object within a simulated environment.
Definition: World.hh:59
boost::shared_ptr< Entity > EntityPtr
Definition: PhysicsTypes.hh:73
std::vector< ConnectionPtr > Connection_V
Definition: CommonTypes.hh:148
boost::shared_ptr< Node > NodePtr
Definition: TransportTypes.hh:52
EntityType
Unique identifiers for all entity types.
Definition: Base.hh:77
boost::shared_ptr< Actor > ActorPtr
Definition: PhysicsTypes.hh:85
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
std::vector< ModelPtr > Model_V
Definition: PhysicsTypes.hh:161
boost::shared_ptr< Publisher > PublisherPtr
Definition: TransportTypes.hh:44
Store state information of a physics::World object.
Definition: WorldState.hh:46
boost::mutex * GetSetWorldPoseMutex() const
Get the set world pose mutex.
Definition: World.hh:278
boost::shared_ptr< SphericalCoordinates > SphericalCoordinatesPtr
Definition: CommonTypes.hh:135
Base type.
Definition: Base.hh:79
#define GAZEBO_VISIBLE
Use to represent "symbol visible" if supported.
Definition: system.hh:48
std::list< Entity * > dirtyPoses
when physics engine makes an update and changes a link pose, this flag is set to trigger Entity::SetW...
Definition: World.hh:608
A Time class, can be used to hold wall- or sim-time.
Definition: Time.hh:43
boost::shared_ptr< RayShape > RayShapePtr
Definition: PhysicsTypes.hh:113
GAZEBO_VISIBLE void stop() GAZEBO_DEPRECATED(2.3)
Deprecated.
boost::shared_ptr< Road > RoadPtr
Definition: PhysicsTypes.hh:129