MVSim
Lightweight simulator for 2.5D vehicles and robots
GNSS.h
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2026 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/CObservationGPS.h>
13 #include <mrpt/poses/CPose3D.h>
14 #include <mrpt/random.h>
15 #include <mvsim/Sensors/SensorBase.h>
16 
17 #include <mutex>
18 
19 namespace mvsim
20 {
27 class GNSS : public SensorBase
28 {
29  DECLARES_REGISTER_SENSOR(GNSS)
30  public:
31  GNSS(Simulable& parent, const rapidxml::xml_node<char>* root);
32  virtual ~GNSS();
33 
34  // Deleted copy and move operations
35  GNSS(const GNSS&) = delete;
36  GNSS& operator=(const GNSS&) = delete;
37  GNSS(GNSS&&) = delete;
38  GNSS& operator=(GNSS&&) = delete;
39 
40  // See docs in base class
41  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root) override;
42 
43  virtual void simul_pre_timestep(const TSimulContext& context) override;
44  virtual void simul_post_timestep(const TSimulContext& context) override;
45 
46  void registerOnServer(mvsim::Client& c) override;
47 
48  protected:
49  void internalGuiUpdate(
50  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
51  [[maybe_unused]] const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
52  [[maybe_unused]] bool childrenOnly) override;
53 
54  void notifySimulableSetPose(const mrpt::math::TPose3D& newPose) override;
55 
56  mrpt::math::TPose3D getRelativePose() const override { return obs_model_.sensorPose.asTPose(); }
57  void setRelativePose(const mrpt::math::TPose3D& p) override
58  {
59  obs_model_.sensorPose = mrpt::poses::CPose3D(p);
60  }
61 
62  void internal_simulate_gnss(const TSimulContext& context);
63 
64  double horizontal_std_noise_ = 2.0;
65  double vertical_std_noise_ = 4.0;
66 
67  // Store here all default parameters. This obj will be copied as a
68  // "pattern" to fill it with actual data.
69  mrpt::obs::CObservationGPS obs_model_;
70 
71  std::mutex last_obs_cs_;
72 
74  mrpt::obs::CObservationGPS::Ptr last_obs_;
75 
76  mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_, gl_sensor_origin_corner_;
77 
78  mrpt::random::CRandomGenerator rng_;
79 };
80 } // namespace mvsim
Definition: Client.h:49
Definition: GNSS.h:28
double vertical_std_noise_
[m]
Definition: GNSS.h:65
mrpt::obs::CObservationGPS::Ptr last_obs_
Definition: GNSS.h:74
virtual void simul_pre_timestep(const TSimulContext &context) override
mrpt::math::TPose3D getRelativePose() const override
Definition: GNSS.h:56
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root) override
void setRelativePose(const mrpt::math::TPose3D &p) override
Definition: GNSS.h:57
double horizontal_std_noise_
[m]
Definition: GNSS.h:64
virtual void simul_post_timestep(const TSimulContext &context) override
Virtual base class for all sensors.
Definition: SensorBase.h:35
Definition: Simulable.h:40
Definition: basic_types.h:58