Main Content

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

Cree un sensor de 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 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 odometría. Este ruido agrega desviaciones aleatorias a los ticks medidos por el codificador de 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 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 de 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 odometría. Especificar un sesgo positivo hará que el algoritmo de odometría sobreestime el ángulo de giro del vehículo. Esta sobreestimación del giro da como resultado que la deriva se acumule en la estimación de la odometría en los giros. Para este escenario, se necesita un vehículo con un eje, así que use 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 odometría. La especificación de diferentes sesgos hace que la estimación de odometría se desvíe a lo largo de toda la trayectoria. Para este escenario, se necesitan dos ruedas, así que use 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.