Robomaster视觉组成长之路

岁酱吖の 提交于 2019-12-10 09:46:06

Robomaster视觉组成长之路


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

11.27 正式开始记录

manifold要正式用到机器上,需要令程序开机自启动。使用Ubuntu自带的setup application,不要采用修改rc.local文件的方式,很麻烦
可知,manifold系统是linux Debian系统,而不是rap类的linux系统,之后下载方便跳转的vscode时便可以下载deb类型。
另外,设置开机自启动之后,如果还要外接屏幕,需要先top指令,出现一堆后台,kill自启动代码的PID号就可以关闭后台进程。
安装vscode
TX2安装链接
manifold用的也是TX2的GPU,必须下载arm64的,而不是amd64
可以结合普通amd64的安装教程amd64

$ sudo apt-get install visual-studio-code

安装完,妙算(manifold)联网(manifold-2G需要连接WIFI接收器),code-oss需要安装C++等各类插件,才能实现跳转
但是!!!vscode里的C++插件不支持arm版本,所以,vscode也无法实现跳转,只能是用搜索功能凑合用了。
有用的vsc配置过程
nano配置vscode

11.28 看装甲板

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

11.29 调哨兵

和电控对接,有以下要点:
float和double等类型传送方式
联调时,多一个鼠标键盘很麻烦,使用ssh用笔记本调节,同时笔记本的串口助手等内容可以显示在妙算屏幕上
妙算发数据,经常发一堆ASCII码
比如:
c 5939,421956] usb 2-2: usbfs; process 4419 (run) did not claim interface 0 before use5939.564047] usb 2-2: usbfs: process 4426 (run) did not claim interface 2 before use 6005.196316] usb 2-2: usbfs: process 4446 (run) did not claim interface 0 before use [6005,337046] usb 2-2: usbfs: process 4453 (run) did not claim interface 2 before use [6314.817455] tegrade 15210000. nvdisplay: blank-powerdown 6314.882207] PD DISP2 index4 DOW 6314.882298] PD DISP1 index3 DOWN I [6314.882376] PD DISPO index2 DOWN [6321.293894] tegrade 15210000. nwdisplay: hdmi: unplugged 6321.316016] tegradc 15210000. nvdisplay: blank -power down [ 6321.321455] tegrade 15210000. nvdisplay: unblank [ 6321.326062] tegrade 15210000. nvdisplay: unblank.. 6322.190370] tegrade 15210000. nwdisplay: blank-powerdown [ 6322,195900] tegrade 15210000. nwdisplay: hdmi: plugged [ 6322.215364] tegrade 15210000. nvdisplay: blank-powerdown 6322,220817] tegrade 15210000. nvdisplay: unblank 6322.220832] PD DISPO index2 UP [ 6322.221788] FD DISP1 index3 UP 6822.221883] PD DISP2 index4 UP 6322,223506] Parent Clock set for DC plld2 [ 6322.225222] tegrade 15210000, nwdisplay: hdmi: pelk:148500K, set prod- setting: prod c 150M
串口助手如下显示:
在这里插入图片描述
我怀疑这是manifold系统的缘故,拔插串口时会发这堆数据
发数据,对数据进行滤波

十一大滤波算法

为什么要滤波,是因为串口在发送装甲板位置的时候,偶尔会发送一个很夸张的值,有脉冲干扰,最好的方法当然是找出原因,但暂时打算用滤波算法
上面介绍的滤波算法中,1,限幅方法能有效克服因偶然因素引起的脉冲干扰。而且速度不慢,所以给串口数据发送端用上了.但是似乎没啥反应
5.中位值平均滤波法(防脉冲干扰平均滤波法) 计算速度慢,需要排序,求和,防脉冲干扰
6.限幅平均滤波法 限幅再求和 可以试一下 采样多,用的全局变量比较多,浪费ram
激光笔在下面,做补偿,根据远近,补偿量不一致

研究所测得角度值的误差,线性变化还是非线性

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就可以用这个软件了,这个软件可以很方便的跳转到变量、函数、类的定义处,还能前进、后退,阅读源码非常方便。

vim-ctag-taglist-cscope配置可跳转的ide

ctags

vim配置好ctags能达到什么效果呢?就是,当看到一个变量的时候,按“ctrl”和“]”这两个键,可以跳转到变量定义的地方。
linux ctag1
linux ctag2

下载编译ctags

ctags1链接里的指导可以说是句句箴言:
在这里插入图片描述
下载和输入以上四个命令很简单,唯一需要注意的是:
在make 和make install的时候,可能有个提示,说给usr下的一个目录cp的时候,没有权限,注意使用Sudo

sudo make && sudo make install

&&的前后注意都要加sudo,都需要加权限
在这里我说一下,比如,上交的工程名字叫SJTU-RM-CV-2019-master,里面有各种文件,我们

cd SJTU-RM-CV-2019-master
ctags -R *                

//-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。“*”表示所有文件。
注意:
需要在终端里使用vim命令打开某个源文件,才可以使用跳转,利用UI界面右击使用vim打开某文件。是不管用的

路径

之后,可以参考一下tags2的链接。创建vim的用户vimrc,在etc/vim/vimrc是系统vimrc,修改需要权限
所以ctags2里,在home用户目录下创建了自己的配置文件,并且进行了路径包含,包含后就可以愉快使用了。

cd ~/
ls
ls -a
touch .vimrc
cd .vim/
mkdir ~/.vim/plugin
mkdir ~/.vim/doc         

我上面的操作便是在home目录下创建了隐藏文件.vimrc,文件前有.表示隐藏.然后把我的tags路径包含进去

set tags=/home/dji/Desktop/SJTU-RM-CV-2019-master/tags
set tags=tags;/   
ctags如何使用

https://blog.csdn.net/syfly007/article/details/6413523

taglist

上文linux ctag1链接中的文章详述了taglist的安装过程
有几点注意事项:
下载之后,进入压缩包所在目录:

cp taglist.zip ~/.vim

忘记压缩包是不是叫taglist.zip了,不过,注意使用~,这个符号代表在home目录下,从home中找到.vim文件夹
之后进行解压以及粘贴,最终,vim右边会出现一个taglist窗口,出现变量以及宏定义等等。不过我还不会双击进入变量。
github上其他人实现的vim-ide
linux配环境,可真是麻烦!!!!,如果不是arm,而是amd架构,真心觉得应该用VSCode

cscope

还是根据上述教程,首先下载scope那个安装包到自己的一个文件夹里,
在解压之后的压缩包里

./configure
make 
make install

首先执行configure文件,是用来配置,用什么,不用什么
make是用来编译的,它从Makefile中读取指令,然后编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置
make后面可以跟进程数

make -j4

在make这一步,显示如下错误,没有curses这个库,因此无法编译成功

build.c:52:20: fatal error: curses.h: No such file or directory

找不到这个curses库
在解决问题过程中,用到了一些命令,予以记录

make clean //将刚刚编译出来的文件都清理掉,方便重新编译
vim README  //在某个库,阅读里面的README,理解如何使用
./configure -help  //大胆的在某一个命令后加-h或者-help来寻求帮助
sudo find / -name curses.h    //在全部文件找名字叫curses.h的文件
sudo find / -name curses.h找不到库,第一反应是在电脑的所有文件找这个文件

/表示所有目录,如果是 . 表示当前目录。

之后上网百度,找解决方法

sudo apt-get install libncurses5-dev
利用apt-get安装,但是不是这个库
安装时,可以按table向服务器请求备选的库,补全
从网上下载了这个缺少的库,ncurses-6.1
在谷歌浏览器默认目录下,执行:

tar zxvf ncurses-6.1.tar.gz 
cd ncurses-6.1/
ls
vim README
./configure -h
./configure
make -j4
sudo make install

上面的configure make,make install 也可以不下载安装包,直接apt-get install一条龙安装
也就是说,下载了这个缺少的库,在默认目录下,配置,编译,安装之后,继续scope的编译安装即可!
解压之后,进解压后的文件夹里,看一下README,

vim进入main函数,cscope报错!

cs_read_prompt EOF: No such file or directory
E609: Cscope error: cscope: cannot open file /untitled file
这个报错的原因是因为代码的路径中某一个文件夹名字存在空格
解决方法是利用’-'这个中间的小横代替空格
命名要标准,不要出现空格
之后又报错:
cs_read_prompt EOF: No such file or directory
cannot read trailer offset from file cscope.out

东南大学代码

江苏省省赛只需要识别装甲板,不需要识别数字。所以现在的任务是准确识别装甲板并且帧率达到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替换掉原本的这个同名文件即可编译成功。

提高帧率

网口摄像头配置静态ip

把摄像头的网口线拔掉才可以使用WIFI
使用迈德威视的网口摄像头
摄像头型号:MV-SUA31GC-T
第一步:利用官网给的软件先给摄像头一个ip(划重点:每一个需要网口连接的设备,自身需要一个ip):比如:192.168.1.178
子网掩码设置为255.255.255.0
第二步:manifold上的网口不能掉,(一般是eth0)要可以显示的出来,比如在终端输入:ifconfig
如果无法显示,可以直接给eth0一个ip,这样他就可以显示出来

nmap查看摄像头ip

那么,如果无法用软件设置摄像头ip,可以通过nmap的方式得知摄像头的ip
使用nmap的指令

sudo ./jetson_clocks.sh                  //开风扇
ip a                     //和ifconfig一样查看ip
sudo apt install nmap    
nmap -nS 192.168.1.0/24  
man nmap
 nmap -sn 192.168.1.0/24        //扫描并展示所有从192.168.1.0到192.168.1.255的ip地址

-sn 只进行主机发现,不进行端口扫描(只ping,不扫描)
192.168.1.0/24,192.168.1.0是ipv4地址,后边是子网掩码

迈德威视摄像头进行录像

linux命令日常总结

init 6             //通常情况下用于重启
reboot               //强制情况重启
sudo umount /dev/sdb4           //拔U盘
jetson clocks                 //英伟达nano等板子上开风扇
crtl+L                            //在一个文件管理下,按这个出现当前路径
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!