基于FlexLua低代码技术实现MPU6050六轴姿态角解算

96 篇文章 0 订阅
67 篇文章 0 订阅

MPU6050六轴姿态角

提示:本文章参考 FlexLua 官网教程。

一、姿态角(欧拉角)基本概念

物体在空间中的姿态可以用欧拉角来定义,欧拉角包含pitch(俯仰角)、yaw(偏航角)、roll(横滚角),如下图示意:

831db414f73846447ab7a6d7ce2703cf.jpeg

afebd8ed47c4319a122452206f60ec96.jpeg

二、代码实现功能描述

Core采集MPU6050六轴传感器经过姿态解算后的欧拉角数据,并在电脑串口终端打印出pitch(俯仰角)、yaw(偏航角)、roll(横滚角)这三个角度的整数部分以方便用户实时观察传感器模块在空间中的姿态。

  • 当按键1短按后,开始俯仰横滚角校准就开始俯仰角和横滚角的校准。
  • 当按键2短按后,开始航偏角的校准。

三、接线图

69f148131a578a66dd383a1f5859e4aa.jpeg

四、材料清单

  • MPU6050传感器模块

b0a6e3c01fd2e19361df178d35d0c671.jpeg

如果您嫌该模块成本较高,可以自己实现一个MPU6050姿态解算模块,从硬件和软件上难度都不大,因为MPU6050内部的DMP协处理器可以自动帮您完成六轴原始数据(Acc,Gyro)到姿态角的解算,不需要您专门花时间去研究姿态解算相关的算法。MPU6050官方已提供例程和资料供您参考,您只需要选一款合适的mcu并将官方提供的例程(下载地址)中的驱动代码移植到你的mcu上即可,移植过程也很简单:

  1. 先花点时间先看懂main.c关于MPU6050的应用层代码是如何调用驱动的
  2. 将invmpu.c、invmpu.h、invmpudmpmotiondriver.c 这三个代码中关于MSP430单片机的那几行代码换成你的单片机中的实现即可。
  3. 最后为了让您的模块兼容Core,需要按照本文章中所用到的MPU6050 GY25模块的资料中所描述的Uart通信协议将姿态角数据让Core可以通过0xA5 0x51指令来获取。

五、完整代码

--配置USB以虚拟串口模式工作,这样调用print()函数就会在电脑串口终端打印输出
LIB_UsbConfig("CDC")
--设置按键1(占用D10口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN1","D10","L")
--设置按键2(占用D11口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN2","D11","L")
--设置MPU6050六轴传感器占用TX0和RX0引脚,并启动传感器以每秒输出100组欧拉角数据的频率工作
LIB_MPU6050Config("UART0")
--开始大循环
while(GC(1) == true)
do
--查询是否收到欧拉角数据,如果收到就在OLED屏幕上输出显示
recv_flag,pitch,yaw,roll = LIB_MPU6050GetEulerAngle()
if recv_flag == 1 then
--只打印角度的整数部分
print(string.format("pitch:%.0f yaw:%.0f roll:%.0f\r\n", pitch,yaw,roll))
end

--如果按键1短按,就开始俯仰角和横滚角的校准,校准时请保持传感器静止状态至少5秒
--校准后pitch角和roll角的度数会自动的逐渐归零
btn1 = LIB_ButtonQuery("BTN1")
if btn1 == 1 then
LIB_MPU6050Cali("PITCH_ROLL")
end

--如果按键2短按,就开始航偏角校准
--校准后yaw角的度数会自动归零
btn2 = LIB_ButtonQuery("BTN2")
if btn2 == 1 then
LIB_MPU6050Cali("YAW")
end
end


如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

六、代码运行结果

电脑串口调试终端上显示的传感器模块的姿态角(单位:度)内容如下图:

d8f6f57a8839dd5335994f207c377b24.jpeg

七、需要注意的地方

  1. MPU6050 GY25模块上电会自校准, 需保持 3 秒以上静止状态, 建议不要用手拿着。
  2. 模块本身不带磁力计, 偏航角长时间会有漂移。需要您在实际开发中考虑在适当的时候进行偏航角校准。
  3. 欧拉角由于万向锁问题, 横滚角, 俯仰角在 90 度时候会有相互影响。
  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值