amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 71930|回复: 356

终于不用纠结姿态融合的问题了,MPU6050直接内置融合引擎

  [复制链接]
发表于 2013-4-10 23:05:19 | 显示全部楼层 |阅读模式
官方的运动库,必须通过这个才能启用MPU6050的DMP引擎(数据手册里完全不提这个东西,必须在官网注册登录后才有·····)
里面的代码是基于msp430的,不过很容易就能移植到stm32上面。
编译一下,把报错的地方改掉就OK。

唯一需要的就是得提供i2c读写接口,然后在
#define i2c_write(a, b, c, d)   !I2C_BufferWrite(d, c, b, a)
这里替换

剩下的就是照着范例文件依次调用函数
主要是这几个
  1. mpu_init();
  2. mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL);
  3. mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);mpu_set_sample_rate(DEFAULT_MPU_HZ);
  4. dmp_load_motion_driver_firmware();
  5. dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));
  6. dmp_enable_feature(hal.dmp_features);
  7. dmp_set_fifo_rate(DEFAULT_MPU_HZ);                       
  8. run_self_test();
  9. mpu_set_dmp_state(1);
复制代码
其中dmp_load_motion_driver_firmware()这个很重要,失败的话就没法开启DMP
run_self_test();是自检,用来消除漂移的

初始化完成后在死循环里调用dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more);来读取FIFO
(sensors & INV_WXYZ_QUAT)为真就说明读到四元数,默认是long,得转换成float后除以 1073741824.0f,然后就能使用了,顺序是wxyz

http://player.youku.com/player.php/sid/XNTQwOTczNDE2/v.swf

本帖子中包含更多资源

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

x
发表于 2013-4-10 23:18:47 | 显示全部楼层
这么好,上位机软件去那里要的?
发表于 2013-4-10 23:24:25 来自手机 | 显示全部楼层
这个资料非常棒。
发表于 2013-4-10 23:45:17 | 显示全部楼层
靠,我说没有任何资料呢呢,终于等到mpu6050的内部隐藏大招了!!
发表于 2013-4-11 00:08:07 来自手机 | 显示全部楼层
获取的是什么数据?
发表于 2013-4-11 00:19:10 来自手机 | 显示全部楼层
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶楼主!!!
发表于 2013-4-11 00:49:49 来自手机 | 显示全部楼层
wangjt1988 发表于 2013-4-11 00:19
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

有学长说普通的操作方式读取的6050数据是经过“处理”的,不知道“处理了什么?”
发表于 2013-4-11 08:03:06 来自手机 | 显示全部楼层
lxl_lw 发表于 2013-4-11 00:49
有学长说普通的操作方式读取的6050数据是经过“处理”的,不知道“处理了什么?” ...

读传感器数据  就经过了ad处理,还有可能经过了滤波处理   看你怎么设置了   读dmp数据就更经过处理了……
发表于 2013-4-11 10:36:28 | 显示全部楼层
that will be great.
发表于 2013-4-11 11:12:32 | 显示全部楼层
回去试试看。
发表于 2013-4-11 11:17:19 | 显示全部楼层
牛叉啊!隐藏了这么好的东东~!
发表于 2013-4-11 12:55:01 | 显示全部楼层
这个资料真的不错啊
发表于 2013-4-11 13:43:41 | 显示全部楼层
上位机哪找的?
 楼主| 发表于 2013-4-11 15:36:10 | 显示全部楼层
wangjt1988 发表于 2013-4-11 00:19
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

那个资料我看过,应该也是某个版本的官方库移植的
发表于 2013-4-11 16:02:57 | 显示全部楼层
哇塞 果然不错  研究研究                                                                                                            
发表于 2013-4-11 16:11:13 | 显示全部楼层
学习啊,,
发表于 2013-4-11 17:40:52 | 显示全部楼层
收藏!!!!
 楼主| 发表于 2013-4-12 14:22:23 | 显示全部楼层
Name_006 发表于 2013-4-11 16:02
哇塞 果然不错  研究研究                                                                              ...


没短消息权限,我就在这说吧
移植时注意MPU6050的i2c的地址(st.hw->addr),有0x68和0x69这2种,如果是网上的某个stm32模拟i2c接口,地址还得左移一位,就是0xD0和0xD2
发表于 2013-4-12 14:35:13 | 显示全部楼层
lotsbiss 发表于 2013-4-12 14:22
没短消息权限,我就在这说吧
移植时注意MPU6050的i2c的地址(st.hw->addr),有0x68和0x69这2种,如果是网 ...

恩 这都没问题 前面的初始化 都完成了  读写 前面的业没什么错误  基本驱动都是用了好久的    但就是 写入memory 的那块  我试了 1字节1字节写 能写进去 读出来也对  而且 其他也return 0
但是最后 fifo没数据  就是16字节 16字节写  写入的跟读出的不一致 导致校验那一步return 2 ,,,。。。。。
 楼主| 发表于 2013-4-12 14:48:15 | 显示全部楼层
Name_006 发表于 2013-4-12 14:35
恩 这都没问题 前面的初始化 都完成了  读写 前面的业没什么错误  基本驱动都是用了好久的    但就是 写 ...

想起来了,struct gyro_reg_s 里得删掉
    unsigned char accel_cfg2;
    unsigned char lp_accel_odr;
    unsigned char accel_intel;
否则后面赋值时地址可能会错位
发表于 2013-4-12 18:40:27 来自手机 | 显示全部楼层
好资料,研究下
发表于 2013-4-13 22:05:59 | 显示全部楼层
怎么用?用的什么编译器?
发表于 2013-4-13 22:48:37 来自手机 | 显示全部楼层
Mark
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端
发表于 2013-4-13 23:59:13 | 显示全部楼层
太深奥,不懂
发表于 2013-4-14 15:06:07 | 显示全部楼层
这个给力啊
发表于 2013-4-15 10:57:46 | 显示全部楼层
终于啊。天上掉肉饽饽了。楼主太给力。顶
发表于 2013-4-15 15:46:40 | 显示全部楼层
楼主上位机也发一个.
发表于 2013-4-18 12:20:18 | 显示全部楼层
不懂,也得顶一个
发表于 2013-4-18 16:11:59 | 显示全部楼层
应该打开哪个文件啊 怎么用~
发表于 2013-4-18 21:52:28 | 显示全部楼层
好资料,研究下,貌似下不了,郁闷。。。
发表于 2013-4-18 22:00:55 | 显示全部楼层
可以下了,是服务器不很稳定,真的是好资料,值得研究,非常感谢楼主分享!
发表于 2013-4-19 16:11:09 | 显示全部楼层
楼主这玩意用什么软件打开啊?加压后不知道怎么办了
发表于 2013-4-19 16:36:33 | 显示全部楼层
楼主搞到什么文档说明没有,一个功能也搞的这么神秘,inv的说明书的确不详细
 楼主| 发表于 2013-4-19 20:12:05 | 显示全部楼层
xukkkkkk 发表于 2013-4-19 16:36
楼主搞到什么文档说明没有,一个功能也搞的这么神秘,inv的说明书的确不详细 ...





文档我就这2个

本帖子中包含更多资源

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

x
发表于 2013-4-19 20:27:42 | 显示全部楼层
先顶一下
发表于 2013-4-19 23:22:34 | 显示全部楼层
谢谢分享。
发表于 2013-4-20 13:54:49 | 显示全部楼层
不错  研究研究
发表于 2013-4-20 14:40:17 | 显示全部楼层
还带隐藏技能的、、、、、、、、、、、
发表于 2013-4-20 22:20:19 | 显示全部楼层
MAKE收藏
发表于 2013-4-21 00:46:08 | 显示全部楼层
mark啦   楼主好人啊
发表于 2013-4-21 05:58:51 | 显示全部楼层
请问这一部分代码怎么处理的,为什么总是error:expected an expression

本帖子中包含更多资源

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

x
发表于 2013-4-21 16:25:04 | 显示全部楼层
这里帮我解决了太多问题,感谢阿莫论坛
发表于 2013-4-21 20:24:28 | 显示全部楼层
上位机亮爆了,资料弄来看看先
发表于 2013-4-21 20:57:32 | 显示全部楼层
学习了
发表于 2013-4-21 21:28:15 | 显示全部楼层
最酷的是上位机啊,还请LZ大侠分享啊,不然就是有数据也不能搞这么好啊
发表于 2013-4-22 12:51:03 | 显示全部楼层
谢谢分享
发表于 2013-4-23 09:51:01 | 显示全部楼层
wangjt1988 发表于 2013-4-11 00:19
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

你有那个移植STM32的程序么,可以分享下啊!
发表于 2013-4-23 09:54:16 | 显示全部楼层
Name_006 发表于 2013-4-12 14:35
恩 这都没问题 前面的初始化 都完成了  读写 前面的业没什么错误  基本驱动都是用了好久的    但就是 写 ...

我也是写入之后,也不能够从FIFO中读出数据,请问你是怎么解决的,求帮助
发表于 2013-4-23 10:14:11 | 显示全部楼层
学习,感谢楼主
发表于 2013-4-23 10:22:34 | 显示全部楼层
doudoumf 发表于 2013-4-23 09:54
我也是写入之后,也不能够从FIFO中读出数据,请问你是怎么解决的,求帮助 ...

我还没弄出来  主要是写入 memory 那部分数据写入不成功   驱动是没问题的  不知道怎么写不进去   写进去跟读出来的数据不一样
发表于 2013-4-23 11:59:27 | 显示全部楼层
想移植到STM8上,不知道行不行~
发表于 2013-4-23 14:06:16 | 显示全部楼层
good  good
发表于 2013-4-23 15:04:13 | 显示全部楼层
Name_006 发表于 2013-4-23 10:22
我还没弄出来  主要是写入 memory 那部分数据写入不成功   驱动是没问题的  不知道怎么写不进去   写进去 ...

我移植到LPC2131,写进去了,读出来也对,就是读不出FIFO,╮(╯▽╰)╭
发表于 2013-4-23 17:01:41 | 显示全部楼层
怎么移植到51上啊
发表于 2013-4-24 09:34:00 | 显示全部楼层
到底什么是融合呀
发表于 2013-4-24 09:59:55 | 显示全部楼层
很好,谢谢
发表于 2013-4-24 11:05:42 | 显示全部楼层
好资料,顶起
发表于 2013-4-24 16:03:42 | 显示全部楼层
好好研究下
发表于 2013-4-24 21:58:44 | 显示全部楼层
自己就带融合算法???研究一下看看!
发表于 2013-4-25 01:05:04 | 显示全部楼层
用iic写入DMP固件 这个部分真蛋疼。~有大侠用stm32成功了吗。 ps:这个历程写的真复杂。各种宏定义
发表于 2013-4-25 10:19:16 | 显示全部楼层
Name_006 发表于 2013-4-23 10:22
我还没弄出来  主要是写入 memory 那部分数据写入不成功   驱动是没问题的  不知道怎么写不进去   写进去 ...

我也是FIFO没有数据,求大神指点呀!
发表于 2013-4-25 10:58:37 | 显示全部楼层
MARK 不错
发表于 2013-4-25 12:26:46 | 显示全部楼层
这个资料实在是太棒了,谢谢楼主
发表于 2013-4-25 14:53:48 | 显示全部楼层
qwe2231695 发表于 2013-4-25 01:05
用iic写入DMP固件 这个部分真蛋疼。~有大侠用stm32成功了吗。 ps:这个历程写的真复杂。各种宏定义 ...

兄弟,我也遇到了 ,正在痛苦中..
发表于 2013-4-25 15:00:03 | 显示全部楼层
真的很难看的懂,跟别说移植了。
发表于 2013-4-27 10:45:22 | 显示全部楼层
楼主,你那个程序适用于stc89c52吗?
发表于 2013-4-27 15:22:13 | 显示全部楼层
i love you
发表于 2013-4-28 19:21:46 | 显示全部楼层
LZ能把上位机分享一下么- -
发表于 2013-4-29 06:49:53 | 显示全部楼层
好东西当然要收藏着嘿嘿。
发表于 2013-4-29 08:46:34 | 显示全部楼层
姿态融合,有点深奥
发表于 2013-4-29 09:19:57 | 显示全部楼层
顶,上位机不错
发表于 2013-5-6 21:58:11 | 显示全部楼层
为什么这么好的功能不写进datasheet里面呢?
发表于 2013-5-6 22:23:25 | 显示全部楼层
楼主好人,我来看看!!
发表于 2013-5-6 23:03:34 | 显示全部楼层
请问这个软件用到IRQpin脚吗
发表于 2013-5-6 23:04:09 | 显示全部楼层
好像跟github上的DMP很像的
发表于 2013-5-7 17:55:27 | 显示全部楼层
楼主能把移植的stm32文件发布一下学习学习么?
发表于 2013-5-7 22:43:41 | 显示全部楼层
mark                        
发表于 2013-5-7 23:35:04 | 显示全部楼层
heh 如果本来就是用的MSp430 那不很爽啊。。。。不过习惯了用IAR,这CCS软件编写的,还是压力山大,不过谢谢了,先去研究去了
发表于 2013-5-8 09:21:32 | 显示全部楼层
wangjt1988 发表于 2013-4-11 00:19
楼主太给力了!   还有一个资料,gitlab上有大神上传过一个基于arduino的dmp,测试过,也可以用在stm32上
顶 ...

gitlab上有大神上传过一个基于arduino的dmp……  大神,求网址,我玩的是Arduino
发表于 2013-5-8 13:16:56 | 显示全部楼层
经过dmp后的数据,我们得到了哪些值啊 是不是和四元数算法最后得出的值是一样啊????
发表于 2013-5-9 16:44:52 | 显示全部楼层
楼主,能不能移植到飞思卡尔单片机上啊,XSDG128,官网地址没查到啊,给发个链接吧,看看去
发表于 2013-5-12 23:58:57 | 显示全部楼层
非常好的资料,谢谢LZ。很难找到官方的motion app。移植了来自于Arduino中的DMP,但是有问题,而且移植起来累死了。
发表于 2013-5-13 09:09:22 | 显示全部楼层
好东西啊,果断顶!!!
发表于 2013-5-15 11:07:03 | 显示全部楼层
帅呆了        
发表于 2013-5-15 16:21:37 | 显示全部楼层
kuailesyj 发表于 2013-4-21 05:58
请问这一部分代码怎么处理的,为什么总是error:expected an expression

我的也是这个问题,不知道什么原因。
发表于 2013-5-16 09:34:04 | 显示全部楼层
lotsbiss 发表于 2013-4-19 20:12
文档我就这2个


请问这个函数是什么意思?

reg_int_cb(void (*cb)(void), unsigned char port, unsigned char pin)
发表于 2013-5-16 10:02:13 | 显示全部楼层
先下载来看看,感谢楼主咯
发表于 2013-5-16 10:18:37 | 显示全部楼层
本帖最后由 mcu1234mcu 于 2013-5-16 15:36 编辑

已解决           
发表于 2013-5-16 15:35:48 | 显示全部楼层
版主你们用的开发环境是MDK还是IAR,哪个版本的?我移植到IAR 中这个函数int mpu_init(struct int_param_s *int_param)会出现问题,还有就是Error while running C/C++ Compiler 这个问题。
移植到MDK中
static struct gyro_state_s st = {
    &reg,//.reg = &reg,
    &hw,//.hw = &hw,
    &test//.test = &test
};
这个会出现问题,请问楼主应该怎么修改,谢谢了。
发表于 2013-5-16 17:39:59 | 显示全部楼层
正需要这个!谢谢分享
发表于 2013-5-16 23:12:28 | 显示全部楼层
CrystalShell 发表于 2013-5-8 09:21
gitlab上有大神上传过一个基于arduino的dmp……  大神,求网址,我玩的是Arduino ...

应该是这个吧
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
发表于 2013-5-17 10:57:36 | 显示全部楼层
kuailesyj 发表于 2013-4-21 05:58
请问这一部分代码怎么处理的,为什么总是error:expected an expression

直接改为
    0x75,//.who_am_i       = 0x75,
    0x19,//.rate_div       = 0x19,
    0x1A,//.lpf            = 0x1A,
这个形式就可以了,gun c和标准C差别比较大。
发表于 2013-5-17 11:00:08 | 显示全部楼层
mcu1234mcu 发表于 2013-5-15 16:21
我的也是这个问题,不知道什么原因。

已解决        
发表于 2013-5-17 11:00:31 | 显示全部楼层
mcu1234mcu 发表于 2013-5-16 15:35
版主你们用的开发环境是MDK还是IAR,哪个版本的?我移植到IAR 中这个函数int mpu_init(struct int_param_s  ...

已解决   
发表于 2013-5-17 15:43:45 | 显示全部楼层
mcu1234mcu 发表于 2013-5-17 11:00
已解决

亲,你是怎么解决这个问题的?可不可以发程序上来看看?万分感谢
发表于 2013-5-18 20:44:43 | 显示全部楼层
mark~~~~
发表于 2013-5-19 03:36:09 | 显示全部楼层
天哪!!!!
发表于 2013-5-19 16:36:47 | 显示全部楼层
Name_006 发表于 2013-4-23 10:22
我还没弄出来  主要是写入 memory 那部分数据写入不成功   驱动是没问题的  不知道怎么写不进去   写进去 ...

我的也是,程序初始化到
result =
         dmp_load_motion_driver_firmware();
就出错了。就如看,把错误信息发回来,发现是写到mem的内容和读出来的不一样。
if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware[ii]))
      return -2;
if (mpu_read_mem(ii, this_write, cur))
     return -3;

这里一个写一个读,但是执行 if (memcmp(firmware+ii, cur, this_write))时就发现写入和读出不一样
写入第一个16Bytes和dmp_memory定义一致
00 10 00 00 70 00 00 00 00 24 00 00 00 02 00 03 00 00
但是读出的是
00 10 00 00 00 00 00 00 68 00 00 00 00 00 00 00 00 00
已经调了两天了,还是解决不了问题。
用的i2c是内部的,以前不用DMP的时候都没有问题,用来做别的大项目也没有发现问题。我想应该不会i2c的问题。
发表于 2013-5-19 16:39:17 | 显示全部楼层
楼主大哥,可否帮忙解决一下问题
程序初始化到
result =
         dmp_load_motion_driver_firmware();
就出错了(返回-2)。进去看,把错误信息发回来,发现是写到mem的内容和读出来的不一样。
if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware[ii]))
      return -2; //我改的,上面的-2是原本的
if (mpu_read_mem(ii, this_write, cur))
     return -3;//我改的

这里一个写一个读,但是执行 if (memcmp(firmware+ii, cur, this_write))时就发现写入和读出不一样
写入第一个16Bytes和dmp_memory定义一致
00 10 00 00 70 00 00 00 00 24 00 00 00 02 00 03 00 00
但是读出的是
00 10 00 00 00 00 00 00 68 00 00 00 00 00 00 00 00 00
已经调了两天了,还是解决不了问题。
用的i2c是内部的,以前不用DMP的时候都没有问题,用来做别的大项目也没有发现问题。我想应该不会i2c的问题。
 楼主| 发表于 2013-5-19 16:47:58 | 显示全部楼层
gadwgdsk77gg 发表于 2013-5-19 16:39
楼主大哥,可否帮忙解决一下问题
程序初始化到
result =

这个真不清楚···
我用的时候没有在这卡过
都是直接就过去了··
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 粤ICP备09047143号 )

GMT+8, 2017-9-25 17:51

阿莫电子论坛, 原"中国电子开发网"

© 2004-2016 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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