Skip to content

Repository files navigation

基于RoboMaster比赛自瞄系统的卡尔曼滤波器教程

项目简介

这是一个用于学习卡尔曼滤波器的交互式教程项目,通过实现二维装甲板跟踪系统来帮助理解卡尔曼滤波的原理和应用。仓库内包含教程PDF文档和以RoboMaster比赛中自瞄系统为背景的代码填空练习。

项目特点

  • 📚 交互式学习:通过 Jupyter Notebook 提供逐步指导
  • 🎯 实战应用:基于真实的装甲板检测数据进行跟踪
  • 📊 可视化展示:实时显示跟踪结果、预测轨迹和误差
  • 🔧 填空式教学:通过完成 TODO 项目深入理解算法原理

项目结构

Kalman-Filter-Tutorial/
├── kalman_filter_tutorial.ipynb          # 完整版教程(含答案)
├── kalman_filter_tutorial-todo.ipynb     # 练习版教程(待填空)
├── kalman_armor_tracker.py               # Python 脚本版本
├── data/                                 # 数据目录
│   ├── corners_shuffle.txt              # 随机移动轨迹数据
│   ├── corners_uniform.txt              # 匀速移动轨迹数据
│   ├── video_shuffle.mp4                # 随机移动视频
│   └── video_uniform.mp4                # 匀速移动视频
├── scripts/                              # 辅助脚本
│   └── draw_corners_on_video.py         # 视频可视化脚本
└── README.md                             # 项目说明文档

功能特性

卡尔曼滤波器实现

  • 状态向量:[x, y, vx, vy] - 包含位置和速度
  • 运动模型:恒定速度模型(CV Model)
  • 可调参数
    • 位置过程噪声(POSITION_PROCESS_NOISE)
    • 速度过程噪声(VELOCITY_PROCESS_NOISE)
    • 观测噪声(MEASUREMENT_NOISE)
    • 初始不确定性(INITIAL_UNCERTAINTY)

跟踪功能

  1. 实时跟踪:基于视频帧的装甲板实时跟踪
  2. 未来预测:预测指定时间后的目标位置
  3. 误差计算:对比预测位置与真实位置,计算预测误差
  4. 轨迹可视化:显示历史轨迹、当前跟踪位置和预测位置

环境要求

Python 版本

  • Python 3.7+

依赖库

pip install numpy opencv-python jupyter

教程内容

第一部分:基础知识

  1. 导入库和配置:配置项目所需的依赖和参数

  2. 卡尔曼滤波器类:实现核心算法

    • 状态转移矩阵 A
    • 观测矩阵 H
    • 过程噪声矩阵 Q
    • 观测噪声矩阵 R
    • 预测(Predict)步骤
    • 更新(Update)步骤
  3. 数据解析:读取装甲板检测数据

  4. 跟踪逻辑:实现完整的跟踪流程

第二部分:可视化

  • 绿色:当前帧检测结果
  • 蓝色:历史跟踪轨迹
  • 紫红色:当前跟踪位置
  • 红色:预测未来位置
  • 黄色:未来真实位置(Ground Truth)

第三部分:进阶(附加题)

Singer 模型:学习如何跟踪高机动性目标

数据格式说明

角点文件格式(corners.txt)

frame_id armor_idx color number conf conf_class x1 y1 x2 y2 x3 y3 x4 y4
0 0 1 5 0.95 0.98 100.0 200.0 150.0 200.0 150.0 250.0 100.0 250.0
...

字段说明

  • frame_id:帧编号
  • armor_idx:装甲板索引
  • color:颜色标识
  • number:数字标识
  • conf:置信度
  • conf_class:分类置信度
  • x1-y4:四个角点坐标

调参建议

噪声参数调优

  1. 位置过程噪声(POSITION_PROCESS_NOISE = 1.0)

    • 增大:对模型预测信任度降低,更依赖观测
    • 减小:对模型预测信任度增加,平滑效果更强
  2. 速度过程噪声(VELOCITY_PROCESS_NOISE = 10.0)

    • 增大:允许速度有更大变化,适应性更强
    • 减小:速度变化更平稳,适合匀速运动
  3. 观测噪声(MEASUREMENT_NOISE = 10.0)

    • 增大:对观测数据信任度降低,滤波效果更强
    • 减小:对观测数据信任度增加,跟随性更好

针对不同场景

  • 匀速运动:减小速度过程噪声,增大观测噪声
  • 随机运动:增大速度过程噪声,适当减小观测噪声
  • 观测噪声大:增大观测噪声参数,提高滤波效果

常见问题

Q1: 视频无法打开

A: 请检查视频文件路径是否正确,确保 OpenCV 支持该视频格式。

Q2: 预测误差很大

A: 尝试调整噪声参数,特别是速度过程噪声和观测噪声的比例。

Q3: 跟踪不稳定

A: 可能是初始化问题或噪声参数不合适,尝试:

  • 检查初始不确定性设置
  • 调整过程噪声和观测噪声的平衡
  • 确保数据质量良好

Q4: 如何添加自己的数据?

A: 按照角点文件格式准备数据,确保包含帧编号和四个角点坐标。

学习路径

  1. ✅ 完成基础教程,理解卡尔曼滤波的预测-更新循环
  2. ✅ 实验不同的噪声参数,观察对跟踪效果的影响
  3. ✅ 尝试在 shuffle 和 uniform 两种数据上的表现差异
  4. ✅ (进阶)实现 Singer 模型,处理高机动性目标
  5. ✅ (扩展)将算法应用到自己的项目中

参考资料


祝学习愉快!🎉

About

这是一个用于学习卡尔曼滤波器的交互式教程项目,通过实现二维装甲板跟踪系统来帮助理解卡尔曼滤波的原理和应用。仓库内包含教程PDF文档和以RoboMaster比赛中自瞄系统为背景的代码填空练习。

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages