jytong 发表于 2014-1-11 22:24:01

MPU6050 DMP 树莓派驱动

本帖最后由 jytong 于 2014-1-13 20:09 编辑

经朋友介绍发现了树莓派,觉得挺好玩,想用它做个自平衡小车玩,可又什么都不懂,
只能慢慢学习,比较了一气看大家都介绍 MPU6050 不错,各种搜索发现没有树莓派上的
驱动库,好在自己稍微懂一点编程,就动手从 Embedded MotionDriver 5.1 移植
了一份过来,加了个 C++ 的简单接口,感觉用起来挺方便,原有的 C 接口也保留了。
由于是门外汉,基本概念都是刚学习的还模糊不清,还请各位朋友多多指正。

下一步开始调怎么能平衡,好多都不懂,随时来请教。

这个库我也很会继续维护尽点微薄之力,链接:https://github.com/jytong/mpu6050Pi

随时更新,需要的请去 githu 下载吧,上面的地址。

wing 发表于 2014-1-12 12:41:49

这个要顶下,不知道LZ是否在RPI上实际测试过呢?

jytong 发表于 2014-1-12 13:01:58

呵呵,试了一下。包里面example目录下是个测试,可以直接编译了跑。
cd example
./configure
make
sudo ./dmptest

学慧放弃 发表于 2014-1-12 15:35:42

楼主好厉害,不知道楼主哪里参考的手册用c++写的驱动库和接口,求指教......

jytong 发表于 2014-1-12 17:50:47

本帖最后由 jytong 于 2014-1-12 17:58 编辑

我主要是看的这几个:
http://www.invensense.com/developers/index.php?_r=downloads&ajax=dlfile&file=Embedded_MotionDriver_v5.1.zip
http://invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf
http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf


我这里面主要包括两部分,

1.把 Embedded_MotionDriver_v5.1 移植到树莓派上。

这是它目前的最新版本了,本来以为能直接用,下载下来一看是用在 msp430 上的,我也不知道是个什么玩意,
树莓派上I2C接口是i2c-dev库,所以只能移植了,用 __MOTION_DRIVER_TARGET_RASPBERRY_PI 宏括住的都是
移植的代码,挺繁琐。还有一点点自己测试需要用到的小扩展。

2.增加C++接口。

这部分是完全自己做的。原驱动是用C语言开发的,C语言面向过程,写起复杂的逻辑太累了,而且要使用者实时
处理。而我想搞的系统还要做许多其他的事情,比如测距、语音识别、图像识别、网络交互、控制其他的东西等,
而且还可能有耦合,所以要各个模块都要有足够的自决能力,超出一定的阀值、或者突发事件、或者需要交互,才
要控制模块调度处理。原驱动接口不适用,需要更高级的接口,所以只能自己搞一个,由于目前需求不明确(还都
是瞎想),需要定义尽量宽泛,适用各种需求,所以这个接口做了三个模式:
Push、Pull、Realtime:

Push是驱动模块向注册的回调函数实时推送采集的数据,通过对回调函数的扩展,可以进行一定的统计、自决和
          事件定义、上报。
Pull   是拉模式,主程序根据需要随机时从驱动拉当前数据,得到的一定是当前最新数据。
Realtime 是直接从设备拉数据了,不过必须实时的拉数据,慢了得到的数据可能就不是最新的了,而且太慢了还会
         使设备FIFO溢出,目前还只有测试使用这个模式。

前两种模式都需要驱动有自己的线程,但是数据交换需要互斥锁,高频率的系统锁在树莓派这种小玩意上代价太大
了,何况 MPU6050 只是系统中的一个小模块,所以想到用三个数据槽,既可以避免互斥锁的使用还可以保证数据
的实时性。就是代码中的 class __DataSwap 这个玩意,代码里画了个简单的图说明数据流转流程。

3.里面有个测试,在 example 目录下,是我测试用的,也扔在里面了。

大概测了一下,100Hz采样率接口的消耗大概是 2% CPU,感觉可以接受,目前暂时这样,开始考虑玩其他的东西
了,比如调速什么的,随着需求的增加和发现问题,再不断的维护这个接口。

wing 发表于 2014-1-22 12:26:18

这个非常有参考价值,
忙过这段,趁春节放假要好好研究下

豆包 发表于 2014-4-7 09:41:51

楼主好人,这个帮我大忙了。发现在我的树莓上面跑不起来,mpu_set_lpf failed 设置低通滤失败,楼主帮忙查下什么原因,十分感谢。

Hackerpro 发表于 2015-1-11 12:27:24

好,多谢分享啦
页: [1]
查看完整版本: MPU6050 DMP 树莓派驱动