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.

Genere lecturas IMU en un péndulo doble

Este ejemplo muestra cómo generar lecturas de unidades de medida inercial (IMU) a partir de dos sensores IMU montados en los enlaces de un péndulo doble. El péndulo doble se modela utilizando Simscape Multibody. Para ver un ejemplo paso a paso de cómo construir un péndulo simple usando Simscape Multibody™, consulte Model a Simple Pendulum (Simscape Multibody).

open_system("doublePendulumIMU.slx");

Modelo

El marco de referencia inercial (o marco mundial) en Simscape Multibody por defecto es el marco de coordenadas cartesiano derecho. Las articulaciones de revolución solo aplican rotaciones alrededor del eje Z del sistema de referencia del cuerpo. Al principio, el sistema inercial y el sistema de referencia corporal están alineados. El bloque Transformación rígida aplica una rotación de -90 grados alrededor del eje X del marco de referencia del cuerpo de modo que el eje Y transformado apunte en la dirección del vector de gravedad y el enlace pueda girar libremente a lo largo del eje Z transformado.

Utilice los marcos finales de los dos enlaces como marcos de sensores de las IMU simuladas. Cada IMU se define dentro de un subsistema IMU.

Subsistema IMU

Abra el primer subsistema IMU.

Puede elegir que el marco de referencia de las entradas IMU se encuentre en el marco NED (Noreste-Abajo) o ENU (Este-Norte-Arriba). En esta simulación, usted elige el marco ENU que se alinea con el marco de coordenadas derecho. El primer bloque de sensor de transformación mide la relación espacial relativa entre el marco del sensor y el marco inercial. El valor de la aceleración gravitacional se resta de la aceleración total ya que el bloque IMU incorpora la aceleración gravitacional en el marco inercial por defecto. El bloque IMU traduce esta información en datos de sensores de acelerómetro, giroscopio y magnetómetro.

El segundo bloque de sensor de transformación proporciona los datos de medición de ground-truth esperados de la IMU. Mide la relación espacial relativa entre el marco inercial y el marco del sensor medido en el marco del sensor, similar a la IMU. Las aceleraciones se niegan para compensar la negación aplicada a la aceleración en el modelo IMU. Esto se hace en el modelo IMU para obtener lecturas de aceleración total cero cuando el acelerómetro está en caída libre. Consulte imuSensor para obtener más detalles sobre el modelado de IMU.

Simule y visualice datos IMU

Dado que las rotaciones primarias en el doble péndulo se producen a lo largo del eje Z del marco del sensor, las aceleraciones dominantes medidas por la IMU se encuentran a lo largo de los ejes X e Y y las rotaciones dominantes se encuentran a lo largo del eje Z. Los gráficos a continuación muestran estos datos de IMU simulados de la segunda IMU y comparan los datos con ground-truth.

out = sim("doublePendulumIMU.slx");

% Simulated measurement data for the second IMU
wz = out.logsout{4}.Values.wz;
ax = out.logsout{4}.Values.ax;
ay = out.logsout{4}.Values.ay;

% Ground truth for the second IMU
wzgt = out.logsout{3}.Values.wz;
axgt = out.logsout{3}.Values.ax;
aygt = out.logsout{3}.Values.ay;

plot(wz);
hold on;
plot(wzgt);
legend("Measurement data","Ground truth");
ylabel("Angular velocity, w_z (rad/s)",Interpreter="tex")
xlabel("Time (s)")
title("Angular velocity along the Z axis")
pbaspect([2 1 1])
hold off;

Figure contains an axes object. The axes object with title Angular velocity along the Z axis, xlabel Time (s), ylabel Angular velocity, w_z (rad/s) contains 2 objects of type stair, line. These objects represent Measurement data, Ground truth.

plot(ax);
hold on;
plot(axgt);
legend("Measurement data","Ground truth");
ylabel("Linear acceleration, a_x (m/s^2)",Interpreter="tex")
xlabel("Time (s)")
title("Linear acceleration along the X axis")
pbaspect([2 1 1])
hold off;

Figure contains an axes object. The axes object with title Linear acceleration along the X axis, xlabel Time (s), ylabel Linear acceleration, a_x (m/s^2) contains 2 objects of type stair, line. These objects represent Measurement data, Ground truth.

plot(ay);
hold on;
plot(aygt);
legend("Measurement data","Ground truth");
ylabel("Linear acceleration, a_{y} (m/s^{2})",Interpreter="tex")
xlabel("Time (s)")
title("Linear acceleration along the Y axis")
pbaspect([2 1 1])
hold off;

Figure contains an axes object. The axes object with title Linear acceleration along the Y axis, xlabel Time (s), ylabel Linear acceleration, a_{y} (m/s^{2}) contains 2 objects of type stair, line. These objects represent Measurement data, Ground truth.