Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
四轴飞控
姿态解算 (MPU9250 & Motion Driver 6)
发布于 2019-08-09 11:32:30 浏览:1059
订阅该版
* 本帖最后由 sogw 于 2019-8-10 15:20 编辑 * *本文的主要目的是讲解如何使用 MPU9250 和官方motion driver 6.12 库实现姿态解算。* 基础知识: **坐标系** (1)地心惯性坐标系(简称 i系) 坐标系的原点O为地球的中心, 且与地球的自转无关。z轴与地球的自转轴重合,其正向指向北极。x轴、y轴在地球的赤道平面内,Ox指向春分点,y轴由右手定则确定。三个坐标轴指向惯性空间固定不动,这个坐标系是惯性仪器测量的参考标准。 (2)地球坐标系(简称 e系) 坐标系的原点O位于地心,z轴为地球自转轴,x轴、y轴在地球的赤道平面内,x轴指向零度子午线,y轴则指向东经90°方向。 e系与i系的相对运动为地球的自转。 (3)地理坐标系(简称 g系) 地理坐标系是指原点位于运载体所在的地球表面,其中一轴与地理垂线重合的右手直角坐标系。地理坐标系的原点O选取在载体重心处,对于地理坐标系的坐标轴有不同的取法,如东北天、北西天、北东地等,这些只是坐标轴的正向方向不同,不影响导航解算。[align=center]![dili.png](/uploads/201908/10/103223qlx3uim2u5m44bxh.png) (4)载体坐标系(简称 b系) 与载体固连在一起,坐标系原点O位于载体的质心,Ox沿载体横轴向右,Oz沿载体垂直轴向上,Oy符合右手定则沿纵轴向前。载体的姿态角信息可由地理坐标系与载体坐标系的角度确定。[align=center]![zaiti.png](/uploads/201908/10/103223pui5ifshim0vkimb.png) (5)导航坐标系(简称 n系) 惯导系统中求解导航参数时所采用的坐标系。 **欧拉角** 莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向。对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。参考系又称为实验室参考系,是静止不动的。而坐标系则固定于刚体,随着刚体的旋转而旋转。![FastAdmin](http://www.crazepony.com/assets/img/euler-angles.png) ![200px-Euler2a.gif](/uploads/201908/10/110334dy0ovowlb9wassuw.gif)摘自[维基百科-欧拉角](http://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E8%A7%92)。 **姿态解算的目的即是为了获取姿态信息,姿态由多种表示方式,常见的是四元数,欧拉角,矩阵和轴角。他们各自有其自身的优点,在不同的领域使用不同的表示方式。通常我们使用欧拉角表述姿态。 ****在姿态解算前,一般需要进行传感器标定等,此不是本文的目的,不再赘述。** **姿态解算需要一些算法,常见的有 非线性互补滤波算法、非线性互补滤波算法、Mahony互补滤波算法。算法的比较可以参考这里:**[http://www.olliw.eu/2013/imu-data-fusing/](http://www.olliw.eu/2013/imu-data-fusing/) **鉴于使用的是MPU9250模块,内含DMP,且其官方 InvenSense 的 Motion Driver 6.12(内含姿态解算算法等)支持九轴数据融合。所以直接使用 MD6 库获取姿态信息。不再自行解算。** **MD6** (1)获取 MD6可以从x893大神的github获取:[https://github.com/x893/MotionDriver6](https://github.com/x893/MotionDriver6)。MD6对arm支持很好,文档也很详细, 移植相对简单,基本看着文档就可已完成移植和使用。(2)移植 参考文档 “App Note 3- Motion Driver 6.12 Porting Guide”。 首先将源代码添加进工程。源代码即为 “core” 下的所有文件,如果想使用针对性优化过的二进制库,需要替换掉 “core” 的二进制库。然后实现类似如下的底层接口(注意返回值):![port.png](/uploads/201908/10/124046uoozw4dllu0wozw0.png)最后添加预编译选项:![CPPDEFINES.png](/uploads/201908/10/124950fbobbupo04o2tfna.png)编译成功即可 (3)使用添加 MD6 中的 “main.c” 到工程中,删减掉不需要的输入输出等,解决编译错误。然后可以创建线程来运行其中的 “main” ,就可以获得欧拉角了。(注意定点数的转化)[align=center]![q16.png](/uploads/201908/10/135257a3jophs3o3sr3pto.png) [align=center]![app.png](/uploads/201908/10/135254b5h55255lnm15hx2.png)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.1k
关于作者
sogw
这家伙很懒,什么也没写!
提问
17
回答
33
被采纳
0
关注TA
发私信
相关问题
1
我坐第一庄
2
RTT上实现四轴飞行器的例子
3
为啥都要叫四轴飞控?
4
MPU6050姿态解算方法分析--转载
5
飞控开搞了没
6
一起来玩WIFI迷你四轴吧
7
我也准备用RTT做四轴了
8
基于RTT的STM32F103CBT6四轴飞控正在进行中
9
阿嘉四轴主控代码烧录完,JLINK无法找到芯片
10
阿嘉四轴主控代码编译出现问题,mavlink协议报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部