0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32L012解算MPU6050姿态数据

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2026-01-05 16:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

姿态解算

我们仅仅获取了MPU6050的三轴加速度和角速度,要想得到姿态角,需要利用读取的数据进行姿态解算。

一、欧拉角

欧拉角是一种用于描述三维刚体相对参考坐标系(通常为水平面的直角坐标系)姿态的参数,通过依次绕三个互相垂直的坐标轴(对应姿态检测中常用的翻滚角 Roll、俯仰角 Pitch、偏航角 Yaw,分别绕 X、Y、Z 轴旋转)的旋转角度来表征设备的倾斜、转向状态。

如下图所示:

横滚角(Roll):绕运动坐标系的Y轴旋转

偏航角(Yaw):绕运动坐标系的Z轴旋转

俯仰角(Roll):绕运动坐标系的X轴旋转

wKgZO2lVGFGAC7oeAABstrbaVag894.jpg

二、姿态解算

2.1利用加速度计解算姿态(仅能解算Roll和Pitch)

欧拉角与旋转矩阵来对陀螺仪与加速度计的原始数据进行姿态求解,并将两种姿态进行互补融合,最终得到IMU的实时姿态。

2.1.1位姿矩阵:

位姿矩阵是用于在三维笛卡尔参考坐标系中,统一描述刚体的位置(平移状态)与姿态 的 4×4 阶齐次变换矩阵,其前 3×3 的子矩阵为旋转矩阵,对应由欧拉角等姿态参数转换而来的刚体旋转信息,用来表征设备相对参考坐标系的倾斜、转向姿态(即 MPU6050 检测的 Roll、Pitch、Yaw 对应的姿态状态),矩阵最后一列的前 3 个元素为平移向量,用来表征设备在参考坐标系中的三维位置坐标,最后一行固定为 [0,0,0,1] 以满足齐次坐标的运算规范,它可以将刚体的旋转与平移变换整合为一次矩阵运算,在嵌入式姿态检测与空间定位的场景中,能简化不同坐标系间的姿态、位置转换计算,常作为姿态解算、多传感器融合的基础数学工具。

当加速度计水平放置,即Z轴竖直向上时,Z轴可以读到1g的数值(g为重力加速度),X轴和Y轴两个方向读到0,初始位姿可以记作:

wKgZPGlbeJmAVVXFAAAFzYWirTc204.jpg

本篇的姿态解算选用的旋转顺序为ZYX,即IMU坐标系初始时刻与大地坐标系重合,然后依次绕自己的Z、Y、X轴进行旋转,这里先自定义一下每次的旋转名称和符号:

绕IMU的Z轴旋转:航向角yaw, 转动y角度

绕IMU的Y轴旋转:俯仰角pitch,转动p角度

绕IMU的X轴旋转:横滚角row, 转动r角度

wKgZPGlbePeATAbdAAJ5Oq2-rBM546.jpg

当IMU绕Z轴旋转y度,再绕Y轴旋转P度,再绕X轴旋转r度,其终止位姿可以表示为:

wKgZO2lbeLKAJMlZAAAGMw_uRA0870.jpg

根据机器人运动学:对于一个传感器的末端姿态,我们可以将其看作分别绕z、y,x轴旋转得到,其中正向运动学的绕各轴的旋转矩阵如下:

wKgZPGlbeLKAN18DAAAvA2FmV-s388.jpg

现在我们已知了初始位姿,终止位姿、绕三轴的旋转矩阵,对其进行机器人逆运动学的求解,可求得绕三个轴的旋转角度:

因为MPU6050是绕运动坐标系旋转,所以对应的矩阵变换是左乘:

wKgZO2lbeLOAaq3uAACNsbG6aUE318.jpg

解这个方程,可以得到roll和pitch角(由于绕Z旋转时,感受到的重力加速度是不变的,因此加速度计无法计算****yaw

wKgZPGlbeLOAc5YPAAAu8m3H1pY400.jpg

当IMU绕Z轴旋转y度,再绕Y轴旋转P度,再绕X轴旋转r度,其终止位姿可以表示为:

wKgZO2lbeLKAJMlZAAAGMw_uRA0870.jpg

根据机器人运动学:对于一个传感器的末端姿态,我们可以将其看作分别绕z、y,x轴旋转得到,其中正向运动学的绕各轴的旋转矩阵如下:

wKgZPGlbeLKAN18DAAAvA2FmV-s388.jpg

现在我们已知了初始位姿,终止位姿、绕三轴的旋转矩阵,对其进行机器人逆运动学的求解,可求得绕三个轴的旋转角度:

因为MPU6050是绕运动坐标系旋转,所以对应的矩阵变换是左乘:

wKgZO2lbeLOAaq3uAACNsbG6aUE318.jpg

解这个方程,可以得到roll和pitch角(由于绕Z旋转时,感受到的重力加速度是不变的,因此加速度计无法计算yaw

wKgZPGlbeLOAc5YPAAAu8m3H1pY400.jpg

解这个方程,可以得到roll和pitch角(由于绕Z旋转时,感受到的重力加速度是不变的,因此加速度计无法计算yaw角

wKgZPGlVGFSAKYSUAAATGIzGRLk102.jpg

对应C语言代码:

//(atan2返回弧度,需转成度) Pitch角公式:atan2(AX, sqrt(AY2 + AZ2)) × (180/π)
        accAnglePitch = atan2(ax, sqrt(ay*ay + az*az)) * (180.0f / M_PI);
        //  (若算roll角:atan2(AY, sqrt(AX2 + AZ2)) × (180/π))
        accAngleRoll = atan2(ay, sqrt(ax*ax + az*az)) * (180.0f / M_PI);

2.2利用陀螺仪解算姿态

我们知道陀螺仪输出的是角速度,我们对其进行积分,可以得到角度:

wKgZO2lVGFWAIZDSAAAHoN5z0SE980.jpg

yaw角解算对应代码:

float gyroRateZ = -((gz / GYRO_SENSITIVITY) - gyroBiasZ);  // 扣除零偏后的角速度后取反
// 步骤3:角速度积分计算Yaw角(核心:角度 = 角速度 × 时间)
// 复用IMU_Process_Kalman中已计算的dt(采样时间,单位s)
 Cacl_yawAngle += gyroRateZ * dt;

pitch和roll角对应解算公式:

wKgZPGlbeHmAbpWpAAAeaBcRl_Y457.jpg

wKgZO2lbeHmAVlQEAAAazEwF0Mo283.jpg

pitch和roll角对应解算代码(此代码在卡尔曼滤波器中,根据传入参数pitch和roll来决定解算什么角):

//此代码在卡尔曼滤波器中,根据传入参数pitch和roll来决定解算什么角
float KalmanFilter(float newAngle, float newRate, float dt,
                   float *kalmanAngle, float *kalmanBias, float kalmanP[2][2]) 
float rate = newRate - *kalmanBias;  // 减去偏置             
*kalmanAngle += dt * rate;           // 积分得到角度变化

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 姿态检测
    +关注

    关注

    0

    文章

    7

    浏览量

    7313
  • MPU6050
    +关注

    关注

    39

    文章

    313

    浏览量

    76376
  • 姿态解算
    +关注

    关注

    0

    文章

    50

    浏览量

    8643
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    mpu6050姿态问题

    如题,我在用互补滤波和四元数算法mpu6050的角度姿态。但是现在的问题是,一旦我的mpu6050转动速度一快,输出的
    发表于 05-09 18:33

    MPU6050模块自己写 卡尔曼滤波和姿态 难吗?

    MPU6050模块自己写 卡尔曼滤波和姿态 难吗? 大概多久能搞出来?
    发表于 12-22 17:35

    请问怎么mpu6050姿态之后的数据与pid算法结合控制平衡小车

    论坛上有人玩过平衡小车或者四轴吗,想问下怎样用mpu6050姿态之后的数据与pid算法结合控制平衡小车还有如果有pid资料的大神,能发在
    发表于 02-25 08:15

    请问MPU6050的软件姿态和DMP姿态各自的优缺点是什么?

    MPU6050有软件姿态和DMP姿态,他们各
    发表于 05-29 04:36

    请问谁有mpu6050姿态的欧拉角?

    我想要一个mpu6050姿态欧拉角的完整程序
    发表于 08-01 04:35

    MPU6050姿态的原理是什么

    MPU6050姿态的原理是什么?MPU6050姿态
    发表于 12-17 07:14

    使用MPU6050硬件DMP姿态

    使用MPU6050硬件DMP姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件
    发表于 02-10 06:20

    MPU6050姿态融合的相关资料推荐

    mpu6050是一个六轴传感器包括三轴陀螺仪和三轴加速度,分别可以测得三轴的角速度、加速度。但是一般传感器的原始数据都不能直接直接拿来用,都需要滤波和姿态融合
    发表于 02-10 06:25

    mpu6050姿态原理分析及程序设计

    本文主要介绍了mpu6050姿态原理分析及程序设计,MPU6050硬件DMP
    发表于 12-11 13:51 4.5w次阅读
    <b class='flag-5'>mpu6050</b><b class='flag-5'>姿态</b><b class='flag-5'>解</b><b class='flag-5'>算</b>原理分析及程序设计

    mpu6050姿态原理_mpu6050姿态程序

    mpu6050常用作提供飞控运行时的姿态测量和计算。本文首先介绍了MPU6050姿态的原理,
    的头像 发表于 03-09 09:15 4.5w次阅读

    MPU6050的四元数姿态方法

    使用MPU6050硬件DMP姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件
    发表于 12-06 12:36 25次下载
    <b class='flag-5'>MPU6050</b>的四元数<b class='flag-5'>解</b><b class='flag-5'>算</b><b class='flag-5'>姿态</b>方法

    毕业设计之 - 教程:MPU6050姿态

    介绍一个学长做的单片机项目教程:MPU6050姿态大家可用于 课程设计 或 毕业设计技术解答毕设帮助:<Q>7468760412 M
    发表于 12-06 12:51 15次下载
    毕业设计之 - 教程:<b class='flag-5'>MPU6050</b><b class='flag-5'>姿态</b><b class='flag-5'>解</b><b class='flag-5'>算</b>

    MPU6050姿态融合(DMP)

    MPU6050姿态融合(DMP)
    发表于 12-06 13:21 39次下载
    <b class='flag-5'>MPU6050</b><b class='flag-5'>姿态</b>融合<b class='flag-5'>解</b><b class='flag-5'>算</b>(DMP)

    MPU6050使用互补滤波与卡尔曼滤波算法进行姿态

    MPU6050使用互补滤波与卡尔曼滤波算法进行姿态
    发表于 08-07 15:46 17次下载

    CW32L012读取MPU6050姿态数据

    随着物联网、可穿戴设备、工业倾角检测等场景的普及,低成本、低功耗的姿态检测方案成为嵌入式领域的研究热点。MPU6050 作为集成三轴加速度计和三轴陀螺仪的六轴传感器,凭借低成本、小体积的优势被
    的头像 发表于 01-05 16:36 1084次阅读
    <b class='flag-5'>CW32L012</b>读取<b class='flag-5'>MPU6050</b><b class='flag-5'>姿态</b><b class='flag-5'>数据</b>