![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
0 前言
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
上一篇围绕卡尔曼滤波算法的参数选取问题展开,针对非线性对象的状态估计问题,阐述扩展卡尔曼滤波(EKF)与卡尔曼滤波的区别以及扩展卡尔曼滤波算法的核心步骤。本篇将结合实际案例进行详解,同时,提供一种扩展卡尔曼滤波算法的C++代码实现方案。
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
1 扩展卡尔曼滤波实例
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
这里以无人驾驶的测量障碍物的实际案例为例子展开,如下图所示,毫米波雷达能够测量障碍物在极坐标下离雷达的距离 、方向角 以及距离的变化率(径向速度),如下图所示。
![5bd88396b67e85ea8e1b2d720d133179.png](https://i-blog.csdnimg.cn/blog_migrate/e29061162242d6825485573465ddb655.jpeg)
预测更新
![0c36b2981e54ffa43d23756cbc09d1e2.png](https://i-blog.csdnimg.cn/blog_migrate/249f6b027a762fadf0203e48887baebc.png)
![967a83b7a64921f4a332ff0a8c165e6c.png](https://i-blog.csdnimg.cn/blog_migrate/d63257630768e4b768463a49624bf5a9.png)
![87816727ed0b5dea8c190d677646feca.png](https://i-blog.csdnimg.cn/blog_migrate/1896504e13f8cb5239ad4a472f350c77.png)
量测更新
![f033b9c7c8eb46f7aa138c637cbff4ab.png](https://i-blog.csdnimg.cn/blog_migrate/f933acfd1083789444d6041dfe664c1f.png)
![b0ebcb53e047316bbcf3c9829533197a.png](https://i-blog.csdnimg.cn/blog_migrate/7703eee4f5e531906d631d9e5308b7ee.png)
此时,我们需要对H矩阵进行泰勒展开(线性化),得到其Jacobian矩阵,求解方法详解上一篇,这里不再赘述。
![8b8ee3e7adc9c0c4f63c3e10fb82ff4e.png](https://i-blog.csdnimg.cn/blog_migrate/5a2d938c4457d43b10bdf3eb4bbfc015.png)
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
2 扩展卡尔曼滤波的C++实现方案
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
完成以上推导后,我们将推导的过程写成代码。这里采用矩阵运算库Eigen进行矩阵运算,其运算效率较高,与自定义的矩阵运算库相比也更省心。
ExtendedKalmanFilter类的实现
![050e1d7743af04f462e4b57c45909573.png](https://i-blog.csdnimg.cn/blog_migrate/2ce6f9ef79531a93ae33e150e40673e3.png)
![1058dfa3364d518d4c3a808abeb24ffa.png](https://i-blog.csdnimg.cn/blog_migrate/02d0c80d93fd77d0dadb197e0eb0bf8e.png)
![437367db50e2aed8b9a7191a0cb4829c.png](https://i-blog.csdnimg.cn/blog_migrate/82b0fd3431f3ab9fb0effe28f0858084.png)
![1c98e3192aaf88e8dada971c2b5b5a9e.png](https://i-blog.csdnimg.cn/blog_migrate/7ab659f10c5e4c5b7c19874109c25b7c.png)
扩展卡尔曼滤波器的调用
![1144ee62a57c27874debb1b9d6217b20.png](https://i-blog.csdnimg.cn/blog_migrate/c99416c84339a621c3b8a03eaf71ac99.png)
![697333f4ccad43eb8799753a33dee086.png](https://i-blog.csdnimg.cn/blog_migrate/622510af4f007cd87d9bb2c011855638.png)
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
3 总结
![a3e1a945b55667c14d4e7c3a59195efd.png](https://i-blog.csdnimg.cn/blog_migrate/ddf4aa4f0d8dd1cb7a00886b3cbadf0c.png)
本篇围绕一个简单的案例展开,详解扩展卡尔曼滤波算法的实现,同时,提供了一种采用Eigen矩阵运算库的c++实现方案。下篇中,我们将围绕多传感器状态估计的最优估计问题展开论述。