本文将从两个方向介绍如何采集图像到ROS下:
1、首先简要介绍如何用笔记本自带的摄像头采集图像,这部分主要就是《ROS by example 1》中第10章的内容,但贴出了lz在使用过程中遇到的问题和解决办法。
2、用ROS如何采集笔记本或台式机上上外部摄像头的图像,硬件:ccd摄像头+uvc图像采集卡(usb接口),出来的视频流是MJPEG格式。
一、用笔记本自带摄像头采集图像。
笔记本自带的摄像头的设备号一般为/dev/video0
第一步:安装Webcam 驱动
其中第二行 catkin_ws/src 对应你自己建立的catkin工作空间
在新的终端中输入,假设你已经安装了《ROS by example 1》中的rbx1 package:
如果见到ERROR:cannot launch node of type [uvc_cam/uvc_cam_node]:uvc_can.....这个错误的话,如下图。出现这个问题应该是你还没有安装uvc_camera 的驱动。
新建一个终端窗口输入:
hydro为的ros版本号,请替换为你自己的ROS版本。
这个问题也是LZ在查看了ros answer后找到的解决方法,原链接:http://answers.ros.org/question/193121/can-anybody-please-tell-how-to-use-web-camera-in-ros/
现在重新输入你之前的
这个时候在终端窗口中还会看到ERROR:Problem setting exposure....可以忽略。
新建终端输入:
这时候应该就可以看到弹出一个窗口,等待几秒,就可以见到图像了。
二、用外部摄像头采集图像
这部分废了LZ一些时间,本来想直接用上面读取笔记本自带摄像头的方法应该也可以用在这。于是,我直接按照上面的方式输入:
结果,没有图像,以为是图像宽度和高度设置错误,改成640*480,有了!结果是下面这样:
由于UVC图像采集卡出来的视频格式是MJPEG,lz查看了uvc_cam的程序以后,进行简单修改,折腾一番后还是无功而返。
于是,开始排查问题,第一步看摄像头采集卡有没有问题:在软件中心,查找 guvcview ,安装这个软件,然后在video&Files中device一栏选择为你的外部摄像头,看有没有图像。如果没有图像,说明你的视频采集卡有问题或者CCD摄像头有问题。
硬件没问题以后,只能从ROS的摄像头驱动想办法了,ROS支持的摄像头开发包有很多,这里有一个列表进行了罗列,还有这里有一篇文章进行了各个驱动的简单对比。在查看usb_cam 的wiki说明的时候,发现pixel_format 一栏默认的是mjpeg,大喜!于是决定启用这个package.
安装usb_cam package的流程和上面的uvc_cam几乎一样:
安装好以后就是如何使用了。
在catkin_ws/src/rbx1/rbx1_vision/launch 下创建一个新的空白文件,命名为usb_cam.launch,名字和文件夹是你自己设定的,前面是lz存放的方式。在usb_cam.launch文件中输入:
其中:对比度,饱和度,亮度,那三个参数是LZ自己摄像头上比较好的配置,根据guvcview那个软件配置的,launch文件中的remap 将image_raw 映射到image_color是为了和书中的内容对应。
然后启动:
当然你也可以不用image_view去看,可以在终端中输入:
用rqt去查看图像,如下:
注意:usb_cam这个驱动默认的视频格式是mjpeg,如果你想用这个驱动来读取笔记本自带摄像头的图像,需要usb_cam.launch中修改视频像素格式,在launch文件中添加如下语句:
其中笔记本的视频格式yuyv是通过guvcview软件查看获得。
这个渣渣图像,是一开始usb_cam默认参数配置的结果。一开始遇到的时候,把lz吓坏了,这像素用来做算法会是个坑啊。于是lz关闭所有ROS节点,将摄像头断电,uvc图像采集卡拔下来重新插上,重新给摄像头上电,然后启动guvcview,会出来一套默认的参数,效果很好,于是记下了那几个参数,就是前面的对比度(128),亮度(128),饱和度(70).将这几个参数修改以后,果然好了很多。
至此,无论是关于外部摄像头(实验室大多数情况)采集图像还是用笔记本摄像头采集图像,都已经解决了,下面就是在ROS下操作opencv写算法了,照着《ROS by example 1》中第10章学习就行了。