Calcular la posición del robot de accionamiento diferencial

14

¿Cómo calcula o actualiza la posición de un robot de accionamiento diferencial con sensores incrementales?

Hay un sensor incremental conectado a cada una de las dos ruedas diferenciales. Ambos sensores determinan la distancia resp. su rueda ha rodado durante un tiempo conocido .Δ r i g h t Δ tΔleftΔrightΔt

Primero, supongamos que el centro entre ambas ruedas marca la posición del robot. En este caso, se podría calcular la posición como:

X=XlmiFt+Xryosolht2y=ylmiFt+yryosolht2

"Derivando" esas ecuaciones bajo el supuesto de que ambas ruedas ruedan en línea recta (lo que debería ser aproximadamente correcto para distancias pequeñas) obtengo:

ΔXΔt=12(ΔlmiFtΔt+ΔryosolhtΔt)Cos(θ)ΔyΔt=12(ΔlmiFtΔt+ΔryosolhtΔt)syonorte(θ)

Donde es el ángulo de orientación del robot. Para el cambio de este ángulo encontré la ecuaciónθ

ΔθΔt=1w(ΔlmiFtΔt-ΔryosolhtΔt)

Donde w es la distancia entre ambas ruedas.

Debido a que ΔX y Δy dependen de θ , me pregunto si primero debo calcular la nueva θ agregando Δθ o si prefiero usar la \ theta "antigua" θ. ¿Hay alguna razón para usar uno sobre el otro?

Entonces, supongamos que el centro entre ambas ruedas no marca la posición del robot. En cambio, quiero usar un punto que marque el centro geométrico del cuadro delimitador del robot. Entonces X e y cambian a:

X=XlmiFt+Xryosolht2+lCos(θ)y=ylmiFt+yryosolht2+lsyonorte(θ)

"Derivando" el primero da:

ΔXΔt=12(ΔlmiFtΔt+ΔryosolhtΔt)Cos(θ)-lsyonorte(θ)ΔθΔt

Ahora hay una dependencia en . ¿Es esta una razón para usar el "nuevo" ?Δθθ

¿Existe algún método mejor para hacer una actualización simulada de posición y orientación? ¿Puede estar usando números complejos (el mismo enfoque que con los cuaterniones en 3D?) O coordenadas homogéneas?

Daniel Jour
fuente

Respuestas:

8

Para responder a su primera pregunta: si realmente desea encontrar las verdaderas ecuaciones cinemáticas para la transmisión diferencial, no comenzaría a aproximarme asumiendo que cada rueda se ha movido en línea recta. En cambio, encuentre el radio de giro, calcule el punto central del arco y luego calcule el siguiente punto del robot. El radio de giro sería infinito si el robot se mueve en línea recta, pero en el caso recto la matemática es simple.

Entonces, imagine que en cada paso de tiempo, o cada vez que calcule el cambio en los sensores incrementales, el robot viaja del punto A al punto B en un arco como este: ingrese la descripción de la imagen aquí Aquí hay un código de muestra con las matemáticas simplificadas:

// 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);
}

Utilicé matemáticas similares en un simulador para demostrar diferentes formas de dirección: http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/

Robz
fuente
1
Las ecuaciones utilizadas en el fragmento de código anterior se derivan aquí: rossum.sourceforge.net/papers/DiffSteer
kamek
¡Gran explicación! El enlace del simulador está roto
smirkingman
2

ΔθθΔX,Δy

ΔθΔX,Δyθ

Δt0 0

Ian
fuente
La búsqueda de "cinemática directa de vehículos con transmisión diferencial" debería proporcionar un montón de artículos con un enfoque más matemático para esta pregunta.
Ian