Hola amigos,
Les escribo porque tengo una duda con el nuevo Arduino Nano 33 BLE sense: ¿Es posible aumentar la velocidad de cálculo de un Arduino?
Este nuevo Arduino tiene un sensor IMU incorporado lo que permite obtener los ángulos de rotación roll, pitch y yaw con las librerías: Arduino_LSM9DS1 y MadgwickAHRS. El ángulo calculado lo da correctamente, sin embargo es lento. Me explico, mi mano es más rápida que los datos mostrados en el monitor. De otra manera: cuando yo muevo rápidamente el arduino por ejemplo de 0 a 90º tarda en procesar los datos, de forma que hay un cierto retraso.
En general, los filtros y en concreto la librería de MadgwickAHRS implican una gran cantidad de cálculos. Yo no sé si es posible hacer que vaya más rápido en hacer estos cálculos. Por otro lado, quizás conozcáis otra forma de obtener los ángulos de manera más eficiente.
#include <Arduino_LSM9DS1.h>
#include <MadgwickAHRS.h>
// Madgwick
Madgwick filter;
// sensor's sample rate is fixed at 119 Hz:
const float sensorRate = 119;
float roll, pitch, heading;
void setup() {
Serial.begin(9600); // initialize serial communication
// begin initialization
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}
// start the filter to run at the sample rate:
filter.begin(sensorRate);
}
void loop() {
float ax, ay, az; // Acceleration
float gx, gy, gz; // Gyroscope
float mx, my, mz; // Magnometer
// read orientation x, y and z eulers
IMU.readAcceleration(ax, ay, az);
IMU.readGyroscope(gx, gy, gz);
//IMU.readMagneticField(mx, my, mz);
filter.updateIMU(gx, gy, gz, ax, ay, az); //for all 3
roll = filter.getRoll();
pitch = filter.getPitch();
heading = filter.getYaw();
Serial.print("Orientation: ");
Serial.print(heading);
Serial.print(" ");
Serial.print(pitch);
Serial.print(" ");
Serial.println(roll);
}
Primero ubiquemos el contexto del problema, aunque lo has explicado bien aquí una imagen es mucho mas que las palabras.
En este link de Adafruit veo como se mueve un NANO 33 BLE y en la pantalla el conejo se mueve en consecuencia.
Es asi tu respuesta o mas lenta aún?
Buenos días.
Acabo de leer tu respuesta. Muchísimas gracias. Disculpa la tardanza.
Sí, la respuesta es muy lenta. La idea es no depender de sensores externos. Es decir, si el Arduino Nano 33 BLE sense tiene una unidad IMU, entonces aprovecharla. Todo es mucho más compacto. Lo curioso del caso es que el mismo código con el filtro Madwick para Arduino 33 IoT funciona perfectamente pero en cambio con el Arduino nano BLE sense, va muy lento. Además es muy fácil probar lo que digo. Es copiar el código y cargarlo en ambos Arduinos teniendo en cuenta que las librerías para cada IMU son diferentes.
Con el Arduino nano 33 BLE sense, cuando lo mueves y empieza a mostrar los datos es como si estuviera 'dormido', pero al final cuando se despierta, marca bien el ángulo.
Saludos.
Ese dormido me suena a un timeout.
Dejame ver si puedo descubrir qué ocurre. Mira las dos librerías e intenta encontrar las diferencias y en todo caso las discutimos.
Nos facilitas los dos links para compararlos?
He probado también con otros filtros, y sucede exactamente lo mismo. Da igual el filtro, complementario de Kalman, filtro de Kalman, unificado, etc...
Entiendo que el filtro, si funciona para uno debería funcionar para el otro. Miraré también las librerías. A mí, no me hace falta para nada el magnetómetro. Sólo con el roll, pitch y Yaw es suficiente. Lo digo porque, aunque no me lo he mirado con profundidad, pudiera ser necesario calibrar el magnetómetro. Sin embargo es algo que no necesito.