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

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

3天内不再提示

mpu6050姿态解算原理_mpu6050姿态解算程序

姚小熊27 来源:网络整理 2018-03-09 09:15 次阅读

关于MPU6050姿态解算原理

mpu6050常用作提供飞控运行时的姿态测量和计算,在在姿态结算中有几个重要的概念,欧拉角、四元数等。

欧拉角:用来表征三维空间中运动物体绕着坐标轴旋转的情况。即物体的每时每秒的姿态可以由欧拉角表出。

四元数:超复数,q=(q0,q1,q2,q3),q0位实数,q1,q2,q3为虚部的实数。简单的可以理解为四维空间,就是原有的三维空间加入一个旋转角。而四元数可以表征欧拉角,并且计算方便,故采用四元数来计算。在此还要提到加速度和磁力计补偿原理,可以参照http://blog.csdn.net/nemol1990/article/details/21870197?utm_source=tuicool&utm_medium=referral博客中提到的原理与基本概念。在此再啰嗦一下:补偿的目的是使两个坐标系世界坐标系和刚体坐标系能够完全重合,在此基础上,计算补偿值来修正旋转矩阵,即四元数矩阵。最终的结果是解算出四元数的姿态,就是四元数矩阵的各个元素的值。按照上述博客中的程序解算四元数的时候,用到了Kp和Ki两个参数,两个参数的作用是用来控制矫正刚体坐标系速度的。即调节加速度和磁力计补偿的速度(调节误差的生成速度,进而调节刚体坐标系和世界坐标系的重合度)

加速计补偿的理解:

由于重力加速度的原因,加速计只能补偿X-Y轴的偏差,即经过解算后的坐标中世界坐标XOY和刚体坐标XOY能够重合,但是无法补偿航向角。

在此基础上,利用磁力计进行补偿,因为当地磁场是一个椭圆,所以我们把世界坐标系的X-AIXS轴对准真实世界的北方,这样,磁场园只能在XOZ的平面圆里面,所以磁力计在世界坐标系中的分量是[I,0,k],即在Y轴没有分量,因为90度的夹角余弦为0.但此时i和k的值并不确定是多少。在刚体坐标系中磁力计的输出为[a,b,c,],旋转到和世界坐标系中,计算出i和k,然后,在经过旋转把其旋转到刚体坐标系中,然后计算误差修正旋转矩阵,此时得到精确的旋转矩阵。

mpu6050姿态解算程序

08.MPU6050\Hardware\ioi2c.c

08.MPU6050\Hardware\ioi2c.h

08.MPU6050\Hardware\mpu6050.c

08.MPU6050\Hardware\mpu6050.h

08.MPU6050\Hardware\nrf24l01.c

08.MPU6050\Hardware\nrf24l01.h

08.MPU6050\Hardware\spi.c

08.MPU6050\Hardware\spi.h

08.MPU6050\Libraries\CMSIS\CMSISENDUSERLICENCEAGREEMENT.pdf

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f4xx.s

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc_ride7\startup_stm32f4xx.s

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar\startup_stm32f4xx.s

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\TASKING\cstart_thumb2.asm

08.MPU6050\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\TrueSTUDIO\startup_stm32f4xx.s

08.MPU6050\Libraries\CMSIS\Documentation\CMSIS-SVD_Schema_1_0.xsd

08.MPU6050\Libraries\CMSIS\Documentation\CMSIS_Logo_Final.jpg

08.MPU6050\Libraries\CMSIS\Include\arm_common_tables.h

08.MPU6050\Libraries\CMSIS\Include\arm_math.h

08.MPU6050\Libraries\CMSIS\Include\core_cm0.h

08.MPU6050\Libraries\CMSIS\Include\core_cm3.h

08.MPU6050\Libraries\CMSIS\Include\core_cm4.h

08.MPU6050\Libraries\CMSIS\Include\core_cm4_simd.h

08.MPU6050\Libraries\CMSIS\Include\core_cmFunc.h

08.MPU6050\Libraries\CMSIS\Include\core_cmInstr.h

08.MPU6050\Libraries\CMSIS\README.txt

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\misc.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_adc.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_can.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_crc.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_cryp.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dac.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dbgmcu.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dcmi.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_dma.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_exti.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_flash.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_fsmc.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_gpio.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_hash.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_i2c.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_iwdg.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_pwr.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_rcc.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_rng.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_rtc.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_sdio.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_spi.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_syscfg.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_tim.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_usart.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_wwdg.h

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\misc.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_adc.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_can.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_crc.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_aes.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_tdes.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dac.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dbgmcu.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dcmi.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_exti.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fsmc.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_md5.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_sha1.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_iwdg.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_pwr.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rtc.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sdio.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_spi.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_syscfg.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_tim.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_usart.c

08.MPU6050\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_wwdg.c

08.MPU6050\Output\Obj\STM32F4-TEST.hex

08.MPU6050\Project\JLinkSettings.ini

08.MPU6050\Project\STM32F4-TEST.uvgui.XiaoWei

08.MPU6050\Project\STM32F4-TEST.uvopt

08.MPU6050\Project\STM32F4-TEST.uvproj

08.MPU6050\System\delay.c

08.MPU6050\System\delay.h

08.MPU6050\System\led.c

08.MPU6050\System\led.h

08.MPU6050\System\sys.c

08.MPU6050\System\sys.h

08.MPU6050\System\timer2.c

08.MPU6050\System\timer2.h

08.MPU6050\System\uart.c

08.MPU6050\System\uart.h

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

    关注

    38

    文章

    305

    浏览量

    70276
  • 姿态解算
    +关注

    关注

    0

    文章

    48

    浏览量

    8206
收藏 人收藏

    评论

    相关推荐

    mpu6050姿态问题

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

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

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

    请问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使用详解及DMP姿态

    1、MPU6050使用详解及DMP姿态MPU-60X0 是世界上第一款集成 6 轴 MotionTracking 设备。它集成了 3 轴
    发表于 04-14 16:04

    Mpu6050 姿态

    程序是基于Mpu6050,所做的四元数结算 相当稳,希望对大家有所帮助
    发表于 08-17 10:36 91次下载

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

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

    基于MPU6050的四轴硬件姿态研究

    针对四轴飞行器姿态信息的实时准确获取问题,对四轴飞行器的姿态方面进行了研究。在分析姿态表示的四元数法和欧拉角法基础上,以成熟的Mahon
    发表于 03-08 09:19 7次下载
    基于<b class='flag-5'>MPU6050</b>的四轴硬件<b class='flag-5'>姿态</b><b class='flag-5'>解</b><b class='flag-5'>算</b>研究

    MPU6050的四元数姿态方法

    使用MPU6050硬件DMP姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件
    发表于 12-06 12:36 24次下载
    <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 14次下载
    毕业设计之 - 教程:<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 7次下载