物体在空间中的姿态可以用欧拉角来定义,欧拉角包含pitch(俯仰角)、yaw(偏航角)、roll(横滚角),如下图示意:
Ubeeto物联网开发板采集MPU6050六轴传感器经过姿态解算后的欧拉角数据,并在电脑串口终端打印出pitch(俯仰角)、yaw(偏航角)、roll(横滚角)这三个角度的整数部分以方便用户实时观察传感器模块在空间中的姿态。
1、当按键1短按后,开始俯仰横滚角校准就开始俯仰角和横滚角的校准。
2、当按键2短按后,开始航偏角的校准。
名称 | 推荐购买链接(或者您可以自己制作) | 模块/芯片硬件资料下载 |
---|---|---|
MPU6050传感器模块 | MPU6050 GY25模块购买链接 | 下载地址(提取码:u8nk) |
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。
如果您嫌该模块成本较高,可以自己实现一个MPU6050姿态解算模块,从硬件和软件上难度都不大,因为MPU6050内部的DMP协处理器可以自动帮您完成六轴原始数据(Acc,Gyro)到姿态角的解算,不需要您专门花时间去研究姿态解算相关的算法。MPU6050官方已提供例程和资料供您参考,您只需要选一款合适的mcu并将官方提供的例程(下载地址 提取码:tjdx)中的驱动代码移植到你的mcu上即可,移植过程也很简单:
1、先花点时间先看懂main.c关于MPU6050的应用层代码是如何调用驱动的
2、将inv_mpu.c、inv_mpu.h、inv_mpu_dmp_motion_driver.c 这三个代码中关于MSP430单片机的那几行代码换成你的单片机中的实现即可。
3、最后为了让您的模块兼容Ubeeto开发板,需要按照本文章中所用到的MPU6050 GY25模块的资料中所描述的Uart通信协议将姿态角数据让开发板可以通过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查询。
电脑串口调试终端上显示的传感器模块的姿态角(单位:度)内容如下图:
1、MPU6050 GY25模块上电会自校准, 需保持 3 秒以上静止状态, 建议不要用手拿着。
2、模块本身不带磁力计, 偏航角长时间会有漂移。需要您在实际开发中考虑在适当的时候进行偏航角校准。
3、欧拉角由于万向锁问题, 横滚角, 俯仰角在 90 度时候会有相互影响。
简单、快捷、高效、强大的物联网开发板
© 2022. All Rights Reserved. 粤ICP备2021058065号