Skip to content

XDRM-IRobot/RM2018Vision

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AutoCar

This program is detect the armor of robomaster robot, for Robomaster2018.

Get started

目前版本的性能: 小装甲识别耗时20ms以下, 平均16ms, 偶尔会有跳变,不会超过30ms 大装甲识别耗时平均在20ms, 产生跳变后, 耗时控制在 35ms以下

Software Requirements

  • Ubuntu14.04 or Ubuntu16.04
  • OpenCV 3.0.0 or higher
  • CMake 3.1 or higher

Build and Run

mkdir build
cd build
cmake ..
make
./autocar 

Modules:

common

这是程序主框架, 包含程序入口和线程控制, 在main.cpp中构造 ImageConsProd 对象, 每个对象都对应一个摄像头, 传入xml配置文件即可, 加入std::thread实现多摄像头读取.

detect_factory

这是检测算法模块, 包括 :

  • struct armor_param (装甲板参数, 全部是检测算法的阈值)
  • struct armor_info (装甲板结构体, 包括目标区域和移动速度, 用于后续弹道预测),
  • struct armor_pos (装甲板的姿态, 包括角度和距离信息, 用于角度解算)
  • class armor_detect (检测算法的主体部分)

说明:

armor_detect在 ImageConsProd 主线程中调用 detect 方法 , 传入 cv::Mat src 与 装甲板vector容器, 检测到灯条会返回1 , 无灯条会返回0 , 该返回值暂时无用途, 只是预留.

slover

这是解算位姿信息的模块, 包括:

  • angle_solver (角度解算器, 需要传入摄像头的一系列参数构造, 包括相机云台的坐标系关系)
  • angle_solver_factory (角度解算工厂, 用不同的解算器构造)
  • armor_recorder (记录历史识别信息, 然后对当前识别信息做筛选)

说明:

由detect_factory模块得到的装甲板vector容器需要传入armor_recorder进行整合,最后返回一个armor_pos即最终结果.(多装甲板的决策算法还需要改进).

driver

驱动模块:

  • camera_driver (构造 ImageConsProd 对象时传入的xml配置文件会构造camera实例, 其中会包括相机云台的坐标系关系, /dev/video* 的绑定方法见 /doc/*.ruls示例 )
  • serial (串口模块, listen以5ms频率接收云台陀螺仪信息, publish随主线程发送)

串口协议:

[state | angle_Yaw | angle_Pitch | distance]

utility

程序的调试模块,包括记录运行时间 time_cost, 绘制调试信息draw, 录制视频video_recorder.

extra

armor_sample

运行该程序获取装甲板的训练集 这是一个曾经迭代版本的装甲识别算法,删减了部分检测算法,使得它可以在高识别armor的同时,误识别很多作为负样本进行训练.

train

设置一些参数后,运行该程序模块通过armor训练集得到最后的分类器.

Copyright and License

Copyright (c) 2018 Robomaster, Xidian University. AutoCar is provided under the BSD-2.