mpu9250陀螺仪折腾小记

买了个mpu9250开始折腾,找了好多资料,看了好多文章啊,mpu9250的资料不是很多。

使用i2c链接到树莓派的scl , sda 接口vcc给3v引脚,gnd接树莓派gnd就ok。

开始折腾:

要操作mpu必须使用mpu的寄存器实现对参数的设定以及读取,取官方下载资料看了一下,在github上找了一个python代码,运行不了bug太多了,然后精简了一下。

终于能读出数据了,读出来的数据都是6个字节的,后来发现这哥们用python 读取mpu没有做字节合并,重写了一下,后来发现数据都是整数,不管我怎么旋转数字都是正的,看了网上的一片文章说寄存器度出来的是一个无符号整数。

后来想了半天,用手机下了一个陀螺仪app发现会出现负数的情况,只要向相对轴相反方向做运动就会出现负数,于是想了ctypes,强制转换成int这回数据看起来是有正数和负数了,不过在陀螺仪平放着的时候读书优点太大了都达到3000以上了,明显不是,貌似是这个数字需要转换一下才能使用,我找了N多的资料,终于找到有个人mpu6050的代码里,有一个固定的常亮,他使用acc_x乘以这个固定的常数,然后我测试了一下,确实可行,只要将加速计的值乘以16.4就可以得到正确的值!

陀螺仪读书要乘以13.我搜索了半天也没有找到为什么要乘以16.4 ,不找了,如果有人看到这篇文章知道为啥乘以16.4请留言或email给我[email protected]谢谢

使用如下代码需要安装smbus库,在树莓派直接 sudo apt-get install py-smbus就ok了

python代码如下:

import smbusimport sched, timeimport binasciifrom threading import Timer, Thread, Eventfrom struct import *import ctypesfrom math import acos

import sched, timeimport binasciifrom struct import *

i2c = smbus.SMBus(1)addr = 0x68t0 = time.time()

# ====== initial zone ======try:    device_id = i2c.read_byte_data(addr, 0x75)    print "Device ID:" + str(hex(device_id))    print "MPU9250 I2C Connected."    print ""except:    print "Connect failed"    print ""i2c.write_byte_data(0x68, 0x6a, 0x00)time.sleep(0.05);i2c.write_byte_data(0x68, 0x37, 0x02)i2c.write_byte_data(0x0c, 0x0a, 0x16)

# set frequence for acceleratori2c.write_byte_data(0x68, 29, 9)

# enable fifo and dmp# i2c.write_byte_data(0x68 , 106 , 32+64);

# ====== intial done ======

def mpu9250_data_get_and_write():    # global t_a_g

    # keep AKM pointer on continue measuring    i2c.write_byte_data(0x0c, 0x0a, 0x16)    # get MPU9250 smbus block data    # xyz_g_offset = i2c.read_i2c_block_data(addr, 0x13, 6)    xyz_a_out = i2c.read_i2c_block_data(addr, 0x3B, 6)    print("xyz_a_out" + str(list2word(xyz_a_out, calc_accelerator_value)))    # print("xyz_a_out_org#:"+str(xyz_a_out))

    xyz_g_out = i2c.read_i2c_block_data(addr, 0x43, 6)    print("xyz_g_out" + str(list2word(xyz_g_out, calc_gyro_value)))    # xyz_a_offset = i2c.read_i2c_block_data(addr, 0x77, 6)

    # get AK8963 smb#us data (by pass-through way)    xyz_mag = i2c.read_i2c_block_data(0x0c, 0x03, 6)    # print("xyz_mag"+str(list2word(xyz_mag)))    xyz_mag_adj = i2c.read_i2c_block_data(0x0c, 0x10, 3)

def list2word(data_list=[], callback=‘‘):    data = data_list[:]    if not len(data):        return [];

    result = []    for i in range(3):        high_byte = data.pop(0)        low_byte = data.pop(0)        result.append(callback(float(ctypes.c_int16(((high_byte << 8) | low_byte)).value)))

    return result

def calc_accelerator_value(value):    return round(value / 16.4)

def calc_gyro_value(value):    return round(value / 131)

def clear_i2c_and_close_file():    i2c.write_byte_data(addr, 0x6A, 0x07)

# solution 1: while truedef while_true_method():    # max_count = raw_input("Enter how many count you want.")    max_count = 100;    if max_count < 1: max_count = 1000    print "Data Counts: " + str(max_count)

    max_count = int(max_count)    count = 1

    print ""    print "MPU9250 9axis DATA Recording..."    while True:        # if count <= max_count:        mpu9250_data_get_and_write()        count += 1        time.sleep(0.5)        # else:        pass    # break;

while_true_method();
时间: 2024-10-24 19:07:50

mpu9250陀螺仪折腾小记的相关文章

关于自动化部署之docker容器的折腾小记

docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App(叫Payload)装在Container内,通过Linux Container技术的包装将App变成一种标准化的.可移植的.自管理的组件,这种组件可以在你的latop上开发.调试.运行,最终非常方便和一致地运行在production环境下. 具体什么是docker,你们自己找资料吧,应该好理解.   可以说是个运维的利器,可以把

git服务器的建立——Git折腾小记

转自:http://blog.csdn.net/xsl1990/article/details/25486211 如果你能看到一些sshd相关的进程信息,则说明你已经有这个服务了,否则(或者你想更新的话),使用下面的命令安装openssh [plain] view plaincopy sudo apt-get install openssh-server openssh-client 然后,安装git“服务器” [plain] view plaincopy sudo apt-get instal

openwrt wr720N 折腾小记

之前没事的时候把wr720N刷了openwrt. 最近公司没什么事情看到openwrt可以支持U盘挂载实现小型Linux服务器的功能,心动了,就开始折腾了. 一开始刷的是openwrt 15.05 稳定版本,发现剩余空间太小,无法实现挂载U盘等功能. 于是下载了trunck 版本刷进去之后,trunck 版本中不包含luci.由于没有luci 需要使用ssh进行配置. 将路由切断电源,重新接通电源,长按reset按钮等到蓝灯快速闪烁,使用putty进入192.168.1.1 使用passwd 重

MySql折腾小记二:text/blog类型不允许设置默认值,不允许存在两个CURRENT_TIMESTAMP

From: http://www.cnblogs.com/cyq1162/archive/2011/05/17/2049055.html 在 CYQ.Data 数据框架的反向工程中,遇到MySQL的问题又2个,记录下先. 1:对于时间的默认值,为:CURRENT_TIMESTAMP,不允许一个表存在两个日期都设置了:CURRENT_TIMESTAMP 解决的办法: 按理只设一个. 但在反向工程中,若遇到两个或以上的设置,为保证导数据的正常,直接取消日期的默认值. 2:text/blog类型不允许

CentOS 7 折腾小记

一 安装4.1.1内核 1 安装软件 编译安装新内核,依赖于开发环境和开发库 # yum grouplist //查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库: # yum groupinstall "Development Tools" //一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具 # yum install ncurses-devel //你必须这样才能让 make *config 这个指令正确地执行 # yum instal

小记一笔 -微信小程序开发随笔

序言: 今年的01月09号备受关注的微信小程序正式上线了, 众多的互联网企业也相继发布了自家的小程序.趁着最近上班不是特别忙,自己闲来无事也跟着捣鼓捣鼓了一个个人记帐用的小程序:小记一笔.用户可以方便.快捷的将自己平时的开销与收入记录下来,还有各种类型的统计,以便实时的准确掌握自己的财务状况.目前此程序已正式上线,大家可以在微信中搜索"小记一笔"点击使用,下面是其中几张效果截图:      准备工作: 1.要开发微信小程序,首先得有工具,可以先去微信公众平台官网(https://mp.

Beaglebone Black &ndash; 连接 GY-91 MPU9250+BMP280 九轴传感器(1)

最初看到淘宝上面有卖 GY91 MPU9250+BMP280 时候,它写着九轴,是九个轴.地球上原来除了 X Y Z 之外,难道还有四五维空间里面的 6 个轴,看清楚后,原来所谓的九轴,是陀螺仪三轴,加速度三轴,磁感应三轴(指南针),才叫做九轴.MPU9250 是 InvenSense 出品,它本身就是一个模块集成了三个东西,还有个自身的温度计(芯片温度),FIFO,Digital Motion Processor(DMP,就是姿势识别,计步器那些),Interrupt(可惜 INT 脚在 GY

深度学习主机攒机小记

本文來源網址:http://www.52nlp.cn/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%BB%E6%9C%BA%E6%94%92%E6%9C%BA%E5%B0%8F%E8%AE%B0 Update: 这篇文章写于一年以前,这一年深度学习的大潮继续推进,1080也升级到1080TI了,攒机也有了更多更好的选择.最近更新了一篇文章:<从零开始搭建深度学习服务器:硬件选择>,可以看完下文后(主要提供了一些选择的思路),再来看最新的这篇(主要提供了一

九轴陀螺仪--读接口数据

1.使用i2c链接到树莓派的scl , sda 接口vcc给3v引脚,gnd接树莓派gnd就ok. 2.要操作mpu必须使用mpu的寄存器实现对参数的设定以及读取,取官方下载资料看了一下,在github上找了一个python代码,运行不了bug太多了,然后精简了一下.终于能读出数据了,读出来的数据都是6个字节的,后来发现这哥们用python 读取mpu没有做字节合并,重写了一下,后来发现数据都是整数,不管我怎么旋转数字都是正的,看了网上的一片文章说寄存器度出来的是一个无符号整数.后来想了半天,用