a44416434 发表于 2014-5-9 16:50:47

MPU6050的DMP坐标初始化问题

为什么我把板子倾斜一个大一点的角度来运行程序初始化后,用DMP输出的四元素计算出的三个导航角就会变得不准呢?难道一定要把板子水平放好来初始?

a44416434 发表于 2014-5-11 20:09:14

自己顶起!!{:cry:}{:cry:}

study_hardware 发表于 2014-5-11 20:45:39

这是个惯性导航,没有绝对平面,每次初始化后,就默认当前状态位水平面,及时你认为它不是水平面。这个也可以把参数固定,让它每次初始化后都确定一个固定的水平面。

a44416434 发表于 2014-5-12 14:42:23

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

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

study_hardware 发表于 2014-5-15 12:12:04

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

我也在纠结这个问题呢

a44416434 发表于 2014-5-21 10:25:24

study_hardware 发表于 2014-5-15 12:12
我也在纠结这个问题呢

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

cargle 发表于 2014-5-21 10:37:50

初始化一次就行了,然后把校准之后的值保存起来。下次开机直接用

a44416434 发表于 2014-5-23 08:47:45

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

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

a44416434 发表于 2014-5-23 09:23:22

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

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

cargle 发表于 2014-5-23 10:34:54

mpu_run_self_test(gyro, accel);
理论上将得到的gyro,accel的值保存起来就行

a44416434 发表于 2014-5-23 11:05:48

cargle 发表于 2014-5-23 10:34
mpu_run_self_test(gyro, accel);
理论上将得到的gyro,accel的值保存起来就行

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

cargle 发表于 2014-5-23 11:50:46

这个应该是没有的,就像dmp最高只能是200HZ.

a44416434 发表于 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这个?

cshp138 发表于 2014-5-23 12:34:30

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

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

chuanming 发表于 2014-5-27 11:06:59

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

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

a44416434 发表于 2014-6-3 08:59:52

chuanming 发表于 2014-5-27 11:06
楼主是如何修改代码使重力在其它轴重合初始化的

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

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

asha 发表于 2014-6-3 17:47:06

这个DMP功能的特点,把初始化默认为是水平,然后进行传感器校正。

chuanming 发表于 2014-6-5 22:22:08

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

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

xyq665513 发表于 2014-7-5 16:35:53

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

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

kakaysy 发表于 2015-5-7 23:05:00

太好了正是我需要的,我修改后可以换轴了~~以及保存初值的方法真是太好了

嘶哑的活该 发表于 2015-5-12 13:39:28

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

这个由办法矫正么?

嘶哑的活该 发表于 2015-5-12 13:41:34

cargle 发表于 2014-5-23 10:34
mpu_run_self_test(gyro, accel);
理论上将得到的gyro,accel的值保存起来就行

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

嘶哑的活该 发表于 2015-5-12 13:43:05

楼主有办法解决么
页: [1]
查看完整版本: MPU6050的DMP坐标初始化问题