搜索
bottom↓
回复: 18

MPU6050 DMP出来了欧拉角和四元数,都是以初始位置为参考?

[复制链接]

出0入0汤圆

发表于 2014-6-23 15:19:52 | 显示全部楼层 |阅读模式
本帖最后由 zcan 于 2014-6-23 15:24 编辑

今天移植了一下MPU6050的DMP到飞思卡尔M0上,输出的四元数欧拉角什么的都是以初始状态为参照的吗?我斜着放置,再上电的话读出来的数据Pitch Roll Yaw都是0附近的数,我怎么才能得到真实的值呢,真实的位置或是角度值?
怎么才能以地面为参照输出真实情况值?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-6-26 14:47:52 | 显示全部楼层
在自测函数里面改,run_self_test函数在上电的时候会执行,传感器会读取静止时的陀螺仪和加速度值,作为静态误差,输出的时候会减去这个静态误差再输出,所以你斜着放的时候读回来的数据也是0附近

我解决的方法是,把传感器放水平了,读取10次左右陀螺仪和加速度的值,算出平均值,在自测函数里面直接把刚才算出来的陀螺仪和加速度的平均值写入到传感器里面,这样无论你怎么放传感器,输出的时候都会减去这个你最初设定的在水平位置的值(水平位置的静态误差)就可以避免你说的这种的情况。。。。。。仅供参考。。不知道还有没有其他更好的方法。。。

出0入0汤圆

 楼主| 发表于 2014-6-27 10:28:01 | 显示全部楼层
qzrzq 发表于 2014-6-26 14:47
在自测函数里面改,run_self_test函数在上电的时候会执行,传感器会读取静止时的陀螺仪和加速度值,作为静 ...

初始时候的静态误差读取是dmp_set_gyro_bias 与dmp_set_accel_bias 这两个函数里吗?具体修改哪里 你设置的修改多少呀?我程序看的一头雾水的

出0入0汤圆

发表于 2014-6-27 10:42:09 | 显示全部楼层
俯仰和滚转是通过加速度计对准的,是真实的,偏航是以初始角度为0度 但是没有磁阻传感器,零偏稳定性很差,跑得很严重,没有参考价值

出0入0汤圆

发表于 2014-6-27 11:43:24 | 显示全部楼层
隐藏了这么好的东西。。

出0入0汤圆

发表于 2014-6-29 18:42:09 | 显示全部楼层
在selftest函数里面,
mpu_run_self_test(gyro, accel);这个函数会把你初始状态加速度值和陀螺仪值读取回来,放到gyro和accel两个数组里面,作为静态误差,并且返回result,
如果result为3,说明测试自测通过,就会把刚才读回来的gyro和accel数组里面的数据乘以分辨率(由mpu_get_gyro_sens(&sens)获得),最后把结果通过dmp_set_gyro_bias(gyro)函数
和dmp_set_accel_bias(accel)函数写入到dmp。。。
我是在dmp_set_accel_bias(accel)函数前把accel数组里面的值改了。。改成我再水平状态下测到的值

出0入0汤圆

发表于 2014-7-5 16:11:45 | 显示全部楼层
qzrzq 发表于 2014-6-29 18:42
在selftest函数里面,
mpu_run_self_test(gyro, accel);这个函数会把你初始状态加速度值和陀螺仪值读取回来 ...

终于碰到个大神。。。请教一下初始坐标的问题,gyro_orientation[9]这个数组的值,MPU6050水平放的时候,赋值成{-1,0,0,0,-1,0,0,0,-1},这个时候Z轴对应YAW轴,Y轴对应PITCH轴,X轴对应ROLL轴,没问题!我现在需要芯片立起来,Y轴与地面水平,怎么设置这个数组?我试过N种,好像都不行。

出0入0汤圆

发表于 2014-7-8 21:55:30 | 显示全部楼层
xyq665513 发表于 2014-7-5 16:11
终于碰到个大神。。。请教一下初始坐标的问题,gyro_orientation[9]这个数组的值,MPU6050水平放的时候, ...


    MPU默认的安装方向如图a,若要让芯片立起来,则相当于MPU的安装方向绕Y轴旋转了+90度,如图b。此时欧拉转动的轴的顺序发生了改变,应该为"Z轴(俯仰)-->Y轴(滚转)-->X轴(偏航)",而不是默认的XYZ。由inv_orientation_matrix_to_scalar()函数可知,当转动顺序为ZYX时,scalar的值为000_001_010,由inv_row_2_scale()函数反推,既可得到gyro_orientation[]的值为{0 0 1, 0 1 0, 1 0 0}。
    板子不在身边,@xyq665513可以先试一下。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-7-8 21:57:12 | 显示全部楼层
楼主的情况可以直接注释掉run_self_test()函数中的:
    /* 这里注释掉了加速度计校准的部分,防止写入加速度计的偏置,以得到真正的重力方向 */
//    mpu_get_accel_sens(&accel_sens);
//    accel[0] *= accel_sens;
//    accel[1] *= accel_sens;
//    accel[2] *= accel_sens;
//    dmp_set_accel_bias(accel);

出0入0汤圆

 楼主| 发表于 2014-7-8 23:38:24 | 显示全部楼层
claytoncn 发表于 2014-7-8 21:57
楼主的情况可以直接注释掉run_self_test()函数中的:
    /* 这里注释掉了加速度计校准的部分,防止写入加 ...

嗯 明天试试

出0入0汤圆

 楼主| 发表于 2014-7-18 14:15:33 | 显示全部楼层
claytoncn 发表于 2014-7-8 21:57
楼主的情况可以直接注释掉run_self_test()函数中的:
    /* 这里注释掉了加速度计校准的部分,防止写入加 ...

嗯 很好

出0入0汤圆

发表于 2014-10-23 11:26:42 | 显示全部楼层
赞一个!

出0入0汤圆

发表于 2015-3-13 16:47:23 | 显示全部楼层
不错!!!

出0入0汤圆

发表于 2015-3-16 20:05:56 | 显示全部楼层
学习了,用adis16405做的姿态解算都没考虑这个。

出0入0汤圆

发表于 2018-11-23 10:45:13 | 显示全部楼层
mark  正在学习!

出0入0汤圆

发表于 2018-11-23 11:26:23 | 显示全部楼层
收藏一下,感觉会用的上!

出0入0汤圆

发表于 2018-12-26 20:26:53 | 显示全部楼层
学习下,赞一个

出0入0汤圆

发表于 2018-12-31 19:22:08 来自手机 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2020-3-18 09:15:27 | 显示全部楼层
static void run_self_test(void)函数中
执行到
PrintChar("bias has not been modified ......\n");

怎么回事,咋处理啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 06:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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