# CVRM2021
上海交通大学 RoboMaster 战队 2021 赛季视觉代码框架。
官方开源贴:
RM2021-上海交通大学-云汉交龙战队-视觉算法开源
https://bbs.robomaster.com/forum.php?mod=viewthread&tid=12309&fromuid=43437
(出处: RoboMaster)
我们开放了一个[讨论文档](https://docs.qq.com/doc/DUVZRVmJwaGVBT056),大家有什么问题都可以去里面提问,或者加入QQ讨论群(953236946)。
---
> 本教程的写法主要面向视觉小白和新人队伍,将详细讲述技术点、使用方法和原理。希望战队们在开源时也能够将每一个技术点讲透,方便技术交流。受限于时间原因,部分内容将以后进行补充。
TODO:为了进一步提高可读性,代码(较冗长的预测部分)近期会重构的(已做注释)。
项目依赖:
* CUDA
* TensorRT
* gcc/g++-11:升级方式:添加 ppa 升级
* fmt:建议[编译安装](https://github.com/fmtlib/fmt.git)
* Ceres-Solver:计算库,安装方式:[编译安装](https://github.com/ceres-solver/ceres-solver)
* OpenCV4:计算机视觉库,安装方式:[编译安装](https://github.com/opencv/opencv.git)
* OpenCV_contrib:OpenCV 额外模块,安装方式:和 OpenCV 一起[编译安装](https://github.com/opencv/opencv_contrib.git)
* pybind11:cpp 和 python 互通库,安装方式:```sudo pip install pybind11[global]```
* python3:版本需要大于或等于 3.6 ,可以使用 Miniconda ,也可以使用系统自带
* flask:python 包,用于提供调试网站界面,安装方式:```pip install flask```
---
更新记录:
* 2021-1-25: 降低对 python 版本的要求,不再需要 python3.8 ,现在只要有 python3.6 即可。
TODO:opencv 安装教程将另外发布。
<br>
排坑指南:
- 尽量不要使用 Anaconda 而使用 MiniConda,最好是用系统自带的 Python,毕竟 NX 只是个部署运算平台,不需要多个环境。如果一定要安装 AnaConda 库,那么注意其中的 libtiff 库和 OpenCV 中的 libtiff 版本不对应,会发生 `对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用` 等错误,解决方法如[教程](https://www.cnblogs.com/leoking01/p/8306935.html),或者编译安装,或者删除系统的 tiff 库。
- gcc/g++-11:本项目中如果 gcc/g++ 版本不对,那么会出现以下几个错误
- `autoaim/detector/TRTModule.hpp:83` 中 filesystem 报错,解决方法:更改文件读入方式
- `autoaim/detector/TRTModule.hpp:17-18` 中 default 定义错误,解决方法:自己写重载函数
# 简介
我们的哨兵在本赛季采用了双云台的设计,其中上云台沿 roll 旋转了 90 度方便反导。
战略定位:
- 上云台:进攻,协同防守
- 下云台:防守为主
如果有些队伍只有一个云台,那么我建议以防守为主,至少不可以猛烈的进攻,非有效地进攻的发弹量应控制在 5%-10% 。如果哨兵没有子弹了,那么情况就危险了。
功能:
- 反击:预测+反陀螺
- 能量机关:未部署
- 吊射:未实现
- 反导
硬件:
- NX:自带 CUDA + TRT 。由于没有找一款 USB 3.0 的滑环,我们的上下云台采用了两个 Jetson NX 运算平台,两个运算平台相互独立,之间的信息传递通过电控通信解决
- camera-imu:MindVision 相机+自研陀螺仪板
- USB 转 TTL:实现和电控的通信
- USB 3.0 拓展坞:NX 只有两个 USB 接口,而我们需要三个,因此需要拓展坞
策略:
- 根据战队战术自行制定
# 代码框架
```txt
.
├── CMakeLists.txt:开启了ccahe加速编译,只重新编译修改部分,默认开启编译优化选项
├── README.assets;存放 README.md 图片和附件
├── README.md:本文档
├── UltraMultiThread:umt框架自带,多线程架构
├── asset
│ ├── MV-SUA133GC.Config:相机参数文件,一般修改曝光和增益,仅在程序启动时一次加载
│ ├── autoaim-param.yml:自瞄参数文件,前一半是预测参数,一般无需修改,后一半是反陀螺参数,还没有仔细试过
│ ├── camera-param.yml:相机标定文件,通过 calibrate.py 任务生成
│ ├── model-opt-3.onnx:模型文件
│ ├── model-opt-4.cache:使用的模型文件的cache缓存,如果第一次使用,会自动生成,在 nx 上的时间约为半小时
│ └──model-opt-4.onnx:模型文件:本赛季使用
├── auto_run.sh:自启动脚本
├── autoaim:自瞄相关
│ ├── CMakeLists.txt
│ ├── FindTensorRT.cmake
│ ├── autoaim.cpp:主文件,主要用于定义任务函数并设置后台线程带起,具体见文件
│ ├── autoaim.hpp
│ ├── detector:识别器相关
│ │ ├── TRTModule.cpp:一般修改分类个数需要修改三处地方,在文件中已经注释
│ │ └── TRTModule.hpp
│ └── predictor:预测器相关
│ ├── AdaptiveEKF.hpp:EKF 类底层实现
│ ├── PredictorAdaptiveEKF.cpp:EKF 预测器
│ ├── PredictorAdaptiveEKF.h
│ ├── PredictorKalman.cpp:普通 Kalman 滤波器
│ ├── PredictorKalman.h
│ └── kalman.h: Kalman底层实现
├── build:编译目录
├── common:工具函数
├── core_io:I/O相关
│ ├── CMakeLists.txt
│ ├── ExtImu:陀螺仪相关
│ │ ├── ExtImu.cpp
│ │ └── ExtImu.hpp
│ ├── MindVision:相机相关
│ │ ├── MVSDK
│ │ │ ├── CameraApi.h
│ │ │ ├── CameraDefine.h
│ │ │ └── CameraStatus.h:报错的时候可以查看的文档,找到对应的序号
│ │ ├── MindVision.cpp
│ │ └── MindVision.hpp
│ ├── robot.cpp:通信协议发送接收函数定义
│ ├── robot.hpp:通信协议定义
│ ├── sensors.cpp:相机陀螺仪部分
│ ├── sensors.hpp
│ └── serial:serial库
├── data:数据存储部分
├── example:umt 示例代码,主要讲解了 Publisher 和 Subscriber ,以及 C++ 类注册进 Python 的过程
├── main.cpp:主函数入口,此文件不需要修改
├── record:录视频相关
│ ├── CMakeLists.txt
│ └── record.cpp
└── script:python 脚本,用来启动相应的线程(任务)
├── app.py:网页
├── autoaim.py:自瞄
├── bridge.py:网页
├── record.py:录视频
├── robot_io.py:通信
├── sensors_io.py:相机陀螺仪
└── templates
```
# 项目介绍

## 发布订阅机制
不同功能之间的通信是通过发布者-订阅者的形式进行的。一种高级多态,即订阅者和发布者之间相互不关心实现方式。可以协调不同速度的线程的同步关系,又可以采取多线程加速,更重要的是可以分离 CPU 任务和 GPU 任务,提高代码并行度。
## camera-imu 传感器系统
视觉的输入来源有两个,一个是 MindVision 的相机,读入的是图片和时间戳,图片初始大小 1280x768 ,时间戳单位 ns ,另一个是 LpSensor 的陀螺仪,读入的数据有很多,详细见文件,目前用到的数据是陀螺仪的四元数,顺序 wxyz 。陀螺仪以固定的周期,如 100 Hz 向相机发送触发信号,相机每受到一次都会拍摄一副图片,因此这两个同一时刻的数据是有对应关系的,这就会涉及到时间同步。因此,需要注意到,如�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资料】 1、此文件包含完整代码,下载后可直接应用。 2、该课题适用于计算机科学、数学及电子工程等相关专业,可用于课程实践、学期项目或毕业设计,作为学习参考。 3、该资料仅作为参考用途,若需扩展其他功能,需具备代码理解能力,并具备探索精神,自行进行测试与调整。 RoboMaster2021赛季视觉模块代码及文档.zip。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
资源推荐
资源详情
资源评论































收起资源包目录























































































































共 93 条
- 1
资源评论


2401_89793006
- 粉丝: 903
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 三、施工总进度(包括施工进度计划横道图、网络图)及保证措施.docx
- 光纤通信试题计算分析题练习.docx
- 改性塑料项目管理投资计划书.doc
- 中国网络安全行业市场现状及发展前景分析-全年市场规模或将超1700亿元.docx
- 统计工作在大数据背景下的发展机遇研究.docx
- 环境监察档案信息化管理探究.docx
- 互联网+农村初中家校共育转型例谈.docx
- 物业管理顾问项目管理经理指导手册汇编.doc
- 基于Moodle的大学计算机基础课程的混合式学习设计与实践研究.docx
- 武汉理工大学《通信工程应用技术课程设计》报告.doc
- 大数据背景下金融统计发展策略探究.docx
- 网格工程项目管理难点及对策.docx
- 异构网络资源协同调度-洞察研究.pptx
- 应用型中职计算机应用基础教学的改革与实践.docx
- 网络安全课程设计.docx
- 智慧城市对档案馆档案信息化的影响分析.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
