Tutorial · Intermedio · 25 min
Error transversal: medir lo bien que sigues una trayectoria
El numero que dice si un seguidor de trayectoria funciona, como medirlo con honestidad y por que Stanley se abre en las curvas donde pure pursuit las recorta.
Un solo numero, con signo
El error transversal es la distancia perpendicular del robot a la trayectoria, con un signo. Positivo a la izquierda del sentido de avance, negativo a la derecha. Esa es la definicion completa, y es el unico marcador honesto que tiene un seguidor de trayectoria.
El signo importa mas de lo que parece. Una distancia sin signo te dice que el robot esta a 20 cm; una con signo te dice de que lado, que es lo que necesita cualquier controlador y lo que hace legible una grafica del error: un sesgo se ve como un desplazamiento, una oscilacion como una sinusoide y una esquina como un pico en una direccion conocida.
Medirlo sin enganarte a ti mismo
Tres trampas, en el orden en que la gente cae en ellas.
No midas contra la estimacion. Si el robot cree que esta en la trayectoria, su propio error reportado es cero por construccion. El error transversal debe puntuarse contra la verdad de referencia: una cinta metrica, una estacion total, un sistema de captura de movimiento o, en simulacion, la pose real que integra el modelo. En el simulador de seguimiento de trayectorias el controlador ve una posicion posiblemente ruidosa y el error siempre se calcula desde la verdad, que es la unica razon por la que la penalizacion del GPS aparece como un numero.
Toma el signo del marco de la trayectoria, no de una prueba de producto vectorial. La implementacion natural es comprobar de que lado del segmento actual esta el robot. Ese signo cambia de forma discontinua cuando la proyeccion cruza un punto de paso, y con cualquier retardo del actuador la orden vibra a escala completa mientras las ruedas apenas se mueven, lo que se parece exactamente a un controlador averiado. Proyecta sobre la trayectoria y toma la componente lateral en el propio marco de la trayectoria:
float h = pathHeadingAt(s); // direccion tangente en ese punto
float e = -(x - px) * sinf(h) + (y - py) * cosf(h); // + es a la izquierda del avance
Busca cerca de donde estabas, no en todas partes. Una busqueda global del punto mas cercano sobre una trayectoria que se dobla volvera felizmente a un segmento que recorriste hace un minuto. Conserva la ultima longitud de arco y busca en una ventana a su alrededor: un par de metros hacia atras y suficiente hacia delante para cubrir la anticipacion.
Hay una cuarta trampa mas sutil que me costo un controlador funcionando: en una esquina, ambos segmentos adyacentes se proyectan sobre el mismo vertice a la misma distancia. Si te quedas con el entrante, el error de rumbo y el desvio lateral son ambos casi cero, asi que un controlador que gira segun esas dos cantidades se sale de la trayectoria con total confianza. Resuelve el empate a favor del segmento saliente.
RMS, peor caso y donde vive el error
Reporta tres numeros, porque cada uno oculta algo que los otros muestran.
- Error RMS es el promedio honesto. Es contra el que sintonizas.
- Peor caso es lo que decide si el robot cabe por el pasillo. Un RMS de 0,12 m con un pico de 0,50 m es una maquina distinta de un RMS de 0,12 m con un pico de 0,15 m.
- Error frente a la distancia recorrida sobre la trayectoria muestra donde. Es la grafica que te dice si tienes un problema de sintonizacion o un problema de geometria.
Ese tercer numero es la razon de que el simulador lo dibuje. Una anticipacion corta produce temblor a lo largo de toda la trayectoria; una larga es limpia en las rectas y solo da picos en las esquinas. El RMS puede ser identico.
Dos controladores, dos formas de fallar
Pure pursuit apunta a un punto por delante y conduce el arco. Stanley —el controlador que gano el DARPA Grand Challenge de 2005— toma como referencia el eje delantero y gira segun dos terminos sumados:
δ = θ_e + atan(k · e / v)
El primer termino alinea el robot con la direccion de la trayectoria. El segundo convierte el error transversal en un angulo de direccion, y dividir por la velocidad es lo que hace que la misma ganancia se comporte igual a 1 m/s que a 10.
Medido en el mismo circuito a 2 m/s:
| RMS | Peor caso | Longitud de trayectoria recorrida | Esfuerzo de direccion | |
|---|---|---|---|---|
| Pure pursuit | 0,12 m | 0,50 m | 0,8% corta | 4,3 rad |
| Stanley | 0,17 m | 0,87 m | 2,2% larga | 18,5 rad |
El signo de esa tercera columna es toda la historia. Pure pursuit toma la linea interior y termina antes; Stanley se niega a salir de la trayectoria, se pasa de la esquina y vuelve, recorriendo mas distancia que la trayectoria que se le dio.
El esfuerzo de direccion es el numero que la gente olvida. Cuatro veces mas movimiento del actuador son cuatro veces mas desgaste de un servo, cuatro veces mas corriente y, en una traccion diferencial, cuatro veces mas arrastre de ruedas. Stanley no sale gratis.
Elegir
Pure pursuit cuando la trayectoria es una sugerencia. Barridos de cobertura, misiones por puntos de paso, cualquier cosa en exteriores donde recortar medio metro en una esquina no le importe a nadie. Tiene un solo parametro geometrico, degrada con elegancia y son unas doce lineas.
Stanley cuando la trayectoria es una restriccion. Un carril, una hilera de cultivos, un pasillo con paredes. Mantiene la linea y no la recorta, a costa del esfuerzo de direccion y de una ganancia que de verdad necesita sintonizarse: la anticipacion es geometria y se traslada entre robots; k es una ganancia de control y no se traslada.
Ninguno de los dos, en solitario, a baja velocidad. Ambos dividen o escalan con la velocidad. Por debajo de unos 0,3 m/s a un robot de traccion diferencial le va mejor girar sobre su eje hacia el rumbo objetivo y luego conducir, algo que ninguno de los dos controladores expresa.
Cuando algo sale mal
| Sintoma | Normalmente |
|---|---|
| El error reportado siempre esta cerca de cero | Se mide contra la estimacion en lugar de contra la verdad de referencia |
| La orden vibra en cada punto de paso | Signo tomado de una prueba de producto vectorial que cambia en el vertice |
| Se sale de la trayectoria con confianza despues de una esquina | Empate de vertice resuelto a favor del segmento entrante: el silencioso |
| El error salta a un valor enorme y se recupera | La busqueda global del punto mas cercano emparejo con un segmento lejano |
| El RMS parece correcto y el robot roza una pared | Reporta tambien el peor caso; el RMS oculta los picos aislados |
| Stanley oscila en las rectas | k demasiado alta para la velocidad y el retardo; es una ganancia, no geometria |
| Ambos controladores se desvian igual | El problema esta aguas arriba: la estimacion de posicion, no la direccion |
Haz correr ambos por el mismo circuito en el simulador de seguimiento de trayectorias, y despues sigue la ruta de seguimiento y navegacion desde la odometria hasta un robot que ejecuta una mision por si solo.
Explora el grafo
Forma parte de estos montajes
Proyectos y rutas de aprendizaje que incluyen este tutorial.
Lecturas adicionales