ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu 22.04下海康MVS安装与相机出图避坑指南

Ubuntu 22.04下海康MVS安装与相机出图避坑指南 做个预告这篇的坑我算是替大家提前踩完了。海康的MVSMachine Vision Software在Windows下基本是双击下一步就完事但在Ubuntu 22.04上从软件包安装到相机出图中间至少藏着三四个“隐雷”任何一个没处理好你在MVS里就死活看不到设备或者看到了但采图报错。这篇文章就用我之前在一台刚装完系统的Ubuntu 22.04上完整部署MVS 2.1.2的过程为例把每一步动作、每一条命令、每一个可能报的错都摊开来讲。不管你用的是千兆网口相机还是USB3.0接口相机只要走MVS这套软件栈下面的内容都能直接照着抄。文章里的命令我都按实际执行顺序整理过版本号也确认过只要你系统是64位Ubuntu 22.04大概率能一次性跑通。1. 安装前的版本适配与准备为什么不是随便一台Ubuntu都能装很多人上来就dpkg -i装MVS包装完一启动就缺库、段错误。我建议先把系统版本、架构、内核这三件事确认清楚不是浪费那几分钟是后面所有排查工作的地基。1.1 确认系统版本与架构海康MVS 2.1.2官方支持列表里明确写着Ubuntu 22.04 x86_64但建议还是自己先看一眼lsb_release -a uname -muname -m输出必须是x86_64。如果你用的是ARM架构的开发板或者装了ARM版UbuntuMVS的运行包选型会完全不同后面很多依赖库也要换源编译这篇文章主要基于x86_64环境如果你的板子是ARM需要去海康官网下载对应的aarch64包步骤有差异。1.2 系统源和基础依赖更新新装的Ubuntu 22.04建议先把软件源列表刷新一遍并补上编译工具链和基础依赖。这不是可有可无因为MVS安装包里带的某些驱动模块在后装内核时很依赖build-essential和dkms。sudo apt update sudo apt upgrade -y sudo apt install -y build-essential dkms net-tools cmake git这里有一个容易被忽略的点net-tools提供ifconfig命令排查网络时比ip命令直觉得多。后面配置相机网卡IP时我会优先用ifconfig演示因为老工程师的习惯还是改不掉而且很多相机的出厂默认IP段也是当年ifconfig时代就定下来的。1.3 为什么建议先装显卡驱动有GUI环境时MVS的客户端界面是Qt写的虽然不强制要求OpenGL但如果你要在MVS里实时预览相机画面显卡驱动缺失时画面会非常卡甚至出现无法渲染的问题。我在一台核显机器上试过没装驱动直接跑MVS预览画面帧率能掉一半以上。如果是NVIDIA显卡用ubuntu-drivers devices查看推荐版本后安装sudo ubuntu-drivers devices sudo apt install -y nvidia-driver-535注意装完显卡驱动后建议重启一次让驱动真正加载再继续后面的MVS安装步骤。2. MVS 2.1.2的安装包抉择与安装命令细节2.1 去官网下载对应版本的安装包海康机器人官网的下载路径大概是服务支持 - 下载中心 - 机器视觉工业相机 - 客户端软件。选择Linux版找到MVS 2.1.2的包。文件名类似下面这样MVS-2.1.2_x86_64_20231013.deb同时建议把对应的MVS-2.1.2_linux_aarch64_xxx.deb也保存在本地备用。这里的逻辑是官网下载时不一定注意区分版本但x86_64就是给普通台式机、工控机用的aarch64是给ARM板子用的两边的目录结构和依赖不一样别混。2.2 安装命令与依赖冲突处理面向Ubuntu的deb包安装命令如下sudo dpkg -i MVS-2.1.2_x86_64_20231013.deb走到这步大概率会遇到一类经典报错dpkg: error processing package mvs (--install): dependency problems - leaving triggers unprocessed这个错的根因是部分依赖库版本和Ubuntu源里的不一致。解决很简单sudo apt-get install -finstall -f会自动修复损坏的依赖关系装上MVS运行时依赖的libopencv-core、libboost-thread之类的库。等它跑完再执行一次dpkg -i通常就能成功。2.3 安装后的目录结构解读MVS默认装到/opt/MVS里面值得关注的路径是/opt/MVS/binMVS客户端启动程序、官方示例程序的二进制都在这里/opt/MVS/lib运行库和SDK动态库/opt/MVS/lib/arm64ARM架构的库x86机器上可忽略/opt/MVS/driver内核驱动源码包括gige和usb3相机的驱动/opt/MVS/Samples各语言版本的SDK示例代码如果你之后写C或Python的二次开发程序需要把/opt/MVS/lib加进LD_LIBRARY_PATH环境变量里否则编译出的程序运行时会找不到libMvCameraControl.so。可以在~/.bashrc里加一行export LD_LIBRARY_PATH/opt/MVS/lib:$LD_LIBRARY_PATH2.4 MVS的卸载方式卸载也不像Windows那样去控制面板点卸载而是sudo dpkg -r mvs想要彻底清理残留的配置和日志再手动删除/opt/MVS即可。3. 网络配置相机IP段、网卡静态IP与防火墙的搭配这部分是工业相机在Linux下最让人抓狂的环节也是最多人踩坑的地方。很多人装好了MVS客户端打开软件发现设备列表空的十有八九是网卡IP和相机IP没配对或者防火墙把UDP广播给拦了。3.1 理解相机IP机制默认网段与持久IP海康千兆网工业相机出厂默认IP一般是192.168.1.2子网掩码255.255.255.0。部分型号出厂是169.254.1.x链路本地地址。设备上电后会自动尝试获取IP如果网络里有DHCP服务器它就会用DHCP分配的地址没有DHCP时才会落到默认网段。这个机制意味着你的电脑网卡必须和相机在同一个子网内MVS才能通过UDP广播发现设备。最稳的做法是给直连相机的网卡设置一个静态IP而不是依赖DHCP。3.2 配置Ubuntu 22.04网卡静态IPNetplan篇Ubuntu 22.04默认使用Netplan管理网络。找到你的网卡名称ip a假设网卡叫enp3s0直接编辑Netplan配置sudo nano /etc/netplan/01-network-manager-all.yaml写入如下内容network: version: 2 renderer: NetworkManager ethernets: enp3s0: dhcp4: no addresses: - 192.168.1.100/24然后应用sudo netplan apply这里要特别提一个容易误操作的地方不要直接改/etc/network/interfacesUbuntu 22.04默认不走ifupdown那套你改了也不生效反而会和Netplan冲突。3.3 用ping验证链路通断相机上电后先ping一下相机的IP确认链路是通的ping 192.168.1.2如果ping不通优先检查网线工业相机直连电脑要用手册里指定的网线类型千兆相机必须用千兆网线百兆线虽然能亮灯但通信极不稳定和网卡是否被系统正确识别lspci | grep -i ethernet看一下硬件状态。注意如果多个网卡都开了DHCP系统默认路由可能走错网卡导致你访问相机时请求从另一张网卡出去这时候即便IP段对了也可能ping不通。建议直连相机时把其他网卡暂时禁用或至少在路由表里把相机网段指到对应网卡。3.4 防火墙放行相机通信Ubuntu 22.04默认没有启用ufw但如果你之前按某些安全教程开启了防火墙MVS的UDP广播和TCP通信会被拦掉。直接在防火墙规则里放行相机所在的网段sudo ufw allow from 192.168.1.0/24 sudo ufw status verbose如果嫌麻烦也可以干脆停掉防火墙仅建议在隔离的工业网络环境内这么做sudo ufw disable3.5 多网卡环境下的路由优先级如果你的工控机有两个网口一个连外网一个连相机很容易出现相机连接不稳定的情况。解决办法是给相机网卡设一个更高的路由优先级或者干脆用一条route命令指定sudo ip route add 192.168.1.0/24 dev enp3s0 src 192.168.1.100这条命令的含义是任何去往192.168.1.x网段的包都走enp3s0网卡防止系统通过默认路由把包送到别处。可以在/etc/rc.local或Netplan的路由配置里固化否则重启后失效。4. MVS首次启动权限、驱动与相机发现排查网络通了、MVS也装好了这时打开MVS客户端一般就能看到设备了。但还有几个高频问题会让设备列表空白或者采图失败逐个排查下去并不难。4.1 直接命令行启动MVS与权限问题MVS安装完成后启动客户端的方式有两种桌面菜单里找到MVS图标点击终端执行/opt/MVS/bin/MVS.sh注意MVS需要对/opt/MVS目录下的某些运行文件有读写权限特别是当你用普通用户启动时相机配置无法保存。建议将当前用户加入dialout组串口和USB设备访问权限并赋予/opt/MVS目录适当权限sudo usermod -aG dialout $USER sudo chmod -R 755 /opt/MVS改完用户组后要重新登录一次让用户组权限生效否则照样会Permission denied。4.2 GigE Vision相机的防火墙与驱动检查海康的GigE相机在Linux下由内核驱动模块mvfgige控制。MVS安装包默认把驱动源码放在/opt/MVS/driver下安装程序会在装包时尝试自动编译并加载匹配当前内核的驱动。如果你的内核版本很新装包时编译失败大概率遇到这样的报错FATAL: Module mvfgige not found.解决办法是手动进入驱动目录编译cd /opt/MVS/driver sudo ./setup.sh这步脚本会交叉编译当前内核对应的模块并加载。如果编译过程报缺少内核头文件先执行sudo apt install -y linux-headers-$(uname -r)再重新执行setup.sh。4.3 USB3相机的特殊处理如果你用的是USB3 Vision相机Ubuntu的权限管理比Windows严格。插上相机后先看一眼系统是否识别到了设备lsusb海康相机的USB Vendor ID一般是0x2b05如果lsusb里有类似2b05:xxxx的条目说明硬件链路是好的。接下来要处理权限问题新建udev规则sudo nano /etc/udev/rules.d/90-mvusb.rules写入SUBSYSTEMusb, ATTRS{idVendor}2b05, MODE0777, GROUPplugdev然后重载udev规则sudo udevadm control --reload-rules sudo udevadm trigger这步不做的话MVS里能看到相机但采图时会报权限错误。4.4 MVS首次扫描不到相机的常规排查顺序如果MVS客户端已经启动但设备列表是空的我一般按这个顺序查确认相机指示灯状态不通电或网络异常时相机的Link指示灯会熄灭或慢闪ping相机IP确认二层链路通看MVS左下角的状态栏有时提示“未找到设备”时点一下刷新按钮MVS的自动扫描间隔比较长手动刷新最快在MVS里的“设备管理”中设置IP需要把相机和电脑的网卡改成同一网段后再“强制写入”退出MVS用sudo /opt/MVS/bin/MVS.sh启动再试一次排除权限因素如果上面五步都做了还是找不到设备那就看内核日志dmesg | grep -i mvs dmesg | grep -i mvfgige大概率能找到驱动加载失败的具体信息。5. 驱动加载、相机参数保存与SDK联动问题走到这一步基本能出图了但正式做项目时还会碰到几个软件层面的小麻烦相机每次都丢参数、SDK二次开发时找不到头文件、PTP时钟同步的问题。我一起说一下自己的解法。5.1 驱动随系统启动自动加载MVS的GigE驱动在装完包后虽然加载了但重启系统后有时不会自动加载导致你MVS里又看不到相机。把驱动模块加入系统启动加载列表sudo bash -c echo mvfgige /etc/modules-load.d/mvs.conf然后在/etc/udev/rules.d/90-mvusb.rules里追加一行也可以让USB相机权限固化。更稳妥的方案是用systemd服务把setup.sh开机跑一遍但我实测下来在绝大多数发行版上上述modules-load.d和udev规则已经足够。5.2 相机参数保存不生效的坑很多人在MVS里调完曝光、增益后断开相机再重新连接发现参数全部恢复出厂了。这是因为MVS的参数默认存在运行时内存里需要手动写入相机非易失存储。操作方法是在MVS客户端中调整完参数后右键点击设备选择“保存当前参数到相机”而不是“保存到用户配置区”。用户配置区只是保存在本机换一台电脑连接相机后这些参数不会跟着走。如果做SDK二次开发对应的接口是MV_CC_SetIntValueEx和MV_CC_SetCommandValue里的SaveToDevice参数保存前必须设置成TRUE否则同样的坑会在你的程序里再出现一次。5.3 SDK开发时的头文件与库链接MVS提供了Samples目录下的示例代码我建议第一次做开发时直接复制/opt/MVS/Samples/64/GxIAPI里的C示例编译时链接这几个库g -o get_image get_image.cpp -I/opt/MVS/include -L/opt/MVS/lib -lMvCameraControl -lMvGigEDevice运行前别忘了export LD_LIBRARY_PATH/opt/MVS/lib:$LD_LIBRARY_PATH如果运行时报找不到libMvCameraControl.so就是环境变量没设对。这一点在写一下cron定时任务或者systemd服务时尤其容易踩坑因为服务环境下默认不会加载你~/.bashrc里的导出变量得在服务文件里手动指定EnvironmentLD_LIBRARY_PATH/opt/MVS/lib。5.4 相机时间戳和PTP同步多相机系统中如果要求采集的图像时间戳严格同步建议开启海康相机的PTP功能。在MVS客户端的相机属性里把GevIEEE1588使能打开主时钟设为PTP_MODE_AUTO从时钟设为PTP_MODE_SLAVE。同时需要注意开启PTP后网卡的巨型帧Jumbo Frame和流量控制设置要保持一致否则时间同步误差会变大。6. 常见故障清单与修复对照表最后整理一份我在多个现场环境里遇到过的故障对照表方便你遇到问题时按图索骥。表格里的修复方案都是实际验证过的可操作性很强我直接照搬到这里。故障现象大概率原因修复方式MVS找不到设备网卡IP与相机IP不在同一网段给网卡设置静态IP如192.168.1.100/24MVS找不到设备防火墙拦截UDP 3956等端口sudo ufw allow from 192.168.1.0/24MVS找不到设备驱动模块未加载sudo /opt/MVS/driver/setup.sh打开MVS崩溃或段错误OpenCV依赖冲突sudo apt install -f采图时报权限错误当前用户无权限sudo usermod -aG dialout $USERUSB相机无法识别缺少udev规则新建90-mvusb.rules重启后找不到设备驱动未随系统启动添加/etc/modules-load.d/mvs.conf调参后断电丢失参数未写入相机在MVS中“保存到设备”图像偏绿或条纹带宽限制触发丢包在MVS里降低Inter-Packet Delay预览帧率低巨型帧未开启网卡开启Jumbo Frame为90007. 我实际跑通后的几点补充经验我在文末说几个不太会写在官方文档里的细节都是我实际配置时反复验证过的。第一点是关于相机供电。用PoE供电的相机和千兆网直连时如果你的交换机PoE供电能力不足相机能上电但成像会有间歇性丢帧。排查时不要只看MVS的丢包率先确认供电是否稳定。直连网卡不通过交换机时需要用支持PoE的网卡模块否则相机只能外接电源。第二点是关于系统休眠。Ubuntu桌面版默认挂起策略在某些主板上会让网卡从挂起恢复后处于半死状态相机链路完全断开。建议工业相机直连的机器关掉休眠sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target否则半夜相机任务执行到一半系统休眠了第二天来看到一堆假死进程眼泪都要掉下来。第三点是如果你和我一样用ThinkPad之类的笔记本做现场联调Ubuntu默认会对有线网卡做节能降速千兆网卡可能协商成百兆图像带宽明显不够。检查方式是sudo ethtool enp3s0看Speed字段是不是1000Mb/s如果不是执行sudo ethtool -s enp3s0 speed 1000 duplex full autoneg off这条命令在每次网线重插后可能会被重置现场联调时多留个心眼就行。
返回列表