Lidar3D.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2023 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/obs/CObservationPointCloud.h>
13 #include <mrpt/obs/CObservationRotatingScan.h>
14 #include <mrpt/opengl/CFBORender.h>
15 #include <mrpt/opengl/CPointCloudColoured.h>
16 #include <mrpt/poses/CPose2D.h>
18 
19 #include <mutex>
20 
21 namespace mvsim
22 {
29 class Lidar3D : public SensorBase
30 {
32  public:
34  virtual ~Lidar3D();
35 
36  // See docs in base class
37  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root) override;
38 
39  virtual void simul_pre_timestep(const TSimulContext& context) override;
40  virtual void simul_post_timestep(const TSimulContext& context) override;
41 
42  void simulateOn3DScene(mrpt::opengl::COpenGLScene& gl_scene) override;
43  void freeOpenGLResources() override;
44 
45  protected:
46  virtual void internalGuiUpdate(
47  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
48  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
49  bool childrenOnly) override;
50 
51  mrpt::poses::CPose3D sensorPoseOnVeh_;
52 
53  double rangeStdNoise_ = 0.01;
54  bool ignore_parent_body_ = false;
55 
56  float viz_pointSize_ = 3.0f;
57  float minRange_ = 0.01f;
58  float maxRange_ = 80.0f;
59  double vertical_fov_ = mrpt::DEG2RAD(30.0);
60  int vertNumRays_ = 16, horzNumRays_ = 180;
61  int fbo_nrows_ = vertNumRays_ * 20;
62 
64  mrpt::obs::CObservationPointCloud::Ptr last_scan2gui_, last_scan_;
65  std::mutex last_scan_cs_;
66 
69  bool gui_uptodate_ = false;
70 
71  mrpt::opengl::CPointCloudColoured::Ptr glPoints_;
72  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_,
74  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_;
75 
76  std::optional<TSimulContext> has_to_render_;
77  std::mutex has_to_render_mtx_;
78 
79  std::shared_ptr<mrpt::opengl::CFBORender> fbo_renderer_depth_;
80 
81  struct PerRayLUT
82  {
83  int u = 0, v = 0;
84  float depth2range = 0;
85  };
87  {
88  std::vector<PerRayLUT> column;
89  };
90 
91  std::vector<PerHorzAngleLUT> lut_;
92 };
93 } // namespace mvsim
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_
Definition: Lidar3D.h:74
mrpt::poses::CPose3D sensorPoseOnVeh_
Definition: Lidar3D.h:51
float maxRange_
Definition: Lidar3D.h:58
virtual ~Lidar3D()
Definition: Lidar3D.cpp:38
void simulateOn3DScene(mrpt::opengl::COpenGLScene &gl_scene) override
Definition: Lidar3D.cpp:176
std::vector< PerHorzAngleLUT > lut_
Definition: Lidar3D.h:91
double rangeStdNoise_
Definition: Lidar3D.h:53
mrpt::opengl::CPointCloudColoured::Ptr glPoints_
Definition: Lidar3D.h:71
std::shared_ptr< mrpt::opengl::CFBORender > fbo_renderer_depth_
Definition: Lidar3D.h:79
std::optional< TSimulContext > has_to_render_
Definition: Lidar3D.h:76
int vertNumRays_
Definition: Lidar3D.h:60
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root) override
Definition: Lidar3D.cpp:40
Lidar3D(Simulable &parent, const rapidxml::xml_node< char > *root)
Definition: Lidar3D.cpp:32
std::mutex has_to_render_mtx_
Definition: Lidar3D.h:77
void freeOpenGLResources() override
Definition: Lidar3D.cpp:170
bool ignore_parent_body_
Definition: Lidar3D.h:54
float minRange_
Definition: Lidar3D.h:57
virtual void simul_pre_timestep(const TSimulContext &context) override
Definition: Lidar3D.cpp:142
int v
Pixel coords.
Definition: Lidar3D.h:83
int horzNumRays_
Definition: Lidar3D.h:60
std::mutex last_scan_cs_
Definition: Lidar3D.h:65
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_corner_
Definition: Lidar3D.h:72
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_
Definition: Lidar3D.h:72
A 3D LiDAR sensor, with 360 degrees horizontal fielf-of-view, and a configurable vertical FOV...
Definition: Lidar3D.h:29
int fbo_nrows_
Definition: Lidar3D.h:61
#define DECLARES_REGISTER_SENSOR(CLASS_NAME)
Definition: SensorBase.h:118
std::vector< PerRayLUT > column
Definition: Lidar3D.h:88
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
Definition: Lidar3D.cpp:67
mrpt::obs::CObservationPointCloud::Ptr last_scan2gui_
Definition: Lidar3D.h:64
virtual void simul_post_timestep(const TSimulContext &context) override
Definition: Lidar3D.cpp:147
mrpt::obs::CObservationPointCloud::Ptr last_scan_
Definition: Lidar3D.h:64
bool gui_uptodate_
Definition: Lidar3D.h:69
double vertical_fov_
Definition: Lidar3D.h:59
float viz_pointSize_
Definition: Lidar3D.h:56


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