本项目记录了在 MaixCam 上使用卡尔曼滤波跟踪 AprilTag 的几个练习版本。程序通过 find_apriltags() 获取标签检测结果,把位置、速度以及目标框尺寸作为观测量输入滤波器,再将预测框绘制到图像上,用于观察不同状态模型的跟踪效果。
位置滤波:只估计目标位置,标签丢失时无法继续向前预测。位置滤波_持续预测:在短时丢失检测结果时继续执行预测,但由于状态中没有速度项,预测框会停留在原位置附近。位置和速度滤波:把位置与速度一起纳入状态量,可以得到更平滑的跟踪结果。位置和速度滤波2:位置与速度模型的另一版实现。位置和速度滤波-持续预测:在位置与速度模型基础上加入持续预测。位置和速度滤波-持续预测30帧:最多在连续 30 帧未检测到标签时继续预测,用来观察短时遮挡情况下的表现。位置-速度-高宽持续滤波:进一步把目标框宽高加入状态量,同时估计位置、速度和框尺寸。位置-速度-高宽持续滤波30帧:上一版本的 30 帧持续预测实验。卡尔曼滤波.docx:课程学习过程中整理的补充说明。
- 硬件:MaixCam
- 被跟踪目标:AprilTag 标签
- 主要依赖:
maix、numpy
- 使用摄像头采集图像并检测 AprilTag。
- 将标签位置或位置、速度、宽高等信息作为观测量输入卡尔曼滤波器。
- 通过预测步骤和更新步骤估计目标状态。
- 用红色框绘制滤波结果,用绿色框绘制当前检测结果,便于对比观察。
- 根据需要进入对应实验目录。
- 将目录中的
main.py部署到 MaixCam 运行。 - 把 AprilTag 放到摄像头视野中,观察检测框与预测框的变化。
- 这些代码以学习和实验为主,重点是比较不同状态建模方式对跟踪效果的影响。
- 参数
F、Q、R等均可继续调整,不同运动速度和噪声条件下效果会有明显变化。 - 部分版本使用毫秒时间间隔,是基于当时实验效果做出的取舍。