问题描述
在ROS下使用摄像头时,即输入:
$ roslaunch usb_cam usb_cam-test.launch
这条指令是开启摄像头的,报错如下:
即:[ERROR] [1574317261.767618042]: VIDIOC_S_FMT error 16, Device or resource busy
重新插拔了摄像头,还是报这个错误。
分析:首先查看一下所有摄像头设备,指令如下:
$ ls /dev/video*
/dev/video1
可以看到,结果是/dev/video1,而默认在ROS安装的是usb_cam是启动的/dev/video0,因而不难想到需要修改启动摄像头对应的launch文件。
解决方案:输入下面两条指令:
$ cd /opt/ros/kinetic/share/usb_cam/launch
$ sudo gedit usb_cam-test.launch
打开的launch文件如下图所示:
将第3行出现的/dev/video0修改为/dev/video1(这里的video后面的数字根据前面查询的结果而定),保存后退出。这样就能正常使用摄像头了,问题解决。
补充的地方
1、这里有个细节,上面的步骤修改完成后,需要执行$ roslaunch usb_cam usb_cam-test.launch才能够正常使用摄像头,如果先执行$ rosrun usb_cam usb_cam_node则还是会报错,执行完roslaunch后再执行rosrun则没有问题。
2、重启电脑之后,/dev/video的需要一般会恢复为0,因此usb_cam-test.launch文件需要重新修改,即将/dev/video部分改为/dev/video0即可。