World.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2024 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 #include <box2d/b2_body.h>
13 #include <box2d/b2_world.h>
14 #include <mrpt/core/bits_math.h>
15 #include <mrpt/core/format.h>
16 #include <mrpt/gui/CDisplayWindowGUI.h>
17 #include <mrpt/img/CImage.h>
18 #include <mrpt/img/TColor.h>
19 #include <mrpt/io/CFileGZOutputStream.h>
20 #include <mrpt/math/TPoint3D.h>
21 #include <mrpt/obs/CObservation.h>
22 #include <mrpt/obs/CObservationImage.h>
23 #include <mrpt/obs/obs_frwds.h>
24 #include <mrpt/system/COutputLogger.h>
25 #include <mrpt/system/CTicTac.h>
26 #include <mrpt/system/CTimeLogger.h>
27 #include <mrpt/topography/data_types.h>
28 #include <mvsim/Block.h>
29 #include <mvsim/Joystick.h>
32 #include <mvsim/VehicleBase.h>
34 
35 #if defined(MVSIM_HAS_ZMQ) && defined(MVSIM_HAS_PROTOBUF)
36 #include <mvsim/Comms/Client.h>
37 #endif
38 
39 #include <functional>
40 #include <list>
41 #include <map>
42 #include <set>
43 #include <unordered_map>
44 
45 #if MVSIM_HAS_ZMQ && MVSIM_HAS_PROTOBUF
46 // forward declarations:
47 namespace mvsim_msgs
48 {
49 class SrvGetPose;
50 class SrvGetPoseAnswer;
51 class SrvSetPose;
52 class SrvSetPoseAnswer;
53 class SrvSetControllerTwist;
54 class SrvSetControllerTwistAnswer;
55 class SrvShutdown;
56 class SrvShutdownAnswer;
57 } // namespace mvsim_msgs
58 #endif
59 
60 namespace mvsim
61 {
82 class World : public mrpt::system::COutputLogger
83 {
84  public:
87  World();
88  ~World();
89 
92  void clear_all();
93 
100  void load_from_XML_file(const std::string& xmlFileNamePath);
101 
102  void internal_initialize();
103 
111  void load_from_XML(
112  const std::string& xml_text, const std::string& fileNameForPath = std::string("."));
119  double get_simul_time() const
120  {
121  auto lck = mrpt::lockHelper(simul_time_mtx_);
122  return simulTime_;
123  }
124 
126  void force_set_simul_time(double newSimulatedTime)
127  {
128  auto lck = mrpt::lockHelper(simul_time_mtx_);
129  simulTime_ = newSimulatedTime;
130  }
131 
137  mrpt::Clock::time_point get_simul_timestamp() const
138  {
139  auto lck = mrpt::lockHelper(simul_time_mtx_);
140  ASSERT_(simul_start_wallclock_time_.has_value());
141  return mrpt::Clock::fromDouble(simulTime_ + simul_start_wallclock_time_.value());
142  }
143 
145  double get_simul_timestep() const;
146 
150  void set_simul_timestep(double timestep) { simulTimestep_ = timestep; }
151 
154  double get_gravity() const { return gravity_; }
155 
158  void set_gravity(double accel) { gravity_ = accel; }
159 
165  void run_simulation(double dt);
166 
169  {
170  int keycode = 0;
171  bool modifierShift = false;
172  bool modifierCtrl = false;
173  bool modifierAlt = false;
174  bool modifierSuper = false;
175 
176  TGUIKeyEvent() = default;
177  };
178 
180  {
182  std::string msg_lines;
183 
184  TUpdateGUIParams() = default;
185  };
186 
194  void update_GUI(TUpdateGUIParams* params = nullptr);
195 
196  const mrpt::gui::CDisplayWindowGUI::Ptr& gui_window() const { return gui_.gui_win; }
197 
198  const mrpt::math::TPoint3D& gui_mouse_point() const { return gui_.clickedPt; }
199 
205  mrpt::opengl::CSetOfObjects::Ptr guiUserObjectsPhysical_, guiUserObjectsViz_;
206  std::mutex guiUserObjectsMtx_;
207 
212 
213  void internalRunSensorsOn3DScene(mrpt::opengl::COpenGLScene& physicalObjects);
214 
216  mrpt::opengl::COpenGLScene& viz, mrpt::opengl::COpenGLScene& physical);
217  void internal_GUI_thread();
219 
222 
224  {
228  }
230  {
234  }
236  {
238  bool ret = pendingRunSensorsOn3DScene_;
240  return ret;
241  }
242 
243  std::string guiMsgLines_;
244  std::mutex guiMsgLinesMtx_;
245 
246  std::thread gui_thread_;
247 
248  std::atomic_bool gui_thread_running_ = false;
249  std::atomic_bool simulator_must_close_ = false;
250  mutable std::mutex gui_thread_start_mtx_;
251 
252  bool simulator_must_close() const
253  {
254  gui_thread_start_mtx_.lock();
255  const bool v = simulator_must_close_;
256  gui_thread_start_mtx_.unlock();
257  return v;
258  }
259  void simulator_must_close(bool value)
260  {
261  gui_thread_start_mtx_.lock();
262  simulator_must_close_ = value;
263  gui_thread_start_mtx_.unlock();
264  }
265 
266  void enqueue_task_to_run_in_gui_thread(const std::function<void(void)>& f)
267  {
269  guiUserPendingTasks_.emplace_back(f);
270  guiUserPendingTasksMtx_.unlock();
271  }
272 
273  std::vector<std::function<void(void)>> guiUserPendingTasks_;
275 
277  std::atomic_bool lastKeyEventValid_ = false;
278  std::mutex lastKeyEventMtx_;
279 
280  bool is_GUI_open() const;
281 
283  void close_GUI();
284 
291  using VehicleList = std::multimap<std::string, VehicleBase::Ptr>;
292 
294  using WorldElementList = std::list<WorldElementBase::Ptr>;
295 
297  using BlockList = std::multimap<std::string, Block::Ptr>;
298 
301  using SimulableList = std::multimap<std::string, Simulable::Ptr>;
302 
307  std::unique_ptr<b2World>& getBox2DWorld() { return box2d_world_; }
308  const std::unique_ptr<b2World>& getBox2DWorld() const { return box2d_world_; }
310  const VehicleList& getListOfVehicles() const { return vehicles_; }
312  const BlockList& getListOfBlocks() const { return blocks_; }
315 
320 
321  mrpt::system::CTimeLogger& getTimeLogger() { return timlogger_; }
322 
326  std::string local_to_abs_path(const std::string& in_path) const;
327 
334  std::string xmlPathToActualPath(const std::string& modelURI) const;
335 
341  using vehicle_visitor_t = std::function<void(VehicleBase&)>;
343  using block_visitor_t = std::function<void(Block&)>;
344 
347 
350 
352  void runVisitorOnBlocks(const block_visitor_t& v);
353 
360  std::function<void(const Simulable& /*veh*/, const mrpt::obs::CObservation::Ptr& /*obs*/)>;
361 
363  {
364  callbacksOnObservation_.emplace_back(f);
365  }
366 
368  void dispatchOnObservation(const Simulable& veh, const mrpt::obs::CObservation::Ptr& obs);
369 
374  void connectToServer();
375 
376 #if defined(MVSIM_HAS_ZMQ) && defined(MVSIM_HAS_PROTOBUF)
377  mvsim::Client& commsClient() { return client_; }
378  const mvsim::Client& commsClient() const { return client_; }
379 #endif
380 
381  void free_opengl_resources();
382 
384 
385  bool headless() const { return guiOptions_.headless; }
386  void headless(bool setHeadless) { guiOptions_.headless = setHeadless; }
387 
389 
390  const std::map<std::string, std::string>& user_defined_variables() const
391  {
392  return userDefinedVariables_;
393  }
394 
399  std::optional<mvsim::TJoyStickEvent> getJoystickState() const;
400 
401  bool evaluate_tag_if(const rapidxml::xml_node<char>& node) const;
402 
403  float collisionThreshold() const { return collisionThreshold_; }
404 
410  std::set<float> getElevationsAt(const mrpt::math::TPoint2D& worldXY) const;
411 
414  float getHighestElevationUnder(const mrpt::math::TPoint3Df& queryPt) const;
415 
417 
418  private:
419  friend class VehicleBase;
420  friend class Block;
421 
422 #if defined(MVSIM_HAS_ZMQ) && defined(MVSIM_HAS_PROTOBUF)
423  mvsim::Client client_{"World"};
424 #endif
425 
426  std::vector<on_observation_callback_t> callbacksOnObservation_;
427 
428  // -------- World Params ----------
431  double gravity_ = 9.81;
432 
437  mutable double simulTimestep_ = 0;
438 
439  mutable bool joystickEnabled_ = false;
440  mutable std::optional<Joystick> joystick_;
441 
444 
446  float collisionThreshold_ = 0.03f;
447 
448  std::string serverAddress_ = "localhost";
449 
451  std::string save_to_rawlog_;
452 
453  double rawlog_odometry_rate_ = 10.0;
454 
458 
459  double ground_truth_rate_ = 50.0;
460 
461  double max_slope_to_collide_ = 0.30;
462  double min_slope_to_collide_ = -0.50;
463 
465  {"server_address", {"%s", &serverAddress_}},
466  {"gravity", {"%lf", &gravity_}},
467  {"simul_timestep", {"%lf", &simulTimestep_}},
468  {"b2d_vel_iters", {"%i", &b2dVelIters_}},
469  {"b2d_pos_iters", {"%i", &b2dPosIters_}},
470  {"collision_threshold", {"%f", &collisionThreshold_}},
471  {"joystick_enabled", {"%bool", &joystickEnabled_}},
472  {"save_to_rawlog", {"%s", &save_to_rawlog_}},
473  {"rawlog_odometry_rate", {"%lf", &rawlog_odometry_rate_}},
474  {"save_ground_truth_trajectory", {"%s", &save_ground_truth_trajectory_}},
475  {"ground_truth_rate", {"%lf", &ground_truth_rate_}},
476  {"max_slope_to_collide", {"%lf", &max_slope_to_collide_}},
477  {"min_slope_to_collide", {"%lf", &min_slope_to_collide_}},
478  };
479 
482  std::map<std::string, std::string> userDefinedVariables_;
483 
486  double simulTime_ = 0;
487  std::optional<double> simul_start_wallclock_time_;
488  std::mutex simul_time_mtx_;
489 
491  std::string basePath_{"."};
492 
495  mrpt::opengl::CSetOfObjects::Ptr glUserObjsPhysical_ = mrpt::opengl::CSetOfObjects::Create();
496  mrpt::opengl::CSetOfObjects::Ptr glUserObjsViz_ = mrpt::opengl::CSetOfObjects::Create();
497 
498  // ------- GUI options -----
500  {
501  unsigned int win_w = 800, win_h = 600;
502  bool start_maximized = true;
503  int refresh_fps = 20;
504  bool ortho = false;
505  bool show_forces = false;
506  bool show_sensor_points = true;
507  double force_scale = 0.01;
508  double camera_distance = 80.0;
509  double camera_azimuth_deg = 45.0;
510  double camera_elevation_deg = 40.0;
511  double fov_deg = 60.0;
512  float clip_plane_min = 0.05f;
513  float clip_plane_max = 10e3f;
514  mrpt::math::TPoint3D camera_point_to{0, 0, 0};
515  std::string follow_vehicle;
516  bool headless = false;
517 
519  {"win_w", {"%u", &win_w}},
520  {"win_h", {"%u", &win_h}},
521  {"ortho", {"%bool", &ortho}},
522  {"show_forces", {"%bool", &show_forces}},
523  {"show_sensor_points", {"%bool", &show_sensor_points}},
524  {"force_scale", {"%lf", &force_scale}},
525  {"fov_deg", {"%lf", &fov_deg}},
526  {"follow_vehicle", {"%s", &follow_vehicle}},
527  {"start_maximized", {"%bool", &start_maximized}},
528  {"refresh_fps", {"%i", &refresh_fps}},
529  {"headless", {"%bool", &headless}},
530  {"clip_plane_min", {"%f", &clip_plane_min}},
531  {"clip_plane_max", {"%f", &clip_plane_max}},
532  {"cam_distance", {"%lf", &camera_distance}},
533  {"cam_azimuth", {"%lf", &camera_azimuth_deg}},
534  {"cam_elevation", {"%lf", &camera_elevation_deg}},
535  {"cam_point_to", {"%point3d", &camera_point_to}},
536  };
537 
538  TGUI_Options() = default;
539  void parse_from(const rapidxml::xml_node<char>& node, COutputLogger& logger);
540  };
541 
545 
547  {
548  LightOptions() = default;
549 
550  void parse_from(const rapidxml::xml_node<char>& node, COutputLogger& logger);
551 
552  bool enable_shadows = true;
553  int shadow_map_size = 2048;
554 
555  double light_azimuth = mrpt::DEG2RAD(45.0);
556  double light_elevation = mrpt::DEG2RAD(70.0);
557 
558  float light_clip_plane_min = 0.1f;
559  float light_clip_plane_max = 900.0f;
560 
561  float shadow_bias = 1e-5;
562  float shadow_bias_cam2frag = 1e-5;
563  float shadow_bias_normal = 1e-4;
564 
565  mrpt::img::TColor light_color = {0xff, 0xff, 0xff, 0xff};
566  float light_ambient = 0.5f;
567 
570 
572  {"enable_shadows", {"%bool", &enable_shadows}},
573  {"shadow_map_size", {"%i", &shadow_map_size}},
574  {"light_azimuth_deg", {"%lf_deg", &light_azimuth}},
575  {"light_elevation_deg", {"%lf_deg", &light_elevation}},
576  {"light_clip_plane_min", {"%f", &light_clip_plane_min}},
577  {"light_clip_plane_max", {"%f", &light_clip_plane_max}},
578  {"light_color", {"%color", &light_color}},
579  {"shadow_bias", {"%f", &shadow_bias}},
580  {"shadow_bias_cam2frag", {"%f", &shadow_bias_cam2frag}},
581  {"shadow_bias_normal", {"%f", &shadow_bias_normal}},
582  {"light_ambient", {"%f", &light_ambient}},
583  {"eye_distance_to_shadow_map_extension", {"%f", &eye_distance_to_shadow_map_extension}},
584  {"minimum_shadow_map_extension_ratio", {"%f", &minimum_shadow_map_extension_ratio}},
585  };
586  };
587 
590 
591  public:
592  // Options for simulating GNSS (GPS) sensors.
594  {
595  GeoreferenceOptions() = default;
596 
597  void parse_from(const rapidxml::xml_node<char>& node, COutputLogger& logger);
598 
600  mrpt::topography::TGeodeticCoords georefCoord;
601 
606 
608  bool world_is_utm = false;
609 
611  mrpt::topography::TUTMCoords utmRef;
612  int utm_zone = 0; // auto calculated
613  char utm_band = 'X'; // auto calculated
614 
616  {"latitude", {"%lf", &georefCoord.lat.decimal_value}},
617  {"longitude", {"%lf", &georefCoord.lon.decimal_value}},
618  {"height", {"%lf", &georefCoord.height}},
619  {"world_to_enu_rotation_deg", {"%lf_deg", &world_to_enu_rotation}},
620  {"world_is_utm", {"%bool", &world_is_utm}},
621  };
622  };
623 
625 
627  mrpt::math::TVector3D worldRenderOffset() const
628  {
629  return worldRenderOffset_ ? *worldRenderOffset_ : mrpt::math::TVector3D(0, 0, 0);
630  }
631  mrpt::math::TPose3D applyWorldRenderOffset(mrpt::math::TPose3D p) const
632  {
633  const auto t = worldRenderOffset();
634  p.x += t.x;
635  p.y += t.y;
636  p.z += t.z;
637  return p;
638  }
639  mrpt::poses::CPose3D applyWorldRenderOffset(mrpt::poses::CPose3D p) const
640  {
641  const auto t = worldRenderOffset();
642  p.x_incr(t.x);
643  p.y_incr(t.y);
644  p.z_incr(t.z);
645  return p;
646  }
648  void worldRenderOffsetPropose(const mrpt::math::TVector3D& v)
649  {
651  }
652 
653  private:
656 
657  // -------- World contents ----------
659  std::recursive_mutex world_cs_;
660 
662  std::unique_ptr<b2World> box2d_world_;
663 
666 
670 
671  bool initialized_ = false;
672 
673  // List of all objects above (vehicles, world_elements, blocks), but as
674  // shared_ptr to their Simulable interfaces, so we can easily iterate on
675  // this list only for common tasks:
678 
680  void internal_one_timestep(double dt);
681 
683 
684  // A 2D-hash table of objects
686  {
687  int32_t x, y;
688 
689  bool operator==(const lut_2d_coordinates_t& o) const noexcept
690  {
691  return (x == o.x && y == o.y);
692  }
693  };
694 
695  static lut_2d_coordinates_t xy_to_lut_coords(const mrpt::math::TPoint2Df& p);
696 
698  {
699  std::size_t operator()(const lut_2d_coordinates_t& p) const noexcept
700  {
701  // These are the implicit assumptions of the reinterpret cast below:
702  static_assert(sizeof(int32_t) == sizeof(uint32_t));
703  static_assert(offsetof(lut_2d_coordinates_t, x) == 0 * sizeof(uint32_t));
704  static_assert(offsetof(lut_2d_coordinates_t, y) == 1 * sizeof(uint32_t));
705 
706  const uint32_t* vec = reinterpret_cast<const uint32_t*>(&p);
707  return ((1 << 20) - 1) & (vec[0] * 73856093 ^ vec[1] * 19349663);
708  }
711  const lut_2d_coordinates_t& k1, const lut_2d_coordinates_t& k2) const noexcept
712  {
713  if (k1.x != k2.x) return k1.x < k2.x;
714  return k1.y < k2.y;
715  }
716  };
717 
718  using LUTCache =
719  std::unordered_map<lut_2d_coordinates_t, std::vector<Simulable::Ptr>, LutIndexHash>;
720 
722  const LUTCache& getLUTCacheOfObjects() const;
723 
725  mutable bool lut2d_objects_is_up_to_date_ = false;
726 
727  void internal_update_lut_cache() const;
728 
730  struct GUI
731  {
732  GUI(World& parent) : parent_(parent) {}
733 
734  mrpt::gui::CDisplayWindowGUI::Ptr gui_win;
735  nanogui::Label* lbCpuUsage = nullptr;
736  std::vector<nanogui::Label*> lbStatuses;
738 
740  {
741  nanogui::CheckBox* cb = nullptr;
743  VisualObject* visual = nullptr;
744  };
745 
746  // Buttons that must be {dis,en}abled when there is a selected object:
747  std::vector<nanogui::Widget*> btns_selectedOps;
748  std::vector<InfoPerObject> gui_cbObjects;
750 
751  mrpt::math::TPoint3D clickedPt{0, 0, 0};
752 
753  void prepare_control_window();
754  void prepare_status_window();
755  void prepare_editor_window();
756 
758 
759  private:
761  };
762  GUI gui_{*this};
763 
767  mrpt::opengl::COpenGLScene::Ptr worldVisual_ = mrpt::opengl::COpenGLScene::Create();
768 
774  mrpt::opengl::COpenGLScene worldPhysical_;
775  std::recursive_mutex worldPhysicalMtx_;
776 
782  std::optional<mrpt::math::TVector3D> worldRenderOffset_;
783 
785  std::map<std::string, mrpt::math::TPose3D> copy_of_objects_dynstate_pose_;
786  std::map<std::string, mrpt::math::TTwist2D> copy_of_objects_dynstate_twist_;
787  std::set<std::string> copy_of_objects_had_collision_;
788  std::recursive_mutex copy_of_objects_dynstate_mtx_;
789 
790  std::set<std::string> reset_collision_flags_;
792 
793  void internal_gui_on_observation(const Simulable& veh, const mrpt::obs::CObservation::Ptr& obs);
795  const Simulable& veh, const std::shared_ptr<mrpt::obs::CObservation3DRangeScan>& obs);
797  const Simulable& veh, const std::shared_ptr<mrpt::obs::CObservationImage>& obs);
798 
799  mrpt::math::TPoint2D internal_gui_on_image(
800  const std::string& label, const mrpt::img::CImage& im, int winPosX);
801 
802  std::map<std::string, nanogui::Window*> guiObsViz_;
803 
806  void setLightDirectionFromAzimuthElevation(const float azimuth, const float elevation);
807  // end GUI stuff
809 
810  mrpt::system::CTimeLogger timlogger_{true /*enabled*/, "mvsim::World"};
811  mrpt::system::CTicTac timer_iteration_;
812 
814  void insertBlock(const Block::Ptr& block);
815 
817  {
818  XmlParserContext(const rapidxml::xml_node<char>* n, const std::string& basePath)
819  : node(n), currentBasePath(basePath)
820  {
821  }
822 
823  const rapidxml::xml_node<char>* node = nullptr;
824  const std::string currentBasePath;
825  };
826 
829 
830  using xml_tag_parser_function_t = std::function<void(const XmlParserContext&)>;
831 
832  std::map<std::string, xml_tag_parser_function_t> xmlParsers_;
833 
835 
836  void register_tag_parser(const std::string& xmlTagName, const xml_tag_parser_function_t& f)
837  {
838  xmlParsers_.emplace(xmlTagName, f);
839  }
841  const std::string& xmlTagName, void (World::*f)(const XmlParserContext& ctx))
842  {
843  xmlParsers_.emplace(
844  xmlTagName, [this, f](const XmlParserContext& ctx) { (this->*f)(ctx); });
845  }
846 
847  // ======== XML parser tags ========
848  void parse_tag_element(const XmlParserContext& ctx);
849  void parse_tag_vehicle(const XmlParserContext& ctx);
850 
851  void parse_tag_vehicle_class(const XmlParserContext& ctx);
852  void parse_tag_sensor(const XmlParserContext& ctx);
853  void parse_tag_block(const XmlParserContext& ctx);
854  void parse_tag_block_class(const XmlParserContext& ctx);
855  void parse_tag_gui(const XmlParserContext& ctx);
856  void parse_tag_lights(const XmlParserContext& ctx);
857  void parse_tag_georeference(const XmlParserContext& ctx);
858  void parse_tag_walls(const XmlParserContext& ctx);
859  void parse_tag_include(const XmlParserContext& ctx);
860  void parse_tag_variable(const XmlParserContext& ctx);
861  void parse_tag_for(const XmlParserContext& ctx);
862  void parse_tag_if(const XmlParserContext& ctx);
863  void parse_tag_marker(const XmlParserContext& ctx);
864 
865  // ======== end of XML parser tags ========
866 
868 
869  void internalOnObservation(const Simulable& veh, const mrpt::obs::CObservation::Ptr& obs);
870 
873 
874  std::mutex rawlog_io_mtx_;
875  std::map<std::string, std::shared_ptr<mrpt::io::CFileGZOutputStream>> rawlog_io_per_veh_;
876  std::optional<double> rawlog_last_odom_time_;
877 
878  std::mutex gt_io_mtx_;
879  std::map<std::string, std::fstream> gt_io_per_veh_;
880  std::optional<double> gt_last_time_;
881 
882  // ============ Elevation Field Collision artifacts ==============
883  struct TFixturePtr
884  {
885  TFixturePtr() = default;
886  b2Fixture* fixture = nullptr;
887  };
889  {
890  TInfoPerCollidableobj() = default;
891 
892  mrpt::poses::CPose3D pose;
893  b2Body* collide_body = nullptr;
894  double representativeHeight = 0.01;
895  double maxWorkableStepHeight = 0.10;
896  double speed = .0;
897  mrpt::math::TPolygon2D contour;
898  const std::vector<float>* wheel_heights = nullptr;
899  std::vector<float> contour_heights;
900  std::vector<TFixturePtr> collide_fixtures;
901  };
902  std::vector<std::optional<TInfoPerCollidableobj>> obstacles_for_each_obj_;
903  // ============ end of elevation field collision =================
904 
905  // Services:
906  void internal_advertiseServices(); // called from connectToServer()
907 
908 #if MVSIM_HAS_ZMQ && MVSIM_HAS_PROTOBUF
909 
910  mvsim_msgs::SrvSetPoseAnswer srv_set_pose(const mvsim_msgs::SrvSetPose& req);
911  mvsim_msgs::SrvGetPoseAnswer srv_get_pose(const mvsim_msgs::SrvGetPose& req);
912  mvsim_msgs::SrvSetControllerTwistAnswer srv_set_controller_twist(
913  const mvsim_msgs::SrvSetControllerTwist& req);
914  mvsim_msgs::SrvShutdownAnswer srv_shutdown(const mvsim_msgs::SrvShutdown& req);
915 #endif
916 };
917 } // namespace mvsim
mvsim::World::copy_of_objects_had_collision_
std::set< std::string > copy_of_objects_had_collision_
Definition: World.h:787
mvsim::World::TGUI_Options::show_forces
bool show_forces
Definition: World.h:505
mvsim::World::TGUI_Options::follow_vehicle
std::string follow_vehicle
Vehicle name to follow (empty=none)
Definition: World.h:515
Client.h
Block.h
mvsim::World::TGUI_Options::camera_elevation_deg
double camera_elevation_deg
Definition: World.h:510
mvsim::World::getBox2DGroundBody
b2Body * getBox2DGroundBody()
Definition: World.h:309
mvsim::World::gt_io_mtx_
std::mutex gt_io_mtx_
Definition: World.h:878
mvsim::World::TGUIKeyEvent::modifierSuper
bool modifierSuper
Definition: World.h:174
mvsim
Definition: Client.h:21
mvsim::World::worldVisual_
mrpt::opengl::COpenGLScene::Ptr worldVisual_
Definition: World.h:767
mvsim::World::simulTimestep_
double simulTimestep_
Definition: World.h:437
mvsim::World::parse_tag_block
void parse_tag_block(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:208
mvsim::World::TGUI_Options::parse_from
void parse_from(const rapidxml::xml_node< char > &node, COutputLogger &logger)
Definition: World_gui.cpp:34
mvsim::World::applyWorldRenderOffset
mrpt::poses::CPose3D applyWorldRenderOffset(mrpt::poses::CPose3D p) const
Definition: World.h:639
mvsim::World::reset_collision_flags_mtx_
std::mutex reset_collision_flags_mtx_
Definition: World.h:791
mvsim::World::simulableObjectsMtx_
std::mutex simulableObjectsMtx_
Definition: World.h:677
mvsim::World::getLUTCacheOfObjects
const LUTCache & getLUTCacheOfObjects() const
Ensure the cache is built and up-to-date, then return it:
Definition: World_simul.cpp:582
mvsim::World::XmlParserContext::XmlParserContext
XmlParserContext(const rapidxml::xml_node< char > *n, const std::string &basePath)
Definition: World.h:818
mvsim::World::enqueue_task_to_run_in_gui_thread
void enqueue_task_to_run_in_gui_thread(const std::function< void(void)> &f)
Definition: World.h:266
mvsim::World::TGUIKeyEvent::modifierAlt
bool modifierAlt
Definition: World.h:173
mvsim::World::LightOptions::light_elevation
double light_elevation
Definition: World.h:556
mvsim::World::simul_start_wallclock_time_
std::optional< double > simul_start_wallclock_time_
Definition: World.h:487
mvsim::World::parse_tag_lights
void parse_tag_lights(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:228
mvsim::World::GeoreferenceOptions::utmRef
mrpt::topography::TUTMCoords utmRef
Definition: World.h:611
mvsim::World::LutIndexHash
Definition: World.h:697
mvsim::World::setLightDirectionFromAzimuthElevation
void setLightDirectionFromAzimuthElevation(const float azimuth, const float elevation)
Definition: World_gui.cpp:1208
mvsim::World::VehicleList
std::multimap< std::string, VehicleBase::Ptr > VehicleList
Definition: World.h:291
mvsim::World::internal_simul_pre_step_terrain_elevation
void internal_simul_pre_step_terrain_elevation()
Definition: World_simul.cpp:308
mvsim::World::XmlParserContext
Definition: World.h:816
mvsim::World::registerCallbackOnObservation
void registerCallbackOnObservation(const on_observation_callback_t &f)
Definition: World.h:362
mvsim::World::GeoreferenceOptions::params
const TParameterDefinitions params
Definition: World.h:615
mvsim::World::connectToServer
void connectToServer()
Definition: World.cpp:143
mvsim::World::lut2d_objects_
LUTCache lut2d_objects_
Definition: World.h:724
mvsim::World::internalGraphicsLoopTasksForSimulation
void internalGraphicsLoopTasksForSimulation()
Definition: World_gui.cpp:1175
mvsim::World::internalPostSimulStepForTrajectory
void internalPostSimulStepForTrajectory()
Definition: World_simul.cpp:259
mvsim::World::max_slope_to_collide_
double max_slope_to_collide_
Definition: World.h:461
WorldElementBase.h
mvsim::World::WorldElementList
std::list< WorldElementBase::Ptr > WorldElementList
Definition: World.h:294
RemoteResourcesManager.h
mvsim::World::joystickEnabled_
bool joystickEnabled_
Definition: World.h:439
mvsim::World::GUI::gui_selectedObject
InfoPerObject gui_selectedObject
Definition: World.h:749
mvsim::World::TFixturePtr::fixture
b2Fixture * fixture
Definition: World.h:886
mvsim::World::dispatchOnObservation
void dispatchOnObservation(const Simulable &veh, const mrpt::obs::CObservation::Ptr &obs)
Definition: World.cpp:243
mvsim::World::TGUI_Options::start_maximized
bool start_maximized
Definition: World.h:502
mvsim::World::register_tag_parser
void register_tag_parser(const std::string &xmlTagName, void(World::*f)(const XmlParserContext &ctx))
Definition: World.h:840
mvsim::World::TGUI_Options::camera_point_to
mrpt::math::TPoint3D camera_point_to
Definition: World.h:514
mvsim::World::LightOptions::params
const TParameterDefinitions params
Definition: World.h:571
mvsim::World::internalUpdate3DSceneObjects
void internalUpdate3DSceneObjects(mrpt::opengl::COpenGLScene &viz, mrpt::opengl::COpenGLScene &physical)
Definition: World_gui.cpp:926
mvsim::World::LutIndexHash::operator()
bool operator()(const lut_2d_coordinates_t &k1, const lut_2d_coordinates_t &k2) const noexcept
k1 < k2? for std::map containers
Definition: World.h:710
mvsim::World::lastKeyEventValid_
std::atomic_bool lastKeyEventValid_
Definition: World.h:277
mvsim::World::GUI::prepare_editor_window
void prepare_editor_window()
Definition: World_gui.cpp:215
ImGui::Button
IMGUI_API bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui_widgets.cpp:575
mvsim::World::is_GUI_open
bool is_GUI_open() const
mvsim::World::internal_GUI_thread
void internal_GUI_thread()
Definition: World_gui.cpp:603
mvsim::World::timer_iteration_
mrpt::system::CTicTac timer_iteration_
Definition: World.h:811
mvsim::World::xy_to_lut_coords
static lut_2d_coordinates_t xy_to_lut_coords(const mrpt::math::TPoint2Df &p)
Definition: World_simul.cpp:589
mvsim::World::guiOptions_
TGUI_Options guiOptions_
Definition: World.h:544
mvsim::World::GUI::lbCpuUsage
nanogui::Label * lbCpuUsage
Definition: World.h:735
mvsim::World::getListOfSimulableObjectsMtx
auto & getListOfSimulableObjectsMtx()
Definition: World.h:319
mvsim::World::getListOfSimulableObjects
SimulableList & getListOfSimulableObjects()
Always lock/unlock getListOfSimulableObjectsMtx() before using this:
Definition: World.h:317
mvsim::World::TGUIKeyEvent::TGUIKeyEvent
TGUIKeyEvent()=default
mvsim::World::process_load_walls
void process_load_walls(const rapidxml::xml_node< char > &node)
Definition: World_walls.cpp:120
mvsim::World::~World
~World()
Dtor.
Definition: World.cpp:27
mvsim::World::applyWorldRenderOffset
mrpt::math::TPose3D applyWorldRenderOffset(mrpt::math::TPose3D p) const
Definition: World.h:631
mvsim::World::physical_objects_mtx
auto & physical_objects_mtx()
Definition: World.h:383
mvsim::Client
Definition: Client.h:48
mvsim::World::collisionThreshold
float collisionThreshold() const
Definition: World.h:403
mvsim::World::TGUI_Options::fov_deg
double fov_deg
Definition: World.h:511
mvsim::World::getHighestElevationUnder
float getHighestElevationUnder(const mrpt::math::TPoint3Df &queryPt) const
Definition: World.cpp:307
mvsim::World::TInfoPerCollidableobj::TInfoPerCollidableobj
TInfoPerCollidableobj()=default
mvsim::World::simulator_must_close
void simulator_must_close(bool value)
Definition: World.h:259
mvsim::World::LightOptions::eye_distance_to_shadow_map_extension
float eye_distance_to_shadow_map_extension
[m/m]
Definition: World.h:568
mvsim::World::internal_process_pending_gui_user_tasks
void internal_process_pending_gui_user_tasks()
Definition: World_gui.cpp:901
mvsim::World::lut2d_objects_is_up_to_date_
bool lut2d_objects_is_up_to_date_
Definition: World.h:725
mvsim::World::parse_tag_gui
void parse_tag_gui(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:222
mvsim::World::load_from_XML_file
void load_from_XML_file(const std::string &xmlFileNamePath)
Definition: World_load_xml.cpp:31
mvsim::World::LightOptions::minimum_shadow_map_extension_ratio
float minimum_shadow_map_extension_ratio
[0,1]
Definition: World.h:569
mvsim::World::evaluate_tag_if
bool evaluate_tag_if(const rapidxml::xml_node< char > &node) const
Definition: World_load_xml.cpp:357
mvsim::World::clear_all
void clear_all()
Definition: World.cpp:46
mvsim::World::initialized_
bool initialized_
Definition: World.h:671
mvsim::World::worldRenderOffset
mrpt::math::TVector3D worldRenderOffset() const
(See docs for worldRenderOffset_)
Definition: World.h:627
mvsim::World::ground_truth_rate_
double ground_truth_rate_
In Hz.
Definition: World.h:459
b2Body
A rigid body. These are created via b2World::CreateBody.
Definition: b2_body.h:128
mvsim::World::get_gravity
double get_gravity() const
Definition: World.h:154
mvsim::World::internal_update_lut_cache
void internal_update_lut_cache() const
Definition: World_simul.cpp:598
mvsim::World::GUI::InfoPerObject::visual
VisualObject * visual
Definition: World.h:743
mvsim::World::simulTime_
double simulTime_
Definition: World.h:486
mvsim::World::internalOnObservation
void internalOnObservation(const Simulable &veh, const mrpt::obs::CObservation::Ptr &obs)
Definition: World.cpp:249
mvsim::World::GeoreferenceOptions::world_to_enu_rotation
double world_to_enu_rotation
Definition: World.h:605
TParameterDefinitions.h
mvsim::World::lut_2d_coordinates_t::y
int32_t y
Definition: World.h:687
mvsim::World::TGUI_Options::headless
bool headless
Definition: World.h:516
mvsim::World::save_to_rawlog_
std::string save_to_rawlog_
Definition: World.h:451
mvsim::World::sensor_has_to_create_egl_context
bool sensor_has_to_create_egl_context()
Definition: World.cpp:191
mvsim::World::TInfoPerCollidableobj
Definition: World.h:888
mvsim::World::parse_tag_block_class
void parse_tag_block_class(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:216
mvsim::World::save_ground_truth_trajectory_
std::string save_ground_truth_trajectory_
Definition: World.h:457
mvsim::World::xml_tag_parser_function_t
std::function< void(const XmlParserContext &)> xml_tag_parser_function_t
Definition: World.h:830
mvsim::World::internal_gui_on_observation
void internal_gui_on_observation(const Simulable &veh, const mrpt::obs::CObservation::Ptr &obs)
Definition: World_gui.cpp:1071
mvsim::World::LightOptions::shadow_bias_normal
float shadow_bias_normal
Definition: World.h:563
mvsim::World::TGUI_Options::win_w
unsigned int win_w
Definition: World.h:501
mvsim::RemoteResourcesManager
Definition: RemoteResourcesManager.h:28
mvsim::World::TGUI_Options::camera_azimuth_deg
double camera_azimuth_deg
Definition: World.h:509
f
f
mvsim::World::TInfoPerCollidableobj::wheel_heights
const std::vector< float > * wheel_heights
Definition: World.h:898
mvsim::World::world_element_visitor_t
std::function< void(WorldElementBase &)> world_element_visitor_t
Definition: World.h:342
mvsim::World::on_observation_callback_t
std::function< void(const Simulable &, const mrpt::obs::CObservation::Ptr &)> on_observation_callback_t
Definition: World.h:360
mvsim::World::TGUI_Options::force_scale
double force_scale
In meters/Newton.
Definition: World.h:507
mvsim::World::force_set_simul_time
void force_set_simul_time(double newSimulatedTime)
Normally should not be called by users, for internal use only.
Definition: World.h:126
mvsim::World::block_visitor_t
std::function< void(Block &)> block_visitor_t
Definition: World.h:343
mvsim::World::xmlParsers_
std::map< std::string, xml_tag_parser_function_t > xmlParsers_
Definition: World.h:832
mvsim::World::TInfoPerCollidableobj::maxWorkableStepHeight
double maxWorkableStepHeight
Definition: World.h:895
mvsim::World::TUpdateGUIParams::msg_lines
std::string msg_lines
Messages to show.
Definition: World.h:182
mvsim::World::gt_last_time_
std::optional< double > gt_last_time_
Definition: World.h:880
mvsim::World::TGUI_Options::params
const TParameterDefinitions params
Definition: World.h:518
mvsim::World::parse_tag_georeference
void parse_tag_georeference(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:233
mvsim::World::getListOfVehicles
VehicleList & getListOfVehicles()
Definition: World.h:311
mvsim::World::LightOptions::parse_from
void parse_from(const rapidxml::xml_node< char > &node, COutputLogger &logger)
mvsim::World::getListOfSimulableObjects
const SimulableList & getListOfSimulableObjects() const
Definition: World.h:318
VehicleBase.h
mvsim::World::getListOfWorldElements
const WorldElementList & getListOfWorldElements() const
Definition: World.h:314
mvsim::World::simulableObjects_
SimulableList simulableObjects_
Definition: World.h:676
mvsim::World::TGUI_Options::show_sensor_points
bool show_sensor_points
Definition: World.h:506
mvsim::World::guiMsgLinesMtx_
std::mutex guiMsgLinesMtx_
Definition: World.h:244
mvsim::World::GUI::gui_win
mrpt::gui::CDisplayWindowGUI::Ptr gui_win
Definition: World.h:734
mvsim::World::GeoreferenceOptions::parse_from
void parse_from(const rapidxml::xml_node< char > &node, COutputLogger &logger)
Definition: World_load_xml.cpp:432
mvsim::World::internal_gui_on_observation_image
void internal_gui_on_observation_image(const Simulable &veh, const std::shared_ptr< mrpt::obs::CObservationImage > &obs)
Definition: World_gui.cpp:1114
mvsim::World::XmlParserContext::currentBasePath
const std::string currentBasePath
Definition: World.h:824
mvsim::World::guiMsgLines_
std::string guiMsgLines_
Definition: World.h:243
mvsim::World::guiUserObjectsPhysical_
mrpt::opengl::CSetOfObjects::Ptr guiUserObjectsPhysical_
Definition: World.h:205
void
typedef void(GLAD_API_PTR *GLDEBUGPROC)(GLenum source
mvsim::World::TInfoPerCollidableobj::contour
mrpt::math::TPolygon2D contour
Definition: World.h:897
mvsim::World::LightOptions::LightOptions
LightOptions()=default
mvsim::World::gui_thread_
std::thread gui_thread_
Definition: World.h:246
mvsim::World::TUpdateGUIParams::TUpdateGUIParams
TUpdateGUIParams()=default
mvsim::World::getListOfVehicles
const VehicleList & getListOfVehicles() const
Definition: World.h:310
mvsim::World::worldPhysicalMtx_
std::recursive_mutex worldPhysicalMtx_
Definition: World.h:775
mvsim::World::local_to_abs_path
std::string local_to_abs_path(const std::string &in_path) const
Definition: World.cpp:106
mvsim::World::serverAddress_
std::string serverAddress_
Definition: World.h:448
mvsim::World::load_from_XML
void load_from_XML(const std::string &xml_text, const std::string &fileNameForPath=std::string("."))
Definition: World_load_xml.cpp:37
mvsim::World::b2dPosIters_
int b2dPosIters_
Definition: World.h:443
mvsim::World::georeferenceOptions
const GeoreferenceOptions & georeferenceOptions() const
Definition: World.h:624
mvsim::World::get_simul_timestamp
mrpt::Clock::time_point get_simul_timestamp() const
Definition: World.h:137
mvsim::World::gui_mouse_point
const mrpt::math::TPoint3D & gui_mouse_point() const
Definition: World.h:198
mvsim::World::GUI::InfoPerObject::simulable
Simulable::Ptr simulable
Definition: World.h:742
mvsim::World::GeoreferenceOptions::world_is_utm
bool world_is_utm
Definition: World.h:608
mvsim::World::get_simul_time
double get_simul_time() const
Definition: World.h:119
mvsim::World::xmlPathToActualPath
std::string xmlPathToActualPath(const std::string &modelURI) const
Definition: World.cpp:98
mvsim::World::GeoreferenceOptions
Definition: World.h:593
mvsim::World::LightOptions::enable_shadows
bool enable_shadows
Definition: World.h:552
mvsim::World::GUI::btns_selectedOps
std::vector< nanogui::Widget * > btns_selectedOps
Definition: World.h:747
mvsim::World::rawlog_last_odom_time_
std::optional< double > rawlog_last_odom_time_
Definition: World.h:876
mvsim::TParameterDefinitions
std::map< std::string, TParamEntry > TParameterDefinitions
Definition: TParameterDefinitions.h:64
mvsim::World::min_slope_to_collide_
double min_slope_to_collide_
Definition: World.h:462
mvsim::World::LightOptions
Definition: World.h:546
mvsim::World::gravity_
double gravity_
Definition: World.h:431
b2Fixture
Definition: b2_fixture.h:116
mvsim::World::obstacles_for_each_obj_
std::vector< std::optional< TInfoPerCollidableobj > > obstacles_for_each_obj_
Definition: World.h:902
mvsim::World::simulationStepRunningMtx_
std::mutex simulationStepRunningMtx_
Definition: World.h:682
mvsim::World::pendingRunSensorsOn3DSceneMtx_
std::mutex pendingRunSensorsOn3DSceneMtx_
Definition: World.h:220
mvsim::World::georeferenceOptions_
GeoreferenceOptions georeferenceOptions_
Definition: World.h:655
mvsim::World::GeoreferenceOptions::utm_band
char utm_band
Definition: World.h:613
mvsim::World::World
World()
Default ctor: inits an empty world.
Definition: World.cpp:24
mvsim::World::headless
void headless(bool setHeadless)
Definition: World.h:386
mvsim::World::parse_tag_vehicle
void parse_tag_vehicle(const XmlParserContext &ctx)
<vehicle>
Definition: World_load_xml.cpp:172
mvsim::World::parse_tag_vehicle_class
void parse_tag_vehicle_class(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:189
mvsim::World::TUpdateGUIParams
Definition: World.h:179
mvsim::World::BlockList
std::multimap< std::string, Block::Ptr > BlockList
Definition: World.h:297
mvsim::World::copy_of_objects_dynstate_mtx_
std::recursive_mutex copy_of_objects_dynstate_mtx_
Definition: World.h:788
mvsim::World::run_simulation
void run_simulation(double dt)
Definition: World_simul.cpp:25
mvsim::World::TInfoPerCollidableobj::pose
mrpt::poses::CPose3D pose
Definition: World.h:892
mvsim::World::TUpdateGUIParams::keyevent
TGUIKeyEvent keyevent
Keystrokes in the window are returned here.
Definition: World.h:181
mvsim::World::GUI::InfoPerObject::cb
nanogui::CheckBox * cb
Definition: World.h:741
mvsim::World::callbacksOnObservation_
std::vector< on_observation_callback_t > callbacksOnObservation_
Definition: World.h:426
mvsim::World::b2_ground_body_
b2Body * b2_ground_body_
Definition: World.h:665
mvsim::World::getBox2DWorld
std::unique_ptr< b2World > & getBox2DWorld()
Definition: World.h:307
mvsim::World::runVisitorOnVehicles
void runVisitorOnVehicles(const vehicle_visitor_t &v)
Definition: World.cpp:125
mvsim::World::mark_as_pending_running_sensors_on_3D_scene
void mark_as_pending_running_sensors_on_3D_scene()
Definition: World.h:223
mvsim::World::parse_tag_element
void parse_tag_element(const XmlParserContext &ctx)
<element>
Definition: World_load_xml.cpp:162
mvsim::World::register_standard_xml_tag_parsers
void register_standard_xml_tag_parsers()
Definition: World_load_xml.cpp:103
mvsim::World::TGUI_Options::win_h
unsigned int win_h
Definition: World.h:501
mvsim::Simulable::Ptr
std::shared_ptr< Simulable > Ptr
Definition: Simulable.h:42
mvsim::World::rawlog_io_per_veh_
std::map< std::string, std::shared_ptr< mrpt::io::CFileGZOutputStream > > rawlog_io_per_veh_
Definition: World.h:875
mvsim::World::lightOptions_
LightOptions lightOptions_
Definition: World.h:589
mvsim::World::getBox2DWorld
const std::unique_ptr< b2World > & getBox2DWorld() const
Definition: World.h:308
mvsim::World::guiUserObjectsMtx_
std::mutex guiUserObjectsMtx_
Definition: World.h:206
b2_world.h
mvsim::World::parse_tag_walls
void parse_tag_walls(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:257
mvsim::World::blocks_
BlockList blocks_
Definition: World.h:669
mvsim::World::TGUIKeyEvent::modifierShift
bool modifierShift
Definition: World.h:171
mvsim::Block
Definition: Block.h:50
mvsim::World::gt_io_per_veh_
std::map< std::string, std::fstream > gt_io_per_veh_
Definition: World.h:879
mvsim::World::collisionThreshold_
float collisionThreshold_
Definition: World.h:446
mvsim::World::GeoreferenceOptions::utm_zone
int utm_zone
Definition: World.h:612
mvsim::World::getListOfBlocks
BlockList & getListOfBlocks()
Definition: World.h:313
mvsim::World::vehicles_
VehicleList vehicles_
Definition: World.h:667
mvsim::World::runVisitorOnBlocks
void runVisitorOnBlocks(const block_visitor_t &v)
Definition: World.cpp:137
mvsim::World::insertBlock
void insertBlock(const Block::Ptr &block)
Definition: World.cpp:166
mvsim::World::TGUI_Options::refresh_fps
int refresh_fps
Definition: World.h:503
mvsim::World::simulator_must_close_
std::atomic_bool simulator_must_close_
Definition: World.h:249
mvsim::World::TInfoPerCollidableobj::speed
double speed
Definition: World.h:896
mvsim::World::gui_thread_start_mtx_
std::mutex gui_thread_start_mtx_
Definition: World.h:250
mvsim::World::GUI::prepare_status_window
void prepare_status_window()
Definition: World_gui.cpp:191
mvsim::World::internal_advertiseServices
void internal_advertiseServices()
Definition: World_services.cpp:182
mvsim::World::userDefinedVariables_
std::map< std::string, std::string > userDefinedVariables_
Definition: World.h:482
mvsim::World::TInfoPerCollidableobj::contour_heights
std::vector< float > contour_heights
Definition: World.h:899
mvsim::World::lastKeyEvent_
TGUIKeyEvent lastKeyEvent_
Definition: World.h:276
mvsim::World::LUTCache
std::unordered_map< lut_2d_coordinates_t, std::vector< Simulable::Ptr >, LutIndexHash > LUTCache
Definition: World.h:719
mvsim::World::lut_2d_coordinates_t::operator==
bool operator==(const lut_2d_coordinates_t &o) const noexcept
Definition: World.h:689
mvsim::World
Definition: World.h:82
mvsim::World::free_opengl_resources
void free_opengl_resources()
Definition: World.cpp:181
mvsim::World::LightOptions::shadow_bias
float shadow_bias
Definition: World.h:561
mvsim::World::LightOptions::shadow_map_size
int shadow_map_size
Definition: World.h:553
mvsim::World::guiObsViz_
std::map< std::string, nanogui::Window * > guiObsViz_
by sensorLabel
Definition: World.h:802
mvsim::World::guiUserPendingTasks_
std::vector< std::function< void(void)> > guiUserPendingTasks_
Definition: World.h:273
mvsim::World::internalPostSimulStepForRawlog
void internalPostSimulStepForRawlog()
Definition: World_simul.cpp:226
mvsim::World::copy_of_objects_dynstate_twist_
std::map< std::string, mrpt::math::TTwist2D > copy_of_objects_dynstate_twist_
Definition: World.h:786
mvsim::World::internal_recursive_parse_XML
void internal_recursive_parse_XML(const XmlParserContext &ctx)
This will parse a main XML file, or its included.
Definition: World_load_xml.cpp:126
mvsim::World::lut_2d_coordinates_t
Definition: World.h:685
mvsim::World::parse_tag_if
void parse_tag_if(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:346
mvsim::VehicleBase
Definition: VehicleBase.h:44
mvsim::World::register_tag_parser
void register_tag_parser(const std::string &xmlTagName, const xml_tag_parser_function_t &f)
Definition: World.h:836
rapidxml::xml_node< char >
mvsim::World::worldPhysical_
mrpt::opengl::COpenGLScene worldPhysical_
Definition: World.h:774
mvsim::World::rawlog_odometry_rate_
double rawlog_odometry_rate_
In Hz.
Definition: World.h:453
mvsim::World::pending_running_sensors_on_3D_scene
bool pending_running_sensors_on_3D_scene()
Definition: World.h:235
mvsim::World::worldRenderOffset_
std::optional< mrpt::math::TVector3D > worldRenderOffset_
Definition: World.h:782
mvsim::World::parse_tag_sensor
void parse_tag_sensor(const XmlParserContext &ctx)
<sensor>
Definition: World_load_xml.cpp:195
mvsim::World::update_GUI
void update_GUI(TUpdateGUIParams *params=nullptr)
Definition: World_gui.cpp:1006
mvsim::World::GUI::handle_mouse_operations
void handle_mouse_operations()
Definition: World_gui.cpp:827
mvsim::World::LightOptions::light_clip_plane_max
float light_clip_plane_max
Definition: World.h:559
mvsim::World::worldElements_
WorldElementList worldElements_
Definition: World.h:668
mvsim::World::remoteResources_
RemoteResourcesManager remoteResources_
Definition: World.h:867
mvsim::World::user_defined_variables
const std::map< std::string, std::string > & user_defined_variables() const
Definition: World.h:390
mvsim::World::GeoreferenceOptions::georefCoord
mrpt::topography::TGeodeticCoords georefCoord
Latitude/longitude/height of the world (0,0,0) frame.
Definition: World.h:600
mvsim::World::worldRenderOffsetPropose
void worldRenderOffsetPropose(const mrpt::math::TVector3D &v)
(See docs for worldRenderOffset_)
Definition: World.h:648
mvsim::World::set_gravity
void set_gravity(double accel)
Definition: World.h:158
mvsim::World::rawlog_io_mtx_
std::mutex rawlog_io_mtx_
Definition: World.h:874
mvsim::World::TInfoPerCollidableobj::representativeHeight
double representativeHeight
Definition: World.h:894
mvsim::World::reset_collision_flags_
std::set< std::string > reset_collision_flags_
Definition: World.h:790
mvsim::World::GUI::prepare_control_window
void prepare_control_window()
Definition: World_gui.cpp:53
mvsim::World::headless
bool headless() const
Definition: World.h:385
mvsim::World::vehicle_visitor_t
std::function< void(VehicleBase &)> vehicle_visitor_t
Definition: World.h:341
mvsim::Simulable
Definition: Simulable.h:39
mvsim::World::getJoystickState
std::optional< mvsim::TJoyStickEvent > getJoystickState() const
Definition: World.cpp:203
mvsim::World::parse_tag_include
void parse_tag_include(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:259
mvsim::World::internal_initialize
void internal_initialize()
Definition: World.cpp:68
mvsim::World::XmlParserContext::node
const rapidxml::xml_node< char > * node
Definition: World.h:823
mvsim::Block::Ptr
std::shared_ptr< Block > Ptr
Definition: Block.h:53
mvsim::World::GUI::clickedPt
mrpt::math::TPoint3D clickedPt
Definition: World.h:751
mvsim::World::parse_tag_for
void parse_tag_for(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:311
mvsim::World::LutIndexHash::operator()
std::size_t operator()(const lut_2d_coordinates_t &p) const noexcept
Definition: World.h:699
mvsim::World::get_simul_timestep
double get_simul_timestep() const
Simulation fixed-time interval for numerical integration.
Definition: World_simul.cpp:171
mvsim::World::copy_of_objects_dynstate_pose_
std::map< std::string, mrpt::math::TPose3D > copy_of_objects_dynstate_pose_
Updated in internal_one_step()
Definition: World.h:785
mvsim::World::otherWorldParams_
const TParameterDefinitions otherWorldParams_
Definition: World.h:464
mvsim::World::LightOptions::shadow_bias_cam2frag
float shadow_bias_cam2frag
Definition: World.h:562
mvsim::World::getElevationsAt
std::set< float > getElevationsAt(const mrpt::math::TPoint2D &worldXY) const
Definition: World.cpp:275
mvsim::World::GUI
Definition: World.h:730
mvsim::World::LightOptions::light_azimuth
double light_azimuth
Definition: World.h:555
mvsim::World::GUI::parent_
World & parent_
Definition: World.h:760
mvsim::World::internalRunSensorsOn3DScene
void internalRunSensorsOn3DScene(mrpt::opengl::COpenGLScene &physicalObjects)
Definition: World_gui.cpp:914
mvsim::World::GUI::btnReplaceObject
nanogui::Button * btnReplaceObject
Definition: World.h:737
mvsim::World::parse_tag_marker
void parse_tag_marker(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:376
mvsim::World::TGUIKeyEvent
Definition: World.h:168
mvsim::World::SimulableList
std::multimap< std::string, Simulable::Ptr > SimulableList
Definition: World.h:301
mvsim::World::guiUserPendingTasksMtx_
std::mutex guiUserPendingTasksMtx_
Definition: World.h:274
mvsim::World::LightOptions::light_ambient
float light_ambient
Definition: World.h:566
mvsim::World::TInfoPerCollidableobj::collide_fixtures
std::vector< TFixturePtr > collide_fixtures
Definition: World.h:900
mvsim::World::guiUserObjectsViz_
mrpt::opengl::CSetOfObjects::Ptr guiUserObjectsViz_
Definition: World.h:205
mvsim::World::basePath_
std::string basePath_
Definition: World.h:491
mvsim::World::close_GUI
void close_GUI()
a previous call to update_GUI()
Definition: World_gui.cpp:50
mvsim::World::GeoreferenceOptions::GeoreferenceOptions
GeoreferenceOptions()=default
mvsim::World::GUI::lbStatuses
std::vector< nanogui::Label * > lbStatuses
Definition: World.h:736
mvsim::World::TGUI_Options::ortho
bool ortho
Definition: World.h:504
mvsim::World::gui_thread_running_
std::atomic_bool gui_thread_running_
Definition: World.h:248
mvsim::World::getTimeLogger
mrpt::system::CTimeLogger & getTimeLogger()
Definition: World.h:321
mvsim::World::GUI::GUI
GUI(World &parent)
Definition: World.h:732
mvsim::World::TFixturePtr::TFixturePtr
TFixturePtr()=default
mvsim::World::glUserObjsPhysical_
mrpt::opengl::CSetOfObjects::Ptr glUserObjsPhysical_
Definition: World.h:495
mvsim::World::internal_gui_on_image
mrpt::math::TPoint2D internal_gui_on_image(const std::string &label, const mrpt::img::CImage &im, int winPosX)
Definition: World_gui.cpp:1127
mvsim::World::GUI::InfoPerObject
Definition: World.h:739
mvsim::World::TGUI_Options
Definition: World.h:499
mvsim::World::timlogger_
mrpt::system::CTimeLogger timlogger_
Definition: World.h:810
mvsim::World::getListOfBlocks
const BlockList & getListOfBlocks() const
Definition: World.h:312
mvsim::World::TGUI_Options::clip_plane_min
float clip_plane_min
Definition: World.h:512
Joystick.h
mvsim::World::TGUIKeyEvent::modifierCtrl
bool modifierCtrl
Definition: World.h:172
mvsim::World::clear_pending_running_sensors_on_3D_scene
void clear_pending_running_sensors_on_3D_scene()
Definition: World.h:229
mvsim::World::GUI::gui_cbObjects
std::vector< InfoPerObject > gui_cbObjects
Definition: World.h:748
mvsim::World::pendingRunSensorsOn3DScene_
bool pendingRunSensorsOn3DScene_
Definition: World.h:221
mvsim::World::b2dVelIters_
int b2dVelIters_
Definition: World.h:443
mvsim::World::set_simul_timestep
void set_simul_timestep(double timestep)
Definition: World.h:150
mvsim::World::lut_2d_coordinates_t::x
int32_t x
Definition: World.h:687
mvsim::World::parse_tag_variable
void parse_tag_variable(const XmlParserContext &ctx)
Definition: World_load_xml.cpp:287
mvsim::World::TInfoPerCollidableobj::collide_body
b2Body * collide_body
Definition: World.h:893
mvsim::World::glUserObjsViz_
mrpt::opengl::CSetOfObjects::Ptr glUserObjsViz_
Definition: World.h:496
mvsim::World::box2d_world_
std::unique_ptr< b2World > box2d_world_
Definition: World.h:662
mvsim::World::LightOptions::light_color
mrpt::img::TColor light_color
Definition: World.h:565
mvsim::World::simulator_must_close
bool simulator_must_close() const
Definition: World.h:252
mvsim::World::TGUI_Options::camera_distance
double camera_distance
Definition: World.h:508
mvsim::World::TGUIKeyEvent::keycode
int keycode
0=no Key. Otherwise, ASCII code.
Definition: World.h:170
mvsim::World::runVisitorOnWorldElements
void runVisitorOnWorldElements(const world_element_visitor_t &v)
Definition: World.cpp:131
mvsim::VisualObject
Definition: VisualObject.h:35
mvsim::WorldElementBase
Definition: WorldElementBase.h:27
t
geometry_msgs::TransformStamped t
mvsim::World::gui_
GUI gui_
gui state
Definition: World.h:762
mvsim::World::TFixturePtr
Definition: World.h:883
mvsim::World::gui_window
const mrpt::gui::CDisplayWindowGUI::Ptr & gui_window() const
Definition: World.h:196
mvsim::World::LightOptions::light_clip_plane_min
float light_clip_plane_min
Definition: World.h:558
mvsim::World::TGUI_Options::clip_plane_max
float clip_plane_max
Definition: World.h:513
mvsim::World::internal_one_timestep
void internal_one_timestep(double dt)
Definition: World_simul.cpp:66
mvsim::World::world_cs_
std::recursive_mutex world_cs_
Definition: World.h:659
mvsim::World::internal_gui_on_observation_3Dscan
void internal_gui_on_observation_3Dscan(const Simulable &veh, const std::shared_ptr< mrpt::obs::CObservation3DRangeScan > &obs)
Definition: World_gui.cpp:1086
mvsim::World::joystick_
std::optional< Joystick > joystick_
Definition: World.h:440
mvsim::World::lastKeyEventMtx_
std::mutex lastKeyEventMtx_
Definition: World.h:278
mvsim::World::simul_time_mtx_
std::mutex simul_time_mtx_
Definition: World.h:488
mvsim::World::TGUI_Options::TGUI_Options
TGUI_Options()=default
b2_body.h


mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:08