搜索
bottom↓
回复: 22

MPU6050的DMP坐标初始化问题

[复制链接]

出0入0汤圆

发表于 2014-5-9 16:50:47 | 显示全部楼层 |阅读模式
为什么我把板子倾斜一个大一点的角度来运行程序初始化后,用DMP输出的四元素计算出的三个导航角就会变得不准呢?难道一定要把板子水平放好来初始?

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-5-11 20:09:14 | 显示全部楼层
自己顶起!!

出0入0汤圆

发表于 2014-5-11 20:45:39 | 显示全部楼层
这是个惯性导航,没有绝对平面,每次初始化后,就默认当前状态位水平面,及时你认为它不是水平面。这个也可以把参数固定,让它每次初始化后都确定一个固定的水平面。

出0入0汤圆

 楼主| 发表于 2014-5-12 14:42:23 | 显示全部楼层
study_hardware 发表于 2014-5-11 20:45
这是个惯性导航,没有绝对平面,每次初始化后,就默认当前状态位水平面,及时你认为它不是水平面。这个也可 ...

这正是我想实现的,但如何设定参数才能让他每次都以一个固定的坐标系来初始化呢?就是说要修改DMP的哪部分程序呢?

出0入0汤圆

发表于 2014-5-15 12:12:04 | 显示全部楼层
a44416434 发表于 2014-5-12 14:42
这正是我想实现的,但如何设定参数才能让他每次都以一个固定的坐标系来初始化呢?就是说要修改DMP的哪部 ...

我也在纠结这个问题呢

出0入0汤圆

 楼主| 发表于 2014-5-21 10:25:24 | 显示全部楼层
study_hardware 发表于 2014-5-15 12:12
我也在纠结这个问题呢

经过这几天的研究,DMP确实不能以任意空间角度来进行初始化,但是可以修改部分代码,让它可以以水平(重力与z轴重合),侧放(重力与x轴重合),竖直放(重力与y轴重合)来进行初始化。

出0入0汤圆

发表于 2014-5-21 10:37:50 | 显示全部楼层
初始化一次就行了,然后把校准之后的值保存起来。下次开机直接用

出0入0汤圆

 楼主| 发表于 2014-5-23 08:47:45 | 显示全部楼层
cargle 发表于 2014-5-21 10:37
初始化一次就行了,然后把校准之后的值保存起来。下次开机直接用

请问这样做实际验证过可行么?如果可行那是保存些什么值呢?

出0入0汤圆

 楼主| 发表于 2014-5-23 09:23:22 | 显示全部楼层
cargle 发表于 2014-5-21 10:37
初始化一次就行了,然后把校准之后的值保存起来。下次开机直接用

将自检测的值保存起来这方法,刚初步验证了下,应该是可行的,而且还能在任意空间角度进行初始化。

出0入0汤圆

发表于 2014-5-23 10:34:54 | 显示全部楼层
mpu_run_self_test(gyro, accel);
理论上将得到的gyro,accel的值保存起来就行

出0入0汤圆

 楼主| 发表于 2014-5-23 11:05:48 | 显示全部楼层
cargle 发表于 2014-5-23 10:34
mpu_run_self_test(gyro, accel);
理论上将得到的gyro,accel的值保存起来就行

想问你一个简单的问题,DMP数据一定要8秒才能稳定吗?有修改稳定时间的方法吗?

出0入0汤圆

发表于 2014-5-23 11:50:46 | 显示全部楼层
这个应该是没有的,就像dmp最高只能是200HZ.

出0入0汤圆

 楼主| 发表于 2014-5-23 12:23:46 | 显示全部楼层
cargle 发表于 2014-5-23 11:50
这个应该是没有的,就像dmp最高只能是200HZ.

恩,说到这个频率,那么dmp_set_fifo_rate和mpu_set_sample_rate这两个频率有什么分别呢?你所说的200hz应该是设置dmp_set_fifo_rate这个?

出0入0汤圆

发表于 2014-5-23 12:34:30 | 显示全部楼层
a44416434 发表于 2014-5-23 11:05
想问你一个简单的问题,DMP数据一定要8秒才能稳定吗?有修改稳定时间的方法吗? ...

你保存的值读出来补偿,就不需要8秒了

出0入0汤圆

发表于 2014-5-27 11:06:59 | 显示全部楼层
a44416434 发表于 2014-5-21 10:25
经过这几天的研究,DMP确实不能以任意空间角度来进行初始化,但是可以修改部分代码,让它可以以水平(重 ...

楼主是如何修改代码使重力在其它轴重合初始化的

出0入0汤圆

 楼主| 发表于 2014-6-3 08:59:52 | 显示全部楼层
chuanming 发表于 2014-5-27 11:06
楼主是如何修改代码使重力在其它轴重合初始化的

你好,首先我不是楼主哦,然后呢,不好意思最近少上论坛,这么久才回复你,最后呢,你可以通过修改mpu_run_self_test函数下的get_st_biases函数里的最后一个if语句,如下:
   
if (accel[1] > 0L)             //数组2修改为1 由z轴水平初始变为y轴水平初始
        accel[1] -= 65536L;
    else
        accel[1] += 65536L;       //

只要把accel[1]数据中的标号修改成你想要的方向就好了,0是x轴,1是y轴,2是z轴,DMP默认程序写的是accel[2],所以只能通过将芯片水平放置让z轴和G重合才能让mpu_run_self_test函数自检成功。

出0入0汤圆

发表于 2014-6-3 17:47:06 | 显示全部楼层
这个DMP功能的特点,把初始化默认为是水平,然后进行传感器校正。

出0入0汤圆

发表于 2014-6-5 22:22:08 | 显示全部楼层
a44416434 发表于 2014-6-3 08:59
你好,首先我不是楼主哦,然后呢,不好意思最近少上论坛,这么久才回复你,最后呢,你可以通过修改mpu_ru ...

解释非常好,太感谢了,正好用上,之前可能是轴方向改变了,垂直放置初始化后8秒过程中,角度漂的很厉害,然后才慢慢的回到零点,不知道是不是这个原因,有空验证一下

出0入0汤圆

发表于 2014-7-5 16:35:53 | 显示全部楼层
a44416434 发表于 2014-6-3 08:59
你好,首先我不是楼主哦,然后呢,不好意思最近少上论坛,这么久才回复你,最后呢,你可以通过修改mpu_ru ...

非常感谢,你的回答让我解决了不少麻烦!

出0入0汤圆

发表于 2015-5-7 23:05:00 | 显示全部楼层
太好了正是我需要的,我修改后可以换轴了~~以及保存初值的方法真是太好了

出0入0汤圆

发表于 2015-5-12 13:39:28 | 显示全部楼层
asha 发表于 2014-6-3 17:47
这个DMP功能的特点,把初始化默认为是水平,然后进行传感器校正。

这个由办法矫正么?

出0入0汤圆

发表于 2015-5-12 13:41:34 | 显示全部楼层
cargle 发表于 2014-5-23 10:34
mpu_run_self_test(gyro, accel);
理论上将得到的gyro,accel的值保存起来就行

这个怎么保存纠正呀  求指导

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-15 19:02

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

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