【RM2021-视觉算法代码开源】四川大学RMUC-磁海火锅战队
![皮卡](https://hz-rm-bbs-web-prod.oss-cn-hangzhou.aliyuncs.com/avatar/pre/v1/000032805_avatar_big.jpg)
四川大学RoboMaster火锅战队视觉组工程
Hot-Pot Team of RMUC of SCU - Vision R & D Group
Hot-Pot Team of RMUC of SCU - Vision R & D Group
团队介绍
四川大学火锅战队是全国大学生机器人大赛RoboMaster机甲大师赛 四川大学代表队,由来自计算机、软件、机械、电气等不同学院不同年级的35个热爱机器人的同学组成。每年九月,战队根据比赛规则设计制作5~6个完备的机器人,到第二年五月代表四川大学参加机甲大师赛。战队在15—17赛季比赛中名为“AK”,18赛季比赛正式改名为“火锅”,“火锅”俗而不失其韵,取自于日常生活,极富四川地方特色。寓意是希望战队的战斗力能如火锅般沸腾,战队的成绩能像火锅一样红红火火。
SCURM视觉组是火锅战队下的一个分组,负责为机器人提供视觉支撑。视觉组主要通过迈德威视、Openmv、Zed摄像头收集图像信息以及通过MiniPC,NX等硬件进行数据处理,让火锅战队的战斗水平更上一层楼
项目特色
本方案是纯Python项目,容易调试,支持中文且友好的通用调试输出模块,支持图像调试输出,多进程调度,进程间通信,进程自动管理、自动监视与重启,异常捕获,日志保存,支持SCURM串口通信协议2.0(类UDP协议,支持路由,完整性校验,多数据格、裁判系统转发等多功能),支持迈德威视、ZED、大恒(代码暂未测试,后续会支持)、USB通用摄像头等,支持NUC、MiniPC、台式机、Nvidia Jetson TX2 / Jetson Xavier NX / Nano、妙算、树莓派等,运行效率较高,在i5-8259U+8G内存下运行Opencv-1280*1024分辨fps80~100,同分辨率在nx上运行yolo模型帧率50+,在nx上配合zed相机运行yolo帧率40+。本项目还集成了相机色彩校准模块,可以自动调整曝光白平衡色彩增益等参数。
使用授权
本项目原则上授权任何队伍复制、使用和公开项目内代码或其他内容,但不得用于商用,本项目全部开源代码及其文档遵CC BY-NC-SA 4.0与GPL v3协议,您在使用和浏览的过程中必须遵守上述所规定的协议。一旦您下载或者使用本项目,表示你已经完全理解并完全同意上述协议约束条件,并愿意承担违背上述协议所规定内容的全部后果。
项目地址
完整项目文档与代请前往SCURM视觉组手册 - Wiki 分享
· 核心程序
本模块负责视觉上位机的进程启动、调度、通信以及相机、识别、预测的调度框架
· 其他模块
本模块主要是其他附加模块合集,包括相机、串口、工具、调试等模块实现部分
串口模块
本文档详细介绍了串口通信模块2.0的相关原理
· 识别进程
本模块主要是利用OpenCV和Yolo网络对图像进行识别和追踪
· 弹道计算
本模块主要是计算弹道,提供弹丸飞行模型
· 滤波预测
本模块主要是卡尔曼滤波模型
· 雷达程序
本模块主要是雷达的模型
· 飞镖模块
本模块主要负责飞镖在空中部分的控制和视觉逻辑
仅有2021赛季第一版,后续版本无视觉,如果加了,会同步更新
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
![](https://bbs.robomaster.com/static/image/hrline/line9.png)
通用逻辑
本逻辑图仅供参考,2.1版本之后不再更新此图,后续请参考SCURM视觉组Wiki
调度方式
1.0版本
实现了多线程
拆离了配置文件设置
增加了Camera模块
增加了串口模块
增加了MvSDK模块
增加了Debugs模块增加了调试输出
1.1版本
优化了Camera线程逻辑
优化了线程锁的使用方法
降低了相机缓存队列的值
修复了1秒延迟bug
2.0版本
此版本修改了较多内容,所有分支需要手动rebase
改用了多进程multiprocessing,规范化了Config
关于此部分内容,参考Config介绍
Debugs模块更新
修改了输出样式
更改了函数名
增加了Shared模块
关于此部分内容,参考Shared 进程共享数据
实现了多进程共享变量及其类SQL访问逻辑
实现了进程安全
拆离了自定义函数、主函数、拓展函数
能更方便的merge
增加了更多的详细信息输出
moduleConfig模块更新
2.1 版本
新增 ImageWatcher 可以实时查看图像了
新增MP_Queue 可以队列化操作数据了
修复了主线程串口若干Bug
修复了Define若干Bug
修复了Extend相机读取Bug,优化了逻辑
优化了图像缓存输出逻辑
优化了帧率统计逻辑
新增了一些配置
2.2 版本
新增了ImgLock/FRLOCK功能,现在可以图像分离式加锁了
I/O性能大幅提高
修改了串口模块,PY端现在可以关闭MD5校验(发送还是会有)
新增和修改了Config一些选项
修改了 ImageWatcher ,增加异常捕获
修正了主线程可能会提前退出的Bug
修正了串口未初始化导致的程序崩溃的Bug
优化了垂直同步逻辑
优化了Lock进程锁逻辑
优化了图像读取的判断逻辑
2.3 版本
修复了若干bug
修复了拼写错误
新增了看门狗(线程超时可以自动关闭了)
看门狗设置在:Config/timeout_dog内
可修改喂狗超时时间
新增文件输出(可以查看无界面运行情况了)
本输出和systemctl不冲突
系统的log存在漏掉或者延时的情况设置在ModelConfig/debugs_write里面Linux下请修改成注释的内容
新增视频捕获保存(可以拍视频了)
设置在Config/video下,其中:
video_sfps录制帧率是指一秒录制多少帧
video_auto指是否修改录制帧率配合当前的帧率
video_time指每隔多少秒将视频写入进文件一次
新增异常捕获机制,现在可以CTRL-C直接退出全部进程/线程了
新增自动退出机制,部分遇到Panic错误会自动退出全部进程/线程
新增自启动脚本,请参考Master分支/Inital/README.MD文件进行修改
3.0 版本
本版本较之前版本修改较多,所有分支【必须】重新手动rebase本版本修复了大量问题,建议所有其他分支都更新到此版本(3.0)
核心
修改了入口文件,现在叫‘launch.py’
调整了主函数启动调度的顺序,增加部分参数
串口
新增CRC/XOR校验方式(需下位机开启)
下位机程序尚未实现和调试,此功能在当前版本不可用
优化了串口中途掉线不能自动重启的问题
修复了上位机先于下位机开启导致无法启动的bug
相机
将ZED模块整合进ModuleCamera模块,为DH预留了接口
ModuleCamera初始化和函数新增校验相机类型和异常输出
新增【色彩增益】功能
新增【关闭相机】功能
新增【设置感光度】功能
【新增】相机工具包,包含:
相机独立监视工具(查看像素信息)
相机感光校准工具(校准感光度ISO)
校准硬件滤光参数(校准RGB滤光)
校准静态颜色基准(校准白平衡)
棋盘图自动化校准(尚未移植)
工具位于Camera.py文件,需要手动调用开启,支持ZED/MV/DH
修复了相机遇到异常的处理机制
修复了相机进程退出不释放物理设备的问题
调度
修复了垂直同步模式下时间片可能导致进程死锁的bug
改善了分离式进程锁可能出现的时间倒流(?)的奇妙bug
新增子进程自动重启功能,现在可以只重启掉了的进程
注意:相机线程由于物理内存释放和进程问题,无法单独重启
相机如果掉了需要手动插拔摄像头(ZED) / 重启所有进程(MV)
此外,串口存在于主进程,如果掉线将强制重启整个项目的进程
优化了变量调度方式(虽然可能用处不大)
优化了进程的PID监视模式
修复了看门狗有时候会自己挂掉的bug
调试
新增了若干错误代码类型
新增了部分调试输出
优化了UTF-8字符输出格式
优化了部分debug输出的乱码问题
对齐了部分输出内容
请问这篇文章对你有用吗?
【RM2021-视觉算法代码开源】四川大学RMUC-磁海火锅战队