环境:

Ubuntu12.04

ROS Hydro version

 

特别标注:

这篇文章首发于“北京小芽科技有限公司”的技术博客xiaoyatec.com上,所有版权归属于北京小芽科技有限公司。更多相关信息请关注北京小芽科技、小芽机器人。

 

正文:

ROS的学习中,在使用USB摄像头的时候,安装和使用的过程中,遇到了一些问题,现在对学习的过程这问题做一个整理。

首先,根据《ros_by_example_hydro___volume_1》(在写这篇文档时20141215,此书还不免费公开,需要付费购买,尊重版权,这里就不做分享了,望谅解,可以参考groovy版本,网上有免费下载)教程,下载安装uvc_cam功能包安装


但是期间在编译的时候遇到各种问题,搞得焦头烂额。

继续网上找资料和解决方式,发现另外一种驱动方式:usb_cam

这个驱动方式是在网上的一篇文章里看到的Testing: ROS USB Camera drivers

链接地址为:

http://www.iheartrobotics.com/2010/05/testing-ros-usb-camera-drivers.html 

里面给出了几种usb摄像头驱动的方式,根据给出的分析和建议,我最终选择了usb_cam驱动方式。下面就来说说usb_cam使用的流程。

这是说的是外置USB摄像头的驱动和使用方式,其实内置和外置的使用方式都是一样的原理,稍作设备信息的修改即可通用了。

 

对于USB摄像头的图像获取, 要比Kinect或Xtion的复杂, 原因是在图像Topic的发布阶段需要我们自己做操作,而Kinect或者Xtion在ROS里边就已经有成型的Topic发布机制在图像接收并显示的阶段就非常相似了。

 

这里只说摄像头的驱动和使用方式,涉及到ROS原理性的东西这里只做简单但不详细的介绍。

先来简单说一下整个流程的工作原理吧。

ROS是一个分布式系统,节点是它运行的基本单元,节点说得通俗一点就是一个可运行的功能程序,也可以叫做一个进程,节点与节点之间的通信通过主题来体现。拿这个驱动usb摄像头并显示图像这个工程来说,大体上这里边就涉及到两个节点:摄像头驱动节点,以及获取图像并显示节点;同时涉及到一个主题,这两个节点通过这个主题来进行交互:

现在以节点的方式进行描述:


1、 usb_cam设备驱动程序节点:

首先,创建一个usb_cam的工作空间

 

进入到src源码文件夹里边:

然后从git中下载usb_cam包(记得安装git工具,方法在文章的开头处)

下载成功之后显示如下信息:

包含的内容如下:

现在插上USB摄像头,看看在设备文件夹里边显示的是什么名称,我的显示名称为“video0”,打开源码包里的nodes文件夹,用编辑工具打开usb_cam_node.cpp源文件,找到下面这句:

然后根据自己的设备名称修改相应的信息,我的名称和这里默认的“/dev/video0”刚好一样,所以不用做修改。

这里还得注意一个小问题,就是在usb_cam_node.cpp源文件里边,对于主题的发布:

得在主题名称“image_raw”前面加上一个反斜杠“/”,如下所示:

这样编译之后才能成功发布图形。

下来还得注意另外一个问题,就是关于图形格式的问题,在usb_cam_node.cpp源文件里边

这一行是对摄像头的格式进行设置的,具体的格式得根据你的摄像头来去定,我的摄像头能够输出的格式是yuyv格式。(如果不清楚自己使用的是什么格式,上面提示里边给出的5种格式建议都试验一遍)

好,至此,usb_cam设备驱动程序节点就构造成功了,现在回到工作空间的根目录,对工程进行catkin_make编译,编译成功之后显示如下:

对应的生产的可运行的节点文件位于:~/catkin_ws_usbcam/devel/lib/usb_cam文件夹里边:

2、 图像接收与显示节点的构建

这里边涉及到ROS图像和Opencv图像的转换,可参阅以下的文献

Converting between ROS images and OpenCV images

首先,创建节点工作空间,然后进入到源文件夹里边,创建cvbridge包,以及其依赖项:

运行成功后,将生成如下文件:

现在进入到cvbridge文件夹的src文件夹里边,编写image_converter.cpp节点源文件:

下来,修改cvbridge文件夹里的CMakeList.txt文件,在其后面添加如下信息:

回到工作空间的根目录,进行catkin_make编译

编译成功之后,可执行文件节点生成于 “~/catkin_ws_cvbridge/devel/lib/cvbridge”文件夹中

至此,图像接收和显示节点已经构建完成。

3、 现在来运行节点:

分别打开三个终端:

第一个终端先运行以下两条命令:

第二个终端运行以下两个命令:(usb摄像头驱动程序节点)

第三个终端运行以下两个命令:(图像接收和显示检点)

成功运行之后摄像头图像非常流畅。



参考文献:

1、Testing: ROS USB Camera drivers

链接地址为:

http://www.iheartrobotics.com/2010/05/testing-ros-usb-camera-drivers.html 

2、Converting between ROS images and OpenCV images

链接地址为:

http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages

3、《机器人操作系统ROS_典型功能实现方法详解》

链接地址为:

http://wenku.baidu.com/link?url=IQSHfjUomZ8jtnXLyz7dSVb5AebOcBt4b8C5PRxVSeQPxSaXaYSiiSy60NulCYIFlQcc-BTAF5x6YfNnx9f2KUIBRT0eheQsmDEk0ReWZ8q

 

 

 

Jason.Que 于 北京小芽科技

2015年10月10

ROS中OpenCV的使用——人脸检测

环境: Ubuntu12.04 ROS Hydro version OpenCV 2.4.9   特别标注: 这篇文章首发于“北京小芽科技有限公司”的技术博...

阅读全文

2 条评论

  1. 下载好usb_cam之后catkin_make时出现很多,函数未定义的错误,找了很久没找到方法,特来请教,谢谢

欢迎留言

你必须启用JavaScript才能看到这里的验证码!