轻量可移植的 RoboMaster 飞镖引导灯视觉系统(无 ROS、单进程 C++20)。 同一套代码可构建到 x86(调试/部署)与 32 位 ARM(RV1106 / 树莓派 Zero 2W 类)。
参考并重写了 rmvision_dart、
wust_dart_vision、
wust_dart_rack 与
西工大 WMJ RM2025 飞镖技术报告
(对比结论见仓库外 reports/comparison.md)。
- 三线程流水线:采集 → 处理 → 1kHz 控制输出,有界队列丢旧留新保实时;
- 绿灯检测:HSV 绿域 ∪ 2G−R−B 绿色优势双掩码 + Otsu 自适应阈值 + 闭运算/填洞
- 半径/圆度/填充率/宽高比筛选 + 最小二乘圆拟合打分 + 局部圆环对比度抗反光 (远距自动放宽圆度);
- 跟踪:四态状态机 + 3D 常速度 KF + 水平角自适应 KF + 发送时刻外推;
- 解算:圆 PnP(已知半径,ITERATIVE)或方形角点 PnP(IPPE)可配置;
- 串口协议:0xA5/0x5A 帧 + RM 经典 CRC16 + 帧头同步状态机(粘包/半包安全);
- 相机抽象:UVC 相机 / 视频文件回放(无硬件调试),海康等后端可扩展;
- 工程化:toml 全参数配置、异步录像(电控串口指令启停)、systemd 部署脚本、
自包含 3rdparty(无需网络、无 git 子模块)、Release 下依然生效的单元测试、
自带棋盘格标定工具(
dart_calibrate)。
# 依赖:OpenCV 4.x(含 video 模块)、Eigen3、cmake ≥ 3.16
./scripts/run.sh # 构建(自动 -DDART_X86=ON 开启调试窗)+ 跑测试./build/dart_vision_app config_replay.toml true
# 读取 test/data/smoke.avi(合成绿圆视频)循环回放;true=弹出检测/跟踪调试窗
# 换自己的录像:改 config_replay.toml 的 path(支持 .avi/.mp4)
# loop=false 时视频播完自动退出;窗口按 Q/ESC 关闭后 Ctrl-C 结束调试画面有三种途径(可并存):
| 途径 | 用法 | 适用场景 |
|---|---|---|
| OpenCV 窗口 | debug=true(run.sh 默认 DART_X86) |
有桌面的本机 |
| PulseScope(你的本地工具) | [pulsescope] enable=true + ~/PulseScope/backend 起后端 |
时序图 + 在线调参(改曝光)+ 视频,见 docs/pulsescope.md |
| 内置 MJPEG 流 | [app] enable_mjpeg=true → http://localhost:8080 |
无显示环境/SSH 的保底方案 |
./build/dart_vision_app config.toml false # 按 config.toml 接相机与电控相机标定(棋盘格,输出可直接粘进 config.toml):
./build/dart_calibrate --source 0 --grid 9x6 --cell 25 # SPACE 抓帧 20+ 张,C 标定调试窗:本机构建(run.sh 默认 -DDART_X86=ON)下 debug=true 会弹 OpenCV 窗口
实时显示检测/跟踪结果(调参流程见 docs/calibration.md);无显示环境传 false。
export RV1106_TOOLCHAIN=/path/to/arm-rockchip830-linux-uclibcgnueabihf
export RV1106_SYSROOT=/path/to/sysroot # 可选
export OpenCV_DIR=/path/to/opencv-armhf/lib/cmake/opencv4
./scripts/run.sh arm # 产物在 build-arm/
./scripts/scp.sh pico@192.168.1.33 /home/pico # 推送到板子
# 板子上:cd /home/pico && sudo ./setup_service.sh install (systemd 自启+自愈)src/app/ 入口与总装(三线程编排)
src/dart_vision/ 核心库:common / camera / detector / tracker / solver / comm / record
config.toml 全参数配置(检测/跟踪/PnP/串口/录像)
test/ 单元测试 + 冒烟素材(ctest)
docs/ architecture / protocol / calibration
scripts/ run.sh / scp.sh / setup_service.sh
cmake/ toolchain-armv7.cmake(RV1106 交叉编译)
3rdparty/ asio 1.30.2 + toml++ 3.4.0(header-only,自包含)
- 单目 PnP 远距离测距精度有限;需要高精度测距可参考 rmvision_dart 的 Livox 雷达融合(中位数+MAD+距离滤波)思路接入。
- 目标为单一绿灯;多灯/灯条对(能量机关等)需另写配对逻辑。
- 交叉编译的 OpenCV 需目标板同架构(armhf)预编译版本。