littlebot
Published on 2025-04-03 / 3 Visits
0

【源码】基于C++和Eigen库的扩展卡尔曼滤波器实现

项目简介

本项目基于C++和Eigen库实现了扩展卡尔曼滤波器(Extended Kalman Filter, EKF),其目的是融合激光雷达和毫米波雷达的测量数据,以此精确估计行驶中的汽车和自行车位置。项目源自Udacity的自动驾驶汽车工程师课程,并且可以通过模拟器进行可视化展示。

项目的主要特性和功能

  • 传感器融合:将激光雷达和毫米波雷达的测量数据进行融合,提升位置估计的准确性。
  • 扩展卡尔曼滤波器:运用EKF进行状态估计,能够处理非线性测量模型。
  • 模拟器支持:提供模拟器,可对滤波器的结果进行可视化展示。
  • 实时数据处理:借助WebSocket通信实时处理传感器数据,并返回估计结果。

安装使用步骤

1. 环境配置

选择一:Ubuntu Bash

  • 在Windows 10系统上安装Ubuntu Bash,参考安装步骤
  • 安装uWebSockets所需依赖库,如cmake、libssl-dev、openssl等。
  • 运行项目提供的install-linux.sh脚本,或手动安装uWebSockets。

选择二:虚拟机

  • 下载并使用Udacity提供的虚拟机,虚拟机下载地址为这里
  • 虚拟机中Linux系统的密码为udacity-nd

2. 编译项目

  • 进入项目文件夹,创建并进入build目录: bash mkdir build && cd build
  • 使用CMake生成Makefile并编译项目: bash cmake .. && make
  • 编译成功后,运行生成的可执行文件: bash ./ExtendedKF

3. 运行模拟器

打开模拟器,加载项目数据集,观察滤波器的结果。

4. 代码结构

  • FusionEKF.cpp:实现融合扩展卡尔曼滤波器,处理传感器数据的初始化、预测和更新。
  • kalman_filter.cpp:实现卡尔曼滤波器的核心功能,包括初始化、预测和更新步骤。
  • main.cpp:主程序,处理WebSocket通信,调用FusionEKF进行状态估计,并计算RMSE。
  • tools.cpp:辅助函数,如计算RMSE和雅可比矩阵。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】