Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Fuentes de errores del codificador de ruedas

Explore las diversas fuentes de error de los codificadores de ruedas y cómo afectan la estimación de la odometría de las ruedas. Después de definir una trayectoria ground-truth, cambie los parámetros de polarización del radio de la rueda, ruido de posición de la rueda, deslizamiento de la rueda y ancho de vía para los distintos objetos del codificador de rueda. Observe los efectos de cambiar estos parámetros en la trayectoria de salida de los modelos de sensor de codificador de rueda.

Trayectoria ground-truth

Cree una trayectoria de ground-truth que se utilizará al examinar los parámetros de error. Trazar la trayectoria.

Fs = 100;
wps = [0 0 0;
    20 0 0;
    20 5 0;
    0 5 0;
    0 0 0];
toa = cumsum([0 10 1.25*pi 10 1.25*pi]).';
vels = [2 0 0;
    2 0 0;
    -2 0 0;
    -2 0 0;
    2 0 0];

traj = waypointTrajectory(wps,...
    'SampleRate',Fs,'ReferenceFrame','ENU', ...
    'TimeOfArrival',toa,'Velocities',vels);

% Fetch pose values.
[pos,orient,vel,acc,angvel] = lookupPose(traj,toa(1):1/Fs:toa(end));
angvelBody = rotateframe(orient,angvel);

% Plot ground truth position.
figure
plot(pos(:,1),pos(:,2))
title('Position (Ground Truth)')
xlabel('X (m)')
ylabel('Y (m)')
axis equal

Figure contains an axes object. The axes object with title Position (Ground Truth), xlabel X (m), ylabel Y (m) contains an object of type line.

Sesgo en el radio de la rueda

Crea un sensor codificador de rueda para un modelo de monociclo como un objeto wheelEncoderUnicycle. Especifique un WheelRadiusBias distinto de cero y examine cómo afecta la estimación de la odometría. Especificar un sesgo positivo hace que el algoritmo de odometría subestime la circunferencia de la rueda. Esto da como resultado que la odometría estime una distancia recorrida menor.

encoder = wheelEncoderUnicycle;
encoder.WheelRadiusBias = 0.05;
odom = wheelEncoderOdometryUnicycle(encoder);

ticks = encoder(vel, angvel, orient);
estPose = odom(ticks, angvelBody(:,3));

% Plot ground truth and estimated positions.
figure
plot(pos(:,1),pos(:,2),estPose(:,1),estPose(:,2))
title('Position (Wheel Radius Bias)')
xlabel('X (m)')
ylabel('Y (m)')
legend('Ground truth','Odometry')
axis equal

Figure contains an axes object. The axes object with title Position (Wheel Radius Bias), xlabel X (m), ylabel Y (m) contains 2 objects of type line. These objects represent Ground truth, Odometry.

Ruido en la medición de la posición de las ruedas

Especifique un WheelPositionAccuracy distinto de cero y examine cómo afecta la estimación de la odometría. Este ruido agrega desviaciones aleatorias a los ticks medidos desde el codificador de la rueda.

encoder = wheelEncoderUnicycle;
encoder.WheelPositionAccuracy = 0.1;
% Use a local random stream to reproduce results.
encoder.RandomStream = 'mt19937ar with seed';
odom = wheelEncoderOdometryUnicycle(encoder);

ticks = encoder(vel,angvel,orient);
estPose = odom(ticks,angvelBody(:,3));

% Plot ground truth and estimated positions.
figure
plot(pos(:,1),pos(:,2),estPose(:,1),estPose(:,2))
title('Position (Wheel Position Noise)')
xlabel('X (m)')
ylabel('Y (m)')
legend('Ground truth', 'Odometry')
axis equal

Figure contains an axes object. The axes object with title Position (Wheel Position Noise), xlabel X (m), ylabel Y (m) contains 2 objects of type line. These objects represent Ground truth, Odometry.

Patinaje y derrape de las ruedas

Especifique un SlipRatio distinto de cero y examine cómo afecta la estimación de la odometría. Especificar un valor mayor que cero simula el deslizamiento de la rueda. Este deslizamiento da como resultado que la odometría estime una mayor distancia recorrida. Un valor negativo para la relación de deslizamiento indica derrape.

encoder = wheelEncoderUnicycle;
encoder.SlipRatio = 0.25;
odom = wheelEncoderOdometryUnicycle(encoder);

ticks = encoder(vel, angvel, orient);
estPose = odom(ticks, angvelBody(:,3));

% Plot ground truth and estimated positions.
figure
plot(pos(:,1),pos(:,2),estPose(:,1),estPose(:,2))
title('Position (Wheel Slippage)')
xlabel('X (m)')
ylabel('Y (m)')
legend('Ground truth', 'Odometry')
axis equal

Figure contains an axes object. The axes object with title Position (Wheel Slippage), xlabel X (m), ylabel Y (m) contains 2 objects of type line. These objects represent Ground truth, Odometry.

Sesgo en el ancho de vía

Especifique un TrackWidthBias distinto de cero y examine cómo afecta la estimación de la odometría. Especificar un sesgo positivo hará que el algoritmo de odometría sobreestime el ángulo de giro del vehículo. Esta sobreestimación de los giros da como resultado una acumulación de deriva en la estimación de la odometría en los giros. Para este escenario, se necesita un vehículo con eje, así que utilice el objeto wheelEncoderDifferentialDrive.

encoder = wheelEncoderDifferentialDrive;
encoder.TrackWidthBias = 0.1;
odom = wheelEncoderOdometryDifferentialDrive(encoder);

ticks = encoder(vel,angvel,orient);
estPose = odom(ticks);

% Plot ground truth and estimated positions.
figure
plot(pos(:,1),pos(:,2), estPose(:,1), estPose(:,2))
title('Position (Track Width Bias)')
xlabel('X (m)')
ylabel('Y (m)')
legend('Ground truth', 'Odometry')
axis equal

Figure contains an axes object. The axes object with title Position (Track Width Bias), xlabel X (m), ylabel Y (m) contains 2 objects of type line. These objects represent Ground truth, Odometry.

Diferentes sesgos en las ruedas

Especifique diferentes valores distintos de cero para WheelRadiusBias y examine cómo afecta la estimación de la odometría. La especificación de diferentes sesgos hace que la estimación de la odometría se desvíe a lo largo de toda la trayectoria. Para este escenario, se necesitan dos ruedas, así que utilice el objeto wheelEncoderDifferentialDrive.

encoder = wheelEncoderDifferentialDrive;
encoder.WheelRadiusBias = [-0.01, 0.001];
odom = wheelEncoderOdometryDifferentialDrive(encoder);

ticks = encoder(vel, angvel, orient);
estPose = odom(ticks);

% Plot ground truth and estimated positions.
figure
plot(pos(:,1),pos(:,2), estPose(:,1), estPose(:,2))
title('Position (Different Wheel Biases)')
xlabel('X (m)')
ylabel('Y (m)')
legend('Ground truth', 'Odometry')
axis equal

Figure contains an axes object. The axes object with title Position (Different Wheel Biases), xlabel X (m), ylabel Y (m) contains 2 objects of type line. These objects represent Ground truth, Odometry.