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

#include <VehicleDifferential.h>

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

Classes

struct  ConfigPerWheel
 
class  ControllerRawForces
 
class  ControllerTwistIdeal
 
class  ControllerTwistPID
 
struct  TControllerInput
 
struct  TControllerOutput
 

Public Types

enum  {
  WHEEL_L = 0 , WHEEL_R = 1 , WHEEL_CASTER_FRONT = 2 , WHEEL_LR = 0 ,
  WHEEL_RR = 1 , WHEEL_LF = 2 , WHEEL_RF = 3
}
 
- Public Types inherited from mvsim::VehicleBase
using Ptr = std::shared_ptr< VehicleBase >
 
- Public Types inherited from mvsim::Simulable
using Ptr = std::shared_ptr< Simulable >
 

Public Member Functions

 DynamicsDifferential (World *parent)
 
 DynamicsDifferential (World *parent, const std::vector< ConfigPerWheel > &cfgPerWheel)
 
virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate () const override
 
- Public Member Functions inherited from mvsim::VehicleBase
virtual void simul_pre_timestep (const TSimulContext &context) override
 
virtual void simul_post_timestep (const TSimulContext &context) override
 
virtual void apply_force (const mrpt::math::TVector2D &force, const mrpt::math::TPoint2D &applyPoint=mrpt::math::TPoint2D(0, 0)) override
 
virtual void create_multibody_system (b2World &world)
 
virtual double getMaxVehicleRadius () const
 
virtual double getChassisMass () const
 
b2Body * getBox2DChassisBody ()
 
mrpt::math::TPoint2D getChassisCenterOfMass () const
 In local coordinates (this excludes the mass of wheels)
 
size_t getNumWheels () const
 
const WheelgetWheelInfo (const size_t idx) const
 
WheelgetWheelInfo (const size_t idx)
 
std::vector< mrpt::math::TVector2D > getWheelsVelocityLocal (const mrpt::math::TTwist2D &veh_vel_local) const
 
double estimateSlopeTorquePerWheel (size_t nDrivenWheels=0) const
 
const TListSensors & getSensors () const
 
TListSensors & getSensors ()
 
CSVLogger::Ptr getLoggerPtr (const std::size_t logger_index)
 
const std::vector< CSVLogger::Ptr > & getLoggers () const
 
const mrpt::math::TPolygon2D & getChassisShape () const
 
void setVehicleIndex (size_t idx)
 
size_t getVehicleIndex () const
 
void setRecording (bool record)
 
void clearLogs ()
 
void newLogSession ()
 
void registerOnServer (mvsim::Client &c) override
 
b2Fixture * get_fixture_chassis ()
 
std::vector< b2Fixture * > & get_fixture_wheels ()
 
const b2Fixture * get_fixture_chassis () const
 
const std::vector< b2Fixture * > & get_fixture_wheels () const
 
void freeOpenGLResources () override
 
void chassisAndWheelsVisible (bool visible)
 
double chassisZMin () const
 
double chassisZMax () const
 
const mrpt::math::TPoint3D & getSlopeDirection () const
 
void setSlopeDirection (const mrpt::math::TPoint3D &d)
 
mrpt::poses::CPose2D getOdometry () const
 
void resetOdometry ()
 
bool isLogging () 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)
 
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
 
virtual mrpt::math::TPose3D getRelativePose () 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
 
virtual void setRelativePose (const mrpt::math::TPose3D &p)
 
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 dynamics_load_params_from_xml (const rapidxml::xml_node< char > *xml_node) override
 
virtual std::vector< double > invoke_motor_controllers (const TSimulContext &context) override
 
virtual void invoke_motor_controllers_post_step (const TSimulContext &context) override
 
- Protected Member Functions inherited from mvsim::VehicleBase
virtual void initLoggers ()
 
virtual void writeLogStrings ()
 
virtual void internalGuiUpdate (const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
 
 VehicleBase (World *parent, size_t nWheels)
 
virtual void invoke_motor_controllers_post_step ([[maybe_unused]] const TSimulContext &context)
 
VisualObjectmeAsVisualObject () override
 
void updateMaxRadiusFromPoly ()
 
- 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

const std::vector< ConfigPerWheelconfigPerWheel_
 Defined at ctor time:
 
- Protected Attributes inherited from mvsim::VehicleBase
std::vector< CSVLogger::Ptr > loggers_
 
std::string log_path_
 
bool auto_start_recording_ = false
 
bool idealControllerActive_ = false
 
size_t vehicle_index_ = 0
 
std::vector< FrictionBase::Ptr > frictions_
 
TListSensors sensors_
 Sensors aboard.
 
double chassis_mass_ = 15.0
 
mrpt::math::TPolygon2D chassis_poly_
 
float linear_damping_ = 0.1
 
float angular_damping_ = 0.1
 
double maxRadius_ = 0.1
 
double chassis_z_min_ = 0.05
 
double chassis_z_max_ = 0.6
 
mrpt::img::TColor chassis_color_ {0xff, 0x00, 0x00}
 
mrpt::math::TPoint2D chassis_com_ {0, 0}
 
mrpt::math::TPoint3D slopeDir_ {0, 0, -1}
 
OdometryNoise odometry_noise_
 
std::deque< Wheelwheels_info_
 
b2Fixture * fixture_chassis_ = nullptr
 Created at.
 
std::vector< b2Fixture * > fixture_wheels_
 
- 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_
 

Controllers

using ControllerBase = ControllerBaseTempl< DynamicsDifferential >
 
const ControllerBase::Ptr & getController () const
 
ControllerBase::Ptr & getController ()
 
virtual ControllerBaseInterfacegetControllerInterface () override
 

Additional Inherited Members

- Static Public Member Functions inherited from mvsim::VehicleBase
static Ptr factory (World *parent, const rapidxml::xml_node< char > *xml_node)
 
static Ptr factory (World *parent, const std::string &xml_text)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
static void register_vehicle_class (const World &parent, const rapidxml::xml_node< char > *xml_node)
 
- Static Public Member Functions inherited from mvsim::VisualObject
static void FreeOpenGLResources ()
 
- Static Public Attributes inherited from mvsim::VehicleBase
static constexpr std::string_view DL_TIMESTAMP = "Timestamp"
 
static constexpr std::size_t LOGGER_IDX_POSE = 0
 
static constexpr std::size_t LOGGER_IDX_WHEELS = 1
 
static constexpr std::string_view PL_Q_X = "q0x"
 
static constexpr std::string_view PL_Q_Y = "q1y"
 
static constexpr std::string_view PL_Q_Z = "q2z"
 
static constexpr std::string_view PL_Q_YAW = "q3yaw"
 
static constexpr std::string_view PL_Q_PITCH = "q4pitch"
 
static constexpr std::string_view PL_Q_ROLL = "q5roll"
 
static constexpr std::string_view PL_DQ_X = "dqx"
 
static constexpr std::string_view PL_DQ_Y = "dqy"
 
static constexpr std::string_view PL_DQ_W = "dqw"
 
static constexpr std::string_view PL_ODO_X = "odo_x"
 
static constexpr std::string_view PL_ODO_Y = "odo_y"
 
static constexpr std::string_view PL_ODO_YAW = "odo_yaw"
 
static constexpr std::string_view WL_TORQUE = "torque"
 
static constexpr std::string_view WL_FORCE_Z = "force_z"
 
static constexpr std::string_view WL_VEL_X = "velocity_x"
 
static constexpr std::string_view WL_VEL_Y = "velocity_y"
 
static constexpr std::string_view WL_FRIC_X = "friction_x"
 
static constexpr std::string_view WL_FRIC_Y = "friction_y"
 
- Static Public Attributes inherited from mvsim::VisualObject
static double GeometryEpsilon
 

Detailed Description

Implementation of differential-driven vehicles with only two wheels. Simplified model for pure planar scenarios only, do not use with ramps. For that, use Differential or Ackermann models with 3 or 4 wheels.

See also
class factory in VehicleBase::factory

Member Typedef Documentation

◆ ControllerBase

Virtual base for controllers of vehicles of type DynamicsDifferential

Member Function Documentation

◆ dynamics_load_params_from_xml()

virtual void mvsim::DynamicsDifferential::dynamics_load_params_from_xml ( const rapidxml::xml_node< char > *  xml_node)
overrideprotectedvirtual

Parse node <dynamics>: The derived-class part of load_params_from_xml(), also called in factory(). Includes parsing the <controller></controller> block.

Implements mvsim::VehicleBase.

◆ getVelocityLocalOdoEstimate()

virtual mrpt::math::TTwist2D mvsim::DynamicsDifferential::getVelocityLocalOdoEstimate ( ) const
overridevirtual

Gets the current estimation of odometry-based velocity as reconstructed solely from wheels spinning velocities and geometry. This is the input of any realistic low-level controller onboard.

See also
getRefVelocityLocal()

Implements mvsim::VehicleBase.


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