SensorBase.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/obs_frwds.h>
13 #include <mrpt/opengl/opengl_frwds.h>
14 #include <mrpt/poses/CPose3D.h>
15 #include <mvsim/ClassFactory.h>
16 #include <mvsim/Simulable.h>
17 #include <mvsim/VisualObject.h>
18 
19 #include <memory>
20 
21 namespace mvsim
22 {
23 class Simulable;
24 
34 class SensorBase : public VisualObject, public Simulable
35 {
36  public:
37  using Ptr = std::shared_ptr<SensorBase>;
38 
41  virtual ~SensorBase();
42 
46 
49  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root);
50 
51  void registerOnServer(mvsim::Client& c) override;
52 
53  virtual void simulateOn3DScene( //
54  [[maybe_unused]] mrpt::opengl::COpenGLScene& gl_scene)
55  {
56  }
57 
58  // Get all sensors visuals API:
59  static std::shared_ptr<mrpt::opengl::CSetOfObjects> GetAllSensorsOriginViz();
60 
61  static std::shared_ptr<mrpt::opengl::CSetOfObjects> GetAllSensorsFOVViz();
62  static void RegisterSensorFOVViz(const std::shared_ptr<mrpt::opengl::CSetOfObjects>& o);
63  static void RegisterSensorOriginViz(const std::shared_ptr<mrpt::opengl::CSetOfObjects>& o);
64 
65  double sensor_period() const { return sensor_period_; }
66 
68  Simulable& vehicle() { return vehicle_; }
69  const Simulable& vehicle() const { return vehicle_; }
70 
71  protected:
80  bool should_simulate_sensor(const TSimulContext& context);
81 
83 
85  const World* world() const { return vehicle_.getSimulableWorldObject(); }
86 
88  double sensor_period_ = 0.1;
89 
92 
94  std::string publishTopic_;
95 
97  std::map<std::string, std::string> varValues_;
98 
99  bool parseSensorPublish(
100  const rapidxml::xml_node<char>* node, const std::map<std::string, std::string>& varValues);
101 
103  const std::shared_ptr<mrpt::obs::CObservation>& obs, const TSimulContext& context);
104 
106  const std::shared_ptr<mrpt::obs::CObservation2DRangeScan>& obs,
107  const TSimulContext& context);
108 
110  void make_sure_we_have_a_name(const std::string& prefix);
111 };
112 
113 using TListSensors = std::vector<SensorBase::Ptr>;
114 
115 // Class factory:
117 
119 
120 #define DECLARES_REGISTER_SENSOR(CLASS_NAME) \
121  DECLARES_REGISTER_CLASS2(CLASS_NAME, SensorBase, Simulable&, const rapidxml::xml_node<char>*)
122 
123 #define REGISTER_SENSOR(TEXTUAL_NAME, CLASS_NAME) \
124  REGISTER_CLASS2(TClassFactory_sensors, classFactory_sensors, TEXTUAL_NAME, CLASS_NAME)
125 } // namespace mvsim
mvsim::SensorBase::sensor_period
double sensor_period() const
Definition: SensorBase.h:65
mvsim::VisualObject::parent
World * parent()
Definition: VisualObject.h:51
mvsim
Definition: Client.h:21
mvsim::SensorBase::reportNewObservation_lidar_2d
void reportNewObservation_lidar_2d(const std::shared_ptr< mrpt::obs::CObservation2DRangeScan > &obs, const TSimulContext &context)
Definition: SensorBase.cpp:185
mvsim::SensorBase::make_sure_we_have_a_name
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:252
mvsim::SensorBase::varValues_
std::map< std::string, std::string > varValues_
Filled in by SensorBase::loadConfigFrom()
Definition: SensorBase.h:97
mvsim::SensorBase::reportNewObservation
void reportNewObservation(const std::shared_ptr< mrpt::obs::CObservation > &obs, const TSimulContext &context)
Definition: SensorBase.cpp:159
mvsim::Simulable::getSimulableWorldObject
World * getSimulableWorldObject()
Definition: Simulable.h:128
mvsim::SensorBase::simulateOn3DScene
virtual void simulateOn3DScene([[maybe_unused]] mrpt::opengl::COpenGLScene &gl_scene)
Definition: SensorBase.h:53
mvsim::Client
Definition: Client.h:48
mvsim::SensorBase::vehicle_
Simulable & vehicle_
The vehicle this sensor is attached to.
Definition: SensorBase.h:82
mvsim::SensorBase
Virtual base class for all sensors.
Definition: SensorBase.h:34
mvsim::SensorBase::vehicle
const Simulable & vehicle() const
Definition: SensorBase.h:69
mvsim::SensorBase::registerOnServer
void registerOnServer(mvsim::Client &c) override
Definition: SensorBase.cpp:220
mvsim::SensorBase::GetAllSensorsOriginViz
static std::shared_ptr< mrpt::opengl::CSetOfObjects > GetAllSensorsOriginViz()
Definition: SensorBase.cpp:61
mvsim::SensorBase::should_simulate_sensor
bool should_simulate_sensor(const TSimulContext &context)
Definition: SensorBase.cpp:262
mvsim::SensorBase::world
World * world()
Definition: SensorBase.h:84
Simulable.h
mvsim::SensorBase::parseSensorPublish
bool parseSensorPublish(const rapidxml::xml_node< char > *node, const std::map< std::string, std::string > &varValues)
Definition: SensorBase.cpp:129
mvsim::TSimulContext
Definition: basic_types.h:58
mvsim::SensorBase::~SensorBase
virtual ~SensorBase()
mvsim::SensorBase::factory
static SensorBase::Ptr factory(Simulable &parent, const rapidxml::xml_node< char > *xml_node)
Definition: SensorBase.cpp:93
mvsim::SensorBase::sensor_period_
double sensor_period_
Definition: SensorBase.h:88
mvsim::SensorBase::Ptr
std::shared_ptr< SensorBase > Ptr
Definition: SensorBase.h:37
mvsim::SensorBase::vehicle
Simulable & vehicle()
Definition: SensorBase.h:68
mvsim::SensorBase::publishTopic_
std::string publishTopic_
Definition: SensorBase.h:94
mvsim::World
Definition: World.h:82
mvsim::SensorBase::SensorBase
SensorBase(Simulable &vehicle)
Definition: SensorBase.cpp:84
mvsim::SensorBase::GetAllSensorsFOVViz
static std::shared_ptr< mrpt::opengl::CSetOfObjects > GetAllSensorsFOVViz()
Definition: SensorBase.cpp:67
rapidxml::xml_node< char >
mvsim::SensorBase::sensor_last_timestamp_
double sensor_last_timestamp_
Definition: SensorBase.h:91
mvsim::Simulable
Definition: Simulable.h:39
mvsim::SensorBase::loadConfigFrom
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root)
Definition: SensorBase.cpp:231
mvsim::ClassFactory
Definition: ClassFactory.h:25
mvsim::classFactory_sensors
TClassFactory_sensors classFactory_sensors
Definition: SensorBase.cpp:37
VisualObject.h
mvsim::SensorBase::world
const World * world() const
Definition: SensorBase.h:85
mvsim::VisualObject
Definition: VisualObject.h:35
ClassFactory.h
mvsim::TListSensors
std::vector< SensorBase::Ptr > TListSensors
Definition: SensorBase.h:113
mvsim::SensorBase::RegisterSensorFOVViz
static void RegisterSensorFOVViz(const std::shared_ptr< mrpt::opengl::CSetOfObjects > &o)
Definition: SensorBase.cpp:73
mvsim::SensorBase::RegisterSensorOriginViz
static void RegisterSensorOriginViz(const std::shared_ptr< mrpt::opengl::CSetOfObjects > &o)
Definition: SensorBase.cpp:78


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