Overview
Lidar capabilities:- 360° scanning - Continuous distance measurements
- Obstacle detection - Identify and avoid obstacles
- SLAM - Build maps and localize simultaneously
- Range filtering - Limit angle and distance ranges
- Real-time visualization - Display polar plots
- Data recording - Log scans for analysis
Supported Hardware
RPLidar A1M8
- Range: 12 meters
- Scan rate: ~7 Hz
- Measurements: ~1850 per second
- Connection: USB
- Cost: ~$100
RPLidar A2/A3
- Range: 25-40 meters
- Scan rate: 10-20 Hz
- Measurements: Higher density
- Connection: USB
YDLidar X4
- Range: 10 meters
- Scan rate: 5-12 Hz
- Connection: USB
- Cost: ~$100
Installation
Hardware Setup
USB Permissions (Linux)
Configuration
Enable lidar inmyconfig.py:
donkeycar/templates/cfg_path_follow.py:404-409.
RPLidar2 Part
Advanced RPLidar driver with filtering:donkeycar/parts/lidar.py:49-136.
Measurement Format
Each measurement is a tuple:distance- millimeters, 0 = invalidangle- degrees, adjusted for forward_angletimestamp- seconds since epochscan_id- full scan counterindex- measurement index within scan
donkeycar/parts/lidar.py:171-218.
Angle Configuration
Angle Filtering
Fromdonkeycar/parts/lidar.py:36-46:
Simple RPLidar Part
Basic driver for quick setup:donkeycar/parts/lidar.py:267-332.
YDLidar Part
donkeycar/parts/lidar.py:335-390.
Visualization
LidarPlot2
Display measurements as polar plot:donkeycar/parts/lidar.py:643-714.
Display on Web UI
SLAM with BreezySLAM
Simultaneous Localization and Mapping:donkeycar/parts/lidar.py:717-770.
Requirements
Obstacle Detection
Detect obstacles in front of car:Data Recording
Record lidar scans to tub:Command Line Testing
Test lidar from command line:donkeycar/parts/lidar.py:773-923.
Arguments:
--rate- Scans per second--number- Number of scans to collect--min-angle- Minimum angle (degrees)--max-angle- Maximum angle (degrees)--min-distance- Minimum distance (mm)--max-distance- Maximum distance (mm)--forward-angle- Forward direction (degrees)--angle-direction- 1=clockwise, -1=counter-clockwise--threaded- Run in threaded mode--rotate-plot- Rotate display (degrees)
Performance Tuning
Batch Size
Control polling duration:donkeycar/parts/lidar.py:134.
Measurement Filtering
Reduce data volume:Threading
Always run lidar in threaded mode:donkeycar/parts/lidar.py:223-235.
Troubleshooting
No Device Found
SerialException
donkeycar/parts/lidar.py:124.
Noisy Measurements
- Mount lidar firmly to reduce vibration
- Add distance filtering to remove outliers
- Increase min_distance to ignore close reflections
- Check for reflective surfaces causing echoes
Low Scan Rate
- Reduce angle range
- Increase batch_ms
- Use threaded mode
- Check USB bandwidth
Best Practices
- Mount securely - Vibration causes noise
- Clear field of view - Avoid obstructions
- Calibrate forward angle - Match car orientation
- Filter distances - Remove invalid readings
- Use threading - Don’t block vehicle loop
- Test stationary first - Verify angles and distances
- Record sparingly - Lidar data is large
Example Applications
Autonomous Parking
Wall Following
Collision Avoidance
Next Steps
- Combine with path following for obstacle-aware navigation
- Use kinematics to transform lidar to world coordinates
- Stream data via telemetry for remote monitoring
- Test in simulator before hardware deployment
