SensorBase.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/io/CFileGZOutputStream.h>
13 #include <mrpt/obs/obs_frwds.h>
14 #include <mrpt/opengl/opengl_frwds.h>
15 #include <mrpt/poses/CPose3D.h>
16 #include <mvsim/ClassFactory.h>
17 #include <mvsim/Simulable.h>
18 #include <mvsim/VisualObject.h>
19 
20 #include <memory>
21 
22 namespace mvsim
23 {
24 class Simulable;
25 
26 class SensorBase : public VisualObject, public Simulable
27 {
28  public:
29  using Ptr = std::shared_ptr<SensorBase>;
30 
32  SensorBase(Simulable& vehicle);
33  virtual ~SensorBase();
34 
37  static SensorBase::Ptr factory(
38  Simulable& parent, const rapidxml::xml_node<char>* xml_node);
39 
42  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root);
43 
44  void registerOnServer(mvsim::Client& c) override;
45 
46  virtual void simulateOn3DScene( //
47  [[maybe_unused]] mrpt::opengl::COpenGLScene& gl_scene)
48  {
49  }
50 
51  // Get all sensors visuals API:
52  static std::shared_ptr<mrpt::opengl::CSetOfObjects>
54 
55  static std::shared_ptr<mrpt::opengl::CSetOfObjects> GetAllSensorsFOVViz();
56  static void RegisterSensorFOVViz(
57  const std::shared_ptr<mrpt::opengl::CSetOfObjects>& o);
58  static void RegisterSensorOriginViz(
59  const std::shared_ptr<mrpt::opengl::CSetOfObjects>& o);
60 
61  double sensor_period() const { return sensor_period_; }
62 
63  protected:
72  bool should_simulate_sensor(const TSimulContext& context);
73 
75 
76  World* world() { return vehicle_.getSimulableWorldObject(); }
77  const World* world() const { return vehicle_.getSimulableWorldObject(); }
78 
80  double sensor_period_ = 0.1;
81 
82  std::string save_to_rawlog_;
83  std::shared_ptr<mrpt::io::CFileGZOutputStream> rawlog_io_;
84 
87 
89  std::string publishTopic_;
90 
92  std::map<std::string, std::string> varValues_;
93 
94  bool parseSensorPublish(
95  const rapidxml::xml_node<char>* node,
96  const std::map<std::string, std::string>& varValues);
97 
99  const std::shared_ptr<mrpt::obs::CObservation>& obs,
100  const TSimulContext& context);
101 
103  const std::shared_ptr<mrpt::obs::CObservation2DRangeScan>& obs,
104  const TSimulContext& context);
105 
107  void make_sure_we_have_a_name(const std::string& prefix);
108 };
109 
110 using TListSensors = std::vector<SensorBase::Ptr>;
111 
112 // Class factory:
113 using TClassFactory_sensors =
115 
117 
118 #define DECLARES_REGISTER_SENSOR(CLASS_NAME) \
119  DECLARES_REGISTER_CLASS2( \
120  CLASS_NAME, SensorBase, Simulable&, const rapidxml::xml_node<char>*)
121 
122 #define REGISTER_SENSOR(TEXTUAL_NAME, CLASS_NAME) \
123  REGISTER_CLASS2( \
124  TClassFactory_sensors, classFactory_sensors, TEXTUAL_NAME, CLASS_NAME)
125 } // namespace mvsim
std::string publishTopic_
Definition: SensorBase.h:89
World * world()
Definition: SensorBase.h:76
const World * world() const
Definition: SensorBase.h:77
std::vector< SensorBase::Ptr > TListSensors
Definition: SensorBase.h:110
virtual void simulateOn3DScene([[maybe_unused]] mrpt::opengl::COpenGLScene &gl_scene)
Definition: SensorBase.h:46
static std::shared_ptr< mrpt::opengl::CSetOfObjects > GetAllSensorsFOVViz()
Definition: SensorBase.cpp:65
static void RegisterSensorFOVViz(const std::shared_ptr< mrpt::opengl::CSetOfObjects > &o)
Definition: SensorBase.cpp:71
static std::shared_ptr< mrpt::opengl::CSetOfObjects > GetAllSensorsOriginViz()
Definition: SensorBase.cpp:59
bool should_simulate_sensor(const TSimulContext &context)
Definition: SensorBase.cpp:283
std::map< std::string, std::string > varValues_
Filled in by SensorBase::loadConfigFrom()
Definition: SensorBase.h:92
bool parseSensorPublish(const rapidxml::xml_node< char > *node, const std::map< std::string, std::string > &varValues)
Definition: SensorBase.cpp:129
static void RegisterSensorOriginViz(const std::shared_ptr< mrpt::opengl::CSetOfObjects > &o)
Definition: SensorBase.cpp:76
Simulable & vehicle_
The vehicle this sensor is attached to.
Definition: SensorBase.h:74
void registerOnServer(mvsim::Client &c) override
Definition: SensorBase.cpp:237
std::shared_ptr< mrpt::io::CFileGZOutputStream > rawlog_io_
Definition: SensorBase.h:83
void reportNewObservation(const std::shared_ptr< mrpt::obs::CObservation > &obs, const TSimulContext &context)
Definition: SensorBase.cpp:160
std::shared_ptr< SensorBase > Ptr
Definition: SensorBase.h:29
virtual ~SensorBase()
double sensor_period_
Definition: SensorBase.h:80
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root)
Definition: SensorBase.cpp:249
double sensor_last_timestamp_
Definition: SensorBase.h:86
TClassFactory_sensors classFactory_sensors
Definition: SensorBase.cpp:36
void reportNewObservation_lidar_2d(const std::shared_ptr< mrpt::obs::CObservation2DRangeScan > &obs, const TSimulContext &context)
Definition: SensorBase.cpp:201
std::string save_to_rawlog_
Definition: SensorBase.h:82
SensorBase(Simulable &vehicle)
Definition: SensorBase.cpp:83
static SensorBase::Ptr factory(Simulable &parent, const rapidxml::xml_node< char > *xml_node)
Definition: SensorBase.cpp:92
double sensor_period() const
Definition: SensorBase.h:61
void make_sure_we_have_a_name(const std::string &prefix)
Assign a sensible default name/sensor label if none is provided:
Definition: SensorBase.cpp:271
World * getSimulableWorldObject()
Definition: Simulable.h:113


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