SimpleTrackedVehiclePlugin Class Reference

A very fast, but also very accurate model of non-deformable tracks without grousers. More...

#include <SimpleTrackedVehiclePlugin.hh>

Inherits TrackedVehiclePlugin.

Public Types

typedef boost::shared_ptr< ModelPluginTPtr
 plugin pointer type definition More...
 

Public Member Functions

 SimpleTrackedVehiclePlugin ()=default
 
virtual ~SimpleTrackedVehiclePlugin ()
 
std::string GetFilename () const
 Get the name of the handler. More...
 
std::string GetHandle () const
 Get the short name of the handler. More...
 
size_t GetNumTracks (Tracks side) const
 Return the number of tracks on the given side. More...
 
PluginType GetType () const
 Returns the type of the plugin. More...
 
void Init () override
 Initialize the plugin. More...
 
void Load (physics::ModelPtr _model, sdf::ElementPtr _sdf) override
 Called when the plugin is loaded. More...
 
void Reset () override
 Reset the plugin. More...
 

Static Public Member Functions

static TPtr Create (const std::string &_filename, const std::string &_name)
 a class method that creates a plugin from a file name. More...
 

Protected Member Functions

ignition::math::Vector3d ComputeFrictionDirection (double _linearSpeed, double _angularSpeed, bool _drivingStraight, const ignition::math::Pose3d &_bodyPose, const ignition::math::Vector3d &_bodyYAxisGlobal, const ignition::math::Vector3d &_centerOfRotation, const ignition::math::Vector3d &_contactWorldPosition, const ignition::math::Vector3d &_contactNormal, const ignition::math::Vector3d &_beltDirection) const
 Compute the direction of friction force in given contact point. More...
 
double ComputeSurfaceMotion (double _beltSpeed, const ignition::math::Vector3d &_beltDirection, const ignition::math::Vector3d &_frictionDirection) const
 Compute the velocity of the surface motion in all contact points. More...
 
void DriveTracks (const common::UpdateInfo &)
 Compute and apply the forces that make the tracks move. More...
 
virtual std::string GetRobotNamespace ()
 Namespace used as a prefix for gazebo topic names. More...
 
virtual double GetSteeringEfficiency ()
 Steering efficiency coefficient (between 0.0 and 1.0). More...
 
virtual boost::optional< double > GetTrackMu ()
 Friction coefficient in the first friction direction. More...
 
virtual boost::optional< double > GetTrackMu2 ()
 Friction coefficient in the second friction direction. More...
 
virtual double GetTracksSeparation ()
 Distance between the centers of the tracks. More...
 
void LoadParam (const sdf::ElementPtr &_sdf, const std::string &_name, V &_target, V _defaultValue=V()) const
 Load parameter value from _sdf and store it to the given reference, using the supplied default value if the element in _sdf is not found. More...
 
void LoadParam (sdf::ElementPtr &_sdf, const std::string &_name, std::string &_target, const char *_defaultValue) const
 Load parameter value from _sdf and store it to the given reference, using the supplied default value if the element in _sdf is not found. More...
 
virtual void OnVelMsg (ConstPosePtr &_msg) GAZEBO_DEPRECATED(9.0)
 Callback for setting desired body velocity. More...
 
void OnVelMsg (ConstTwistPtr &_msg)
 Callback for setting desired body velocity. More...
 
void SetBodyVelocity (double _linear, double _angular)
 Set new target velocity for the tracks based on the desired. More...
 
void SetGeomCategories ()
 Set collide categories and bits of all geometries to the required values. More...
 
void SetLinkMu (const physics::LinkPtr &_link)
 Set mu and mu2 of all collisions of the given link to values given by GetTrackMu() and GetTrackMu2(). More...
 
virtual void SetSteeringEfficiency (double _steeringEfficiency)
 Set steering efficiency coefficient (between 0.0 and 1.0). More...
 
virtual void SetTrackMu (double _mu)
 Friction coefficient in the first friction direction. More...
 
virtual void SetTrackMu2 (double _mu2)
 Friction coefficient in the second friction direction. More...
 
virtual void SetTrackVelocity (double _left, double _right)
 Set new target velocity for the tracks. More...
 
void SetTrackVelocityImpl (double _left, double _right) override
 Set new target velocity for the tracks. More...
 
void UpdateTrackSurface () override
 Update surface parameters of the tracks to correspond to the values set in this plugin. More...
 

Protected Attributes

physics::LinkPtr body
 Body of the robot. More...
 
unsigned int collideWithoutContactBitmask
 This bitmask will be set to the whole vehicle body. More...
 
std::string filename
 Path to the shared library file. More...
 
std::string handleName
 Short name. More...
 
std::mutex mutex
 Mutex to protect updates. More...
 
std::unordered_map< Tracks, std::string > trackNames
 Textual lowercase names of the tracks. More...
 
std::unordered_map< Tracks, physics::LinkPtrtracks
 The tracks controlled by this plugin. More...
 
std::unordered_map< Tracks, double > trackVelocity
 Desired velocities of the tracks. More...
 
PluginType type
 Type of plugin. More...
 

Static Protected Attributes

static const unsigned int BELT_CATEGORY = 0x20000000
 Category for tracks. More...
 
static const unsigned int LEFT_CATEGORY = 0x40000000
 Category for all items on the left side. More...
 
static const unsigned int ROBOT_CATEGORY = 0x10000000
 Category for the non-track parts of the robot. More...
 

Detailed Description

A very fast, but also very accurate model of non-deformable tracks without grousers.

Since
8.1

The motion model is based on adjusting motion1 in ODE contact properties and on computing Instantaneous Center of Rotation for a tracked vehicle. A detailed description of the model is given in https://arxiv.org/abs/1703.04316 .

The plugin processes the following parameters, plus the common parameters defined in TrackedVehiclePlugin.

<body> Body of the vehicle to which the two tracks are connected. <left_track> The left track link's name. <right_track> The right track link's name. <left_flipper> The name of a left flipper link. Can appear multiple times. <right_flipper> The name of a right flipper link. Can appear multiple times. <collide_without_contact_bitmask> Collision bitmask that will be set to the whole vehicle (default is 1u).

Member Typedef Documentation

◆ TPtr

typedef boost::shared_ptr<ModelPlugin > TPtr
inherited

plugin pointer type definition

Constructor & Destructor Documentation

◆ SimpleTrackedVehiclePlugin()

◆ ~SimpleTrackedVehiclePlugin()

virtual ~SimpleTrackedVehiclePlugin ( )
virtual

Member Function Documentation

◆ ComputeFrictionDirection()

ignition::math::Vector3d ComputeFrictionDirection ( double  _linearSpeed,
double  _angularSpeed,
bool  _drivingStraight,
const ignition::math::Pose3d &  _bodyPose,
const ignition::math::Vector3d &  _bodyYAxisGlobal,
const ignition::math::Vector3d &  _centerOfRotation,
const ignition::math::Vector3d &  _contactWorldPosition,
const ignition::math::Vector3d &  _contactNormal,
const ignition::math::Vector3d &  _beltDirection 
) const
protected

Compute the direction of friction force in given contact point.

Parameters
[in]_linearSpeedLinear speed of the vehicle.
[in]_angularSpeedAngular speed of the vehicle.
[in]_drivingStraightWhether the vehicle should steer.
[in]_bodyPosePose of the vehicle body.
[in]_bodyYAxisGlobalDirection of the y-axis of the body in world frame.
[in]_centerOfRotationCenter of the circle the vehicle follows (Inf/-Inf if driving straight).
[in]_contactWorldPositionWorld position of the contact point.
[in]_contactNormalCorrected contact normal (pointing inside the track).
[in]_beltDirectionWorld-frame forward direction of the belt.
Returns
Direction of the friction force in world frame.

◆ ComputeSurfaceMotion()

double ComputeSurfaceMotion ( double  _beltSpeed,
const ignition::math::Vector3d &  _beltDirection,
const ignition::math::Vector3d &  _frictionDirection 
) const
protected

Compute the velocity of the surface motion in all contact points.

Parameters
[in]_beltSpeedThe desired belt speed.
[in]_beltDirectionForward direction of the belt.
[in]_frictionDirectionFirst friction direction.

◆ Create()

static TPtr Create ( const std::string &  _filename,
const std::string &  _name 
)
inlinestaticinherited

a class method that creates a plugin from a file name.

It locates the shared library and loads it dynamically.

Parameters
[in]_filenamethe path to the shared library.
[in]_nameshort name of the plugin
Returns
Shared Pointer to this class type

References PluginT< T >::filename, gzerr, and SingletonT< SystemPaths >::Instance().

◆ DriveTracks()

void DriveTracks ( const common::UpdateInfo )
protected

Compute and apply the forces that make the tracks move.

◆ GetFilename()

std::string GetFilename ( ) const
inlineinherited

Get the name of the handler.

References PluginT< T >::filename.

◆ GetHandle()

std::string GetHandle ( ) const
inlineinherited

Get the short name of the handler.

References PluginT< T >::handleName.

◆ GetNumTracks()

size_t GetNumTracks ( Tracks  side) const

Return the number of tracks on the given side.

Should always be at least 1 for the main track. If flippers are present, the number is higher.

◆ GetRobotNamespace()

virtual std::string GetRobotNamespace ( )
protectedvirtualinherited

Namespace used as a prefix for gazebo topic names.

◆ GetSteeringEfficiency()

virtual double GetSteeringEfficiency ( )
protectedvirtualinherited

Steering efficiency coefficient (between 0.0 and 1.0).

◆ GetTrackMu()

virtual boost::optional<double> GetTrackMu ( )
protectedvirtualinherited

Friction coefficient in the first friction direction.

◆ GetTrackMu2()

virtual boost::optional<double> GetTrackMu2 ( )
protectedvirtualinherited

Friction coefficient in the second friction direction.

◆ GetTracksSeparation()

virtual double GetTracksSeparation ( )
protectedvirtualinherited

Distance between the centers of the tracks.

◆ GetType()

PluginType GetType ( ) const
inlineinherited

Returns the type of the plugin.

Returns
type of the plugin

References PluginT< T >::type.

◆ Init()

void Init ( )
overridevirtual

Initialize the plugin.

Reimplemented from ModelPlugin.

◆ Load()

void Load ( physics::ModelPtr  _model,
sdf::ElementPtr  _sdf 
)
overridevirtual

Called when the plugin is loaded.

Parameters
[in]modelPointer to the model for which the plugin is loaded
[in]_sdfPointer to the SDF for _model

Implements ModelPlugin.

◆ LoadParam() [1/2]

void LoadParam ( const sdf::ElementPtr &  _sdf,
const std::string &  _name,
V &  _target,
_defaultValue = V() 
) const
inlineprotectedinherited

Load parameter value from _sdf and store it to the given reference, using the supplied default value if the element in _sdf is not found.

A message is written using gzmsg reporting whether the default value was used or not.

Parameters
[in]_sdfThe SDF element of the plugin.
[in]_nameName of a tag inside the SDF.
[out]_targetThe reference to store the param value to.
[in]_defaultValueThe default value.

References gzmsg, and PluginT< T >::handleName.

◆ LoadParam() [2/2]

void LoadParam ( sdf::ElementPtr &  _sdf,
const std::string &  _name,
std::string &  _target,
const char *  _defaultValue 
) const
inlineprotectedinherited

Load parameter value from _sdf and store it to the given reference, using the supplied default value if the element in _sdf is not found.

A message is written using gzmsg reporting whether the default value was used or not. String specialization to allow accepting const char* values for std::string parameters.

Parameters
[in]_sdfThe SDF element of the plugin.
[in]_nameName of a tag inside the SDF.
[out]_targetThe reference to store the param value to.
[in]_defaultValueThe default value.

◆ OnVelMsg() [1/2]

virtual void OnVelMsg ( ConstPosePtr &  _msg)
protectedvirtualinherited

Callback for setting desired body velocity.

Normally, this callback converts the x/yaw message to track velocities and calls SetTrackVelocity().

Parameters
[in]_msgPose message from external publisher

◆ OnVelMsg() [2/2]

void OnVelMsg ( ConstTwistPtr &  _msg)
protectedinherited

Callback for setting desired body velocity.

Normally, this callback converts the x/yaw message to track velocities and calls SetTrackVelocity().

Parameters
[in]_msgTwist message from external publisher

◆ Reset()

void Reset ( )
overridevirtual

Reset the plugin.

Reimplemented from ModelPlugin.

◆ SetBodyVelocity()

void SetBodyVelocity ( double  _linear,
double  _angular 
)
protectedinherited

Set new target velocity for the tracks based on the desired.

Parameters
[in]_linearDesired linear velocity of the vehicle.
[in]_angularDesired angular velocity of the vehicle.

◆ SetGeomCategories()

void SetGeomCategories ( )
protected

Set collide categories and bits of all geometries to the required values.

This is a workaround for https://bitbucket.org/osrf/gazebo/issues/1855 .

◆ SetLinkMu()

void SetLinkMu ( const physics::LinkPtr _link)
protectedinherited

Set mu and mu2 of all collisions of the given link to values given by GetTrackMu() and GetTrackMu2().

Parameters
[in]_linkThe link whose "mu"s are to be set.

◆ SetSteeringEfficiency()

virtual void SetSteeringEfficiency ( double  _steeringEfficiency)
protectedvirtualinherited

Set steering efficiency coefficient (between 0.0 and 1.0).

Parameters
[in]_steeringEfficiencyThe new steering efficiency.

◆ SetTrackMu()

virtual void SetTrackMu ( double  _mu)
protectedvirtualinherited

Friction coefficient in the first friction direction.

Parameters
[in]_muThe new coefficient.

◆ SetTrackMu2()

virtual void SetTrackMu2 ( double  _mu2)
protectedvirtualinherited

Friction coefficient in the second friction direction.

Parameters
[in]_mu2The new coefficient.

◆ SetTrackVelocity()

virtual void SetTrackVelocity ( double  _left,
double  _right 
)
protectedvirtualinherited

Set new target velocity for the tracks.

Descendant classes need to implement this function.

Parameters
[in]_leftVelocity of left track.
[in]_rightVelocity of right track.

◆ SetTrackVelocityImpl()

void SetTrackVelocityImpl ( double  _left,
double  _right 
)
overrideprotectedvirtual

Set new target velocity for the tracks.

Parameters
[in]_leftVelocity of left track.
[in]_rightVelocity of right track.

Implements TrackedVehiclePlugin.

◆ UpdateTrackSurface()

void UpdateTrackSurface ( )
overrideprotectedvirtual

Update surface parameters of the tracks to correspond to the values set in this plugin.

Implements TrackedVehiclePlugin.

Member Data Documentation

◆ BELT_CATEGORY

const unsigned int BELT_CATEGORY = 0x20000000
staticprotected

Category for tracks.

◆ body

physics::LinkPtr body
protected

Body of the robot.

◆ collideWithoutContactBitmask

unsigned int collideWithoutContactBitmask
protected

This bitmask will be set to the whole vehicle body.

◆ filename

std::string filename
protectedinherited

Path to the shared library file.

◆ handleName

std::string handleName
protectedinherited

Short name.

◆ LEFT_CATEGORY

const unsigned int LEFT_CATEGORY = 0x40000000
staticprotected

Category for all items on the left side.

◆ mutex

std::mutex mutex
protectedinherited

Mutex to protect updates.

◆ ROBOT_CATEGORY

const unsigned int ROBOT_CATEGORY = 0x10000000
staticprotected

Category for the non-track parts of the robot.

◆ trackNames

std::unordered_map<Tracks, std::string> trackNames
protectedinherited

Textual lowercase names of the tracks.

◆ tracks

std::unordered_map<Tracks, physics::LinkPtr> tracks
protected

The tracks controlled by this plugin.

◆ trackVelocity

std::unordered_map<Tracks, double> trackVelocity
protected

Desired velocities of the tracks.

◆ type

PluginType type
protectedinherited

Type of plugin.


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