Jump to content

Khepera III Toolbox/The Toolbox/Modules/odometry track

From Wikibooks, open books for an open world

The odometry_track module implements the odometry equations for a differential-drive vehicle and allows to track the robot's position (, , ) over time. Fosamax Class Action blog

Synopsis

[edit | edit source]
// Instantiate a track structure
struct sOdometryTrack ot;

// Initialize the module
odometry_track_init();

// Start tracking and set initial position
odometry_track_start(&ot);
ot.result.x = 0;
ot.result.y = 0;
ot.result.theta = 0;

// Main loop
while (1) {
    ...

    // Call this frequently to update the position estimate
    odometry_track_step(&ot);
    ... = ot.result.x;
    ... = ot.result.y;
    ... = ot.result.theta;

    ...
}

Description

[edit | edit source]

odometry_track_start sets up a sOdometryTrack structure and reads the odometry calibration values from /etc/khepera/odometry. If that file is not available (or does not contain a valid configuration), default values are used. After calling this function, the initial position can be changed by modifying the result fields of the structure. odometry_track_start also reads the current motor positions and should therefore be called immediately before entering the main loop.

Inside the main loop, odometry_track_step is called to read the new motor positions and update the position estimate in the result fields.

Calibration

[edit | edit source]

The default calibration values should give acceptable results on most Khepera III robots. Through a calibration procedure, the precision can be significantly improved, however.

Providing Motor Positions from Other Sources

[edit | edit source]

The functions mentioned above read the motor positions automatically with the khepera3_drive_getposition function. If this is not desired, the functions odometry_track_start_pos and odometry_track_step_pos can be used.