robot autobalanceado Arduino

Ángulos de rotación con el IMU de Arduino Nano 33 IoT sin MPU. MadgwickAHRS. Sensor de Ángulo.

En esta entrada podremos hallar de forma rápida, sencilla y eficaz los ángulos de giro (roll, pitch, heading o yaw) mediante el empleo de un único Arduino Nano 33 IoT el cuál lleva incorporado una unidad IMU. Evidentemente se pueden obtener también los datos del giróscopo y acelerómetro. Este algoritmo facilitado por Arduino en su librería se llama: MadgwickAHRS. El algoritmo de Madgwick es un algoritmo que fusiona los datos de giroscopios, acelerómetros y magnetómetros para conseguir estimar la orientación de un cuerpo. Fue desarrollado por Sebastian Madgwick. El algoritmo usa los cuaterniones para representar la orientación y se basa en el uso de las medidas del acelerómetro y el magnetómetro para corregir los errores introducidos por el giroscopio.

#include <Arduino_LSM6DS3.h>
#include <MadgwickAHRS.h>


// initialize a Madgwick filter:
Madgwick filter;
// sensor's sample rate is fixed at 104 Hz:
const float sensorRate = 104.00;

void setup() {
  Serial.begin(9600);
  // attempt to start the IMU:
  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU");
    // stop here if you can't access the IMU:
    while (true);
  }
  // start the filter to run at the sample rate:
  filter.begin(sensorRate);
}

void loop() {
  // values for acceleration & rotation:
  float xAcc, yAcc, zAcc;
  float xGyro, yGyro, zGyro;

  // values for orientation:
  float roll, pitch, heading;
  // check if the IMU is ready to read:
  if (IMU.accelerationAvailable() && IMU.gyroscopeAvailable()) {
    // read accelerometer & gyrometer:
    IMU.readAcceleration(xAcc, yAcc, zAcc);
    IMU.readGyroscope(xGyro, yGyro, zGyro);

    // update the filter, which computes orientation:
    filter.updateIMU(xGyro, yGyro, zGyro, xAcc, yAcc, zAcc);

    // print the heading, pitch and roll
    roll = filter.getRoll();
    pitch = filter.getPitch();
    heading = filter.getYaw();

  //Serial.println(xGyro);
    Serial.print("Orientation: ");
    Serial.print(heading);
    Serial.print("; ");
    Serial.print(pitch);
    Serial.print("; ");
    Serial.println(roll);
  }
}

Para más información consultar en la web de Arduino.

Más información

Si necesitas que te ayudemos con Arduino de manera profesional contacta con nosotros sin compromiso. También nos puedes ayudar descargando nuestra APP de Servicios Profesionales, freelancers y autónomos.

Leave a Comment

Your email address will not be published. Required fields are marked *

Información básica sobre protección de datos
Responsable Francisco de Asís Benavente Delgado +info...
Finalidad Gestionar y moderar tus comentarios. +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios No se cederán datos a terceros, salvo obligación legal +info...
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.