amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 1864|回复: 25

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

[复制链接]
发表于 2016-5-30 15:33:43 | 显示全部楼层 |阅读模式
不使用电子罗盘 用附件中的姿态解算函数算出来的YAW角度一直向一个方向漂这个问题有谁遇到过

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2016-5-30 18:00:39 | 显示全部楼层
你的陀螺仪 Z 方向没有校准零漂吧。
发表于 2016-5-31 12:41:10 | 显示全部楼层
请问你的问题解决了吗?
 楼主| 发表于 2016-5-31 17:04:23 | 显示全部楼层
没有解决啊有没人帮帮我
发表于 2016-5-31 19:12:49 | 显示全部楼层
你吧6050采样的原始数据画个图贴出来看看。
我猜就是你的零点矫正问题。
X,Y 方向因为有重力可以融合矫正,
Z 方向没有传感器可以矫正。
你本来考角速度信息就不可能得到没有零漂的 AHRS。
任何角速度的误差经过积分就会累积扩大,Z 方向没有
修正的传感器,有漂移很正常。

当然你修正过零点会好很多。
 楼主| 发表于 2016-6-1 15:27:40 | 显示全部楼层
用dmp得到四元数 再算出姿态也在漂
发表于 2016-6-1 15:30:35 | 显示全部楼层
YAW需要用地磁或者GPS来修正
发表于 2016-6-8 11:05:03 | 显示全部楼层
兄弟,你的问题解决了没,yaw轴在没有地磁的情况下,都会漂移的。静态漂移的小。动态情况漂移大,我的也是这种情况,还有想请教一个问题,不知你是否遇到yaw实际旋转的角度和解算出来的角度不一致,必要我旋转Z轴实际从0开始旋转90度,但是yaw解算出来的角度只是变化60度左右,你有没遇到这种情况
 楼主| 发表于 2016-6-8 15:42:30 | 显示全部楼层
linlonghuazbdx 发表于 2016-6-8 11:05
兄弟,你的问题解决了没,yaw轴在没有地磁的情况下,都会漂移的。静态漂移的小。动态情况漂移大,我的也是 ...

你是做什么产品
发表于 2016-6-8 15:58:21 来自手机 | 显示全部楼层
linlonghuazbdx 发表于 2016-6-8 11:05
兄弟,你的问题解决了没,yaw轴在没有地磁的情况下,都会漂移的。静态漂移的小。动态情况漂移大,我的也是 ...

你的陀螺仪初始化的时候是水平放置还是任意的?是否放置方向会有影响?
发表于 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;               
}
发表于 2016-6-8 16:48:35 来自手机 | 显示全部楼层
lz 可以先对测得的数据进行统计处理,得到漂移的常值项和随机项。分析一下,是常值项为主变化量,还是随机项为主变化量。若主变化量为常值项,可以用加热入相反角速率方法补偿掉。若主变化量是随机项,一般是陀螺性能较差导致的,没有什么方法可以补偿。
发表于 2016-6-8 19:36:34 | 显示全部楼层
linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

代码我还没有看,你如果正反方向转都是差那么多度吗?
如果一个多些一个小些那就是零点漂移。因为这个误差
会累积所以产生客观的影响也正常。
发表于 2016-6-8 19:41:49 | 显示全部楼层
helislayer 发表于 2016-6-8 19:36
代码我还没有看,你如果正反方向转都是差那么多度吗?
如果一个多些一个小些那就是零点漂移。因为这个误 ...

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

自己动手研究一下云台
发表于 2016-6-8 22:04:45 来自手机 | 显示全部楼层
换个陀螺仪试试,你的陀螺仪设置对不?输出速率,量程选择之类的
发表于 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次里面会有一次会是正常的,很奇怪。
后来怀疑可能是买的模块有问题,想找个时间买个新的来试试。
发表于 2016-6-13 09:11:25 | 显示全部楼层
helislayer 发表于 2016-5-31 19:12
你吧6050采样的原始数据画个图贴出来看看。
我猜就是你的零点矫正问题。
X,Y 方向因为有重力可以融合矫正 ...

GPS速度不是可以纠正yaw吗?
发表于 2016-6-13 12:29:48 | 显示全部楼层
wkllq1314 发表于 2016-6-13 09:11
GPS速度不是可以纠正yaw吗?

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

你也可以模拟一个 MPU6050 数据输出给你的
姿态运算验证一下输出合理不。
发表于 2016-6-13 13:44:25 来自手机 | 显示全部楼层
linlonghuazbdx 发表于 2016-6-8 16:07
你好 我的传感器水平放置,然后手动旋转Z轴90度,然后观察解算的yaw角只有差不多变化只有60度左右,代码 ...

是否陀螺比例系数代错了?
发表于 2016-6-13 15:14:29 | 显示全部楼层
wiser803 发表于 2016-6-13 13:44
是否陀螺比例系数代错了?

搞清楚了,是积分时间出错导致的,谢啦
发表于 2016-6-13 19:49:32 | 显示全部楼层
linlonghuazbdx 发表于 2016-6-13 15:14
搞清楚了,是积分时间出错导致的,谢啦

搞清楚就好,现在多少秒钟漂移一度?
发表于 2016-7-20 14:05:40 | 显示全部楼层
没纠正,主要是陀螺的bias影响,会造成积分飘逸的
发表于 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的零飘啊,我加入了磁力计还不如不加啊
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 粤ICP备09047143号 )

GMT+8, 2017-10-24 14:00

阿莫电子论坛, 原"中国电子开发网"

© 2004-2016 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表