Lidar3D.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 <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 {
30 class Lidar3D : public SensorBase
31 {
33  public:
35  virtual ~Lidar3D();
36 
37  // See docs in base class
38  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root) override;
39 
40  virtual void simul_pre_timestep(const TSimulContext& context) override;
41  virtual void simul_post_timestep(const TSimulContext& context) override;
42 
43  void simulateOn3DScene(mrpt::opengl::COpenGLScene& gl_scene) override;
44  void freeOpenGLResources() override;
45 
46  protected:
47  virtual void internalGuiUpdate(
48  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
49  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical, bool childrenOnly) override;
50 
51  void notifySimulableSetPose(const mrpt::math::TPose3D& newPose) override;
52 
53  mrpt::math::TPose3D getRelativePose() const override { return sensorPoseOnVeh_.asTPose(); }
54  void setRelativePose(const mrpt::math::TPose3D& p) override
55  {
56  sensorPoseOnVeh_ = mrpt::poses::CPose3D(p);
57  }
58 
59  mrpt::poses::CPose3D sensorPoseOnVeh_;
60 
61  double rangeStdNoise_ = 0.01;
62  bool ignore_parent_body_ = false;
63 
64  float viz_pointSize_ = 3.0f;
65  float minRange_ = 0.01f;
66  float maxRange_ = 80.0f;
67 
70  double vertical_fov_ = 30.0;
71 
77 
78  int vertNumRays_ = 16, horzNumRays_ = 180;
79  double horzResolutionFactor_ = 1.0;
80  double vertResolutionFactor_ = 1.0;
83 
85  mrpt::obs::CObservationPointCloud::Ptr last_scan2gui_, last_scan_;
86  std::mutex last_scan_cs_;
87 
90  bool gui_uptodate_ = false;
91 
92  mrpt::opengl::CPointCloudColoured::Ptr glPoints_;
93  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_, gl_sensor_origin_corner_;
94  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_;
95 
96  std::optional<TSimulContext> has_to_render_;
97  std::mutex has_to_render_mtx_;
98 
99  std::shared_ptr<mrpt::opengl::CFBORender> fbo_renderer_depth_;
100 
101  struct PerRayLUT
102  {
103  float u = 0, v = 0;
104  float depth2range = 0;
105  };
107  {
108  std::vector<PerRayLUT> column;
109  };
110 
111  std::vector<PerHorzAngleLUT> lut_;
112 
115  std::vector<double> vertical_ray_angles_;
116 };
117 } // namespace mvsim
mvsim::VisualObject::parent
World * parent()
Definition: VisualObject.h:51
mvsim
Definition: Client.h:21
mvsim::Lidar3D::minRange_
float minRange_
Definition: Lidar3D.h:65
mvsim::Lidar3D::maxDepthInterpolationStepVert_
float maxDepthInterpolationStepVert_
Definition: Lidar3D.h:81
mvsim::Lidar3D::PerRayLUT::depth2range
float depth2range
Definition: Lidar3D.h:104
mvsim::Lidar3D::Lidar3D
Lidar3D(Simulable &parent, const rapidxml::xml_node< char > *root)
Definition: Lidar3D.cpp:42
mvsim::Lidar3D::vertical_ray_angles_str_
std::string vertical_ray_angles_str_
Definition: Lidar3D.h:76
mvsim::Lidar3D::maxRange_
float maxRange_
Definition: Lidar3D.h:66
mvsim::SensorBase
Virtual base class for all sensors.
Definition: SensorBase.h:34
mvsim::Lidar3D::PerRayLUT::v
float v
Pixel coords.
Definition: Lidar3D.h:103
mvsim::Lidar3D::has_to_render_mtx_
std::mutex has_to_render_mtx_
Definition: Lidar3D.h:97
mvsim::Lidar3D::~Lidar3D
virtual ~Lidar3D()
Definition: Lidar3D.cpp:47
mvsim::Lidar3D::vertical_ray_angles_
std::vector< double > vertical_ray_angles_
Definition: Lidar3D.h:115
mvsim::Lidar3D::rangeStdNoise_
double rangeStdNoise_
Definition: Lidar3D.h:61
mvsim::Lidar3D::horzResolutionFactor_
double horzResolutionFactor_
Definition: Lidar3D.h:79
mvsim::Lidar3D::setRelativePose
void setRelativePose(const mrpt::math::TPose3D &p) override
Definition: Lidar3D.h:54
mvsim::Lidar3D::glPoints_
mrpt::opengl::CPointCloudColoured::Ptr glPoints_
Definition: Lidar3D.h:92
mvsim::Lidar3D::vertNumRays_
int vertNumRays_
Definition: Lidar3D.h:78
mvsim::Lidar3D::freeOpenGLResources
void freeOpenGLResources() override
Definition: Lidar3D.cpp:194
mvsim::Lidar3D::PerRayLUT
Definition: Lidar3D.h:101
mvsim::TSimulContext
Definition: basic_types.h:58
mvsim::Lidar3D::ignore_parent_body_
bool ignore_parent_body_
Definition: Lidar3D.h:62
mvsim::Lidar3D
Definition: Lidar3D.h:30
mvsim::Lidar3D::vertical_fov_
double vertical_fov_
In degrees !!
Definition: Lidar3D.h:70
mvsim::Lidar3D::viz_pointSize_
float viz_pointSize_
Definition: Lidar3D.h:64
mvsim::Lidar3D::sensorPoseOnVeh_
mrpt::poses::CPose3D sensorPoseOnVeh_
Definition: Lidar3D.h:59
mvsim::Lidar3D::last_scan2gui_
mrpt::obs::CObservationPointCloud::Ptr last_scan2gui_
Definition: Lidar3D.h:85
mvsim::Lidar3D::last_scan_cs_
std::mutex last_scan_cs_
Definition: Lidar3D.h:86
mvsim::Lidar3D::vertResolutionFactor_
double vertResolutionFactor_
Definition: Lidar3D.h:80
mvsim::Lidar3D::gl_sensor_origin_
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_
Definition: Lidar3D.h:93
rapidxml::xml_node< char >
mvsim::Lidar3D::lut_
std::vector< PerHorzAngleLUT > lut_
Definition: Lidar3D.h:111
mvsim::Simulable
Definition: Simulable.h:39
mvsim::Lidar3D::last_scan_
mrpt::obs::CObservationPointCloud::Ptr last_scan_
Definition: Lidar3D.h:85
mvsim::Lidar3D::PerHorzAngleLUT::column
std::vector< PerRayLUT > column
Definition: Lidar3D.h:108
mvsim::Lidar3D::PerRayLUT::u
float u
Definition: Lidar3D.h:103
mvsim::Lidar3D::simul_pre_timestep
virtual void simul_pre_timestep(const TSimulContext &context) override
Definition: Lidar3D.cpp:155
mvsim::Lidar3D::PerHorzAngleLUT
Definition: Lidar3D.h:106
mvsim::Lidar3D::internalGuiUpdate
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:83
mvsim::Lidar3D::fbo_renderer_depth_
std::shared_ptr< mrpt::opengl::CFBORender > fbo_renderer_depth_
Definition: Lidar3D.h:99
mvsim::Lidar3D::maxDepthInterpolationStepHorz_
float maxDepthInterpolationStepHorz_
Definition: Lidar3D.h:82
mvsim::Lidar3D::notifySimulableSetPose
void notifySimulableSetPose(const mrpt::math::TPose3D &newPose) override
Definition: Lidar3D.cpp:186
mvsim::Lidar3D::simulateOn3DScene
void simulateOn3DScene(mrpt::opengl::COpenGLScene &gl_scene) override
Definition: Lidar3D.cpp:289
root
root
mvsim::Lidar3D::gl_sensor_fov_
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_
Definition: Lidar3D.h:94
mvsim::Lidar3D::simul_post_timestep
virtual void simul_post_timestep(const TSimulContext &context) override
Definition: Lidar3D.cpp:158
mvsim::Lidar3D::gl_sensor_origin_corner_
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_corner_
Definition: Lidar3D.h:93
mvsim::Lidar3D::loadConfigFrom
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root) override
Definition: Lidar3D.cpp:49
mvsim::Lidar3D::has_to_render_
std::optional< TSimulContext > has_to_render_
Definition: Lidar3D.h:96
mvsim::Lidar3D::gui_uptodate_
bool gui_uptodate_
Definition: Lidar3D.h:90
mvsim::Lidar3D::horzNumRays_
int horzNumRays_
Definition: Lidar3D.h:78
mvsim::Lidar3D::getRelativePose
mrpt::math::TPose3D getRelativePose() const override
Definition: Lidar3D.h:53
SensorBase.h
DECLARES_REGISTER_SENSOR
#define DECLARES_REGISTER_SENSOR(CLASS_NAME)
Definition: SensorBase.h:120


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