开源飞控OpenPilot的扩展卡尔曼滤波EKF学习笔记(一)

本文是关于开源飞控OpenPilot中扩展卡尔曼滤波(EKF)的学习笔记,主要涉及EKF初始化过程,包括设置滤波器的P, Q, R矩阵,以及获取传感器数据如陀螺仪mpu6000、磁罗盘hmc5883等。代码解析集中在filterekf.c文件,介绍如何处理采样时间、数据传输格式UAVObject以及校正磁偏角的homeLocation。" 113097763,10643833,使用for循环处理班级学员成绩,"['编程语言', 'Java', '循环结构', '数据处理', '算法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenPilot是老外的一款开源飞控,不同于大名鼎鼎的APM,OpenPilot在国内基本没人玩,不过这并不妨碍其成为一款优秀的飞控系统。OpenPilot的设计理念是高度集成,它把电台集成到飞控板上,而包含了电台的飞控板还是比APM小。这里我要记录的是其中关于其EKF部分的代码解读。

OpenPilot使用的陀螺仪是mpu6000,包括陀螺仪和加速度计,磁罗盘是hmc5883,气压高度计是ms5611,GPS是LEA6H,EKF算法正是基于这几个传感器的数据。

代码文件位于/OpenPilot/flight/modules/StateEstimation/filterekf.c。

首先看注意maininit(stateFilter *self)函数,这是滤波器的初始化函数,作用是确定滤波器的P,Q,R三个矩阵的具体数值,以及获取home点的经纬度,下面看具体代码。

    struct data *this = (struct data *)self->localdata;
    this->inited       = false;
    this->init_stage   = 0;
    this->work.updated = 0;

前面这几行是定义一些数据结构,赋值一些标志位什么的,属于程序架构部分,和算法关系不大,往后看。

PIOS_DELTATIME_Init(&this->dtconfig, DT_INIT, DT_MIN, DT_MAX, DT_ALPHA);

这个函数是将后面几个参数填充到第一个参数所指的指针里,this->dtconfig是滤波器关于采样时间dt的数据结构,其中DT

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值