吉林大学TARS-GO战队视觉代码

介绍本代码是吉林大学TARS-GO战队Robomaster2020赛季步兵视觉算法 , 主要模块分为装甲板识别、大风车能量机关识别、角度解算、相机驱动及串口/CAN通信 。
1.功能介绍

  • 装甲板识别 ,检测敌方机器人装甲板位置信息并识别其数字
  • 大风车能量机关识别 ,检测待激活大风车扇叶目标位置信息
  • 角度解算, 根据上述位置信息解算目标相对枪管的yaw、pitch角度及距离
  • 相机驱动 ,大恒相机SDK封装 , 实现相机参数控制及图像采集
  • 串口/CAN通信 ,与下位机通信 , 传输机器人姿态信息及操作手反馈视觉的控制信息
2.效果展示装甲板识别装甲板识别采用基于OpenCV的传统算法实现装甲板位置检测 , 同时采用SVM实现装甲板数字识别 。 考虑战场实际情况 , 机器人可打击有效范围在1m~7m之间 , 在此范围内 , 本套算法装甲板识别率达98% , 识别得到装甲板在图像中四个顶点、中心点的坐标信息 。
**EnemyColor = BLUE; TargetNum = 1**
吉林大学TARS-GO战队视觉代码文章插图
**EnemyColor = RED; TargetNum = 2**
吉林大学TARS-GO战队视觉代码文章插图
在640*480图像分辨率下 , 装甲板识别帧率可达340fps左右 , 引入ROI之后可达420fps 。 但考虑到识别帧率对于电控机械延迟的饱和 , 取消引入ROI操作 , 以此避免引入ROI之后无法及时探测全局视野情况的问题 , 加快机器人自瞄响应 。
【吉林大学TARS-GO战队视觉代码】**640\*480(峰值可达340FPS)**
吉林大学TARS-GO战队视觉代码文章插图
**320\*240(峰值可达1400FPS)**
吉林大学TARS-GO战队视觉代码文章插图
装甲板数字识别采用SVM , 通过装甲板位置信息裁剪二值化后的装甲板图像并透射变换 , 投入训练好的SVM模型中识别 , 数字识别准确率可达98% 。
吉林大学TARS-GO战队视觉代码文章插图
大风车能量机关识别
吉林大学TARS-GO战队视觉代码文章插图
角度解算角度解算方面使用了两种解算方法分距离挡位运行 。 第一档使用P4P算法 , 第二档使用小孔成像原理的PinHole算法 。 此外还引入了相机-枪口的Y轴距离补偿及重力补偿 。 使用标定板测试 , 角度解算计算的距离误差在10%以内 , 角度基本与实际吻合 。
吉林大学TARS-GO战队视觉代码文章插图
吉林大学TARS-GO战队视觉代码文章插图
/** *@brief: detect and delete error armor which is caused by the single lightBar 针对游离灯条导致的错误装甲板进行检测和删除 */void eraseErrorRepeatArmor(vectorvector::iterator it = armors.begin(); for (size_t i = 0; i < length; i++)for (size_t j = i + 1; j < length; j++){if (armors[i].l_index == armors[j].l_index ||armors[i].l_index == armors[j].r_index ||armors[i].r_index == armors[j].l_index ||armors[i].r_index == armors[j].r_index){armors[i].getDeviationAngle() > armors[j].getDeviationAngle() ? armors.erase(it + i) : armors.erase(it + j);}}}
  1. 装甲板数字识别匹配好装甲板后 , 利用装甲板的顶点在原图的二值图(原图的灰度二值图)中剪切装甲板图 , 使用透射变换将装甲板图变换为SVM模型所需的Size , 随后投入SVM识别装甲板数字 。