一、姿态角(欧拉角)基本概念
物体在空间中的姿态可以用欧拉角来定义,欧拉角包含pitch(俯仰角)、yaw(偏航角)、roll(横滚角),如下图示意:
二、代码实现功能描述
Core采集MPU6050六轴传感器经过姿态解算后的欧拉角数据,并在电脑串口终端打印出pitch(俯仰角)、yaw(偏航角)、roll(横滚角)这三个角度的整数部分以方便用户实时观察传感器模块在空间中的姿态。
- 当按键1短按后,开始俯仰横滚角校准就开始俯仰角和横滚角的校准。
- 当按键2短按后,开始航偏角的校准。
三、接线图
五、完整代码
--配置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
六、代码运行结果
电脑串口调试终端上显示的传感器模块的姿态角(单位:度)内容如下图:
七、需要注意的地方
- MPU6050 GY25模块上电会自校准, 需保持 3 秒以上静止状态, 建议不要用手拿着。
- 模块本身不带磁力计, 偏航角长时间会有漂移。需要您在实际开发中考虑在适当的时候进行偏航角校准。
- 欧拉角由于万向锁问题, 横滚角, 俯仰角在 90 度时候会有相互影响。
更多详情请参看 shineblink.com官网链接