Robomaster视觉组成长之路

前言

有人回复本文太乱了,确实是这样。我现在已经开始按篇章整理。欢迎大家看我Robomaster视觉专栏的相关文章。

首先,本人也只是做了一年的RM视觉,通过这样一场比赛,和同学们学到了很多知识。不过,升学之后的研究生院校不做RM了,所以之后博客更新的内容也和RM的重合度不会太大了。
那么,我们想要通过这个比赛学到什么东西呢?具体可以看RoboMaster视觉教程大纲。主要是在linux上编写C++代码,使用Open CV库,通过Cmake构建C++工程。利用Python进行机器学习。完成整个庞大的代码,以上是最基本的内容。
除此之外,好学的老铁们可能还会利用Qt作为ide,使用qt库(还有人用Clion)。可能会用到卡尔曼滤波、小孔成像等数学物理知识:‘可能会使用makefile构建工程。可能会纠结于一些特定的Linux平台,比如manifold(nuc要更通用);等等等等
我想说的是,这样一个比赛,全心全意做一年不算少,做两年三年不嫌多。真的可以利用学校的条件学到很多很多东西。
对于这篇博客,我认为我所总结的CMake篇linux篇(包括manifold介绍)对于应付比赛的使用应该是足够了。对于qt以及Open CV我也还只是一个初学者罢了。
如果想要开始cmake的学习,可以点击cmake总体介绍开始。全心学习,几个小时就可以上手了。
如果想要开始Linux的学习,可以点击linux总体介绍开始。

其他内容有:
opencv专栏
Qt+OpenCV专栏
CMake专栏
linux专栏
Robomaster视觉专栏
对于使用manifold的队伍,参考官方guide是必须的,当然,也可以看一下我的踩坑指南。
manifold专栏
学习体验manifold(一)刷机
学习笔记manifold(二)迈德威视摄像头配置
学习笔记manifold(三)配置ssh以及vnc
视觉笔记manifold(四)串口调试
视觉笔记manifold(五)manifold使用小技巧


2020比赛,我们队伍暂时采取2019年上交开源代码。在消化代码的过程中,我学到很多,予以记录!

11.28 看装甲板

open cv 中width angle heigh定义
返回的角度在[-90.0]度之间

11.30

if(target_box.rect != cv::Rect2d())
这句话的意思是装甲板类的一个对象target_box有一个变量rect,这个变量类型是cv::Rect2d(),那么上面这个判断,左边是rect,左边构建了一个临时的cv::Rect2d()类型数据,如果装甲板没有找到,那么rect就是初始值,(target_box.rect与cv::Rect2d()值也会相等。
Rect2d()是open cv里的一个矩形类,有x,y,width,heigh四个变量。d意思是四个变量是整型,Rect2f()就是浮点型
滤波算法需要限幅
使用上述限幅滤波方法1,记得初始值一定要用恰当方法赋值
12.5
linux下看代码感觉vscode是最方便的,所以下载linux的vscode,vim看工程不舒服
linux下能用的vs code包,官方提供的不太好用
这个网址有各种版本的vscode包,而且包括各种架构vs code包网址
在这里,我们选择arm架构,deb版本。因为manifold和TX2就是arm架构,而且系统是Ubuntu,属于Debian发行版。
下载了包,之后就可以安装了。安装方法可以参考下方网址linux vscode安装技巧
ubuntu不休眠方法,screensaver
坑爹的地方来了,vscode中C/C++插件不支持arm架构,所以仍然只能使用搜索

Source Insight和wine

如果是一个项目,里面有很多源码文件,经常需要在不同的源码文件之间切换,用文本编辑器软件查看就没有那么方便了,这时推荐用专门的源码阅读软件Source Insight,这个软件只有Windows版,但是它在Linux的Wine环境中运行的非常好,所以在Linux上安装一个wine就可以用这个软件了,这个软件可以很方便的跳转到变量、函数、类的定义处,还能前进、后退,阅读源码非常方便。

东南大学代码

江苏省省赛只需要识别装甲板,不需要识别数字。所以现在的任务是准确识别装甲板并且帧率达到60以上!这样才能快速击打,否则只能跟随不能打中。
在硬件平台是manifold,使用上交代码的情况下,怎么提高帧率呢?
识别数字必须用到机器学习的方法,但是帧率就会下降,所以,需要识别装甲板,不识别数字,单纯识别装甲板的代码已经很成熟了。
1.使用更好的cpu平台,比如Intel的
因为现在在manifold跑代码,只是单纯的利用了CPU,而英伟达的cpu性能并不好。但是重新买硬件,经济不允许
2.利用cuda,使用manifold的GPU
但是CUDA想要用起来。花费时间太长。TX2对于CUDA支持很好,买了manifold-2G,那么CUDa一定要用一下。TX1已经停产
3.将上交代码中和数字识别有关系的删去
4.使用tensor RT重新编译open cv速度必然能够加快,
这种方法花费的精力比cuda要小
5.再使用其他仅识别装甲板的开源代码
因为现在买的摄像头是上交用的,换代码需要换摄像头驱动库
总而言之,看开源代码太有用了!
今天尝试在manifold上编译东南大学代码

apt安装qt5

2018年东南大学的开源代码,用到了qt5.想安装一下,

sudo apt install qt 
sudo apt install qt5-default 
sudo vim /etc/apt/sources.list
sudo apt update
sudo apt install qt5-default

学到的东西:
首先在sudo apt install qt 时
可以按table键,向服务器发出请求,这样服务器就可以尝试补全后面的东西,猜测要安装什么。在不换源的情况下,服务器是ubuntu官网。
在/etc/apt/sources.list,可以换源为aliyun
换源之后,需要清掉缓存,再更新一下,这时候才能够重新apt install

apt clean
apt update

error adding symbols: file wrong format

在编译上交代码时,刚下载下来就出现这样的错误。(对于一个摄像机驱动库)
解决方法
只需要去迈德威视官网下载linux开发包,然后打开lib文件夹。选择arm64文件夹里的linuxMVSDK.so替换掉原本的这个同名文件即可编译成功。

刷机后配置环境

环境配置使用了学长做的一个sh脚本,这部分操作不熟悉,之后重新配置学习一下
自己写一个脚本,一定要记得加可执行权限

chmod +x Auto.sh

make install    //有时候不行,无法创建文件,这时候使用
sudo make install

配置环境使用了学长提供的包,直接在包里便可以安装各种软件
将opencv_family_bucket.tgz这个压缩包放到manifold的download文件夹里
以下是在这个文件夹里的命令

tar -xvzf opencv_family_bucket.tgz
ls
cd opencv_family_bucket
cd ffmpeg-4.2.1

./configure --enable-cuda-nvcc --enable-opengl --enable-shared --enable-nonfree

sleep 5

make -j8

sudo make install

之后配置OpenCV
在opencv_family_bucket文件夹里

cd opencv-3.4.8
#!/bin/sh

rm -rf build

mkdir build

cd build

cmake \      -DCMAKE_BUILD_TYPE=Release \      -DBUILD_PNG=ON \      -DBUILD_TIFF=OFF \     -DBUILD_TBB=OFF \      -DBUILD_JPEG=ON \      -DBUILD_JASPER=OFF \      -DBUILD_ZLIB=ON \      -DBUILD_EXAMPLES=OFF \      -DBUILD_opencv_java=OFF \      -DBUILD_opencv_python2=ON \      -DBUILD_opencv_python3=ON \      -DENABLE_PRECOMPILED_HEADERS=OFF \      -DWITH_OPENCL=OFF \      -DWITH_OPENMP=OFF \      -DWITH_FFMPEG=ON \      -DWITH_GSTREAMER=OFF \      -DWITH_GSTREAMER_0_10=OFF \      -DWITH_CUDA=ON \      -DWITH_GTK=ON \      -DWITH_VTK=OFF \      -DWITH_TBB=ON \      -DWITH_1394=OFF \      -DWITH_OPENEXR=OFF \      -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \      -DINSTALL_C_EXAMPLES=ON \      -DINSTALL_TESTS=OFF \      ..
make -j8
sudo make install

大功告成

上交代码包配置

妙算的架构是arm64
所以摄像头的包要用arm64版本
在这里插入图片描述
将迈德威视这个开发包里的,arm版本的libMVSDK.so替换掉上交代码中other文件夹里的包

Ubuntu安装教程

为什么要安装Ubuntu系统?
一是manifold的刷机需要用到Ubuntu14.04
而是可以在实验室有linux系统,方便学习
首先在官网下载一个Ubuntu14.04官网地址
这篇教程借鉴u盘的制作,后边的看别的
详细一些
戳F12

注意安装Ubuntu双系统和重装为Ubuntu系统时,给u盘写入映像的操作一样,只是在安装过程中,选择是否保留原系统这一项上有所区别。
写入后,按F12进入安装界面。选择Legacy 下面的USB而不是UEFi下面的启动方式
之后就是图形化操作了。

注意不要安装中文!!!!!

因为有些软件在中文界面下不支持,安装英文就对了。
还有,在选择安装选项的时候,注意选择,清除所有磁盘并重装系统。不要选择那个只是重装系统的选项

串口通信时,使用结构体

使用结构体,可以直接利用内存进行复制,操作极其方便。