Tutorial · Intermedio · 25 min
Errore trasversale al percorso: misura quanto bene lo segui
Misura onestamente l'errore laterale di un robot seguilinea e confronta Stanley, che scavalca gli angoli, con pure pursuit, che li taglia dall'interno.
Un solo numero, con segno
L’errore trasversale al percorso è la distanza perpendicolare dal robot al percorso, con un segno. Positivo a sinistra rispetto alla direzione di marcia, negativo a destra. Questa è l’intera definizione ed è l’unico quadro di valutazione onesto di cui dispone un robot seguilinea.
Il segno conta più di quanto sembri. Una distanza senza segno indica che il robot è scostato di 20 cm; una distanza con segno indica da quale lato, l’informazione necessaria a qualsiasi controllore e quella che rende leggibile un grafico dell’errore: il bias compare come uno scostamento, l’oscillazione come un seno e un angolo come un picco in una direzione nota.
Misuralo senza trarre in inganno te stesso
Tre trappole, nell’ordine in cui le persone ci cadono.
Non misurarlo rispetto alla stima. Se il robot pensa di essere sul percorso, l’errore che segnala è zero per costruzione. Devi valutare l’errore trasversale rispetto alla verità di riferimento: un metro a nastro, un teodolite, un sistema di acquisizione del movimento oppure, in simulazione, la posizione vera integrata dal modello. Nel simulatore di inseguimento del percorso il controllore vede una correzione eventualmente rumorosa, mentre l’errore viene sempre calcolato dalla verità: è l’unico motivo per cui la penalità del GPS compare come valore numerico.
Ricava il segno dal sistema di riferimento del percorso, non da un test sul prodotto vettoriale. L’implementazione naturale consiste nel verificare su quale lato del segmento corrente si trovi il robot. Quel segno cambia discontinuitamente quando la proiezione supera un punto di passaggio e, con qualsiasi ritardo degli attuatori, il comando oscilla a fondo scala mentre le ruote si muovono appena: sembra esattamente un controllore guasto. Proietta invece sul percorso e prendi la componente laterale nel sistema di riferimento proprio del percorso:
float h = pathHeadingAt(s); // tangent direction there
float e = -(x - px) * sinf(h) + (y - py) * cosf(h); // + is left of travel
Cerca vicino al punto in cui eri, non ovunque. Una ricerca globale del punto più vicino su un percorso che torna indietro collegherà volentieri il robot a un segmento percorso un minuto prima. Conserva la lunghezza d’arco precedente e cerca in una finestra attorno a essa: un paio di metri indietro e abbastanza avanti da coprire l’orizzonte di anticipo.
C’è una quarta trappola, più sottile, che è costata un controllore funzionante: a un angolo, entrambi i segmenti adiacenti si proiettano sullo stesso vertice alla stessa distanza. Se mantieni quello in ingresso, sia l’errore di orientamento sia lo scostamento laterale sono all’incirca zero; un controllore che sterza in base a queste due grandezze esce quindi dritto dal percorso, convinto di essere sulla rotta giusta. Risolvi il pareggio a favore del segmento in uscita.
Valore RMS, caso peggiore e posizione dell’errore
Riporta tre numeri, perché ciascuno nasconde qualcosa che gli altri mostrano.
- L’errore RMS è la media onesta. È il valore rispetto al quale regoli il controllore.
- Il caso peggiore determina se il robot entra nel corridoio. Un RMS di 0.12 m con un picco di 0.50 m descrive una macchina diversa da una con RMS di 0.12 m e picco di 0.15 m.
- L’errore in funzione della distanza lungo il percorso mostra dove si trova. È il grafico che distingue un problema di regolazione da un problema geometrico.
Il terzo grafico è il motivo per cui il simulatore lo traccia. Un orizzonte di anticipo breve produce oscillazioni lungo tutto il percorso; uno lungo è regolare sui tratti rettilinei e presenta picchi soltanto agli angoli. L’RMS può essere identico.
Due controllori, due forme di guasto
Pure pursuit mira a un punto davanti e percorre l’arco che vi conduce. Stanley, il controllore che ha vinto la DARPA Grand Challenge del 2005, fa riferimento all’asse anteriore e sterza sommando due termini:
δ = θ_e + atan(k · e / v)
Il primo termine allinea il robot con la direzione del percorso. Il secondo trasforma l’errore trasversale in un angolo di sterzo e la divisione per la velocità fa sì che lo stesso guadagno si comporti allo stesso modo a 1 m/s e a 10.
Misurato sullo stesso percorso a 2 m/s:
| RMS | Peggiore | Lunghezza del percorso percorsa | Sforzo di sterzo | |
|---|---|---|---|---|
| Pure pursuit | 0.12 m | 0.50 m | 0.8% corto | 4.3 rad |
| Stanley | 0.17 m | 0.87 m | 2.2% lungo | 18.5 rad |
Il segno della terza colonna è tutta la storia. Pure pursuit prende la linea interna e termina prima; Stanley si rifiuta di lasciare il percorso, supera l’angolo e torna, percorrendo più strada di quella assegnatagli.
Lo sforzo di sterzo è il numero che le persone dimenticano. Quattro volte il movimento dell’attuatore significano quattro volte l’usura di un servomotore, quattro volte la corrente e, su una trazione differenziale, quattro volte lo scorrimento laterale delle ruote. Stanley non è gratis.
Scelta
Usa pure pursuit quando il percorso è un suggerimento: percorrenze di copertura, missioni per punti di passaggio e qualsiasi cosa all’aperto in cui un angolo tagliato di mezzo metro non crea problemi. Ha un solo parametro geometrico, degrada in modo controllabile e richiede circa dodici righe.
Usa Stanley quando il percorso è un vincolo: una corsia, una fila di colture, un corridoio con pareti. Mantiene la linea e non taglia, al costo di uno sforzo di sterzo e di un guadagno che richiede una regolazione reale. L’orizzonte di anticipo è geometrico e si trasferisce tra robot; k è un guadagno di controllo e non si trasferisce.
Non usare nessuno dei due da solo a bassa velocità. Entrambi dividono per la velocità o ne sono proporzionali. Sotto circa 0.3 m/s, a un robot a trazione differenziale conviene di più ruotare sul posto fino a ottenere la direzione e poi avanzare, un comportamento che nessuno dei due controllori esprime.
Quando qualcosa va storto
| Sintomo | Di solito |
|---|---|
| L’errore segnalato è sempre vicino a zero | Stai misurando rispetto alla stima invece che alla verità di riferimento |
| Il comando oscilla a ogni punto di passaggio | Segno ricavato da un test sul prodotto vettoriale che cambia al vertice |
| Dopo un angolo esce dal percorso convinto di essere sulla rotta giusta | Pareggio al vertice risolto a favore del segmento in ingresso, quello silenzioso |
| L’errore balza a un valore enorme e si ripristina | La ricerca globale del punto più vicino ha collegato un segmento lontano |
| L’RMS sembra buono, ma il robot urta un muro | Riporta anche il caso peggiore; l’RMS nasconde i singoli picchi |
| Stanley oscilla sui tratti rettilinei | k troppo alto per la velocità e il ritardo; è un guadagno, non una geometria |
| Entrambi i controllori vagano insieme | Il problema è a monte, nella stima di posizione, non nello sterzo |
Esegui entrambi sullo stesso percorso nel simulatore di inseguimento del percorso, poi segui il percorso guida dell’inseguimento del percorso dall’odometria fino a un robot che esegue una missione autonomamente.
Esplora il grafo
Fa parte di queste costruzioni
Progetti e percorsi di apprendimento che includono questo tutorial.
Per approfondire