Context
The RL policy trains on Gazebo’s gpu_lidar-simulated TF-Luna. On the real TF-Luna A03:
- ±6 cm typical accuracy at ≤8 m.
- Amplitude-dependent noise under low contrast / overexposure.
- Periodic dropouts during servo motion (DroneBot forum).
Without noise injection in sim — the policy overfits to a “clean” sensor and produces brittle behavior on the real drone.
Final recommendation — noise injection in gpu_lidar
<sensor name="tf_luna_sweep" type="gpu_lidar">
<lidar>
<range>
<min>0.2</min>
<max>8.0</max>
<resolution>0.01</resolution>
</range>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.05</stddev> <!-- 5 cm σ — baseline real-world TF-Luna -->
</noise>
</lidar>
</sensor>
Domain randomization sweep (from RL training results)
| σ noise | Coverage success | sim2real gap | Verdict |
|---|---|---|---|
| 0.00 (no noise) | 95% sim | catastrophic | overfit baseline |
| 0.03 (3 cm) | 88% | medium | clean training, real-world OK |
| 0.05 (5 cm) | 82% | best | selected — matches real-world variance |
| 0.10 (10 cm) | 68% | conservative | safety margin |
| 0.20 (20 cm) | 45% | over-randomized | too noisy for learning |
σ=0.05 m — optimum from rl-lab empirical RL experiments (see rl-lab/docs/dev-log/21-sim-to-real-noise-sweep-vl53_0-critical_HUMANED.md).
What TF-Luna behaves like in the real world
| Noise source | sim | real |
|---|---|---|
| Gaussian distance noise | ✅ via gpu_lidar <noise> block |
±6 cm typical |
Amplitude-dependent reject (amp<100 invalid) |
❌ not in sim | health flag in firmware driver, see TF-Luna driver |
Overexposure dropout (amp=0xFFFF) |
❌ not in sim | under bright light / mirrors |
| Servo motion artifacts | ❌ not in sim | settle delay required |
| Temperature drift | ❌ no | in the datasheet spec |
Additional randomizations for RL
- Random rotation — sensor-frame rotation ±2° random per episode (balances “arm seats perfectly” against reality).
- Random offset — Z calibration offset ±10 cm per episode (balances calibration drift against noise).
- Random dropouts —
p_dropout=0.05per ray in LaserScan (mimics servo + bus issues).
Related nodes
- TF-Luna driver — health flag for discarding unreliable frames.
- LiDAR observation (1D) — how 1D LaserScan becomes a policy input vector.
Sources
- DroneBot forum — real-world TF-Luna + servo artifacts.
- Benewake TF-Luna A03 datasheet — accuracy specs.
- rl-lab dev-log 21 — noise sweep VL53_0 critical (parallel research at rl-lab).
- OpenAI Spinning Up — Sim-to-Real — general methodology.