Robomaster视觉组成长之路

Robomaster视觉组成长之路

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

RoboMaster视觉教程大纲
RoboMaster视觉教程OpenCV(一)环境安装及代码测试
RoboMaster视觉教程OpenCV(二)读取视频图像与转换
RoboMaster视觉教程OpenCV(三)利用文件保存图片以及视频
RoboMaster视觉教程CMake(一)hello-cmake
RoboMaster视觉教程CMake(二)hello-headers
RoboMaster视觉教程Linux(一)保姆级换源教程



`

本文目录

  • Robomaster视觉组成长之路
    • 开机自启动及关闭后台进程
    • 安装vscode
    • 11.28 看装甲板
    • 11.29 调哨兵
      • 十一大滤波算法
    • 11.30
    • Source Insight和wine
    • vim-ctag-taglist-cscope配置可跳转的ide
      • ctags
        • 下载编译ctags
        • 路径
          • ctags如何使用
      • taglist
      • cscope
          • **sudo find / -name curses.h**找不到库,第一反应是在电脑的所有文件找这个文件
          • 之后上网百度,找解决方法
          • vim进入main函数,cscope报错!
    • 东南大学代码
      • apt安装qt5
    • error adding symbols: file wrong format
    • 提高帧率
    • 网口摄像头
      • 配置静态ip
      • nmap查看摄像头ip
      • 迈德威视摄像头进行录像
      • 手机录像
      • 读取录像视频报错
      • 网口摄像头缺点
      • LinuxSDK安装
      • 使用事项
    • linux命令日常总结
    • manifold刷机
      • 不要用英伟达镜像
      • 不用制作系统镜像
      • 额外注意
      • Ubuntu系统版本
      • 以后优化
        • 把需要安装的包都打包,以后一股脑安装
      • 使用Ubuntu19安装之后,显示错误
        • 有可能的错误1
        • 有可能的错误2
      • 开启后的问题
    • 刷机后可以先换源
    • 刷机后配置环境
      • 上交代码包配置
      • 风扇配置
      • 字体以及图形调大一些
      • apt换源
        • 无法使用apt
        • 换源后更新过慢
        • 换源后的update
        • 最终实践过的正确换源
      • 搜索相关资料
    • Ubuntu安装教程
      • 注意不要安装中文!!!!!
    • 串口通信时,使用结构体
    • 超频
    • windows上利用VS运行上交等代码
      • 比赛现场调试
      • 临场使用一根网线实现SSH远程调试
        • SSH调试终端
        • SSH在Windows显示linux图形界面
          • 最终实现
          • 通过VNC实现在Windows上显示整个桌面
          • 通过windows的mstsc远程桌面访问
        • Xshell传输文件

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

开机自启动及关闭后台进程

manifold要正式用到机器上,需要令程序开机自启动。使用Ubuntu自带的setup application,不要采用修改rc.local文件的方式,很麻烦
可知,manifold系统是linux Debian系统,而不是rap类的linux系统,之后下载方便跳转的vscode时便可以下载deb类型。
另外,设置开机自启动之后,如果还要外接屏幕,需要先top指令,出现一堆后台,kill自启动代码的PID号就可以关闭后台进程。
设想编写一个可执行程序,能够双击后直接关闭后台程序

killall -e run

这句话的意思就是关闭名字叫做run的后台进程。把这句话编译成一个可执行文件

安装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
串口助手如下显示:
Robomaster视觉组成长之路_第1张图片
我怀疑这是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

现在我觉得配置vim实在是太浪费时间了,而且vs code因为不支持arm架构的C++插件,看工程也无法跳转。其实应该使用专门编C++工程的qtcreator,或者是只能利用cmake构建工程的CLION,Clion还可以自动保存工程。

ctags

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

下载编译ctags

ctags1链接里的指导可以说是句句箴言:
Robomaster视觉组成长之路_第2张图片
下载和输入以上四个命令很简单,唯一需要注意的是:
在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地址,后边是子网掩码

迈德威视摄像头进行录像

为什么要录像,因为装甲板有限,有时候手头就是没有,最好能准备几个录好的视频,用于检验效果。或者自己利用灯条制作一个装甲板(自制装甲板亮度过大,可能无法识别)
其实,使用摄像头录像很简单,因为迈德威视工业摄像头都有一个IDE,下载windows安装包就可以。打开MindVision 演示程序这个快捷方式,选择开始录制视频即可!录制出来的是mp4格式,640X480.
用手机摄像头录制的视频应该也可以打开,还没有尝试

手机录像

手机拍摄的视频能够打开,但是视频格式过大,处理缓慢,另外手机视频在代码读取后会旋转九十度

所以还是选择摄像头拍摄的代码
使用小丸工具箱压制也不顶用
所以还是使用摄像头拍视频最真实

读取录像视频报错

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/highgui/src/window.cpp, line 331
terminate called after throwing an instance of 'cv::Exception'
  what():  /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/highgui/src/window.cpp:331: error: (-215) size.width>0 && size.height>0 in function imshow
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/highgui/src/window.cpp, line 331
terminate called after throwing an instance of 'cv::Exception'
  what():  

这个报错的意思是说,open cv需要打开一个长宽大于0的视频,但是并没有。所以,意思是没有正确打开视频。网上其他人的错误是

网口摄像头缺点

网口摄像头相比USB摄像头,需要两根线,一个电源,一个信号。而usb信号和电源在一根线
另外,manifold的eth0口容易掉,所以需要在开机自启动的时候,都先配置一下ip,再启动代码的可执行程序,至于他们的运行速度,在迈德威视官网看到,网口适合100米等远距离传输,USB3.0>网口>USB2.0

所以强烈建议购买USB3.0接口摄像头
此外,只要是迈德威视的摄像头,都使用了相同的SDk,也就是说,如果其中任意款摄像头,你的代码可以使用这个摄像头,换用迈德威视其他摄像头,不用做其他任何改动便可以直接使用。只要硬件线连好。

LinuxSDK安装

除了拧摄像头上的两个旋钮以调节焦距和曝光之外,还需要在linux上安装LinuxSDK,之后按照文档运行GDK_Demo这个程序,便会出来一个图形界面,通过这个界面可以调节摄像头的Gamma和曝光,但软件的曝光调节范围不如硬件,所以一般只用来调Gamma,Gamma值应该调大。具体作用可以阅读江达小记的CSDN博客。
此处要说一个坑,因为在运行install.sh安装SDK的时候,会复制X86的库,但是manifold的核心是arm64,所以需要阅读install.sh里的内容,手动复制。
以下是LinuxSDK中的内容。可以看出其中有个判断,复制了X64和X86里面的库。

#!/bin/bash

CURDIR=`pwd`
echo "Your current directory is $CURDIR. This is where the MVSDK software will be installed..."
A=`whoami`
B=`getconf LONG_BIT`

if [ $A != 'root' ]; then
   echo "You have to be root to run this script"
   echo "Fail !!!"
   exit 1;
fi


cp 88-mvusb.rules /etc/udev/rules.d/

cp include/* /usr/include/
echo "Copy header files"

if [ $B == '64' ]; then
	cp lib/x64/libMVSDK.so  /lib
	echo "Copy libMVSDK.so to /lib"
else
	cp lib/x86/libMVSDK.so  /lib
	echo "Copy libMVSDK.so to /lib"
fi

echo "Successful"
echo "Please  restart system  now!!!"

使用事项

manifold的eth0口容易掉,所以需要在开机自启动。可以在/etc/rc.local 里设置配置eth0的ip命令
在startup application里设置代码可执行程序的自启动
因为rc.local先执行,所以可以先配置ip再执行程序,保证摄像头连接成功
rc.local里添加

ifconfig eth0 192.168.1.14 netmask 255.255.255.0

linux命令日常总结

init 6             //通常情况下用于重启
reboot               //强制情况重启
sudo umount /dev/sdb4           //拔U盘
jetson clocks                 //英伟达nano等板子上开风扇
crtl+L                            //在一个文件管理下,按这个出现当前路径
                       //当出现很长的文字时,可以按home键,就可以回到命令前面,可以用来加一个sudo
vim jetson_clocks.sh                     

展示文件里的权限:

ll

删掉一行所有文字
在代码开头敲。前面加数字,表示删除之后的几个字符

dd

只能撤回一步

u

删除该文件夹下所有的文件

rm -rf *

manifold刷机

类似教程
类似教程
推荐的详细教程
详细manifold和TX1教程
使用官方用户手册进行刷机即可,这里提出一些官方没有涉及的东西。
硬件连接:

只需要三根线:电源线,开关控制扩展单元,写着丝印为OTG的线,就是micro-B口,用自带的线,一端连着manifold,一端连着Ubuntu主机。

不要用英伟达镜像

jetson TX2是英伟达的
但是manifold是大疆的
由于驱动兼容性问题,切勿使用NVIDIA提供的TX2 Jetpack进行系统还原,否则将导致大多数硬件接口无法正常工作。
刷机时硬件连接:

不用制作系统镜像

很多教程建议不要制作系统镜像

额外注意

按住开关控制扩展单元的RCV按键,再按住RST按键,2秒后同时松开两个按键。
这里有一个误区,有时候按两秒是没反应的,我的一个队员刷了英伟达的系统,导致许多硬件接口凉凉。重新刷机的时候,按2秒没反应,需要按5秒以上。直到风扇开始旋转。

Ubuntu系统版本

对于刷机的主机Ubuntu版本要求:19.04可行
网上所说manifold刷机系统需要14.04
我使用Ubuntu19.04,完成了manifold的刷机,成功启动。所以Ubuntu版本应该不是刷机的问题

以后优化

建议将妙算配置好后制作一下系统镜像,以便妙算哪天挂了能够快速恢复,不必重新恢复出厂重新配置所需环境(网络上一些人不建议制作镜像,可能意思是自己做的镜像实际上不好重新安装
建议将电脑睡眠改为从不,否则容易中断正在做的事情

把需要安装的包都打包,以后一股脑安装

Robomaster视觉组成长之路_第3张图片

使用Ubuntu19安装之后,显示错误

打开manifold,一直显示错误:
Your screen, graphics card.and input device settings could not be detecte correctly. arlan. You will need to configure these yourself.
输入设备和显卡无法正常检测

有可能的错误1

官网上说:在这里插入图片描述
一定注意:输入lsusb之后,出现的设备名称为
ID 0955:7740 NVidia Corp.
才算恢复模式
如果出现 ID 0955:7740 NVidia Corp. L4T(for terge) XXXx(后面记不清了)
说明不对劲儿。重新进入恢复模式。恢复模式风扇不转。

有可能的错误2

使用学长的Ubuntu19.04,也可以烧写成功。有可能是python环境的问题
使用一台笔记本,笔记本版本是Ubuntu16.04.也成功了。
在第一台电脑的Ubuntu系统上,没有python、,当时重复安装了四五遍。
所以,建议在Ubuntu主机上,提前安装python,可以把2和3都安装上

sudo apt install python3
sudo apt install python

开启后的问题

成功刷机后,打开系统。但报了一个似乎不影响使用的错误:
提示,系统出现了一个内部错误,需要重启,重启后解决,不再报错
暂时忽略
初始密码一般为dji

刷机后可以先换源

刷机后配置环境

环境配置使用了学长做的一个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文件夹里的包

风扇配置

在home目录下,打开终端

vim jetson_clocks.sh     

在vim打开的文件里输入:搜索文件里对于风扇速度的pwm配置 小写n,上一个,大写N下一个

:/255
ni             //vim里进入编辑模式

显示Fan_SPEED = 255
将255改成127
之后esc退出编辑模式
在vim里输入

:wq

表示保存后退出
之后,在home目录下运行这个脚本

sudo jetson_clocks.sh  

即可半速打开风扇

字体以及图形调大一些

近视眼可能需要
在设置display里面,调大那个比例即可
比较容易找到

apt换源

换源之后,一定要记得更新。sudo必须有


sudo apt-get update
sudo apt-get upgrade

换了阿里云之后,报错:The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY(公钥)
这是因为,缺少公钥 公钥在报错提示里面
这时候,输入下面的代码:

无法使用apt

如果还想要安装库,需要下载dpkg包,然后安装他的依赖的依赖的依赖……
比如这个网站:
https://pkgs.org/

换源后更新过慢

很长时间,停留在waiting for headers
感觉别人不这样儿啊。之后再请教一下其他人
以前看过别人换源,大多打出来一行代码就可以,更新速度也很快,但在我这儿,速度就极慢。

首先想到两点,一个是不要安装网上所说,直接复制一大堆源,然后替换掉原本sourses.list里面的内容
第二个是,按照网上所说,需要清除一下上次未完成的更新遗留的文件,速度才能变快。打出如下代码,实测无用:

rm /var/lib/apt/lists/* 
rm /var/lib/apt/lists/partial/* 

还有说:删除/var/cache/apt/archives/下的所有文件。可能是上次没有成功导致遗留了部分文件。这个没有试验。

换源后的update

update很慢。可能是源不好使,再 换源后重试,可以从清华,阿里云,中科大等等都试一试
再重新update
如果根据error来删除文件,很可能虽然能成功update,但是之后安装的时候回出错,

最终实践过的正确换源

  1. 修改sourses.list
    换源之前一定要执行的操作:使不会报https网址的错误。
    apt-get install -y apt-transport-https
    cd /etc/apt
    sudo vim sources.list
    //在vim里做的修改是利用替换功能,Ubuntu官方的源换为阿里云的源命令为下面这句:
    //:%s/ports.ubuntu/mirrors.aliyun/
    //(等同于 :g/vivian/s//sky/) 替换每一行的第一个ports.ubuntu 为 mirrors.aliyun
    sudo apt  clean
    sudo apt update
    sudo apt upgrade
    正常情况下,上面的指令可以很方便地执行,但是也有可能出错。报错如:
http://packages.ros.org/ros/ubuntu xenial InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXXX
404  Not Found 
The repository 'http://ppa.launchpad.net/bzindovic/suitesparse-bugfix-1319687/ubuntu xenial Release' does not have a Release file.
The repository 'http://ppa.launchpad.net/bzindovic/suitesparse-bugfix-1319687/ubuntu xenial Release' does not have a Release file.
 An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error:

比如说缺少公钥publickey,还有无法fetch等等,我按照上面进行过的步骤删除或者添加公钥,最后也没有成功。这些错误是一起报出来的,但是像我这样一个个上网搜索,按照网络教程弄,最后能够达到不报错的目的,但是更新完后不成功。
但是一位大佬为我示范了正确的操作。其核心就是网络无法连接到什么,就把这个东西忽略掉。

最终做法是在sources.list.d文件夹里删除了ros-latest.list和bzindovic-ubuntu-suitesparse-bugfix-1319687-xenial.list这两个东西就成功了。秘钥什么的不用管

dji@manifold2:/etc/apt$ cd sources.list.d/
ls
sudo mv ubuntu-toolchain-r-ubuntu-test-xenial.list ubuntu-toolchain-r-ubuntu-test-xenial.list.bk
//移动后重命名的方法,之后还能够修改回来
sudo rm bzindovic-ubuntu-suitesparse-bugfix-1319687-xenial.list
sudo mv ubuntu-toolchain-r-ubuntu-test-xenial.list.bk ubuntu-toolchain-r-ubuntu-test-xenial.list
sudo rm ros-latest.list

搜索相关资料

注意manifold资料比较少,很多时候,可以通过TX2的资料进行配置。

Ubuntu安装教程

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

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

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

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

串口通信时,使用结构体

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

超频

超频可以令CPU执行指令的时间变短,帧率提高。
上交代码单纯运行在manifold上,一般是3.4十帧。但如果超频,在3米外可以达到90帧。想要更高的帧率,只能换intel更好的CPU或者是利用CUDA以及tensorRT加速。
此处记录一下如何自启动超频

windows上利用VS运行上交等代码

比赛现场调试

临场使用一根网线实现SSH远程调试

感谢CSDN博主,江达小记的启发,以及在私信上的悉心解答。

service ssh status                  //查看ssh状态

SSH调试终端

这个链接是教怎么通过网线,连接到LINux从机,我使用的是XSHELL软件,这里有一个谬误,是说在接口192.168.137.1下的为动态类型的IP地址就是树莓派的地址。
其实,对manifold来说,类型是静态,在192.168.137.1接口下的第一个ip地址就是,我这里是192.168.137.220 此处注意,主机名把192.168.137.220 输进去。可以耐心看一下方这个链接,还有哔哩哔哩的视频教程
windows主机登录Linux
江达小记中SSH使用
江达的笔记本是Ubuntu,利用Ubuntu链接Ubuntu
而我这里是利用Windows链接Ubuntu,Windows是客户端。linux服务端

SSH在Windows显示linux图形界面

登录上主机,还需要能够把LINUX的图形界面传输到window,以显示摄像头图像,根据图像调节曝光
如果想把linux的屏幕投到Windows上,一定是需要xrdp的,Windows开启远程桌面,linux打开xrdp,并且打开VNC。所以说,要在linux端下载VNC和xrdp(听说可以用xmanager搞,还没尝试)
很多教程用的VNC在官网没有找到arm64版本的,只好找其他的。manifold的这个架构,兼容性真的垃圾!!!

最终实现

一个是利用Windows端的putty以及Windows端的xming这两个软件,便可以开启Linux端的图形界面。实现效果是虽然无法显示整个桌面,但是当运行程序出现弹窗时,能够通过xming显示弹窗。在Robomaster上,便可以看到摄像头数据,因此来调节曝光以及焦距。

有用文档:
Putty+xming1
Xming安装和设置
putty不用设置localhost
putty

注意:

  1. 启动Xming.
    (是Xming而不是XLanuch命令),如果要使用图形界面的话,必须要先启动Xming。否则可以省去。

  2. 不用安装openssh-serve和xbase-clients
    这两个软件是自带的,其实不用安装。使用sudo dpkg -l查看已安装软件包
    另外,这个命令会把上面之前的命令顶掉,可以到vim里设置回滚行数,注意是vim,不是tetminal终端

      在终端的界面里复制列出来的信息就可以了(终端查看时,一定要做如下步骤:点终端界面上的"编辑"-->配置文件首选项-->滚动-->回滚-->不限制"打上勾",这样输入到界面的信息就完整显示了)
    
  3. 不用配置linux系统上的什么文件之类的
    主要是Windows上的xming和putty,linux几乎不搞啥。

比如说:打开SSH服务:/etc/init.d/ssh start,允许Linux主机上的SSH X转发:在 /etc/ssh/sshd_config 文件末尾,加入:X11Forwrding yes       这个就不需要,因为X11是自动打开的。
  1. 不用写localhost:0
    有的教程需要设置display location,但默认情况应该不需要考虑。当鼠标放到右下角X图标,显示的display号如果不是0,就需要按显示更改填写。
  2. 不用下载xming的字体,字体和那个安装包大小都一样。直接安装xming就行
    在putty输入 xclock & 来查看xmind是否出现图形界面
通过VNC实现在Windows上显示整个桌面

还有一种方法是通过在电脑上安装VNC-Viewer,在linux系统上安装VNC和xrdp,则可以通过VNC-Viewer这个软件看到整个桌面。
如果单纯安装xrdp,应该是无法使用这个远程桌面的。我dpkg -l发现vnc4serve是自带的,我遍寻网络,发现教程里说的什么tigervnc和tightvnc等等都只有amd版本。也是很受伤了。
按说我有了vnc4serve,不需要其他vnc了,但是后来还是下载并且配置了X11VNC。

x11vnc配置,
tigervnc+xrdp
上面链接有一些注意事项:
请一定要把两个链接都看完!!!!
首先去配置x11vnc,再去配置xrdp

  1. 步骤3需要改一下-rfbauth 后面的路径,把 ~/.vnc/passwd改成第2步后出现的路径
  2. 步骤3 -rfbport 5900不是5900,结合上下文知道是5903端口的设置应该很重要。
  3. 在电脑端口的ip后面,一定要加上:5903
  4. 冒号应该是英文状态
    之后,就可以利用VNC Viewer畅快地在电脑上访问了
    每次想要运行x11vnc都需要重新输入以下代码,
x11vnc -storepasswd
x11vnc -rfbport 5903 -rfbauth ~/.vnc/passwd -display :0 -forever -bg -repeat -nowf -o ~/.vnc/x11vnc.log

可以先自启动配置好manifold的eth0的ip,使用ssh输入上述命令,然后再利用Windows上的vnc开启远程桌面。

亲测,在x11vnc + windows vnc viewer后,应该是不需要xrdp的
也不算太卡,万不得已可以使用这招。但是不太稳定,容易忽然连接不上。

通过windows的mstsc远程桌面访问

参考文档:
利用xrdp和vnC显示图像化界面

Xshell传输文件

下载xfdp

LINUX为主机的教程
比较详细,Linux为主机
windows从机一根网线SSH登录Linux系统

你可能感兴趣的:(RoboMaster视觉组笔记)