继上次读MPU6050的数据,作个补充,这次是读姿态角输出.内容简单易懂,标注齐全.

2019-07-20 15:58发布

上次上传了个MPU6050的读加速度角速度, 这次上传把加速度,角速度解算为姿态角.(德国人的方法解算,具体麻烦各位自己看数学叉积,四元数等).

代码比较少,干净,都有注释.
依旧是串口输出,因为这里是每一轮循环延迟10ms. 而且精度比较高(用了很多float,对于飞来说我觉得是没问题的,51的我就用的float 一样fly(●'?'●)). 如果你测试觉得不够快又允许一定误差,可以用Int整型.

注意:这里我并没有处理“静止”时的噪音,里面的角速度误差调整量gx,gy,gz并没有赋值. So,各位请自行添加: 常规办法比如开机,读100次x的角速度累加再除以100,得到平均误差赋值给gx即可.


原料: 原子哥的Stm32F4开发板(我是今年9月买的板子).  MPU6050一个,杜邦线4条.电脑一台.hex文件一发.

用法:用原子哥教的FlyMcu 飞一会儿.(下载完). 打开串口即可看到x,y轴的姿态角.


 




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
35条回答
jermy_z
1楼-- · 2019-07-21 23:48
回复【13楼】包子:
---------------------------------
其实是它的C语言基础差  你看看他的代码,逻辑是一个逻辑。。。。。估计他不懂 a=a+2是什么意思
xuyan021
2楼-- · 2019-07-22 02:30
[mw_shl_code=c,true] qa = q0; qb = q1; qc = q2; q0 += (-qb * gx - qc * gy - q3 * gz); q1 += (qa * gx + qc * gz - q3 * gy); q2 += (qa * gy - qb * gz + q3 * gx); q3 += (qa * gz + qb * gy - qc * gx); // Normalise quaternion recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3); q0 *= recipNorm; q1 *= recipNorm; q2 *= recipNorm; q3 *= recipNorm;[/mw_shl_code]

fengshu426
3楼-- · 2019-07-22 05:31
飘过,学习一下
wangsair
4楼-- · 2019-07-22 08:20
xuyan021 发表于 2015-12-14 10:13
回复【9楼】包子:
---------------------------------
你的确定错了,你可以再查下资料。在这里不方便上图 ...

你俩都没有错,只是两种表达方式而已,你改的多此一举,你C语言确实不过关啊!
举例:a*a  a没有更新
          a=a+1 a有更新,a=原来的a+1
枫之幻00
5楼-- · 2019-07-22 08:43
 精彩回答 2  元偷偷看……
popo139700
6楼-- · 2019-07-22 12:47
 精彩回答 2  元偷偷看……

一周热门 更多>