一、理论介绍
1.1.欧拉角转四元数
欧拉角转四元数的公式我们在第六章入门篇第三节有介绍,这里回顾一下
根据公式我们可以写出代码
1.2 坐标系校准
我们采用右手坐标系,接着我们依次来校准角度数据的方向。
打开终端,点击RST,查看IMU数据。
首先是X轴,我们让
开发板上爱神丘比特的剑头指向自己,然后从右侧往左侧倾斜。
可以看到此时X轴为正值,符合右手坐标系法则。
接着是Y轴,平放,将箭头朝向自己的胸口,接着抬高板子,让箭头指向自己的头部,观察Y轴的变化。
Y轴为负值,不符合右手坐标系法则,所以Y的值应该取一次负,使其为正。
接着是Z轴,平放,将箭头朝向自己的胸口,然后逆时针旋转板子,观察数值变化。
值为正,表示符合右手坐标系法则。
你可能会问小鱼怎么确认怎样旋转是正,怎样旋转是负,首先要确认轴向,我们开发板的Z轴朝上,X轴朝前,此时Y轴应该朝左。接着摊开右手手掌,用大拇指朝向轴的方向,比如朝向X轴,然后握起手掌,那么你握的方向就是正方向。
二、开始写代码
新建工程example07_mpu6050_oop
接着为其添加依赖
修改platformio.ini
接着在lib下新建IMU文件夹,并在文件夹下新建IMU.h和IMU.cpp
IMU.h
IMU.cpp
main.cpp
#include 《Arduino.h》
#include “IMU.h”
MPU6050 mpu(Wire); // 初始化MPU6050对象
IMU imu(mpu); // 初始化IMU对象
imu_t imu_data;
unsigned long
timer = 0;
void setup()
{
Serial.begin(115200);
imu.begin(18, 19); // 初始化IMU,使用18,19引脚
}
void loop()
{
imu.update();
if ((millis() - timer) 》 100)
{
imu.getImuData(imu_data); // 获取IMU数据结构体
Serial.printf(“imu:teuler(%f,%f,%f)n”,
imu_data.angle_euler.x, imu_data.angle_euler.y, imu_data.angle_euler.z);
Serial.printf(“imu:torientation(%f,%f,%f,%f)n”,
imu_data.orientation.w, imu_data.orientation.x, imu_data.orientation.y, imu_data.orientation.z);
timer = millis();
}
}
对于代码的解释已经放到了注释之中。
编译下载后,你将看到
三、总结
本节我们通过对MPU6050驱动的封装,学习了如何在嵌入式上使用面向对象编程的方法。
原作者:小鱼 鱼香ROS