LaserScanner.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/CObservation2DRangeScan.h>
13 #include <mrpt/opengl/CFBORender.h>
14 #include <mrpt/opengl/CPlanarLaserScan.h>
15 #include <mrpt/poses/CPose2D.h>
17 
18 #include <mutex>
19 
20 namespace mvsim
21 {
31 class LaserScanner : public SensorBase
32 {
34  public:
36  virtual ~LaserScanner();
37 
38  // See docs in base class
39  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root) override;
40 
41  virtual void simul_pre_timestep(const TSimulContext& context) override;
42  virtual void simul_post_timestep(const TSimulContext& context) override;
43 
44  void simulateOn3DScene(mrpt::opengl::COpenGLScene& gl_scene) override;
45  void freeOpenGLResources() override;
46 
47  void registerOnServer(mvsim::Client& c) override;
48 
49  protected:
50  virtual void internalGuiUpdate(
51  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
52  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
53  bool childrenOnly) override;
54 
55  // when not using the 3D raytrace mode.
57 
58  int z_order_;
59  mrpt::poses::CPose2D sensor_pose_on_veh_;
60  double rangeStdNoise_ = 0.01;
61  double angleStdNoise_ = mrpt::DEG2RAD(0.01);
64  bool see_fixtures_ = true;
65 
68  bool raytrace_3d_ = false;
69 
70  bool ignore_parent_body_ = false;
71 
72  bool viz_visiblePlane_ = false;
73  bool viz_visibleLines_ = true;
74  bool viz_visiblePoints_ = false;
75  float viz_pointSize_ = 3.0f;
76  mrpt::img::TColor viz_pointsColor_ = {0xff, 0x00, 0x00, 0x80};
77  mrpt::img::TColor viz_planeColor_ = {0x00, 0x00, 0xff, 0x10};
78 
79  // Store here all scan parameters. This obj will be copied as a
80  // "pattern" to fill it with actual scan data.
81  mrpt::obs::CObservation2DRangeScan scan_model_;
82 
83  std::mutex last_scan_cs_;
85  mrpt::obs::CObservation2DRangeScan::Ptr last_scan_;
86  mrpt::obs::CObservation2DRangeScan::Ptr last_scan2gui_;
87 
90  bool gui_uptodate_ = false;
91 
92  mrpt::opengl::CPlanarLaserScan::Ptr gl_scan_;
93  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_,
95  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_;
96 
97  std::optional<TSimulContext> has_to_render_;
98  std::mutex has_to_render_mtx_;
99 
100  std::shared_ptr<mrpt::opengl::CFBORender> fbo_renderer_depth_;
101 
102  std::vector<size_t> angleIdx2pixelIdx_;
103  std::vector<float> angleIdx2secant_;
104 };
105 } // namespace mvsim
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_corner_
Definition: LaserScanner.h:93
std::vector< size_t > angleIdx2pixelIdx_
Definition: LaserScanner.h:102
mrpt::img::TColor viz_planeColor_
Definition: LaserScanner.h:77
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_
Definition: LaserScanner.h:95
A 2D lidar scanner, with FOV up to 360 degrees.
Definition: LaserScanner.h:31
std::mutex last_scan_cs_
Definition: LaserScanner.h:83
mrpt::poses::CPose2D sensor_pose_on_veh_
Definition: LaserScanner.h:59
mrpt::obs::CObservation2DRangeScan::Ptr last_scan_
Definition: LaserScanner.h:85
std::mutex has_to_render_mtx_
Definition: LaserScanner.h:98
mrpt::obs::CObservation2DRangeScan::Ptr last_scan2gui_
Definition: LaserScanner.h:86
mrpt::obs::CObservation2DRangeScan scan_model_
Definition: LaserScanner.h:81
void freeOpenGLResources() override
int z_order_
to help rendering multiple scans
Definition: LaserScanner.h:58
void internal_simulate_lidar_2d_mode(const TSimulContext &context)
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
std::shared_ptr< mrpt::opengl::CFBORender > fbo_renderer_depth_
Definition: LaserScanner.h:100
virtual void simul_pre_timestep(const TSimulContext &context) override
virtual void simul_post_timestep(const TSimulContext &context) override
void simulateOn3DScene(mrpt::opengl::COpenGLScene &gl_scene) override
void registerOnServer(mvsim::Client &c) override
#define DECLARES_REGISTER_SENSOR(CLASS_NAME)
Definition: SensorBase.h:118
mrpt::opengl::CPlanarLaserScan::Ptr gl_scan_
Definition: LaserScanner.h:92
mrpt::img::TColor viz_pointsColor_
Definition: LaserScanner.h:76
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root) override
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_
Definition: LaserScanner.h:93
std::vector< float > angleIdx2secant_
Definition: LaserScanner.h:103
LaserScanner(Simulable &parent, const rapidxml::xml_node< char > *root)
std::optional< TSimulContext > has_to_render_
Definition: LaserScanner.h:97


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