Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

2 Commits

Repository files navigation

RM 雷达机器人视觉定位项目

这个项目是 Robomaster 赛场上使用的雷达机器人感知方案,核心逻辑是双目相机 + 雷达点云联合定位。代码本身是前人留下来的,后续维护工作主要集中在修复兼容问题、更新模型和调整参数。当前项目已经不再处于主流方案的前沿位置,随着算法迭代速度加快,现阶段多数方案已经转向单目相机仿射变换等方式,原有的双目 + 雷达联合定位方案逐渐被淘汰。

这套代码的价值在于它确实完整地实现了一条感知链路:

  • 相机图像采集
  • 车辆和装甲板检测
  • 点云录播和预处理
  • 四点标定与地图投影
  • 深度和 3D 定位
  • 共享内存和串口输出

本仓库并不是一个纯研究型项目,也不是一个单独训练脚本,而是一个直接服务于比赛机器人上的工程代码。它的主要特点是功能齐全、依赖较重、参数敏感、运行环境要求严格。


1. 项目背景

这个项目的实现方式是典型的双目视觉 + 点云融合:

  • 双目相机负责目标识别和图像信息获取
  • 雷达点云提供空间几何信息
  • 标定和地图转换用于把图像中的目标变成世界坐标系中的位置
  • 最终输出给底层控制和决策模块

从代码结构来看,项目已经具备一套较完整的感知流程:

  • 相机驱动
  • 图像缓存和共享内存
  • 车辆与装甲板检测
  • 点云处理
  • 四点标定
  • 深度与位置恢复
  • 串口通信

但它的局限也很明显:

  • 依赖较多的硬件、环境和配置参数
  • 标定误差会直接放大定位错误
  • 视觉和雷达的融合稳定性受环境影响很大
  • 这套方案在现在的算法路线里已经不是主流选择

随着比赛和研究方向变化,当前更常见的是单目相机仿射变换、单目几何估计,以及更轻量的定位方案。相对而言,这个仓库更像是一个历史阶段的工程实现,不再是当前主力方案。


2. 代码结构

radar_src/
├── main.cpp
├── camera/
│ └── mvcamera/
├── image_preprocess/
├── workspace/
│ ├── workspace.h
│ ├── workspace.cpp
│ ├── public/
│ ├── threads/
│ ├── infer/
│ ├── radar/
│ ├── four_point_locate/
│ ├── map_mapping/
│ ├── logger/
│ ├── tools/
│ └── UART/
└── ...

几个核心模块:

  • camera/mvcamera:相机驱动和相机参数读取
  • workspace/infer:车辆和装甲板推理,基于 TensorRT 运行 YOLO 系列模型
  • workspace/four_point_locate:手动标定与地图点处理
  • workspace/map_mapping:坐标转换和深度映射
  • workspace/radar:雷达点云播放、录制和过滤
  • workspace/threads:各类线程入口,如采图、图像处理、定位、串口读写
  • workspace/UART:串口通信和消息输出

3. 主要功能模块

3.1 双目相机采集

相机模块负责:

  • 打开和关闭相机
  • 读取实况帧和回放视频
  • 加载相机内参、畸变参数和外参
  • 从配置中读取标定文件
  • 支持在不同模式下切换

这部分是整个系统最基础的输入层,参数不对,后面所有结果都没有意义。

3.2 目标检测

检测模块位于 workspace/infer 下:

  • car_infer:车辆目标检测
  • armor_infer:装甲板检测
  • yolov5:推理前后处理和 TensorRT 相关逻辑

模型文件位于 workspace/infer/models 下,通常会有不同版本的 engine 用来迭代和切换。这个模块的更新频率比较高,参数、阈值和网络版本都会直接影响最终结果。

3.3 四点标定和地图投影

这一部分主要负责:

  • 读取地图点和图像点
  • 手动四点标定
  • 将装甲板位置映射到地图坐标系
  • 利用相机外参和深度信息恢复 3D 坐标

这块是整个方案最容易出问题的地方之一。因为它不是纯视觉算法,而是把图像坐标和真实世界坐标拼接在一起,所以标定和参数差一点,定位就会很明显偏。

3.4 雷达点云处理

雷达部分负责:

  • rosbag 点云回放与录制
  • 点云预处理
  • 聚类与滤波
  • 异常点剔除
  • 提供视觉系统额外的空间信息

代码中也能看到卡尔曼滤波、滑动窗口增益和聚类逻辑,说明该模块在项目中不仅仅是“拿来看看”,而是用于减少噪声、提升定位稳定性。

3.5 串口与共享内存

除了视觉和点云,项目还使用了:

  • 共享内存进行图像和状态交换
  • 串口与下位机或裁判系统交互
  • 多线程收发和状态更新

这意味着最后的感知结果不是仅停留在本地,而是要真正进入控制和决策链路。


4. 运行流程

主程序入口在 main.cpp,流程大致为:

  1. 初始化 ROS 节点
  2. 创建 Workspace 实例
  3. 读取全局参数
  4. 打开共享内存
  5. 打开相机或读取视频
  6. 完成四点标定
  7. 初始化串口
  8. 进入主循环执行图像处理与定位
  9. 程序退出前释放资源

核心逻辑可以概括为:

启动 -> 取图 -> 检测 -> 定位 -> 输出

这套流程在工程中运行时,最关键的问题不是“是否能跑起来”,而是最终稳定性和参数一致性。


5. 技术栈

这个项目的核心依赖包括:

  • C++
  • ROS / rosbag
  • OpenCV
  • PCL
  • Eigen
  • CUDA / TensorRT
  • Linux 环境
  • 共享内存
  • 串口通信

它是典型的比赛机器人端代码,不是纯python脚本,也不是单机仿真工程。


6. 当前项目状态

从工程现实角度来说,这个仓库已经处于“历史实现”状态:

  • 双目相机 + 雷达联合定位在当前算法迭代中已经不是主线方案
  • 后续更多是单目相机仿射变换、几何估计和更轻量的定位方法
  • 原有方案在代码层面仍然可用,但它已经不再适合继续作为当前主方案长期维护

因此,这个项目现在更像是:

  • 已完成的工程实现
  • 具备一定比赛价值的历史方案
  • 用于维护和参考的过渡代码

它不再是现在主流的定位路线,但仍然保留了可参考的框架和算法实现。


7. 维护上的实际情况

这个代码库的维护重点不是“写新算法”,而是:

  • 修复已有代码在新环境下的兼容性问题
  • 更新引擎和模型参数
  • 调整比赛场地对应的标定和阈值
  • 处理共享内存、串口和多线程同步的问题
  • 维持这套方案在现有机器上的运行稳定性

实际面对的问题通常包括:

  • 相机参数变化导致定位偏差
  • 模型版本更新后检测结果不稳定
  • 点云噪声和视觉结果对应不上
  • 标定和实际场地环境不一致
  • 线程同步或状态共享出现异常

这些问题都不是单点问题,而是整套系统一起出的问题。


8. 结论

这个项目的本质是:

  • 早期/历史阶段的双目视觉 + 雷达融合定位方案
  • 完整的机器人感知链路实现
  • 主要用于比赛场景中的目标识别和定位

但从当前算法迭代来看,这套方案已经逐渐被更新的单目仿射变换和更轻量的定位方式替代。也就是说,仓库本身仍然有参考价值,但它已经不属于当前主流技术路线,不再是后续主要开发方向。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages