面向 RoboMaster 场景的视觉项目,使用 C++、OpenCV 和 Eigen 实现装甲板检测、三维位姿解算与运动状态估计。系统支持视频回放和摄像头输入,通过单板或四板扩展卡尔曼滤波器(EKF)生成目标的当前位姿与未来预测,并提供画面显示、录像和数据记录。
项目以视觉处理为核心,坐标转换、下位机通信与云台控制仍在开发和实物联调中。
视频 / 摄像头
↓
图像采集与时间戳
↓
灯条提取与装甲板匹配
↓
PnP 三维位姿解算
↓
单板 EKF / 四板 EKF
↓
当前状态估计与未来位姿预测
↓
画面叠加、录像与数据记录
视频回放和未连接下位机的摄像头模式在相机坐标系下进行估计。连接下位机的摄像头模式通过姿态反馈,在 PnP 与 EKF 之间加入相机系到基座系的转换,再将预测结果交给控制接口。
统一读取视频或摄像头图像,维护帧号与时间戳,为逐帧处理和运动预测提供输入。视频按源帧率建立时间信息,摄像头使用实际采集时间。
通过目标颜色差分与亮度筛选提取候选区域,再根据轮廓面积、长宽比、填充率和方向筛选灯条。配对阶段综合比较灯条方向、长度及相对位置,对候选装甲板评分并去除冲突,输出装甲板角点。
结合相机标定参数、装甲板尺寸与图像角点,使用 PnP 求解位置和朝向。通过正深度、重投影误差和短时朝向连续性筛选候选解,并整理为滤波器使用的观测。
系统提供两种 EKF 模型:
| 模型 | 跟踪对象 | 处理方式 |
|---|---|---|
| 单板模型 | 一块装甲板 | 估计三轴位置、速度、朝向与角速度,使用最近观测修正状态 |
| 四板模型 | 车体及四块装甲板 | 统一估计车体中心运动、转动与几何参数,关联板号后联合融合多板观测 |
两种模型均在首次有效观测时初始化,后续根据帧间时间先预测、再更新。缺少有效观测时仅进行模型预测;未来几何由当前状态外推生成。
在图像上叠加灯条、装甲板轮廓及预测几何,使用实线与虚线区分当前估计和未来预测。同时保存处理后的视频和观测、预测等数据,便于回放与分析。
项目提供两个入口:
- Armor.cpp:完整视觉流程,连接采集、检测、PnP、EKF、结果输出及可选控制接口。
- Armor_detect.cpp:前端验证流程,保留采集、检测、PnP 与画面输出,不进行 EKF 运动预测。
| 模块 | 主要职责 |
|---|---|
| camera | 视频与摄像头采集、帧号和时间戳管理 |
| lightbar_detector | 灯条筛选、装甲板匹配与检测结果绘制 |
| solver | PnP 位姿解算、候选筛选与短时关联 |
| predictor_single | 单板 EKF 状态估计与预测 |
| predictor_armor | 四板关联、车体状态估计与联合更新 |
| video_output | 图像叠加、预览与录像 |
| log_output | 观测、预测及运行数据记录 |
| pose_base | 相机系与基座系转换,实物标定与验证待完善 |
| serial / gimbal | 下位机通信与云台控制接口,仍在联调 |
主要模块以头文件声明接口、源文件实现功能,入口程序负责流程调度,便于复用和分步验证。
- C++17:主体程序与算法实现。
- OpenCV:图像采集、轮廓处理、PnP 与视频显示和保存。
- Eigen:矩阵运算、坐标变换和 EKF 计算。
- CMake:项目构建管理。
- Python:结果绘图与数据分析。
当前摄像头采集和串口实现主要面向 Windows。
项目已具备视频回放和摄像头输入下的核心视觉处理流程,可以展示装甲板检测、位姿解算及单板、四板预测结果。坐标转换与云台控制已有接口和实现,但相机安装外参标定、通信及实物闭环验证仍需完善,离线模拟结果不代表实物控制已完成。
检测效果受光照、模糊和遮挡影响;位姿解算依赖相机标定、角点质量与装甲板尺寸假设。当前模型主要针对单个目标车体,不具备完整的多车身份管理。突变运动或长时间漏检可能导致预测漂移,实际预测精度需要结合对应未来时刻的观测或真值评估。