最近项目需要,需要同时使用四个摄像头(海康1080p相机),为了方便区分所以需要对四个摄像头固定一下串口的名字。
1、首先运行下面的代码查看电脑默认给摄像机分配的串口名字
ls /dev/video*
海康的每个相机会出现两个串口分别为video0, video1,........只有偶数能拿到图像数据即0,2,4,8 可以使用 ffpaly /dev/video* 查看每个摄像头的画面,或者分别插入确定每个摄像头对应的编号。
然后运行下面的代码
udevadm info --name=/dev/video0 --attribute-walk
会得到一系列的信息,有些教程里面会使用产品id等信息来固定,但是四个同型号的摄像头这些信息都是相同的。我采取的方式是通过安装位置固定,即 KERNELS属性,这个信息四个相机是不同的,可以将四个相机区分开来。
udevadm info --name=/dev/video3 --attribute-walk | grep KERNELS
运行上面的代码会返回KERNELS=="1-1"等的信息,这代表了设备插入的USB端口的路径
2,创建 udev 规则文件
sudo nano /etc/udev/rules.d/99-usb-cameras.rules
3,根据每个摄像头的物理路径,在文件中添加如下内容
KERNEL=="video*", KERNELS=="1-1.2", SYMLINK+="cam_high", MODE="0666"
KERNEL=="video*", KERNELS=="1-1.3", SYMLINK+="cam_low", MODE="0666"
KERNEL=="video*", KERNELS=="1-1.4", SYMLINK+="cam_left", MODE="0666"
KERNEL=="video*", KERNELS=="1-1.5", SYMLINK+="cam_right", MODE="0666"
4,重新加载udev规则
sudo udevadm control --reload-rules
sudo udevadm trigger
5, 验证
ls -l /dev/cam_high
ls -l /dev/cam_low
ls -l /dev/cam_left
ls -l /dev/cam_right
6,修改名字后在使用ffpaly /dev/cam_high会报错,但是使用opencv可以订阅到图像就证明成功了