Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
mvsim::World Class Reference

#include <World.h>

Inheritance diagram for mvsim::World:
Inheritance graph
[legend]

Classes

struct  GUI
 
struct  LightOptions
 
struct  TGUI_Options
 
struct  TGUIKeyEvent
 
struct  TUpdateGUIParams
 
struct  XmlParserContext
 

Public Types

Public types
using VehicleList = std::multimap< std::string, VehicleBase::Ptr >
 
using WorldElementList = std::list< WorldElementBase::Ptr >
 
using BlockList = std::multimap< std::string, Block::Ptr >
 
using SimulableList = std::multimap< std::string, Simulable::Ptr >
 

Public Member Functions

mvsim::ClientcommsClient ()
 
const mvsim::ClientcommsClient () const
 
void connectToServer ()
 
void free_opengl_resources ()
 
bool headless () const
 
void headless (bool setHeadless)
 
auto & physical_objects_mtx ()
 
bool sensor_has_to_create_egl_context ()
 
const std::map< std::string, std::string > & user_defined_variables () const
 
Initialization, simulation set-up
 World ()
 Default ctor: inits an empty world. More...
 
 ~World ()
 Dtor. More...
 
void clear_all ()
 
void load_from_XML_file (const std::string &xmlFileNamePath)
 
void internal_initialize ()
 
void load_from_XML (const std::string &xml_text, const std::string &fileNameForPath=std::string("."))
 
Access inner working objects
std::unique_ptr< b2World > & getBox2DWorld ()
 
const std::unique_ptr< b2World > & getBox2DWorld () const
 
b2BodygetBox2DGroundBody ()
 
const VehicleListgetListOfVehicles () const
 
VehicleListgetListOfVehicles ()
 
const BlockListgetListOfBlocks () const
 
BlockListgetListOfBlocks ()
 
const WorldElementListgetListOfWorldElements () const
 
SimulableListgetListOfSimulableObjects ()
 Always lock/unlock getListOfSimulableObjectsMtx() before using this: More...
 
const SimulableListgetListOfSimulableObjects () const
 
auto & getListOfSimulableObjectsMtx ()
 
mrpt::system::CTimeLogger & getTimeLogger ()
 
std::string local_to_abs_path (const std::string &in_path) const
 
std::string xmlPathToActualPath (const std::string &modelURI) const
 

Private Types

using xml_tag_parser_function_t = std::function< void(const XmlParserContext &)>
 

Private Member Functions

void insertBlock (const Block::Ptr &block)
 
void internal_advertiseServices ()
 
mrpt::math::TPoint2D internal_gui_on_image (const std::string &label, const mrpt::img::CImage &im, int winPosX)
 
void internal_gui_on_observation (const Simulable &veh, const mrpt::obs::CObservation::Ptr &obs)
 
void internal_gui_on_observation_3Dscan (const Simulable &veh, const std::shared_ptr< mrpt::obs::CObservation3DRangeScan > &obs)
 
void internal_gui_on_observation_image (const Simulable &veh, const std::shared_ptr< mrpt::obs::CObservationImage > &obs)
 
void internal_one_timestep (double dt)
 
void internal_recursive_parse_XML (const XmlParserContext &ctx)
 This will parse a main XML file, or its included. More...
 
void parse_tag_block (const XmlParserContext &ctx)
 
void parse_tag_block_class (const XmlParserContext &ctx)
 
void parse_tag_element (const XmlParserContext &ctx)
 <element> More...
 
void parse_tag_for (const XmlParserContext &ctx)
 
void parse_tag_gui (const XmlParserContext &ctx)
 
void parse_tag_if (const XmlParserContext &ctx)
 
void parse_tag_include (const XmlParserContext &ctx)
 
void parse_tag_lights (const XmlParserContext &ctx)
 
void parse_tag_sensor (const XmlParserContext &ctx)
 <sensor> More...
 
void parse_tag_variable (const XmlParserContext &ctx)
 
void parse_tag_vehicle (const XmlParserContext &ctx)
 <vehicle> More...
 
void parse_tag_vehicle_class (const XmlParserContext &ctx)
 
void parse_tag_walls (const XmlParserContext &ctx)
 
void process_load_walls (const rapidxml::xml_node< char > &node)
 
void register_standard_xml_tag_parsers ()
 
void register_tag_parser (const std::string &xmlTagName, const xml_tag_parser_function_t &f)
 
void register_tag_parser (const std::string &xmlTagName, void(World::*f)(const XmlParserContext &ctx))
 
void setLightDirectionFromAzimuthElevation (const float azimuth, const float elevation)
 

Private Attributes

b2Bodyb2_ground_body_ = nullptr
 
int b2dPosIters_ = 3
 
int b2dVelIters_ = 8
 
std::string basePath_ {"."}
 
BlockList blocks_
 
std::unique_ptr< b2Worldbox2d_world_
 
std::vector< on_observation_callback_tcallbacksOnObservation_
 
mvsim::Client client_ {"World"}
 
std::recursive_mutex copy_of_objects_dynstate_mtx_
 
std::map< std::string, mrpt::math::TPose3D > copy_of_objects_dynstate_pose_
 Updated in internal_one_step() More...
 
std::map< std::string, mrpt::math::TTwist2D > copy_of_objects_dynstate_twist_
 
std::set< std::string > copy_of_objects_had_collision_
 
mrpt::opengl::CSetOfObjects::Ptr glUserObjsPhysical_
 
mrpt::opengl::CSetOfObjects::Ptr glUserObjsViz_
 
double gravity_ = 9.81
 
GUI gui_ {*this}
 gui state More...
 
std::map< std::string, nanogui::Window * > guiObsViz_
 by sensorLabel More...
 
TGUI_Options guiOptions_
 
bool initialized_ = false
 
LightOptions lightOptions_
 
const TParameterDefinitions otherWorldParams_
 
RemoteResourcesManager remoteResources_
 
std::set< std::string > reset_collision_flags_
 
std::mutex reset_collision_flags_mtx_
 
std::string serverAddress_ = "localhost"
 
std::optional< double > simul_start_wallclock_time_
 
std::mutex simul_time_mtx_
 
SimulableList simulableObjects_
 
std::mutex simulableObjectsMtx_
 
std::mutex simulationStepRunningMtx_
 
double simulTime_ = 0
 
double simulTimestep_ = 0
 
mrpt::system::CTicTac timer_iteration_
 
mrpt::system::CTimeLogger timlogger_ {true , "mvsim::World"}
 
std::map< std::string, std::string > userDefinedVariables_
 
VehicleList vehicles_
 
std::recursive_mutex world_cs_
 
WorldElementList worldElements_
 
mrpt::opengl::COpenGLScene worldPhysical_
 
std::recursive_mutex worldPhysicalMtx_
 
mrpt::opengl::COpenGLScene::Ptr worldVisual_
 
std::map< std::string, xml_tag_parser_function_txmlParsers_
 

Friends

class Block
 
class VehicleBase
 

Simulation execution

mrpt::opengl::CSetOfObjects::Ptr guiUserObjectsPhysical_
 
mrpt::opengl::CSetOfObjects::Ptr guiUserObjectsViz_
 
std::mutex guiUserObjectsMtx_
 
std::mutex pendingRunSensorsOn3DSceneMtx_
 
bool pendingRunSensorsOn3DScene_ = false
 
std::string guiMsgLines_
 
std::mutex guiMsgLinesMtx_
 
std::thread gui_thread_
 
std::atomic_bool gui_thread_running_ = false
 
std::atomic_bool simulator_must_close_ = false
 
std::mutex gui_thread_start_mtx_
 
std::vector< std::function< void(void)> > guiUserPendingTasks_
 
std::mutex guiUserPendingTasksMtx_
 
TGUIKeyEvent lastKeyEvent_
 
std::atomic_bool lastKeyEventValid_ = false
 
std::mutex lastKeyEventMtx_
 
double get_simul_time () const
 
void force_set_simul_time (double newSimulatedTime)
 Normally should not be called by users, for internal use only. More...
 
mrpt::Clock::time_point get_simul_timestamp () const
 
double get_simul_timestep () const
 Simulation fixed-time interval for numerical integration. More...
 
void set_simul_timestep (double timestep)
 
double get_gravity () const
 
void set_gravity (double accel)
 
void run_simulation (double dt)
 
void update_GUI (TUpdateGUIParams *params=nullptr)
 
const mrpt::gui::CDisplayWindowGUI::Ptr & gui_window () const
 
const mrpt::math::TPoint3D & gui_mouse_point () const
 
void internalGraphicsLoopTasksForSimulation ()
 
void internalRunSensorsOn3DScene (mrpt::opengl::COpenGLScene &physicalObjects)
 
void internalUpdate3DSceneObjects (mrpt::opengl::COpenGLScene &viz, mrpt::opengl::COpenGLScene &physical)
 
void internal_GUI_thread ()
 
void internal_process_pending_gui_user_tasks ()
 
void mark_as_pending_running_sensors_on_3D_scene ()
 
void clear_pending_running_sensors_on_3D_scene ()
 
bool pending_running_sensors_on_3D_scene ()
 
bool simulator_must_close () const
 
void simulator_must_close (bool value)
 
void enqueue_task_to_run_in_gui_thread (const std::function< void(void)> &f)
 
bool is_GUI_open () const
 Forces closing the GUI window, if any. More...
 
void close_GUI ()
 a previous call to update_GUI() More...
 

Visitors API

using vehicle_visitor_t = std::function< void(VehicleBase &)>
 
using world_element_visitor_t = std::function< void(WorldElementBase &)>
 
using block_visitor_t = std::function< void(Block &)>
 
void runVisitorOnVehicles (const vehicle_visitor_t &v)
 
void runVisitorOnWorldElements (const world_element_visitor_t &v)
 
void runVisitorOnBlocks (const block_visitor_t &v)
 

Optional user hooks

using on_observation_callback_t = std::function< void(const Simulable &, const mrpt::obs::CObservation::Ptr &)>
 
void registerCallbackOnObservation (const on_observation_callback_t &f)
 
void dispatchOnObservation (const Simulable &veh, const mrpt::obs::CObservation::Ptr &obs)
 

Detailed Description

Simulation happens inside a World object. This is the central class for usage from user code, running the simulation, loading XML models, managing GUI visualization, etc. The ROS node acts as a bridge between this class and the ROS subsystem.

See: https://mvsimulator.readthedocs.io/en/latest/world.html

Definition at line 62 of file World.h.

Member Typedef Documentation

◆ block_visitor_t

using mvsim::World::block_visitor_t = std::function<void(Block&)>

Definition at line 342 of file World.h.

◆ BlockList

using mvsim::World::BlockList = std::multimap<std::string, Block::Ptr>

Map 'block-name' => block object. See getListOfBlocks()

Definition at line 287 of file World.h.

◆ on_observation_callback_t

using mvsim::World::on_observation_callback_t = std::function<void( const Simulable& , const mrpt::obs::CObservation::Ptr& )>

Definition at line 359 of file World.h.

◆ SimulableList

using mvsim::World::SimulableList = std::multimap<std::string, Simulable::Ptr>

For convenience, all elements (vehicles, world elements, blocks) are also stored here for each look-up by name

Definition at line 291 of file World.h.

◆ vehicle_visitor_t

Definition at line 340 of file World.h.

◆ VehicleList

using mvsim::World::VehicleList = std::multimap<std::string, VehicleBase::Ptr>

Map 'vehicle-name' => vehicle object. See getListOfVehicles()

Definition at line 281 of file World.h.

◆ world_element_visitor_t

Definition at line 341 of file World.h.

◆ WorldElementList

See getListOfWorldElements()

Definition at line 284 of file World.h.

◆ xml_tag_parser_function_t

using mvsim::World::xml_tag_parser_function_t = std::function<void(const XmlParserContext&)>
private

Definition at line 673 of file World.h.

Constructor & Destructor Documentation

◆ World()

World::World ( )

Default ctor: inits an empty world.

Definition at line 24 of file World.cpp.

◆ ~World()

World::~World ( )

Dtor.

Definition at line 30 of file World.cpp.

Member Function Documentation

◆ clear_all()

void World::clear_all ( )

Resets the entire simulation environment to an empty world.

Definition at line 49 of file World.cpp.

◆ clear_pending_running_sensors_on_3D_scene()

void mvsim::World::clear_pending_running_sensors_on_3D_scene ( )
inline

Definition at line 219 of file World.h.

◆ close_GUI()

void World::close_GUI ( )

a previous call to update_GUI()

Forces closing the GUI window, if any.

Definition at line 52 of file World_gui.cpp.

◆ commsClient() [1/2]

mvsim::Client& mvsim::World::commsClient ( )
inline

Definition at line 379 of file World.h.

◆ commsClient() [2/2]

const mvsim::Client& mvsim::World::commsClient ( ) const
inline

Definition at line 380 of file World.h.

◆ connectToServer()

void World::connectToServer ( )

Connect to server, advertise topics and services, etc. per the world description loaded from XML file.

Definition at line 296 of file World.cpp.

◆ dispatchOnObservation()

void mvsim::World::dispatchOnObservation ( const Simulable veh,
const mrpt::obs::CObservation::Ptr &  obs 
)
inline

Calls all registered callbacks:

Definition at line 367 of file World.h.

◆ enqueue_task_to_run_in_gui_thread()

void mvsim::World::enqueue_task_to_run_in_gui_thread ( const std::function< void(void)> &  f)
inline

Definition at line 256 of file World.h.

◆ force_set_simul_time()

void mvsim::World::force_set_simul_time ( double  newSimulatedTime)
inline

Normally should not be called by users, for internal use only.

Definition at line 107 of file World.h.

◆ free_opengl_resources()

void World::free_opengl_resources ( )

Definition at line 387 of file World.cpp.

◆ get_gravity()

double mvsim::World::get_gravity ( ) const
inline

Gravity acceleration (Default=9.8 m/s^2). Used to evaluate weights for friction, etc.

Definition at line 136 of file World.h.

◆ get_simul_time()

double mvsim::World::get_simul_time ( ) const
inline

Seconds since start of simulation.

See also
get_simul_timestamp()

Definition at line 100 of file World.h.

◆ get_simul_timestamp()

mrpt::Clock::time_point mvsim::World::get_simul_timestamp ( ) const
inline

Get the current simulation full timestamp, computed as the real wall clock timestamp at the beginning of the simulation, plus the number of seconds simulation has run.

See also
get_simul_time()

Definition at line 118 of file World.h.

◆ get_simul_timestep()

double World::get_simul_timestep ( ) const

Simulation fixed-time interval for numerical integration.

Definition at line 333 of file World.cpp.

◆ getBox2DGroundBody()

b2Body* mvsim::World::getBox2DGroundBody ( )
inline

Definition at line 302 of file World.h.

◆ getBox2DWorld() [1/2]

std::unique_ptr<b2World>& mvsim::World::getBox2DWorld ( )
inline

Definition at line 297 of file World.h.

◆ getBox2DWorld() [2/2]

const std::unique_ptr<b2World>& mvsim::World::getBox2DWorld ( ) const
inline

Definition at line 298 of file World.h.

◆ getListOfBlocks() [1/2]

const BlockList& mvsim::World::getListOfBlocks ( ) const
inline

Definition at line 305 of file World.h.

◆ getListOfBlocks() [2/2]

BlockList& mvsim::World::getListOfBlocks ( )
inline

Definition at line 306 of file World.h.

◆ getListOfSimulableObjects() [1/2]

SimulableList& mvsim::World::getListOfSimulableObjects ( )
inline

Always lock/unlock getListOfSimulableObjectsMtx() before using this:

Definition at line 313 of file World.h.

◆ getListOfSimulableObjects() [2/2]

const SimulableList& mvsim::World::getListOfSimulableObjects ( ) const
inline

Definition at line 314 of file World.h.

◆ getListOfSimulableObjectsMtx()

auto& mvsim::World::getListOfSimulableObjectsMtx ( )
inline

Definition at line 318 of file World.h.

◆ getListOfVehicles() [1/2]

const VehicleList& mvsim::World::getListOfVehicles ( ) const
inline

Definition at line 303 of file World.h.

◆ getListOfVehicles() [2/2]

VehicleList& mvsim::World::getListOfVehicles ( )
inline

Definition at line 304 of file World.h.

◆ getListOfWorldElements()

const WorldElementList& mvsim::World::getListOfWorldElements ( ) const
inline

Definition at line 307 of file World.h.

◆ getTimeLogger()

mrpt::system::CTimeLogger& mvsim::World::getTimeLogger ( )
inline

Definition at line 320 of file World.h.

◆ gui_mouse_point()

const mrpt::math::TPoint3D& mvsim::World::gui_mouse_point ( ) const
inline

Definition at line 183 of file World.h.

◆ gui_window()

const mrpt::gui::CDisplayWindowGUI::Ptr& mvsim::World::gui_window ( ) const
inline

Definition at line 178 of file World.h.

◆ headless() [1/2]

bool mvsim::World::headless ( ) const
inline

Definition at line 386 of file World.h.

◆ headless() [2/2]

void mvsim::World::headless ( bool  setHeadless)
inline

Definition at line 387 of file World.h.

◆ insertBlock()

void World::insertBlock ( const Block::Ptr block)
private

Definition at line 317 of file World.cpp.

◆ internal_advertiseServices()

void World::internal_advertiseServices ( )
private

Definition at line 190 of file World_services.cpp.

◆ internal_gui_on_image()

mrpt::math::TPoint2D World::internal_gui_on_image ( const std::string &  label,
const mrpt::img::CImage &  im,
int  winPosX 
)
private

Definition at line 985 of file World_gui.cpp.

◆ internal_gui_on_observation()

void World::internal_gui_on_observation ( const Simulable veh,
const mrpt::obs::CObservation::Ptr &  obs 
)
private

Definition at line 921 of file World_gui.cpp.

◆ internal_gui_on_observation_3Dscan()

void World::internal_gui_on_observation_3Dscan ( const Simulable veh,
const std::shared_ptr< mrpt::obs::CObservation3DRangeScan > &  obs 
)
private

Definition at line 940 of file World_gui.cpp.

◆ internal_gui_on_observation_image()

void World::internal_gui_on_observation_image ( const Simulable veh,
const std::shared_ptr< mrpt::obs::CObservationImage > &  obs 
)
private

Definition at line 971 of file World_gui.cpp.

◆ internal_GUI_thread()

void World::internal_GUI_thread ( )

Definition at line 444 of file World_gui.cpp.

◆ internal_initialize()

void World::internal_initialize ( )

Definition at line 71 of file World.cpp.

◆ internal_one_timestep()

void World::internal_one_timestep ( double  dt)
private

Runs one individual time step

Definition at line 146 of file World.cpp.

◆ internal_process_pending_gui_user_tasks()

void World::internal_process_pending_gui_user_tasks ( )

Definition at line 744 of file World_gui.cpp.

◆ internal_recursive_parse_XML()

void World::internal_recursive_parse_XML ( const XmlParserContext ctx)
private

This will parse a main XML file, or its included.

Definition at line 119 of file World_load_xml.cpp.

◆ internalGraphicsLoopTasksForSimulation()

void World::internalGraphicsLoopTasksForSimulation ( )

Update 3D vehicles, sensors, run render-based sensors, etc: Called from World_gui thread in normal mode, or mvsim-cli in headless mode.

Definition at line 1036 of file World_gui.cpp.

◆ internalRunSensorsOn3DScene()

void World::internalRunSensorsOn3DScene ( mrpt::opengl::COpenGLScene &  physicalObjects)

Definition at line 757 of file World_gui.cpp.

◆ internalUpdate3DSceneObjects()

void World::internalUpdate3DSceneObjects ( mrpt::opengl::COpenGLScene &  viz,
mrpt::opengl::COpenGLScene &  physical 
)

Definition at line 771 of file World_gui.cpp.

◆ is_GUI_open()

bool World::is_GUI_open ( ) const

Forces closing the GUI window, if any.

Return true if the GUI window is open, after

Definition at line 50 of file World_gui.cpp.

◆ load_from_XML()

void World::load_from_XML ( const std::string &  xml_text,
const std::string &  fileNameForPath = std::string(".") 
)

Load an entire world description into this object from a specification in XML format.

Parameters
[in]fileNameForPathOptionally, provide the full path to an XML file from which to take relative paths.
Exceptions
std::exceptionOn any error, with what() giving a descriptive error message

Definition at line 34 of file World_load_xml.cpp.

◆ load_from_XML_file()

void World::load_from_XML_file ( const std::string &  xmlFileNamePath)

Load an entire world description into this object from a specification in XML format.

Parameters
[in]xmlFileNamePathThe relative or full path to the XML file.
Exceptions
std::exceptionOn any error, with what() giving a descriptive error message

Definition at line 28 of file World_load_xml.cpp.

◆ local_to_abs_path()

std::string World::local_to_abs_path ( const std::string &  s_in) const

Replace macros, prefix the base_path if input filename is relative, etc.

See also
xmlPathToActualPath

Replace macros, prefix the base_path if input filename is relative, etc.

Definition at line 252 of file World.cpp.

◆ mark_as_pending_running_sensors_on_3D_scene()

void mvsim::World::mark_as_pending_running_sensors_on_3D_scene ( )
inline

Definition at line 213 of file World.h.

◆ parse_tag_block()

void World::parse_tag_block ( const XmlParserContext ctx)
private

Definition at line 203 of file World_load_xml.cpp.

◆ parse_tag_block_class()

void World::parse_tag_block_class ( const XmlParserContext ctx)
private

Definition at line 210 of file World_load_xml.cpp.

◆ parse_tag_element()

void World::parse_tag_element ( const XmlParserContext ctx)
private

<element>

Definition at line 153 of file World_load_xml.cpp.

◆ parse_tag_for()

void World::parse_tag_for ( const XmlParserContext ctx)
private

Definition at line 282 of file World_load_xml.cpp.

◆ parse_tag_gui()

void World::parse_tag_gui ( const XmlParserContext ctx)
private

Definition at line 216 of file World_load_xml.cpp.

◆ parse_tag_if()

void World::parse_tag_if ( const XmlParserContext ctx)
private

Definition at line 321 of file World_load_xml.cpp.

◆ parse_tag_include()

void World::parse_tag_include ( const XmlParserContext ctx)
private

Definition at line 233 of file World_load_xml.cpp.

◆ parse_tag_lights()

void World::parse_tag_lights ( const XmlParserContext ctx)
private

Definition at line 222 of file World_load_xml.cpp.

◆ parse_tag_sensor()

void World::parse_tag_sensor ( const XmlParserContext ctx)
private

<sensor>

Definition at line 188 of file World_load_xml.cpp.

◆ parse_tag_variable()

void World::parse_tag_variable ( const XmlParserContext ctx)
private

Definition at line 263 of file World_load_xml.cpp.

◆ parse_tag_vehicle()

void World::parse_tag_vehicle ( const XmlParserContext ctx)
private

<vehicle>

Definition at line 164 of file World_load_xml.cpp.

◆ parse_tag_vehicle_class()

void World::parse_tag_vehicle_class ( const XmlParserContext ctx)
private

<vehicle:class>

Definition at line 182 of file World_load_xml.cpp.

◆ parse_tag_walls()

void World::parse_tag_walls ( const XmlParserContext ctx)
private

Definition at line 228 of file World_load_xml.cpp.

◆ pending_running_sensors_on_3D_scene()

bool mvsim::World::pending_running_sensors_on_3D_scene ( )
inline

Definition at line 225 of file World.h.

◆ physical_objects_mtx()

auto& mvsim::World::physical_objects_mtx ( )
inline

Definition at line 384 of file World.h.

◆ process_load_walls()

void World::process_load_walls ( const rapidxml::xml_node< char > &  node)
private

Definition at line 122 of file World_walls.cpp.

◆ register_standard_xml_tag_parsers()

void World::register_standard_xml_tag_parsers ( )
private

Definition at line 98 of file World_load_xml.cpp.

◆ register_tag_parser() [1/2]

void mvsim::World::register_tag_parser ( const std::string &  xmlTagName,
const xml_tag_parser_function_t f 
)
inlineprivate

Definition at line 679 of file World.h.

◆ register_tag_parser() [2/2]

void mvsim::World::register_tag_parser ( const std::string &  xmlTagName,
void(World::*)(const XmlParserContext &ctx)  f 
)
inlineprivate

Definition at line 684 of file World.h.

◆ registerCallbackOnObservation()

void mvsim::World::registerCallbackOnObservation ( const on_observation_callback_t f)
inline

Definition at line 361 of file World.h.

◆ run_simulation()

void World::run_simulation ( double  dt)

Runs the simulation for a given time interval (in seconds)

Note
The minimum simulation time is the timestep set (e.g. via set_simul_timestep()), even if time advanced further than the provided "dt".

Runs the simulation for a given time interval (in seconds)

Definition at line 103 of file World.cpp.

◆ runVisitorOnBlocks()

void World::runVisitorOnBlocks ( const block_visitor_t v)

Run the user-provided visitor on each world block

Definition at line 290 of file World.cpp.

◆ runVisitorOnVehicles()

void World::runVisitorOnVehicles ( const vehicle_visitor_t v)

Run the user-provided visitor on each vehicle

Definition at line 278 of file World.cpp.

◆ runVisitorOnWorldElements()

void World::runVisitorOnWorldElements ( const world_element_visitor_t v)

Run the user-provided visitor on each world element

Definition at line 284 of file World.cpp.

◆ sensor_has_to_create_egl_context()

bool World::sensor_has_to_create_egl_context ( )

Definition at line 397 of file World.cpp.

◆ set_gravity()

void mvsim::World::set_gravity ( double  accel)
inline

Gravity acceleration (Default=9.8 m/s^2). Used to evaluate weights for friction, etc.

Definition at line 140 of file World.h.

◆ set_simul_timestep()

void mvsim::World::set_simul_timestep ( double  timestep)
inline

Simulation fixed-time interval for numerical integration 0 means auto-determine as the minimum of 50 ms and the shortest sensor sample period.

Definition at line 132 of file World.h.

◆ setLightDirectionFromAzimuthElevation()

void World::setLightDirectionFromAzimuthElevation ( const float  azimuth,
const float  elevation 
)
private

Changes the light source direction from azimuth and elevation angles (in radians)

Definition at line 1070 of file World_gui.cpp.

◆ simulator_must_close() [1/2]

bool mvsim::World::simulator_must_close ( ) const
inline

Definition at line 242 of file World.h.

◆ simulator_must_close() [2/2]

void mvsim::World::simulator_must_close ( bool  value)
inline

Definition at line 249 of file World.h.

◆ update_GUI()

void World::update_GUI ( TUpdateGUIParams params = nullptr)

Updates (or sets-up upon first call) the GUI visualization of the scene.

Parameters
[in,out]paramsOptional inputs/outputs to the GUI update process. See struct for details.
Note
This method is prepared to be called concurrently with the simulation, and doing so is recommended to assure a smooth multi-threading simulation.

Definition at line 855 of file World_gui.cpp.

◆ user_defined_variables()

const std::map<std::string, std::string>& mvsim::World::user_defined_variables ( ) const
inline

Definition at line 391 of file World.h.

◆ xmlPathToActualPath()

std::string World::xmlPathToActualPath ( const std::string &  modelURI) const

Parses URIs in all the forms explained in RemoteResourcesManager::resolve_path(), then passes it through local_to_abs_path().

See also
local_to_abs_path

Definition at line 244 of file World.cpp.

Friends And Related Function Documentation

◆ Block

friend class Block
friend

Definition at line 398 of file World.h.

◆ VehicleBase

friend class VehicleBase
friend

Definition at line 397 of file World.h.

Member Data Documentation

◆ b2_ground_body_

b2Body* mvsim::World::b2_ground_body_ = nullptr
private

Used to declare friction between vehicles-ground

Definition at line 553 of file World.h.

◆ b2dPosIters_

int mvsim::World::b2dPosIters_ = 3
private

Definition at line 416 of file World.h.

◆ b2dVelIters_

int mvsim::World::b2dVelIters_ = 8
private

Velocity and position iteration count (refer to libbox2d docs)

Definition at line 416 of file World.h.

◆ basePath_

std::string mvsim::World::basePath_ {"."}
private

Path from which to take relative directories.

Definition at line 439 of file World.h.

◆ blocks_

BlockList mvsim::World::blocks_
private

Definition at line 557 of file World.h.

◆ box2d_world_

std::unique_ptr<b2World> mvsim::World::box2d_world_
private

Box2D dynamic simulator instance

Definition at line 550 of file World.h.

◆ callbacksOnObservation_

std::vector<on_observation_callback_t> mvsim::World::callbacksOnObservation_
private

Definition at line 402 of file World.h.

◆ client_

mvsim::Client mvsim::World::client_ {"World"}
private

Definition at line 400 of file World.h.

◆ copy_of_objects_dynstate_mtx_

std::recursive_mutex mvsim::World::copy_of_objects_dynstate_mtx_
private

Definition at line 625 of file World.h.

◆ copy_of_objects_dynstate_pose_

std::map<std::string, mrpt::math::TPose3D> mvsim::World::copy_of_objects_dynstate_pose_
private

Updated in internal_one_step()

Definition at line 622 of file World.h.

◆ copy_of_objects_dynstate_twist_

std::map<std::string, mrpt::math::TTwist2D> mvsim::World::copy_of_objects_dynstate_twist_
private

Definition at line 623 of file World.h.

◆ copy_of_objects_had_collision_

std::set<std::string> mvsim::World::copy_of_objects_had_collision_
private

Definition at line 624 of file World.h.

◆ glUserObjsPhysical_

mrpt::opengl::CSetOfObjects::Ptr mvsim::World::glUserObjsPhysical_
private
Initial value:
=
mrpt::opengl::CSetOfObjects::Create()

This private container will be filled with objects in the public gui_user_objects_

Definition at line 443 of file World.h.

◆ glUserObjsViz_

mrpt::opengl::CSetOfObjects::Ptr mvsim::World::glUserObjsViz_
private
Initial value:
=
mrpt::opengl::CSetOfObjects::Create()

Definition at line 445 of file World.h.

◆ gravity_

double mvsim::World::gravity_ = 9.81
private

Gravity acceleration (Default=9.81 m/s^2). Used to evaluate weights for friction, etc.

Definition at line 407 of file World.h.

◆ gui_

GUI mvsim::World::gui_ {*this}
private

gui state

Definition at line 605 of file World.h.

◆ gui_thread_

std::thread mvsim::World::gui_thread_

Definition at line 236 of file World.h.

◆ gui_thread_running_

std::atomic_bool mvsim::World::gui_thread_running_ = false

Definition at line 238 of file World.h.

◆ gui_thread_start_mtx_

std::mutex mvsim::World::gui_thread_start_mtx_
mutable

Definition at line 240 of file World.h.

◆ guiMsgLines_

std::string mvsim::World::guiMsgLines_

Definition at line 233 of file World.h.

◆ guiMsgLinesMtx_

std::mutex mvsim::World::guiMsgLinesMtx_

Definition at line 234 of file World.h.

◆ guiObsViz_

std::map<std::string, nanogui::Window*> mvsim::World::guiObsViz_
private

by sensorLabel

Definition at line 642 of file World.h.

◆ guiOptions_

TGUI_Options mvsim::World::guiOptions_
private

Some of these options are only used the first time the GUI window is created.

Definition at line 495 of file World.h.

◆ guiUserObjectsMtx_

std::mutex mvsim::World::guiUserObjectsMtx_

Definition at line 195 of file World.h.

◆ guiUserObjectsPhysical_

mrpt::opengl::CSetOfObjects::Ptr mvsim::World::guiUserObjectsPhysical_

If !=null, a set of objects to be rendered merged with the default visualization. Lock the mutex gui_user_objects_mtx_ while writing. There are two sets of objects: "viz" for visualization only, "physical" for objects which should be detected by sensors.

Definition at line 193 of file World.h.

◆ guiUserObjectsViz_

mrpt::opengl::CSetOfObjects::Ptr mvsim::World::guiUserObjectsViz_

Definition at line 193 of file World.h.

◆ guiUserPendingTasks_

std::vector<std::function<void(void)> > mvsim::World::guiUserPendingTasks_

Definition at line 263 of file World.h.

◆ guiUserPendingTasksMtx_

std::mutex mvsim::World::guiUserPendingTasksMtx_

Definition at line 264 of file World.h.

◆ initialized_

bool mvsim::World::initialized_ = false
private

Definition at line 559 of file World.h.

◆ lastKeyEvent_

TGUIKeyEvent mvsim::World::lastKeyEvent_

Definition at line 266 of file World.h.

◆ lastKeyEventMtx_

std::mutex mvsim::World::lastKeyEventMtx_

Definition at line 268 of file World.h.

◆ lastKeyEventValid_

std::atomic_bool mvsim::World::lastKeyEventValid_ = false

Definition at line 267 of file World.h.

◆ lightOptions_

LightOptions mvsim::World::lightOptions_
private

Options for lights

Definition at line 543 of file World.h.

◆ otherWorldParams_

const TParameterDefinitions mvsim::World::otherWorldParams_
private
Initial value:
= {
{"server_address", {"%s", &serverAddress_}},
{"gravity", {"%lf", &gravity_}},
{"simul_timestep", {"%lf", &simulTimestep_}},
{"b2d_vel_iters", {"%i", &b2dVelIters_}},
{"b2d_pos_iters", {"%i", &b2dPosIters_}},
}

Definition at line 420 of file World.h.

◆ pendingRunSensorsOn3DScene_

bool mvsim::World::pendingRunSensorsOn3DScene_ = false

Definition at line 211 of file World.h.

◆ pendingRunSensorsOn3DSceneMtx_

std::mutex mvsim::World::pendingRunSensorsOn3DSceneMtx_

Definition at line 210 of file World.h.

◆ remoteResources_

RemoteResourcesManager mvsim::World::remoteResources_
mutableprivate

Definition at line 711 of file World.h.

◆ reset_collision_flags_

std::set<std::string> mvsim::World::reset_collision_flags_
private

Definition at line 627 of file World.h.

◆ reset_collision_flags_mtx_

std::mutex mvsim::World::reset_collision_flags_mtx_
private

Definition at line 628 of file World.h.

◆ serverAddress_

std::string mvsim::World::serverAddress_ = "localhost"
private

Definition at line 418 of file World.h.

◆ simul_start_wallclock_time_

std::optional<double> mvsim::World::simul_start_wallclock_time_
private

Definition at line 435 of file World.h.

◆ simul_time_mtx_

std::mutex mvsim::World::simul_time_mtx_
private

Definition at line 436 of file World.h.

◆ simulableObjects_

SimulableList mvsim::World::simulableObjects_
private

Definition at line 564 of file World.h.

◆ simulableObjectsMtx_

std::mutex mvsim::World::simulableObjectsMtx_
private

Definition at line 565 of file World.h.

◆ simulationStepRunningMtx_

std::mutex mvsim::World::simulationStepRunningMtx_
private

Definition at line 570 of file World.h.

◆ simulator_must_close_

std::atomic_bool mvsim::World::simulator_must_close_ = false

Definition at line 239 of file World.h.

◆ simulTime_

double mvsim::World::simulTime_ = 0
private

In seconds, real simulation time since beginning (may be different than wall-clock time because of time warp, etc.)

Definition at line 434 of file World.h.

◆ simulTimestep_

double mvsim::World::simulTimestep_ = 0
mutableprivate

Simulation fixed-time interval for numerical integration. 0 means auto-determine as the minimum of 50 ms and the shortest sensor sample period.

Definition at line 413 of file World.h.

◆ timer_iteration_

mrpt::system::CTicTac mvsim::World::timer_iteration_
private

Definition at line 652 of file World.h.

◆ timlogger_

mrpt::system::CTimeLogger mvsim::World::timlogger_ {true , "mvsim::World"}
private

Definition at line 651 of file World.h.

◆ userDefinedVariables_

std::map<std::string, std::string> mvsim::World::userDefinedVariables_
private

User-defined variables as defined via `<variable name="" value=""> tags in the World xml file, for use within$f{}` expressions

Definition at line 430 of file World.h.

◆ vehicles_

VehicleList mvsim::World::vehicles_
private

Definition at line 555 of file World.h.

◆ world_cs_

std::recursive_mutex mvsim::World::world_cs_
private

Mutex protecting simulation objects from multi-thread access

Definition at line 547 of file World.h.

◆ worldElements_

WorldElementList mvsim::World::worldElements_
private

Definition at line 556 of file World.h.

◆ worldPhysical_

mrpt::opengl::COpenGLScene mvsim::World::worldPhysical_
private

3D scene with all physically observable objects: we will use this scene as input to simulated sensors like cameras, where we don't wont to see visualization marks, etc.

See also
world_visual_

Definition at line 618 of file World.h.

◆ worldPhysicalMtx_

std::recursive_mutex mvsim::World::worldPhysicalMtx_
private

Definition at line 619 of file World.h.

◆ worldVisual_

mrpt::opengl::COpenGLScene::Ptr mvsim::World::worldVisual_
private
Initial value:
=
mrpt::opengl::COpenGLScene::Create()

3D scene with all visual objects (vehicles, obstacles, markers, etc.)

See also
worldPhysical_

Definition at line 610 of file World.h.

◆ xmlParsers_

std::map<std::string, xml_tag_parser_function_t> mvsim::World::xmlParsers_
private

Definition at line 675 of file World.h.


The documentation for this class was generated from the following files:


mvsim
Author(s):
autogenerated on Tue Jul 4 2023 03:08:23