完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#define Kp 1.0F//比例系数
#define Ki 0.001F//积分系数 #define halfT 0.001F static float q0=0.00,q1=0.00,q2=0.00,q3=0.00;//初始化四元数 float exInt=0,eyInt=0,ezInt=0;//Îó2îμÄ»y·Ö void Posture_update(float gx,float gy,float gz,float ax,float ay,float az) { float norm; float vx,vy,vz; float ex,ey,ez; if(ax*ay*az==0) { printf("accelerometer errorrn"); return; } 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*gz)*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; } 代码附上,现在能正确读取加速度计和陀螺仪数据,并且加速度换算成m/s2,陀螺仪换算成弧度制,上面这个是四元数更新函数,但是执行以后四元数并没有更新,有大神帮忙看看吗 |
|
相关推荐
1个回答
|
|
这个是直接把程序烧录进去就可以吗
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4433 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
305浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
287浏览 2评论
299浏览 2评论
304浏览 2评论
345浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 20:12 , Processed in 0.880993 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号