액추에이터와 센서 // Actuadores y Sensores · Universidad EAFIT · 2026-2

Mapeo de trayectoria con robot XRP

Un seguidor de línea que estima su posición fusionando encoders, giroscopio y un LiDAR 360° con un filtro de Kalman extendido. Esta página corre el mismo algoritmo del robot sobre la pista real, con física, ruido de sensores y animación procedural.

  • David Zuluaga Henao
  • Lucas Arango Botero
  • Nicolás Zapata Jurado
99,4×198,5cm de pista 트랙
811cm de línea 라인
100 Hzcontrol de ruedas 제어
10 Hzfiltro de Kalman 필터

01 Simulador 시뮬레이터

El código de reto1_xrp.py portado línea a línea: seguidor de línea + PI por rueda a 100 Hz, odometría y EKF a 10 Hz, y PL-ICP con barridos del LiDAR. El robot solo “ve” lo que leerían sus sensores; el mundo agrega ruido, deslizamiento y errores de calibración.

ESPERANDO SALIDA — t = 0.0 s
Real EKF Solo odometría LiDAR

Error de posición respecto al robot real 오차

EKF 0.0 cmSolo odometría 0.0 cm

En el robot real el LiDAR trabaja en modo diferido: durante el recorrido solo guarda barridos y al llegar a la meta repite el EKF con el ICP. Aquí el cálculo es en vivo; el resultado del filtro es el mismo.

02 Cómo funciona 작동 원리

Tres relojes separados para que los cálculos nunca frenen las ruedas.

Sensores

Reflectancia ×2 · Encoders 585 cuentas/vuelta · Giroscopio z · LiDAR LD06 230 400 bd

→
Marcha · 100 Hz

Seguidor de línea PD + amortiguamiento con el giroscopio. PI de velocidad por rueda con prealimentación.

→
Predicción · 10 Hz

Δs de los encoders, Δθ del giroscopio. Modelo diferencial con θ en el punto medio.

→
Corrección

PL-ICP entre barridos (keyframes cada 12 cm / 12°). EKF con H = I y validación χ².

→
datos.txt

x, y en cm desde la línea transversal.

Seguidor de línea 라인 추적

e = (sL − sR) / max(sL + sR, 1)
ω* = 0.55·e + Kd·ė − 0.18·ω_giro
v* = 6.0 − 2.5·|e|   cm/s
vL,R = v* ∓ ω*·L/2

Si pierde la línea, frena una rueda y avanza la otra hacia el último lado donde la vio.

Odometría 주행 거리계

d = Δticks · 2πr / N   (r = 3.0, N = 585)
Δs = (dR + dL)/2 ;  Δθ = Δyaw_IMU
x += Δs·cos(θ + Δθ/2)
y += Δs·sin(θ + Δθ/2)

El giro sale del giroscopio (XRPLib lo integra a ~200 Hz): las ruedas patinan en las curvas.

LiDAR · PL-ICP 라이다

min Σ [ nⱼᵀ (R(φ)·pᵢ + t − qⱼ) ]²
Gauss-Newton, 5 iteraciones
umbral 25 → 5 cm, ≥ 30 pares
Σ_ICP ≈ σ²(JᵀJ)⁻¹ · 4

Error punto-a-línea (Censi, 2008): no penaliza deslizar a lo largo de una pared.

Filtro de Kalman extendido 칼만 필터

P⁻ = F P Fᵀ + Q(Δs, Δθ)
z = x_ref ⊕ Δx_LiDAR ,  H = I
K = P⁻ (P⁻ + R)⁻¹
P = (I−K)P⁻(I−K)ᵀ + K R Kᵀ

Q crece con lo recorrido; R la entrega el ICP en cada barrido. d² > 11,34 atenúa la medición.

03 Resultados del recorrido real 결과

Los 1090 puntos que guardó el robot, en la escala real de la pista. A la derecha, los mismos puntos reubicados sobre la línea con emparejamiento con el mapa (post-procesamiento).

punto 1090 · 752 cm · error 57.7 cm
1090puntos registrados
752 cmdistancia medida
4,5 cmerror medio en los primeros 170 cm
57,7 cmerror de cierre (7,7 %)
−360°giro total medido
5correcciones LiDAR > 4 cm

¿Por qué los puntos no coincidían con el dibujo de la pista? El plano en imagen no está a escala (relación 1,58) y la pista real mide 99,4 × 198,5 cm (relación 2,0). Con la escala correcta en cada eje, la salida ubicada a 54 cm de la esquina inferior izquierda y el giro de 90° del marco del robot, el recorrido coincide los primeros 170 cm; después se abre por errores de rumbo en las curvas.

04 El robot en la pista 영상

Video del recorrido real del XRP.

Lo que hace el código en cada tramo

  • Salida: espera los dos sensores sobre la transversal (LED amarillo), define (0, 0, 0) y arranca (LED verde).
  • Rectas y curvas: 6,0 cm/s en recta y baja hasta 3,5 cm/s cuando el error de línea crece.
  • Esquinas cerradas: si pierde la línea, frena una rueda y gira hacia el último lado donde la vio.
  • Meta: se detiene, procesa los barridos del LiDAR (LED azul) y guarda datos.txt.
Abrir en YouTube ↗

05 Archivos 파일

Todo el material del reto.