Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
diff_drive_controller::Odometry Class Reference

The Odometry class handles odometry readings (2D pose and velocity with related timestamp) More...

#include <odometry.h>

Public Types

typedef boost::function< void(double, double)> IntegrationFunction
 Integration function, used to integrate the odometry: More...
 

Public Member Functions

double getAngular () const
 angular velocity getter More...
 
double getHeading () const
 heading getter More...
 
double getLinear () const
 linear velocity getter More...
 
double getX () const
 x position getter More...
 
double getY () const
 y position getter More...
 
void init (const ros::Time &time)
 Initialize the odometry. More...
 
 Odometry (size_t velocity_rolling_window_size=10)
 Constructor Timestamp will get the current time value Value will be set to zero. More...
 
void setVelocityRollingWindowSize (size_t velocity_rolling_window_size)
 Velocity rolling window size setter. More...
 
void setWheelParams (double wheel_separation, double left_wheel_radius, double right_wheel_radius)
 Sets the wheel parameters: radius and separation. More...
 
bool update (double left_pos, double right_pos, const ros::Time &time)
 Updates the odometry class with latest wheels position. More...
 
void updateOpenLoop (double linear, double angular, const ros::Time &time)
 Updates the odometry class with latest velocity command. More...
 

Private Types

typedef bacc::accumulator_set< double, bacc::stats< bacc::tag::rolling_mean > > RollingMeanAcc
 Rolling mean accumulator and window: More...
 
typedef bacc::tag::rolling_window RollingWindow
 

Private Member Functions

void integrateExact (double linear, double angular)
 Integrates the velocities (linear and angular) using exact method. More...
 
void integrateRungeKutta2 (double linear, double angular)
 Integrates the velocities (linear and angular) using 2nd order Runge-Kutta. More...
 
void resetAccumulators ()
 Reset linear and angular accumulators. More...
 

Private Attributes

double angular_
 
RollingMeanAcc angular_acc_
 
double heading_
 
IntegrationFunction integrate_fun_
 Integration funcion, used to integrate the odometry: More...
 
double left_wheel_old_pos_
 Previou wheel position/state [rad]: More...
 
double left_wheel_radius_
 
double linear_
 Current velocity: More...
 
RollingMeanAcc linear_acc_
 
double right_wheel_old_pos_
 
double right_wheel_radius_
 
ros::Time timestamp_
 Current timestamp: More...
 
size_t velocity_rolling_window_size_
 Rolling mean accumulators for the linar and angular velocities: More...
 
double wheel_separation_
 Wheel kinematic parameters [m]: More...
 
double x_
 Current pose: More...
 
double y_
 

Detailed Description

The Odometry class handles odometry readings (2D pose and velocity with related timestamp)

Definition at line 59 of file odometry.h.

Member Typedef Documentation

typedef boost::function<void(double, double)> diff_drive_controller::Odometry::IntegrationFunction

Integration function, used to integrate the odometry:

Definition at line 64 of file odometry.h.

typedef bacc::accumulator_set<double, bacc::stats<bacc::tag::rolling_mean> > diff_drive_controller::Odometry::RollingMeanAcc
private

Rolling mean accumulator and window:

Definition at line 159 of file odometry.h.

typedef bacc::tag::rolling_window diff_drive_controller::Odometry::RollingWindow
private

Definition at line 160 of file odometry.h.

Constructor & Destructor Documentation

diff_drive_controller::Odometry::Odometry ( size_t  velocity_rolling_window_size = 10)

Constructor Timestamp will get the current time value Value will be set to zero.

Parameters
velocity_rolling_window_sizeRolling window size used to compute the velocity mean

Definition at line 50 of file odometry.cpp.

Member Function Documentation

double diff_drive_controller::Odometry::getAngular ( ) const
inline

angular velocity getter

Returns
angular velocity [rad/s]

Definition at line 137 of file odometry.h.

double diff_drive_controller::Odometry::getHeading ( ) const
inline

heading getter

Returns
heading [rad]

Definition at line 101 of file odometry.h.

double diff_drive_controller::Odometry::getLinear ( ) const
inline

linear velocity getter

Returns
linear velocity [m/s]

Definition at line 128 of file odometry.h.

double diff_drive_controller::Odometry::getX ( ) const
inline

x position getter

Returns
x position [m]

Definition at line 110 of file odometry.h.

double diff_drive_controller::Odometry::getY ( ) const
inline

y position getter

Returns
y position [m]

Definition at line 119 of file odometry.h.

void diff_drive_controller::Odometry::init ( const ros::Time time)

Initialize the odometry.

Parameters
timeCurrent time

Definition at line 69 of file odometry.cpp.

void diff_drive_controller::Odometry::integrateExact ( double  linear,
double  angular 
)
private

Integrates the velocities (linear and angular) using exact method.

Other possible integration method provided by the class.

Parameters
linearLinear velocity m computed by encoders
angularAngular velocity rad computed by encoders
linear
angular

Exact integration (should solve problems when angular is zero):

Definition at line 155 of file odometry.cpp.

void diff_drive_controller::Odometry::integrateRungeKutta2 ( double  linear,
double  angular 
)
private

Integrates the velocities (linear and angular) using 2nd order Runge-Kutta.

Parameters
linearLinear velocity m computed by encoders
angularAngular velocity rad computed by encoders

Runge-Kutta 2nd order integration:

Definition at line 140 of file odometry.cpp.

void diff_drive_controller::Odometry::resetAccumulators ( )
private

Reset linear and angular accumulators.

Definition at line 170 of file odometry.cpp.

void diff_drive_controller::Odometry::setVelocityRollingWindowSize ( size_t  velocity_rolling_window_size)

Velocity rolling window size setter.

Parameters
velocity_rolling_window_sizeVelocity rolling window size

Definition at line 133 of file odometry.cpp.

void diff_drive_controller::Odometry::setWheelParams ( double  wheel_separation,
double  left_wheel_radius,
double  right_wheel_radius 
)

Sets the wheel parameters: radius and separation.

Parameters
wheel_separationSeparation between left and right wheels [m]
left_wheel_radiusLeft wheel radius [m]
right_wheel_radiusRight wheel radius [m]

Definition at line 126 of file odometry.cpp.

bool diff_drive_controller::Odometry::update ( double  left_pos,
double  right_pos,
const ros::Time time 
)

Updates the odometry class with latest wheels position.

Parameters
left_posLeft wheel position [rad]
right_posRight wheel position [rad]
timeCurrent time
Returns
true if the odometry is actually updated

Get current wheel joint positions:

Estimate velocity of wheels using old and current position:

Update old position with current:

Compute linear and angular diff:

Integrate odometry:

We cannot estimate the speed with very small time intervals:

Estimate speeds using a rolling mean to filter them out:

Definition at line 76 of file odometry.cpp.

void diff_drive_controller::Odometry::updateOpenLoop ( double  linear,
double  angular,
const ros::Time time 
)

Updates the odometry class with latest velocity command.

Parameters
linearLinear velocity [m/s]
angularAngular velocity [rad/s]
timeCurrent time

Save last linear and angular velocity:

Integrate odometry:

Definition at line 114 of file odometry.cpp.

Member Data Documentation

double diff_drive_controller::Odometry::angular_
private

Definition at line 191 of file odometry.h.

RollingMeanAcc diff_drive_controller::Odometry::angular_acc_
private

Definition at line 205 of file odometry.h.

double diff_drive_controller::Odometry::heading_
private

Definition at line 187 of file odometry.h.

IntegrationFunction diff_drive_controller::Odometry::integrate_fun_
private

Integration funcion, used to integrate the odometry:

Definition at line 208 of file odometry.h.

double diff_drive_controller::Odometry::left_wheel_old_pos_
private

Previou wheel position/state [rad]:

Definition at line 199 of file odometry.h.

double diff_drive_controller::Odometry::left_wheel_radius_
private

Definition at line 195 of file odometry.h.

double diff_drive_controller::Odometry::linear_
private

Current velocity:

Definition at line 190 of file odometry.h.

RollingMeanAcc diff_drive_controller::Odometry::linear_acc_
private

Definition at line 204 of file odometry.h.

double diff_drive_controller::Odometry::right_wheel_old_pos_
private

Definition at line 200 of file odometry.h.

double diff_drive_controller::Odometry::right_wheel_radius_
private

Definition at line 196 of file odometry.h.

ros::Time diff_drive_controller::Odometry::timestamp_
private

Current timestamp:

Definition at line 182 of file odometry.h.

size_t diff_drive_controller::Odometry::velocity_rolling_window_size_
private

Rolling mean accumulators for the linar and angular velocities:

Definition at line 203 of file odometry.h.

double diff_drive_controller::Odometry::wheel_separation_
private

Wheel kinematic parameters [m]:

Definition at line 194 of file odometry.h.

double diff_drive_controller::Odometry::x_
private

Current pose:

Definition at line 185 of file odometry.h.

double diff_drive_controller::Odometry::y_
private

Definition at line 186 of file odometry.h.


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


diff_drive_controller
Author(s): Bence Magyar
autogenerated on Sat Apr 18 2020 03:58:05