yuwangwangyu 发表于 2016-5-30 15:33:43

MPU6050姿态解算 后YAW轴角度不停向一个方向漂怎么处理

不使用电子罗盘 用附件中的姿态解算函数算出来的YAW角度一直向一个方向漂这个问题有谁遇到过

helislayer 发表于 2016-5-30 18:00:39

你的陀螺仪 Z 方向没有校准零漂吧。

jaky80000 发表于 2016-5-31 12:41:10

请问你的问题解决了吗?

yuwangwangyu 发表于 2016-5-31 17:04:23

没有解决啊有没人帮帮我

helislayer 发表于 2016-5-31 19:12:49

你吧6050采样的原始数据画个图贴出来看看。
我猜就是你的零点矫正问题。
X,Y 方向因为有重力可以融合矫正,
Z 方向没有传感器可以矫正。
你本来考角速度信息就不可能得到没有零漂的 AHRS。
任何角速度的误差经过积分就会累积扩大,Z 方向没有
修正的传感器,有漂移很正常。

当然你修正过零点会好很多。

yuwangwangyu 发表于 2016-6-1 15:27:40

用dmp得到四元数 再算出姿态也在漂

yat 发表于 2016-6-1 15:30:35

YAW需要用地磁或者GPS来修正

linlonghuazbdx 发表于 2016-6-8 11:05:03

兄弟,你的问题解决了没,yaw轴在没有地磁的情况下,都会漂移的。静态漂移的小。动态情况漂移大,我的也是这种情况,还有想请教一个问题,不知你是否遇到yaw实际旋转的角度和解算出来的角度不一致,必要我旋转Z轴实际从0开始旋转90度,但是yaw解算出来的角度只是变化60度左右,你有没遇到这种情况

yuwangwangyu 发表于 2016-6-8 15:42:30

linlonghuazbdx 发表于 2016-6-8 11:05
兄弟,你的问题解决了没,yaw轴在没有地磁的情况下,都会漂移的。静态漂移的小。动态情况漂移大,我的也是 ...

你是做什么产品

guzhen24 发表于 2016-6-8 15:58:21

linlonghuazbdx 发表于 2016-6-8 11:05
兄弟,你的问题解决了没,yaw轴在没有地磁的情况下,都会漂移的。静态漂移的小。动态情况漂移大,我的也是 ...

你的陀螺仪初始化的时候是水平放置还是任意的?是否放置方向会有影响?

linlonghuazbdx 发表于 2016-6-8 16:07:46

guzhen24 发表于 2016-6-8 15:58
你的陀螺仪初始化的时候是水平放置还是任意的?是否放置方向会有影响? ...

你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码是参照匿名的四元数解算,不知道问题出在哪里
以下是我的参照代码

#include<math.h>
#include "stm32f10x.h"
//---------------------------------------------------------------------------------------------------
// 变量定义

#define Kp 2.0f                        // 比例增益支配率收敛到加速度计/磁强计
#define Ki 0.001f                // 积分增益支配率的陀螺仪偏见的衔接
#define halfT 0.001f                // 采样周期的一半

float q0 = 1, q1 = 0, q2 = 0, q3 = 0;          // 四元数的元素,代表估计方向
float exInt = 0, eyInt = 0, ezInt = 0;      // 按比例缩小积分误差

float Yaw,Pitch,Roll;//偏航角,俯仰角,翻滚角


void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)
{
      float norm;
      float vx, vy, vz;
      float ex, ey, ez;

      // 测量正常化
      norm = sqrt(ax*ax + ay*ay + az*az);      
      ax = ax / norm;                   //单位化
      ay = ay / norm;
      az = az / norm;      

      // 估计方向的重力
      vx = 2*(q1*q3 - q0*q2);
      vy = 2*(q0*q1 + q2*q3);
      vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;

      // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和
      ex = (ay*vz - az*vy);
      ey = (az*vx - ax*vz);
      ez = (ax*vy - ay*vx);

      // 积分误差比例积分增益
      exInt = exInt + ex*Ki;
      eyInt = eyInt + ey*Ki;
      ezInt = ezInt + ez*Ki;

      // 调整后的陀螺仪测量
      gx = gx + Kp*ex + exInt;
      gy = gy + Kp*ey + eyInt;
      gz = gz + Kp*ez + ezInt;

      // 整合四元数率和正常化
      q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
      q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
      q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
      q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;

      // 正常化四元
      norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
      q0 = q0 / norm;
      q1 = q1 / norm;
      q2 = q2 / norm;
      q3 = q3 / norm;

      Pitch= asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch ,转换为度数
      Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // rollv
      Yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;               
}

wiser803 发表于 2016-6-8 16:48:35

lz 可以先对测得的数据进行统计处理,得到漂移的常值项和随机项。分析一下,是常值项为主变化量,还是随机项为主变化量。若主变化量为常值项,可以用加热入相反角速率方法补偿掉。若主变化量是随机项,一般是陀螺性能较差导致的,没有什么方法可以补偿。

helislayer 发表于 2016-6-8 19:36:34

linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

代码我还没有看,你如果正反方向转都是差那么多度吗?
如果一个多些一个小些那就是零点漂移。因为这个误差
会累积所以产生客观的影响也正常。

linlonghuazbdx 发表于 2016-6-8 19:41:49

helislayer 发表于 2016-6-8 19:36
代码我还没有看,你如果正反方向转都是差那么多度吗?
如果一个多些一个小些那就是零点漂移。因为这个误 ...

哈,兄弟帮忙看一下,漂移是存在,但是我这个还有一个主要问题就是不管我水平放置还是垂直放置,人为转动传感器的时候,yaw角解算出来的角度和实际转动的角度不一致,偏差非常大!就比如水平放置的时候我手动转动传感器偏航方向90度左右,不管我正转还是反转。yaw解算的角度的转动的变化最多只有60度

linlonghuazbdx 发表于 2016-6-8 19:45:08

yuwangwangyu 发表于 2016-6-8 15:42
你是做什么产品

自己动手研究一下云台

aduecho 发表于 2016-6-8 22:04:45

换个陀螺仪试试,你的陀螺仪设置对不?输出速率,量程选择之类的

guzhen24 发表于 2016-6-12 22:21:41

linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

之前用AlienTek的开发板,上面有MPU6500的例程,用下来没什么问题,当时没发现有漂移

之后淘宝上买了mpu9250的模块连其他的板子,程序根据9250改成了SPI的通信模式,也发现有yaw漂移的问题,尤其是当角度90°或者180°的时候。
大多数时间初始化一开始就开始漂了。

但我发现有些时候会很正常。感觉是芯片初始化的问题,试了很多次,代码也改过还是有问题,但是大概10次里面会有一次会是正常的,很奇怪。
后来怀疑可能是买的模块有问题,想找个时间买个新的来试试。

wkllq1314 发表于 2016-6-13 09:11:25

helislayer 发表于 2016-5-31 19:12
你吧6050采样的原始数据画个图贴出来看看。
我猜就是你的零点矫正问题。
X,Y 方向因为有重力可以融合矫正 ...

GPS速度不是可以纠正yaw吗?

helislayer 发表于 2016-6-13 12:29:48

wkllq1314 发表于 2016-6-13 09:11
GPS速度不是可以纠正yaw吗?

楼主没有说有 GPS。就是 MPU6050。
这个真的要看原始数据,光看这个程序没有用的。
你要先看出原始数据有没有yaw 漂移然后才看
后面。

你也可以模拟一个 MPU6050 数据输出给你的
姿态运算验证一下输出合理不。

wiser803 发表于 2016-6-13 13:44:25

linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

是否陀螺比例系数代错了?

linlonghuazbdx 发表于 2016-6-13 15:14:29

wiser803 发表于 2016-6-13 13:44
是否陀螺比例系数代错了?

搞清楚了,是积分时间出错导致的,谢啦

helislayer 发表于 2016-6-13 19:49:32

linlonghuazbdx 发表于 2016-6-13 15:14
搞清楚了,是积分时间出错导致的,谢啦

搞清楚就好,现在多少秒钟漂移一度?

cloud995 发表于 2016-7-20 14:05:40

没纠正,主要是陀螺的bias影响,会造成积分飘逸的

guzhen24 发表于 2016-7-22 08:34:09

linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

不知道你的问题解决了没有,看你的代码是自己采集了角加速度来计算四元数的,
我之前看到的例程里是通过这个芯片内部的dmp来进行采集和计算,直接输出四元数
因为这个计算的误差受采样频率影响挺大的,不知道你程序的采样频率是否能达到要求

加油——蜗牛 发表于 2017-10-5 15:49:32

linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

将Gyro_Gr的值乘以1.5就可以是90度了

加油——蜗牛 发表于 2017-10-5 15:50:39

楼主啊,你有没有解决yaw的零飘啊,我加入了磁力计还不如不加啊
页: [1]
查看完整版本: MPU6050姿态解算 后YAW轴角度不停向一个方向漂怎么处理