bygreencn 发表于 2014-11-12 14:13:02

关于AHRSupdate算法的问题

我用了AHRSupdate这个算法来做姿态融合,但是Yaw值在变化之后会回到一个固定值,Pitch和Roll都没有这儿问题,请问有知道解决方案的吗?

tiger2023 发表于 2014-11-12 14:56:40

http://www.amobbs.com/forum.php?mod=viewthread&tid=5532589&highlight=AHRSupdate这个帖子的楼主也是遇到了相同的问题,
看帖子貌似还没解决 期待高手能够解答

cw628 发表于 2014-11-17 19:57:58

YAW轴的磁计和GYRO的符号反了就会出这个问题

bygreencn 发表于 2014-11-17 21:50:32

cw628 发表于 2014-11-17 19:57
YAW轴的磁计和GYRO的符号反了就会出这个问题

检查下的,谢谢

bygreencn 发表于 2014-11-18 09:20:33

cw628 发表于 2014-11-17 19:57
YAW轴的磁计和GYRO的符号反了就会出这个问题

请问你指的Yaw轴磁机和GYRO符号是在哪个部分的?因为我看AHRSupdate的代码里面是用加速度计和磁力计去修正陀螺仪,然后用修正后的GyRo值去更新四元数,如果Yaw的磁力和Gyro符号改了,也会影响到Pitch和Roll的符号呢

zhouzhen 发表于 2014-11-18 11:20:19

不懂帮顶

zhouzhen 发表于 2014-11-18 13:25:02

不懂帮顶

bygreencn 发表于 2014-11-20 09:23:57

顶上,大家帮忙给点指导意见啊

eonk2005 发表于 2014-11-20 15:49:22

不一定都反了,也许z轴没反所以不会影响到俯仰和翻滚,你把x.y.z按前左上为正传入函数试试,各轴正方向和解算函数不一致会这样

eonk2005 发表于 2014-11-20 20:01:51

bygreencn 发表于 2014-11-20 09:23
顶上,大家帮忙给点指导意见啊

我没有回短信的权限,看你读磁力计的代码,看你芯片的DATASHEET,看各轴的正方向定义,简单试你可以把磁力计读数代码的MY值前加符号,MY=-MY,X轴也是一样,如果你不看DATASHEET定义的话就得一个一个试了,比如你的程序是按X轴向北是正数,Y轴向东是正数,而你的解算函数要求Y轴向西是负数,你就需要先把Y轴读书取-Y再进行解算

cw628 发表于 2014-12-11 18:38:41

把陀螺的数据加个负号后,输入到解算函数中,你看看效果就清楚了

Anteater 发表于 2014-12-30 05:19:55

你的罗盘没有校正

jr9910 发表于 2015-1-4 19:51:42

使用他人现成的算法需要弄清楚几个问题:
1、AHRSUpdate中使用的陀螺仪、加速度计、磁强计的三轴是定义为什么方向,算法的输入输出物理意义是什么,测量值的正向及角度的正向都是怎样定义的?
2、姿态是相对于哪个坐标系来说的?东北天,北东地还是北西天等等,所有的角度都是相对于某个具体的坐标系来说的,这个需要弄清楚。
3、算法的输入是否有范围的限制?
通常算法本身没问题的话,都是嫁接中违反了算法的使用条件造成的。但也有可能算法输入有问题,也就是传感器的输出,传感器的输出可以独立的检查。

谎言而上 发表于 2015-1-6 13:54:49

本帖最后由 谎言而上 于 2015-1-6 15:24 编辑

jr9910 发表于 2015-1-4 19:51
使用他人现成的算法需要弄清楚几个问题:
1、AHRSUpdate中使用的陀螺仪、加速度计、磁强计的三轴是定义为什 ...

请问IMUupdate算法中陀螺仪和加速度计的三轴定义方向是什么?
对加速度而言是东北天吗?

jr9910 发表于 2015-1-7 14:14:54

谎言而上 发表于 2015-1-6 13:54
请问IMUupdate算法中陀螺仪和加速度计的三轴定义方向是什么?
对加速度而言是东北天吗? ...

不好意思,没有看过这个代码。只是提示你需要注意这些问题而已。

谎言而上 发表于 2015-1-7 14:50:17

jr9910 发表于 2015-1-7 14:14
不好意思,没有看过这个代码。只是提示你需要注意这些问题而已。

知道了 谢谢提醒,我之前没注意到这些问题。

陶新成 发表于 2017-12-26 15:48:57

我调试也遇到过,后来调整了算法和积分时间就恢复正常了,具体代码改动如下
//ex = (ay*vz - az*vy) ;                                             //???????????????
//ey = (az*vx - ax*vz) ;
//ez = (ax*vy - ay*vx) ;

   ex = (ay*vz - az*vy) + (my*wz - mz*wy);
   ey = (az*vx - ax*vz) + (mz*wx - mx*wz);
   ez = (ax*vy - ay*vx) + (mx*wy - my*wx);

exInt = exInt + ex * Ki*halfT;                              //???????
eyInt = eyInt + ey * Ki*halfT;
ezInt = ezInt + ez * Ki*halfT;

//exInt = exInt + ex * Ki;                              //???????
//eyInt = eyInt + ey * Ki;
//ezInt = ezInt + ez * Ki;

// adjusted gyroscope measurements
gx = gx + Kp*ex + exInt;                                              //???PI???????,???????
gy = gy + Kp*ey + eyInt;
gz = gz + Kp*ez + ezInt;   

我用的东北天坐标系,不知道跟你的是否一致
页: [1]
查看完整版本: 关于AHRSupdate算法的问题