MVSim
Lightweight simulator for 2.5D vehicles and robots
OccupancyGridMap.h
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2026 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 <mrpt/maps/COccupancyGridMap2D.h>
13 #include <mrpt/obs/CObservation2DRangeScan.h>
14 #include <mrpt/obs/CSinCosLookUpTableFor2DScans.h>
15 #include <mrpt/opengl/CPointCloud.h>
16 #include <mrpt/opengl/CSetOfObjects.h>
17 #include <mrpt/poses/CPose2D.h>
18 #include <mvsim/WorldElements/WorldElementBase.h>
19 
20 #include <mutex>
21 
22 namespace mvsim
23 {
29 {
30  DECLARES_REGISTER_WORLD_ELEMENT(OccupancyGridMap)
31  public:
32  OccupancyGridMap(World* parent, const rapidxml::xml_node<char>* root);
33  virtual ~OccupancyGridMap();
34 
35  void doLoadConfigFrom(const rapidxml::xml_node<char>* root);
36 
37  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root) override
38  {
39  doLoadConfigFrom(root);
40  }
41 
42  virtual void simul_pre_timestep(const TSimulContext& context) override;
43 
44  const mrpt::maps::COccupancyGridMap2D& getOccGrid() const { return grid_; }
45  mrpt::maps::COccupancyGridMap2D& getOccGrid() { return grid_; }
46 
47  protected:
48  virtual void internalGuiUpdate(
49  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
50  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical, bool childrenOnly) override;
51 
52  mrpt::maps::COccupancyGridMap2D grid_;
53 
56  mrpt::opengl::CSetOfObjects::Ptr gl_grid_;
57 
58  struct TFixturePtr
59  {
60  TFixturePtr() = default;
61  b2Fixture* fixture = nullptr;
62  };
63 
65  {
66  TInfoPerCollidableobj() = default;
67 
68  mrpt::poses::CPose2D pose;
69  b2Body* collide_body = nullptr;
70  mrpt::obs::CObservation2DRangeScan::Ptr scan;
71  std::vector<TFixturePtr> collide_fixtures;
72  float max_obstacles_ranges = 0;
73  };
74 
75  std::vector<TInfoPerCollidableobj> obstacles_for_each_obj_;
76  std::vector<mrpt::opengl::CSetOfObjects::Ptr> gl_obs_clouds_;
77 
78  std::mutex gl_obs_clouds_buffer_cs_;
79  std::vector<mrpt::opengl::CPointCloud::Ptr> gl_obs_clouds_buffer_;
80 
81  mrpt::obs::CSinCosLookUpTableFor2DScans sincos_lut_;
82 
83  bool show_grid_collision_points_;
84  double restitution_;
86 };
87 } // namespace mvsim
Definition: OccupancyGridMap.h:29
double restitution_
Elastic restitution coef (default: 0.01)
Definition: OccupancyGridMap.h:84
virtual void simul_pre_timestep(const TSimulContext &context) override
bool gui_uptodate_
Definition: OccupancyGridMap.h:54
double lateral_friction_
(Default: 0.5)
Definition: OccupancyGridMap.h:85
Definition: WorldElementBase.h:28
Definition: World.h:132
Definition: OccupancyGridMap.h:59
Definition: OccupancyGridMap.h:65
Definition: basic_types.h:58