MVSim
Lightweight simulator for 2.5D vehicles and robots
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
mvsim::Lidar3D Class Reference

#include <Lidar3D.h>

Inheritance diagram for mvsim::Lidar3D:
Inheritance graph
[legend]
Collaboration diagram for mvsim::Lidar3D:
Collaboration graph
[legend]

Classes

struct  PerHorzAngleLUT
 
struct  PerRayLUT
 

Public Member Functions

 Lidar3D (Simulable &parent, const rapidxml::xml_node< char > *root)
 
virtual void loadConfigFrom (const rapidxml::xml_node< char > *root) override
 
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 freeOpenGLResources () override
 
- Public Member Functions inherited from mvsim::SensorBase
 SensorBase (Simulable &vehicle)
 
void registerOnServer (mvsim::Client &c) override
 
virtual void simulateOn3DScene ([[maybe_unused]] mrpt::opengl::COpenGLScene &gl_scene)
 
double sensor_period () const
 
Simulablevehicle ()
 
const Simulablevehicle () const
 
- Public Member Functions inherited from mvsim::VisualObject
 VisualObject (World *parent, bool insertCustomVizIntoViz=true, bool insertCustomVizIntoPhysical=true)
 
 VisualObject (const VisualObject &)=delete
 
VisualObjectoperator= (const VisualObject &)=delete
 
 VisualObject (VisualObject &&)=delete
 
VisualObjectoperator= (VisualObject &&)=delete
 
virtual void guiUpdate (const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical)
 
Worldparent ()
 
const Worldparent () const
 
void customVisualVisible (const bool visible)
 
bool customVisualVisible () const
 
const std::optional< Shape2p5 > & collisionShape () const
 
void showCollisionShape (bool show)
 
- Public Member Functions inherited from mvsim::Simulable
 Simulable (World *parent)
 
virtual void apply_force (const mrpt::math::TVector2D &force, const mrpt::math::TPoint2D &applyPoint=mrpt::math::TPoint2D(0, 0))
 
virtual VisualObjectmeAsVisualObject ()
 
mrpt::math::TTwist2D getRefVelocityLocal () const
 
mrpt::math::TTwist2D getVelocityLocal () const
 
mrpt::math::TTwist2D getRefVelocityGlobal () const
 
mrpt::math::TTwist2D getComVelocityGlobal () const
 
mrpt::math::TPose3D getPose () const
 
mrpt::math::TPose3D getPoseNoLock () const
 No thread-safe version. Used internally only.
 
mrpt::math::TVector3D getLinearAcceleration () const
 
void setPose (const mrpt::math::TPose3D &p, bool notifyChange=true) const
 
void setRefVelocityLocal (const mrpt::math::TTwist2D &dq)
 
mrpt::poses::CPose2D getCPose2D () const
 Alternative to getPose()
 
mrpt::poses::CPose3D getCPose3D () const
 Alternative to getPose()
 
const std::string & getName () const
 
void setName (const std::string &s)
 
bool isInCollision () const
 
bool hadCollision () const
 
void resetCollisionFlag ()
 
const b2Body * b2d_body () const
 
b2Body * b2d_body ()
 
WorldgetSimulableWorldObject ()
 
const WorldgetSimulableWorldObject () const
 
virtual std::optional< float > getElevationAt ([[maybe_unused]] const mrpt::math::TPoint2D &worldXY) const
 

Protected Member Functions

virtual void internalGuiUpdate (const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
 
void notifySimulableSetPose (const mrpt::math::TPose3D &newPose) override
 
mrpt::math::TPose3D getRelativePose () const override
 
void setRelativePose (const mrpt::math::TPose3D &p) override
 
- Protected Member Functions inherited from mvsim::SensorBase
bool should_simulate_sensor (const TSimulContext &context)
 
Worldworld ()
 
const Worldworld () const
 
bool parseSensorPublish (const rapidxml::xml_node< char > *node, const std::map< std::string, std::string > &varValues)
 
void reportNewObservation (const std::shared_ptr< mrpt::obs::CObservation > &obs, const TSimulContext &context)
 
void reportNewObservation_lidar_2d (const std::shared_ptr< mrpt::obs::CObservation2DRangeScan > &obs, const TSimulContext &context)
 
void make_sure_we_have_a_name (const std::string &prefix)
 Assign a sensible default name/sensor label if none is provided:
 
- Protected Member Functions inherited from mvsim::VisualObject
bool parseVisual (const rapidxml::xml_node< char > &rootNode)
 Returns true if there is at least one <visual>...</visual> entry.
 
bool parseVisual (const JointXMLnode<> &rootNode)
 
void addCustomVisualization (const mrpt::opengl::CRenderizable::Ptr &glModel, const mrpt::poses::CPose3D &modelPose={}, const float modelScale=1.0f, const std::string &modelName="group", const std::optional< std::string > &modelURI=std::nullopt, const bool initialShowBoundingBox=false, const std::optional< double > &scaleOverride=std::nullopt)
 
void setCollisionShape (const Shape2p5 &cs)
 

Protected Attributes

mrpt::poses::CPose3D sensorPoseOnVeh_
 
double rangeStdNoise_ = 0.01
 
bool ignore_parent_body_ = false
 
float viz_pointSize_ = 3.0f
 
float minRange_ = 0.01f
 
float maxRange_ = 80.0f
 
double vertical_fov_ = 30.0
 In degrees !! More...
 
std::string vertical_ray_angles_str_
 
int vertNumRays_ = 16
 
int horzNumRays_ = 180
 
double horzResolutionFactor_ = 1.0
 
double vertResolutionFactor_ = 1.0
 
float maxDepthInterpolationStepVert_ = 0.30f
 
float maxDepthInterpolationStepHorz_ = 0.10f
 
mrpt::obs::CObservationPointCloud::Ptr last_scan2gui_
 
mrpt::obs::CObservationPointCloud::Ptr last_scan_
 
std::mutex last_scan_cs_
 
bool gui_uptodate_ = false
 
mrpt::opengl::CPointCloudColoured::Ptr glPoints_
 
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_
 
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_origin_corner_
 
mrpt::opengl::CSetOfObjects::Ptr gl_sensor_fov_
 
std::optional< TSimulContexthas_to_render_
 
std::mutex has_to_render_mtx_
 
std::shared_ptr< mrpt::opengl::CFBORender > fbo_renderer_depth_
 
bool generateIntensityFromRGB_ = true
 
std::vector< PerHorzAngleLUTlut_
 
std::vector< double > vertical_ray_angles_
 
- Protected Attributes inherited from mvsim::SensorBase
Simulablevehicle_
 The vehicle this sensor is attached to.
 
double sensor_period_ = 0.1
 
double sensor_last_timestamp_ = 0
 
std::string publishTopic_
 
std::map< std::string, std::string > varValues_
 Filled in by SensorBase::loadConfigFrom()
 
- Protected Attributes inherited from mvsim::VisualObject
Worldworld_
 
std::shared_ptr< mrpt::opengl::CSetOfObjects > glCustomVisual_
 
std::shared_ptr< mrpt::opengl::CSetOfObjects > glCollision_
 
int32_t glCustomVisualId_ = -1
 
const bool insertCustomVizIntoViz_ = true
 
const bool insertCustomVizIntoPhysical_ = true
 
- Protected Attributes inherited from mvsim::Simulable
std::string name_
 

Additional Inherited Members

- Public Types inherited from mvsim::SensorBase
using Ptr = std::shared_ptr< SensorBase >
 
- Public Types inherited from mvsim::Simulable
using Ptr = std::shared_ptr< Simulable >
 
- Static Public Member Functions inherited from mvsim::SensorBase
static SensorBase::Ptr factory (Simulable &parent, const rapidxml::xml_node< char > *xml_node)
 
static std::shared_ptr< mrpt::opengl::CSetOfObjects > GetAllSensorsOriginViz ()
 
static std::shared_ptr< mrpt::opengl::CSetOfObjects > GetAllSensorsFOVViz ()
 
static void RegisterSensorFOVViz (const std::shared_ptr< mrpt::opengl::CSetOfObjects > &o)
 
static void RegisterSensorOriginViz (const std::shared_ptr< mrpt::opengl::CSetOfObjects > &o)
 
- Static Public Member Functions inherited from mvsim::VisualObject
static void FreeOpenGLResources ()
 
- Static Public Attributes inherited from mvsim::VisualObject
static double GeometryEpsilon
 

Detailed Description

A 3D LiDAR sensor, with 360 degrees horizontal fielf-of-view, and a configurable vertical FOV. The number of rays in the vertical FOV and the number of samples in each horizontal row are configurable.

Member Function Documentation

◆ getRelativePose()

mrpt::math::TPose3D mvsim::Lidar3D::getRelativePose ( ) const
inlineoverrideprotectedvirtual

Like getPose(), but gets the relative pose with respect to the parent object, or just exactly like getPose() (global pose) if this is a top-level entity.

Reimplemented from mvsim::Simulable.

◆ loadConfigFrom()

virtual void mvsim::Lidar3D::loadConfigFrom ( const rapidxml::xml_node< char > *  root)
overridevirtual

Loads the parameters common to all sensors. Should be overriden, and they call to this base method.

Reimplemented from mvsim::SensorBase.

◆ setRelativePose()

void mvsim::Lidar3D::setRelativePose ( const mrpt::math::TPose3D &  p)
inlineoverrideprotectedvirtual

Changes the relative pose of this object with respect to its parent, or the global frame if its a top-level entity.

Reimplemented from mvsim::Simulable.

◆ simul_post_timestep()

virtual void mvsim::Lidar3D::simul_post_timestep ( const TSimulContext context)
overridevirtual

Override to do any required process right after the integration of dynamic equations for each timestep. IMPORTANT: Reimplementations MUST also call this base method, since it is in charge of important tasks (e.g. update q_, dq_)

Reimplemented from mvsim::Simulable.

◆ simul_pre_timestep()

virtual void mvsim::Lidar3D::simul_pre_timestep ( const TSimulContext context)
overridevirtual

Process right before the integration of dynamic equations for each timestep: set action forces from motors, update friction models, etc.

Reimplemented from mvsim::Simulable.

Member Data Documentation

◆ generateIntensityFromRGB_

bool mvsim::Lidar3D::generateIntensityFromRGB_ = true
protected

If true, intensity values will be generated from the grayscale of the rendered RGB image for each lidar return.

◆ gui_uptodate_

bool mvsim::Lidar3D::gui_uptodate_ = false
protected

Whether gl_scan_ has to be updated upon next call of internalGuiUpdate() from last_scan2gui_

◆ last_scan2gui_

mrpt::obs::CObservationPointCloud::Ptr mvsim::Lidar3D::last_scan2gui_
protected

Last simulated scan

◆ vertical_fov_

double mvsim::Lidar3D::vertical_fov_ = 30.0
protected

In degrees !!

vertical FOV will be symmetric above and below the horizontal line, unless vertical_ray_angles_str_ is set

◆ vertical_ray_angles_

std::vector<double> mvsim::Lidar3D::vertical_ray_angles_
protected

Upon initialization, vertical_rays_str_ is parsed in this vector of angles in radians.

◆ vertical_ray_angles_str_

std::string mvsim::Lidar3D::vertical_ray_angles_str_
protected

If not empty, will define the list of ray vertical angles, in degrees, separated by whitespaces. Positive angles are above, negative below the horizontal plane.


The documentation for this class was generated from the following file: