GY85使用

STM32—驱动GY85-IMU模块 GY85是一个惯性测量模块,内部集成了三轴加速度计、三轴陀螺仪、电子罗盘、气压传感器等芯片,用于测量和报告设备速度、方向、重力,模块可以将加速度计、陀螺仪、电子罗盘等传感器的数据进行综合,在上位机可以结合各种数据进行惯导算法融合。 这里介绍一下STM32驱动GY85的代码,模块与STM32的通信接口是IIC协议,我们采用软件IO口模拟IIC时序进行通信,读取到各个芯片的数据存放在全局变量,关于GY85的介绍以及一些基础知识可以参考这篇博客:点击跳转 芯片说明: ADXL345:三轴加速度计,测量Roll、 阅读详情
AI摘要

本文详细介绍了GY85惯性测量模组的工作原理及其在Arduino上的应用。包括了加速度计ADXL345、陀螺仪ITG3200/ITG3205和电子罗盘HMC5883L的数据读取及处理方法。

这是一个针对惯性测量模组(IMU)的Arduino驱动代码,目前只支持GY85。惯性测量模组是一种用于测量和报告设备速度、方向和重力的电子设备,它能将加速度计和陀螺仪,甚至是磁场强度计等传感器的数据进行综合。GY85在国内是一个很常用的惯性测量模组,用途很广范,主要用于无人机、机器人等。我们主要将其用在轮式机器人上,用于提供机器人的速度和位姿等信息。

组成

GY85包括三个微控制器,包括三轴加速度计、三轴陀螺仪、三轴电子罗盘,分别用于测量加速度、方向以及磁感应强度。其中X轴、Y轴是水平方向的,Z轴是垂直方向的。

gy85-b

note:图片来自http://www.dx.com/

关于roll、pitch、yaw

在使用GY85之前,我们需要学习一些基本知识。飞行器在飞行时有三个自由度,分别是roll、pitch、yaw,如果翻译成中文的话,我们可以分别叫做横滚、俯仰、航向。

axes

note:图片来自维基百科:https://en.wikipedia.org/wiki/Aircraft_principal_axes。

roll是围绕X轴旋转,也叫做俯仰角;pitch是围绕Y轴旋转,也叫偏航角;yaw是围绕Z轴旋转,也叫翻滚角。

roll

roll旋转

pitch

pitch旋转

yaw

yaw旋转

上述图片来自互联网,关于飞机旋转方式的进一步信息请查阅相关资料。

加速度计(ADXL345)

加速度计是一个用于测量固有加速度(Proper acceleration),即物理加速度的设备,固有加速度不同于我们所熟知的坐标系加速度(速度的变化率)。例如加速度在静止时测得的重力加速度大约为g,即9.81m/s^2,而当其以自由落体运动时测得的加速度则约等于0。详情请参考维基百科:Accelerometer。

GY85所使用的加速度计ADXL345是一个模拟设备,它可以测量三个方向的加速度(x、y、z),具有13位的分辨率,测量范围达±16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345为驱动中断提供两个输出引脚:INT1和INT2,支持SINGLE_TAP、DOUBLE_TAP等特性,因此可以采用中断的方式来采集数据。

NOTE: 关于ADXL345的详细参数和信息请参考其数据手册
尽管ADXL345具有很高的精度,但是我们不可能每次都计算出精确的数据并将其存到芯片中。最常用的方式是多次采样取平均值。

该芯片通常返回的是10位分辨率的数据,为了便于使用,我们需要做一些简单的处理,并将其单位转化为G。

            测量值(单位:G) = 采样值 × (测量范围/(2^分辨率))

公式中测量范围和分辨率取决于芯片的配置。ADXL345支持的测量范围有±2g/±4g/±8g/±16g。一般分辨率可以设置为10或者13位。采样值就是指芯片直接采集到的数据。如果ADXL345使用的是默认设置的话,那么分辨率为10位精度,测量范围为±2g(因此公式中应使用4),因此根据上述公式可得:

            测量值(单位:G) = 采样值 × (4/2^10) = 采样值 × (1/256) = 采样值 × 0.0039

必须对每个方向的数据都做进行上面的处理,最终的测量值的范围在±1之间。

xg = valX * 0.0039;
yg = valY * 0.0039;
zg = valZ * 0.0039;

这些测量值可能会有一些噪声,我们可以通过一些滤波方法来改善数据,下面是低通滤波的一个例子,详情请参考这里。

fXg = xg * alpha + fXg * (1.0 - alpha);
fYg = yg * alpha + fYg * (1.0 - alpha);
fZg = zg * alpha + fZg * (1.0 - alpha);

计算完x、y、z方向的加速度值之后,我们可以用这些值进一步计算角度。我们知道在飞行器理论坐标轴中,关于x轴的旋转叫做翻滚,关于y轴旋转叫做俯仰角,关于z轴旋转叫做偏航,但是三轴加速度计无法计算偏航角,因为重力力矩在移动过程中不会改变。

Roll = atan2(yg, zg) * 180/PI;
Pitch = atan2(-xg, sqrt(yg*yg + zg*zg)) * 180/PI;

陀螺仪(ITG3200/ITG3205)

陀螺仪是一种基于角动量理论来测量或者维持方向的设备。GY85使用InvenSense公司的ITG3200或者ITG3205来测量方向,它可以感知三个方向的移动,传感器数据采用16位模数转换器,除此之外,它还集成了一个温度传感器。

NOTE: 这里用到的参数中ITG3200和ITG3205是相同的。

我们需要将采样值除以敏感范围因子(Sensitivity Scale Factor)来得到最终以°/s为单位的值,敏感范围因子可以在数据手册中找到。

            测量值(单位:°/s) = 采样值 / 敏感范围因子

敏感范围因子是一个常量,大小为14.375 LSB pro °/s,因此

            测量值(单位:°/s) = 采样值 / 敏感范围因子

同样将上述公式应用于每个方向,最终结果应该在±2000°/s之间。

xds = valX / 14.375;
yds = valY / 14.375;
zds = valZ / 14.375;

如果我们将上述值乘以时间间隔的话,

            角度 += 测量值(单位:°/s) × 时间间隔

我们便可得到每个方向的角度:

Roll += valX * dtime * 0.001;
Pitch += valY * dtime * 0.001;
Yaw += valZ * dtime * -0.001;

我们直接从传感器获得的温度值将是十分巨大的一个值,我们可以使用一个常量将其转换为摄氏度。-13200代表35°,每280就是1°。

            温度(单位:°C) = 35 + (采样值 + 13200) / 280

电子罗盘(HMC5883L)

电子罗盘主要用于测量磁性材料,比如磁铁,的磁化强度,以及测量某一点的磁场强度和方向。

在GY85中使用的是Honeywell公司的HMC5883L,它是一个三轴的数码电子罗盘。该芯片被广泛用于数码指南针,用于检测与地磁北极的偏转角度。

将采集到的数据乘以数字分辨率即可得到以高斯为单位的数据:

data[0] *= 0.92;
data[1] *= 0.92;
data[2] *= 0.92;

NOTE: 关于分辨率等参数的详细信息,请参考其数据手册。
转化为弧度(rad):

Yaw = atan2(Y, X);

由于存在磁偏角,所以当值为负时,需要进行校正:

if(Yaw < 0)
    Yaw += 2*PI;

当存在正磁偏角时,同样需要校正:

if(Yaw > 2*PI)
    Yaw -= 2*PI;

最后,将结果转化为角度(°):

Yaw in ° = Yaw * 180/PI;

电路连接

下图是GY85与Arduino Mega 2560的电路连接图:

wiring-mega

如果你使用的是其他版本的Arduino,请视情况更改。比如你使用的是Uno的话,只需将GY85的SDA和SCL分别改为A4和A5,即Arduino的I2C接口。不同版本的Arduino I2C接口请查阅Arduino官方网站:https://www.arduino.cc/en/Reference/Wire。

参考资料

  1. The Bored Engineers:The quadcopter : how to compute the pitch, roll and yaw
  2. 维基百科:Accelerometer
  3. https://github.com/madc/GY-85
  4. 江南雨的博客:pitch yaw roll 的区别
  5. 维基百科:aircraft principal axes

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

NVIDIA JETSON 连接九轴IMU传感器(GY-85模块) 导师准备做一个智能模型车,需要采集九轴IMU传感器(GY-85模块)的传出数据 ,借鉴树莓派链接该模块的方法,展示如下: (1)因为使用的io接口的python库是通用的,虽然树莓派和NVIDIA的ubuntu系统不同,属于不同的ubuntu定制系统,但是同属于Linux,本着初生牛犊不怕虎的精神,在假设他们 对于python通用的基础上,像树莓派那样配置了NVIDIA的i2c_librari 阅读详情

相关推荐

使用GY-85校准iRobot create

iRobot作为turtlebot的基座之一,并没有内置的陀螺仪,只是依靠轮子上的编码器提供角度信息。由此造成运动一段时间后,角度信息出现偏差,进一步导致iRobot在/odom中的位置坐标与实际位置出现差异。针对这一问题,可以通过外部接入陀螺仪进行校准。 硬件设备:iRobot create2, GY-85芯片, Firefly-RK3288嵌入式开发板 开发板与GY-85芯片通过i2c接口

Scofileds的博客 3597

Arduino GY85 I2C测试

arduino gy85 12C 参考链接:https://blog.youkuaiyun.com/github_30605157/article/details/65006527

qq_42944558的博客 2564

三轴地磁方位角原理及代码实现

开发平台:Arduino 控制板:Mbsbot-Mega2560版本 姿态传感器:GY85九轴模块 实现目标: 通过九轴模块获取姿态角,位移量,估算当前相对位移 1.获取地磁计方位角 库函数获取地磁计原始数据 float* magScaled = sen10724.readMagScaled(); max_x = max(magScaled[0], max_x); min_x = min(magScaled[0], min_x); max_y = max(magScaled[1], ma.

栀末寸芒 3185

MPU-6050陀螺仪灵敏度LSBs/°/sec含义并与GY-85对比

在研究MEMS陀螺的时候尝试过GY-85,但是测试后发现数据不可靠,精确性差,这似乎也是MEMS陀螺的一个特点,但是苦于经费有限,因此,特地又重新买了MPU-6050,准备测试一下这款MEMS陀螺的精确性,做一个评估。

weixin_46089559的博客 9885

GY39多参数环境传感器深度解析与Arduino实战指南

环境传感器是嵌入式系统感知物理世界的基础组件,其核心在于多参数协同、硬件级同步与出厂校准。BME280、BH1750等单芯片虽广泛应用,但存在时序不同步、温漂补偿弱、接口碎片化等问题;而GY39通过集成BME280(温/湿/压)、BH1750(光照)及NTC热敏电阻,并内置ATTINY85协处理器,实现了I²C单地址下四参数时间戳对齐采集与硬件滤波,显著提升数据一致性与长期稳定性。该设计特别适用于温室微气候监测、智能小车环境自适应控制、边缘AI数据前端等对时间相干性与低维护性要求严苛的场景。本文聚焦GY39

weixin_34416754的博客 846

GY-85陀螺加速度计测试代码解析与STM32实战应用

在嵌入式系统开发中,选择合适的微控制器平台是实现高性能、高可靠性传感器数据采集与处理的基础。STM32系列基于ARM Cortex-M内核的32位微控制器因其强大的外设集成能力、灵活的功耗管理机制以及广泛的生态系统支持,已成为工业控制、无人机导航、智能穿戴设备等领域的主流方案。本章将围绕STM32微控制器的核心系统架构展开深入剖析,重点解析其与GY-85多传感器模块协同工作的底层支撑机制。从芯片选型到内存布局,从时钟树配置到中断调度,全面揭示STM32如何作为主控单元高效驱动复杂传感任务。

weixin_36149538的博客 828

AI智能棋盘组合GY-85 IMU模块数据

本文解析GY-85 IMU模块如何通过加速度计、陀螺仪和磁力计实现姿态感知,解决AI智能棋盘在震动识别、倾斜校准、误操作防护等方面的痛点,提升系统鲁棒性与用户体验。

weixin_42124497的博客 956

gy85 stm32资料

gy85 stm32资料 保证能用,能读出3个模块的数据

树莓派B3+连接9轴IMU传感器(GY-85模块)获取信息

树莓派B3+连接9轴IMU传感器(GY-85模块)获取信息 文章目录树莓派B3+连接9轴IMU传感器(GY-85模块)获取信息准备工作准备工作安装quick2wire-gpio-admin安装quick2wire-python-api连接*测试(这部分非常重要)*如何使能树莓派的I2C接口!!!(如果显示不出上图,看这部分)获取 ITG3205 陀螺仪信息获取 ADXL345 三轴/倾角信息获取 ...

sunshine 4358

GY-85集成加速度传感器、陀螺仪、电子罗盘、气压传感器。资料+代码

I2C总线,读出数据后进行卡尔曼滤波,可应用与惯性导航,飞空自稳,类人型机器人状态监测。

Arduino-GY-85.zip

Arduino-GY-85.zip,GY-85(ADXL345加速度计、ITG3200陀螺仪和HMC5883L磁强计)GY-85的Arduino实现,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,深受电子制造商的欢迎,Arduino通过开源系统提供了很多灵活性。

树莓派连接9轴IMU传感器(GY-85 模块)

![GY-85](http://images.cnblogs.com/cnblogs_com/hangxin1940/466697/o_gy85.jpg "GY-85") 9轴IMU传感器(GY-85 模块) 其实也可以看作三个模块 `ITG3205 三轴陀螺仪传感器` `ADXL345 三轴加速度倾角传感器` `HMC5883L 电子罗盘` GY-85模块的接口是i2c, 可以方便的...

weixin_30552635的博客 865

GY-85陀螺加表测试代码

以STM32为硬件平台,对GY-85陀螺仪、加速度计及电子罗盘传感器模块进行输出数据验证,可以作为例程直接使用。

树莓派使用python获取GY-85九轴模块信息

连接方法请移步这里 http://www.cnblogs.com/hangxin1940/archive/2013/04/05/3000395.html 这里使用Python的curses包开发cli窗口程序,用来实时刷新传感器的读数 最终的效果 ![gy85](http://images.cnblogs.com/cnblogs_com/hangxin1940/466697/o_GY...

weixin_34391854的博客 433

GY-85芯片资料

文件包含GY-85的相关测试代码,相关参考资料和程序代码,芯片数据手册等文件

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 498

在树莓派3的ROS平台上发布sensor_msgs/Imu消息

在树莓派3的ROS平台上发布sensor_msgs/Imu消息 一: 首先当然是搭建基于RaspbianOS Jessie 系统的ROS-indigo环境         这个不是本文的重点,在这里就不详述了。需要的可以点击打开链接 (这个过程非常酸爽,装了2天) 二: 获得Imu数据        本文获取Imu数据所用传感器是GY-

奔跑的蜗牛 7993

深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论

大众点评网站采用前后端分离架构,通过Ajax接口动态加载数据。按F12打开开发者工具,切换到Network(网络)面板。实际环境中,我们需要使用Python重现这一加密逻辑。查看请求响应,寻找包含评论数据的JSON接口。参数是大众点评的反爬机制核心,需要特别处理。:尊重网站的robots.txt文件规定。:仅将数据用于合法合规的研究和分析目的。:不侵犯大众点评的商业秘密和知识产权。打开大众点评网站,进入任意商户页面。:对采集到的用户信息进行脱敏处理。:避免对目标网站造成过大负担。

Z_suger7的博客 1580
上一篇: C指针基础(五)
下一篇: 了解tf
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值