LaserScanner.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/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, bool childrenOnly) override;
53 
54  void notifySimulableSetPose(const mrpt::math::TPose3D& newPose) override;
55 
56  mrpt::math::TPose3D getRelativePose() const override
57  {
58  return scan_model_.sensorPose.asTPose();
59  }
60  void setRelativePose(const mrpt::math::TPose3D& p) override
61  {
62  scan_model_.setSensorPose(mrpt::poses::CPose3D(p));
63  }
64 
65  // when not using the 3D raytrace mode.
67 
68  int z_order_;
69 
70  double rangeStdNoise_ = 0.01;
71  double angleStdNoise_ = mrpt::DEG2RAD(0.01);
74  bool see_fixtures_ = true;
75 
78  bool raytrace_3d_ = false;
79 
80  bool ignore_parent_body_ = false;
81 
82  bool viz_visiblePlane_ = false;
83  bool viz_visibleLines_ = true;
84  bool viz_visiblePoints_ = false;
85  float viz_pointSize_ = 3.0f;
86  mrpt::img::TColor viz_pointsColor_ = {0xff, 0x00, 0x00, 0x80};
87  mrpt::img::TColor viz_planeColor_ = {0x00, 0x00, 0xff, 0x10};
88 
89  // Store here all scan parameters. This obj will be copied as a
90  // "pattern" to fill it with actual scan data.
91  mrpt::obs::CObservation2DRangeScan scan_model_;
92 
93  std::mutex last_scan_cs_;
95  mrpt::obs::CObservation2DRangeScan::Ptr last_scan_;
96  mrpt::obs::CObservation2DRangeScan::Ptr last_scan2gui_;
97 
100  bool gui_uptodate_ = false;
101 
102  mrpt::opengl::CPlanarLaserScan::Ptr gl_scan_;
103  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_, gl_sensor_origin_corner_;
104  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_;
105 
106  std::optional<TSimulContext> has_to_render_;
107  std::mutex has_to_render_mtx_;
108 
109  std::shared_ptr<mrpt::opengl::CFBORender> fbo_renderer_depth_;
110 
111  std::vector<size_t> angleIdx2pixelIdx_;
112  std::vector<float> angleIdx2secant_;
113 };
114 } // namespace mvsim
mvsim::LaserScanner::raytrace_3d_
bool raytrace_3d_
Definition: LaserScanner.h:78
mvsim::VisualObject::parent
World * parent()
Definition: VisualObject.h:51
mvsim::LaserScanner::internalGuiUpdate
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
Definition: LaserScanner.cpp:85
mvsim
Definition: Client.h:21
mvsim::LaserScanner::rangeStdNoise_
double rangeStdNoise_
Definition: LaserScanner.h:70
mvsim::LaserScanner::viz_visibleLines_
bool viz_visibleLines_
Definition: LaserScanner.h:83
mvsim::LaserScanner
Definition: LaserScanner.h:31
mvsim::LaserScanner::getRelativePose
mrpt::math::TPose3D getRelativePose() const override
Definition: LaserScanner.h:56
mvsim::LaserScanner::~LaserScanner
virtual ~LaserScanner()
Definition: LaserScanner.cpp:37
mvsim::LaserScanner::see_fixtures_
bool see_fixtures_
Definition: LaserScanner.h:74
mvsim::LaserScanner::internal_simulate_lidar_2d_mode
void internal_simulate_lidar_2d_mode(const TSimulContext &context)
Definition: LaserScanner.cpp:242
mvsim::LaserScanner::angleIdx2pixelIdx_
std::vector< size_t > angleIdx2pixelIdx_
Definition: LaserScanner.h:111
mvsim::Client
Definition: Client.h:48
mvsim::SensorBase
Virtual base class for all sensors.
Definition: SensorBase.h:34
mvsim::LaserScanner::angleStdNoise_
double angleStdNoise_
Definition: LaserScanner.h:71
mvsim::LaserScanner::gl_scan_
mrpt::opengl::CPlanarLaserScan::Ptr gl_scan_
Definition: LaserScanner.h:102
mvsim::LaserScanner::last_scan_cs_
std::mutex last_scan_cs_
Definition: LaserScanner.h:93
mvsim::LaserScanner::last_scan2gui_
mrpt::obs::CObservation2DRangeScan::Ptr last_scan2gui_
Definition: LaserScanner.h:96
mvsim::LaserScanner::simul_pre_timestep
virtual void simul_pre_timestep(const TSimulContext &context) override
Definition: LaserScanner.cpp:195
mvsim::LaserScanner::viz_pointsColor_
mrpt::img::TColor viz_pointsColor_
Definition: LaserScanner.h:86
mvsim::LaserScanner::ignore_parent_body_
bool ignore_parent_body_
Definition: LaserScanner.h:80
mvsim::LaserScanner::viz_planeColor_
mrpt::img::TColor viz_planeColor_
Definition: LaserScanner.h:87
mvsim::LaserScanner::gl_sensor_origin_
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_
Definition: LaserScanner.h:103
mvsim::LaserScanner::freeOpenGLResources
void freeOpenGLResources() override
Definition: LaserScanner.cpp:434
mvsim::TSimulContext
Definition: basic_types.h:58
mvsim::LaserScanner::scan_model_
mrpt::obs::CObservation2DRangeScan scan_model_
Definition: LaserScanner.h:91
mvsim::LaserScanner::last_scan_
mrpt::obs::CObservation2DRangeScan::Ptr last_scan_
Definition: LaserScanner.h:95
mvsim::LaserScanner::loadConfigFrom
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root) override
Definition: LaserScanner.cpp:39
mvsim::LaserScanner::has_to_render_mtx_
std::mutex has_to_render_mtx_
Definition: LaserScanner.h:107
mvsim::LaserScanner::z_order_
int z_order_
to help rendering multiple scans
Definition: LaserScanner.h:68
mvsim::LaserScanner::registerOnServer
void registerOnServer(mvsim::Client &c) override
Definition: LaserScanner.cpp:682
mvsim::LaserScanner::simul_post_timestep
virtual void simul_post_timestep(const TSimulContext &context) override
Definition: LaserScanner.cpp:198
mvsim::LaserScanner::gl_sensor_origin_corner_
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_corner_
Definition: LaserScanner.h:103
mvsim::LaserScanner::gl_sensor_fov_
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_
Definition: LaserScanner.h:104
mvsim::LaserScanner::viz_visiblePlane_
bool viz_visiblePlane_
Definition: LaserScanner.h:82
rapidxml::xml_node< char >
mvsim::LaserScanner::gui_uptodate_
bool gui_uptodate_
Definition: LaserScanner.h:100
mvsim::LaserScanner::fbo_renderer_depth_
std::shared_ptr< mrpt::opengl::CFBORender > fbo_renderer_depth_
Definition: LaserScanner.h:109
mvsim::LaserScanner::has_to_render_
std::optional< TSimulContext > has_to_render_
Definition: LaserScanner.h:106
mvsim::Simulable
Definition: Simulable.h:39
mvsim::LaserScanner::setRelativePose
void setRelativePose(const mrpt::math::TPose3D &p) override
Definition: LaserScanner.h:60
mvsim::LaserScanner::viz_visiblePoints_
bool viz_visiblePoints_
Definition: LaserScanner.h:84
root
root
mvsim::LaserScanner::viz_pointSize_
float viz_pointSize_
Definition: LaserScanner.h:85
mvsim::LaserScanner::simulateOn3DScene
void simulateOn3DScene(mrpt::opengl::COpenGLScene &gl_scene) override
Definition: LaserScanner.cpp:440
mvsim::LaserScanner::notifySimulableSetPose
void notifySimulableSetPose(const mrpt::math::TPose3D &newPose) override
Definition: LaserScanner.cpp:234
mvsim::LaserScanner::LaserScanner
LaserScanner(Simulable &parent, const rapidxml::xml_node< char > *root)
Definition: LaserScanner.cpp:31
mvsim::LaserScanner::angleIdx2secant_
std::vector< float > angleIdx2secant_
Definition: LaserScanner.h:112
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