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

本文是关于开源飞控OpenPilot中扩展卡尔曼滤波(EKF)的学习笔记,主要探讨了滤波修正过程,包括线性化H矩阵、预测观测量的计算以及状态变量的修正和更新。作者通过分析代码详细解释了EKF的实现步骤,并预告下篇将深入讲解EKF的理论基础。
摘要由CSDN通过智能技术生成

出差归来,接着说,上回书说到函数INSCorrection,这个函数进行具体的滤波修正。

INSCorrection(this->work.mag, this->work.pos, this->work.vel, this->work.baro[0], sensors);  
进去看看。

    float Z[10], Y[10];
    float Bmag, qmag;

    // GPS Position in meters and in local NED frame
    Z[0] = Pos[0];
    Z[1] = Pos[1];
    Z[2] = Pos[2];

    // GPS Velocity in meters and in local NED frame
    Z[3] = Vel[0];
    Z[4] = Vel[1];
    Z[5] = Vel[2];

    // magnetometer data in any units (use unit vector) and in body frame
    Bmag =
        sqrtf(mag_data[0] * mag_data[0] + mag_data[1] * mag_data[1] +
              mag_data[2] * mag_data[2]);
    Z[6] = mag_data[0] / Bmag;
    Z[7] = mag_data[1] / Bmag;
    Z[8] = mag_data[2] / Bmag;

    // barometric altimeter in meters and in local NED frame
    Z[9] = BaroAlt;
先是一段赋值,我们知道Z阵是新息,这里先把所有能用到的传感器数据赋值到新息矩阵。

    LinearizeH(ekf.X, ekf.Be, ekf.H);
然后是对H阵进行线性化,难道H阵不是1吗,进去看看

    float q0, q1, q2, q3;

    q0 = X[6];
    q1 = X[7];
    q2 = X[8];
    q3 = X[9];

    // dP/dP=I;
    H[0][0] = H[1][1] = H[2][2] = 1.0f;
    // dV/dV=I;
    H[3][3] = H[4][4] = H[5][5] = 1.0f;

    // dBb/dq
    H[6][6] = 2.0f * (q0 * Be[0] + q3 * Be[1] - q2 * Be[2]);
    H[6][7] = 2.0f * (q1 * Be[0] + q2 * Be[1] + q3 * Be[2]);
    H[6][8] = 2.0f * (-q2 * Be[0] + q1 * Be[1] - q0 * Be[2]);
    H[6][9] = 2.0f * (-q3 * Be[0] + q0 * Be[1] + q1 * Be[2]);
    H[7][6] = 2.0f * (-q3 * Be[0] + q0 * Be[1] + q1 * Be[2]);
    H[7][7] = 2.0f * (q2 * Be[0] - q1 * Be[1] + q0 * Be[2]);
    H[7][8] = 2.0f * (q1 * Be[0] + q2 * Be[1] + q3 * Be[2]);
    H[7][9] = 2.0f * (-q0 * Be[0] - q3 * Be[1] + q2 * Be[2]);
    H[8][6] = 2.0f * (q2 * Be[0] - q1 * Be[1] + q0 * Be[2]);
    H[8][7] = 2.0f * (q3 * Be[0] - q0 * Be[1] - q1 * Be[2]);
    H[8][8] = 2.0f * (q0 * Be[0] + q3 * Be[1] - q2 * Be[2]);
    H[8][9] &
无机飞控系统中常使用卡尔曼滤波进行状态估计和目标跟踪。卡尔曼滤波是一种递归滤波算法,通过融合传感器测量值和系统模型来估计系统状态,并提供最优的估计结果。 在无人机飞控中,常用的卡尔曼滤波包括扩展卡尔曼滤波EKF)、无迹卡尔曼滤波(UKF)、库图尔卡尔曼滤波(CKF)等。这些滤波算法可以用于实现无人机的位置跟踪、姿态估计(例如迎角和俯仰角),以及方向角度跟踪等研究。 扩展卡尔曼滤波卡尔曼滤波的一种扩展,用于非线性系统的状态估计。它通过在传统卡尔曼滤波中使用线性近似来处理非线性问题。 除了卡尔曼滤波,无人机飞控系统中还使用了其他滤波算法,例如基于回路反馈法的惯性导航、经典PID控制、前馈控制、自抗扰控制ADRC等控制算法。这些方法的目标是提高无人机的飞行稳定性和精确性。 总的来说,无人机飞控系统中的卡尔曼滤波算法与其他滤波算法结合使用,可以实现无人机的状态估计、目标跟踪和控制算法等功能。这些算法可以通过Matlab等工具实现和测试。<span class=&quot;em&quot;>1</span><span class=&quot;em&quot;>2</span><span class=&quot;em&quot;>3</span> #### 引用[.reference_title] - *1* *2* [卡尔曼滤波扩展卡尔曼滤波、无迹卡尔曼滤波、库图尔卡尔曼滤波、M-估计、鲁棒立方卡尔曼滤波器实现无人机...](https://blog.csdn.net/weixin_46039719/article/details/130114501)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2&quot;}}] [.reference_item style=&quot;max-width: 50%&quot;] - *3* [无名科创开源飞控-电路方案](https://download.csdn.net/download/weixin_38685600/16788482)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2&quot;}}] [.reference_item style=&quot;max-width: 50%&quot;] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值