rosrun usb_cam usb_cam_node出现[ERROR] [1538658769.608520191]: Webcam: expected picture but didn't get

在参考ROS 下利用 usb_cam 读取图像、opencv 图像、摄像头的标定这篇博文时遇到了问题,在单独运行

rosrun usb_cam usb_cam_node

时出现[ERROR] [1538658769.608520191]: Webcam: expected picture but didn’t get it…

下面是解决过程。
usb_cam包中有一个测试文件usb_cam-test.launch,直接运行

roslaunch usb_cam usb_cam-test.launch

是完全没有问题的,打开看这个文件可知,是创建了/usb_cam/usb_cam_node和/image_view/image_view两个类型的节点,分别命名为usb_cam和image_view,前者用于“接入”摄像头的图像,并publish到/usb_cam/image_raw话题中,后者subscribe此话题,将图像输出到屏幕上。

然而,如果使用

ruscore 
rosrun usb_cam usb_cam_node
rosrun image_view image_view image:=/usb_cam/image_raw

的组合,会出现错误([ERROR] [1538658769.608520191]: Webcam: expected picture but didn’t get it…)。经分析,这是因为usb_cam_node的源文件在编写时有如下这样一句:

// possible values: yuyv, uyvy, mjpeg, yuvmono10, rgb24
node_.param("pixel_format", pixel_format_name_, std::string("mjpeg"));

并不是很懂yuyv,mjpeg这些东西,大概是一些成像方式、图像格式之类的东西,在usb_cam-test.launch文件中有这样一句:

<param name="pixel_format" value="yuyv" />

猜测这一句是关键,改变了usb_cam_node源文件中mjpeg的设置,和我用的外接USB摄像头匹配,所以可以使用 rosrun 命令显式设置节点的名称

rosrun package-name executable-name __name:=node-name

这种方法将使用 node-name 参数给出的名称覆盖节点的默认名。在本例中就是

rosrun usb_cam usb_cam_node __pixel_format:=yuyv

而不是

rosrun usb_cam usb_cam_node

注意,pixel_format前面加了两个下划线(我试过用一个下划线,居然也行得通)
另外,在usb_cam-test.launch文件中还有这样一句:

node_.param("video_device", video_device_name_, std::string("/dev/video0"));

所以,如果摄像头不是video0的话,使用rosrun时也要用类似上述的方式设置参数,类似的还有亮度、对比度、图想尺寸等参数,详见usb_cam-test.launch文件。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值