Laser-stabilized odometry (lodo_driver)
The lodo driver provides laser-stabilized odometric pose estimates: the inputs are raw odometry and laser scans, the outputs are corrected pose estimates and synchronized laser scans (i.e., no lag-lead effects). The drift in this corrected estimate is much, much, lower than that seen with odometry alone (e.g., less than 1m drift in position after 100m of travel). The lodo driver is a thin wrapper around a free-standing laser-odometry library (liblodo); see lodo.h for details of how the library works.
To use the lodo driver, simply point it at a suitable pair of position and laser devices. Generally, the position device will be provided by to a robot driver, such p2os, while the laser device will be provided by the sicklms200 driver. The lodo driver provides a new pair of position and laser interfaces that provide corrected pose estimates and synchronized laser data, respectively. If you have a Pioneer-like robot with a SICK laser, the lodo driver will be almost entirely transparent to your client programs: simply get odometry and laser data from the lodo driver instead of the underlying hardware drivers.
- Laser configuration
For best performance, set the laser range and bearing resolutions to 10cm and 1 degree, respectively; for the SICK, this corresponds to:
driver
(
name "sicklms200"
resolution 100
range_res 10
rate 38400
)
It is also vitally important that the laser be rigidly mounted to the robot (that means no velcro or gaffer tape), with a known, fixed orientation. Badly aligned lasers introduce systematic errors and high drift rates (worse than odometry alone).
See the caveats below for additional usage notes.
- Caveats
While the driver has been extensively tested on certain hardware configurations (Pioneer2DX robots with SICK LMS200 lasers), mileage may vary on other platforms. Several points should be noted:
- The incremental pose corrections are applied to orientation only; this works great on robots with good linear odometry (like the Pioneer2DX), but is likely to fail on a skid-steered Pioneer2AT (don't know, haven't tried it).
- The driver has been tested with a SICK LMS200 operating at 38400 baud, 1 degree angular resolution and 10cm range resolution (yields 181 samples at 10Hz). Higher data rates (e.g., 75Hz are not recommended unless you have a very fast processor).
- The library is fairly compute intensive; on a 2.6 GHz P4, processing time for each scan is of the order of 10ms.
- Requires
- Provides
- Supported configuration requests
None
- Todo:
- Pass configuration requests through to underlying drivers.
Expose library options.
- Configuration file options
- plugin (filename)
- Default: "lodo_driver.so"
- Loads the driver as a plugin.
- laser_pose (float tuple)
- Default: [0 0 0]
- Pose of the laser sensor in the robot's coordinate system (m, m, degrees).
- max_range (float length)
- Default: 8.0
- Maximum valid laser range.
- Example
device
(
plugin "lodo_driver.so"
driver "lodo_driver"
requires ["position:0" "laser:0"]
provides ["position:10" "laser:10"]
)
- Authors
Andrew Howard
Generated on Tue Dec 14 14:37:39 2004 for Simple map utilities by 1.3.8