让mpu6050始终以水平面为基准面的一个简单方法

我是使用I2Cdev的arduino的mpu6050库实现的。具体就是将mpu6050水平放置,进行校准,然后将校准的偏移量写进代码,并将校准代码注释掉就可以了。
不建议有些文章推荐的保留陀螺仪校准,取消加速度计校准。我尝试了一下,这样每次开机,误差相比我的方法,还是要更大一些。

下面是举个例子:
下面的代码中, mpu6050.CalibrateAccel(6);和 mpu6050.CalibrateGyro(6);是开机后的自动校准程序,校准后,会输出加速度计和陀螺仪的偏移量。被注释掉几行mpu6050.set…offset()是库文件自带的偏移量。第一次校准后,使用下面代码中被注释掉的串口输出代码,就可以看到实际的偏移量,然后用实际偏移量写自己的偏移量语句,并注释掉校准和串口输出代码就可以了。

    // 库文件自设置的初始偏移量(根据你的硬件情况设置)
    //   mpu6050.setXGyroOffset(220);
    //   mpu6050.setYGyroOffset(76);
    //   mpu6050.setZGyroOffset(-85);
    //   mpu6050.setZAccelOffset(1788);

  //根据我自己的设备自检结果修改
    mpu6050.setXAccelOffset(-802);   // X轴加速度计偏移
    mpu6050.setYAccelOffset(-2565);  // Y轴加速度计偏移
    mpu6050.setZAccelOffset(1250);   // Z轴加速度计偏移
    mpu6050.setXGyroOffset(58);      // X轴陀螺仪偏移
    mpu6050.setYGyroOffset(-17);     // Y轴陀螺仪偏移
    mpu6050.setZGyroOffset(-7);      // Z轴陀螺仪偏移
  
  if (devStatus == 0) {
    // 校准传感器。因为已经使用了校准后的值,所以不需要再次校准
    // mpu6050.CalibrateAccel(6);
    // mpu6050.CalibrateGyro(6);
    mpu6050.PrintActiveOffsets();

    // 这段代码仅是手动获取校准后的偏移量,并输出到串口。平时注销掉就可以
    // Serial.println(F("Calibration completed. Current offsets:"));
    // int16_t ax_offset = mpu6050.getXAccelOffset();
    // int16_t ay_offset = mpu6050.getYAccelOffset();
    // int16_t az_offset = mpu6050.getZAccelOffset();
    // int16_t gx_offset = mpu6050.getXGyroOffset();
    // int16_t gy_offset = mpu6050.getYGyroOffset();
    // int16_t gz_offset = mpu6050.getZGyroOffset();
    
    // Serial.print(F("Accel offsets: X="));
    // Serial.print(ax_offset);
    // Serial.print(F(", Y="));
    // Serial.print(ay_offset);
    // Serial.print(F(", Z="));
    // Serial.println(az_offset);
    
    // Serial.print(F("Gyro offsets: X="));
    // Serial.print(gx_offset);
    // Serial.print(F(", Y="));
    // Serial.print(gy_offset);
    // Serial.print(F(", Z="));
    // Serial.println(gz_offset);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值