Calcola la posizione del robot di azionamento differenziale


14

Come si calcola o si aggiorna la posizione di un robot con azionamento differenziale con sensori incrementali?

C'è un sensore incrementale attaccato a ciascuna delle due ruote differenziali. Entrambi i sensori determinano la distanza risp. ha rotolato la ruota durante un tempo noto .Δ r i g h t Δ tΔleftΔrioghtΔt

Innanzitutto, supponiamo che il centro tra entrambe le ruote indichi la posizione del robot. In questo caso, si potrebbe calcolare la posizione come:

X=Xleft+Xrioght2y=yleft+yrioght2

"Derivando" quelle equazioni supponendo che entrambe le ruote ruotassero in linea retta (che dovrebbe essere approssimativamente corretta per le piccole distanze) ottengo:

ΔxΔt=12(ΔleftΔt+ΔrightΔt)cos(θ)ΔyΔt=12(ΔleftΔt+ΔrightΔt)sin(θ)

Dove è l'angolo di orientamento del robot. Per il cambio di questo angolo ho trovato l'equazioneθ

ΔθΔt=1w(ΔleftΔt-ΔrioghtΔt)

Dove w è la distanza tra entrambe le ruote.

Perché ΔX e Δy dipendono θ , mi chiedo se devo prima calcolare la nuova θ aggiungendo Δθ o se devo invece utilizzare il "vecchio" θ ? C'è qualche motivo per usarne uno sopra l'altro?

Quindi, supponiamo ora che il centro tra le due ruote non segni la posizione del robot. Invece voglio usare un punto che segna il centro geometrico del rettangolo di selezione del robot. Poi X ed y modifica:

X=Xleft+Xrioght2+lcoS(θ)y=yleft+yrioght2+lSion(θ)

"Derivare" il primo dà:

ΔXΔt=12(ΔleftΔt+ΔrioghtΔt)coS(θ)-lSion(θ)ΔθΔt

Ora c'è una dipendenza da . È questo un motivo per usare il "nuovo" ?θΔθθ

Esiste un metodo migliore per eseguire l'aggiornamento simultaneo della posizione e dell'orientamento? Può usare numeri complessi (stesso approccio con i quaternioni in 3D?) O coordinate omogenee?

Risposte:


8

Per rispondere alla tua prima domanda: se vuoi davvero trovare le vere equazioni cinematiche per la trasmissione differenziale, non inizierei ad approssimare supponendo che ogni ruota si sia mossa in linea retta. Trova invece il raggio di sterzata, calcola il punto centrale dell'arco e quindi calcola il punto successivo del robot. Il raggio di sterzata sarebbe infinito se il robot si muovesse dritto, ma nel caso dritto la matematica è semplice.

Quindi, immagina che su ogni passaggio temporale o ogni volta che calcoli la variazione nei sensori incrementali, il robot viaggia dal punto A al punto B su un arco come questo: inserisci qui la descrizione dell'immagine Ecco un codice di esempio con la matematica semplificata:

// leftDelta and rightDelta = distance that the left and right wheel have moved along
//  the ground

if (fabs(leftDelta - rightDelta) < 1.0e-6) { // basically going straight
    new_x = x + leftDelta * cos(heading);
    new_y = y + rightDelta * sin(heading);
    new_heading = heading;
} else {
    float R = unitsAxisWidth * (leftDelta + rightDelta) / (2 * (rightDelta - leftDelta)),
          wd = (rightDelta - leftDelta) / unitsAxisWidth;

    new_x = x + R * sin(wd + heading) - R * sin(heading);
    new_y = y - R * cos(wd + heading) + R * cos(heading);
    new_heading = boundAngle(heading + wd);
}

Ho usato una matematica simile in un simulatore per dimostrare diversi modi di guidare: http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/


1
Le equazioni utilizzate nello snippet di codice sopra riportato derivano qui: rossum.sourceforge.net/papers/DiffSteer
kamek

Grande spiegazione! Il collegamento del simulatore è interrotto
smirkingman

2

ΔθθΔX,Δy

ΔθΔX,Δyθ

Δt0


La ricerca di "cinematica anteriore dei veicoli a trazione differenziale" dovrebbe fornire un sacco di articoli con un approccio più matematico a questa domanda.
Ian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.