强烈建议购买USB摄像头网口不好用

网口摄像头
配置静态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

微信公众号

欢迎大家关注我的个人公众号,现阶段主要总结Robomaster相关的计算机视觉知识。
公众号名称:三丰杂货铺

在这里插入图片描述