ROS改错:vm虚拟机中调用摄像头失败

1.问题出现

在虚拟机中进行ROS视觉方面的操作时,调用摄像头出现报错:

AttributeError: 'NoneType' object has no attribute 'shape'
[ERROR] [1665194860.752950024]: select timeout
[usb_cam-1] process has died [pid 49165, exit code 1, cmd /opt/ros/melodic/lib/usb_cam/usb_cam_node __name:=usb_cam __log:=/home/rosmelodic/.ros/log/469c5216-46a2-11ed-89a7-000c2969e545/usb_cam-1.log].
log file: /home/rosmelodic/.ros/log/469c5216-46a2-11ed-89a7-000c2969e545/usb_cam-1*.log

但从这个报错查出来的都是opencv的问题,读取摄像头信息失败了。

但是在opencv读取视频和图片全部成功,可能是摄像头的问题,或者调用摄像头的代码出现问题。

由于调用摄像头的代码往往潜藏在一个项目中,而且层层嵌套,而且一般情况下,官方打包好的代码一般都是自己的问题,而不是官方代码的问题。

2.排查

(1)虚拟机在默认设置下,电脑的摄像头是没连接的,通过设置把摄像头连接起来。

在连接后,再运行调用摄像头的代码,还是失败,进行第二个排查。

(2)进入当前的虚拟机设置,看看是不是接口出现了问题。有些新的笔记本是usb2.0以上的接口,我的是3.1。

 (3)还失败,查看是不是驱动的问题。

sudo apt-get install ros-melodic-usb-cam

这是通用驱动,其中melodic为ros版本,对应修改。

roslaunch usb_cam usb_cam-test.launch

这是刚刚驱动自带的一个测试demo,如果正常运行,可以排除硬件上的问题。

(4)再回到调用摄像头的代码,运行一下,看看成功与否,如果之前的测试damo跑起来了,但是调用摄像头代码报错,考虑是代码需要修改。

经过后面的学习,还有一种可能,就是调用摄像头时的参数和摄像头硬件的参数不对应。

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

其中节点usb_cam节点的参数mage_width和image_height和硬件参数不对应时也会报错,不能盲目的复制人家的代码要结合自己的硬件。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: roslaunch usb_cam usb_cam-test.launch 是一个ROS启动命令,用于启动usb_cam包的usb_cam-test.launch文件。该文件用于启动USB摄像头并将其连接到ROS系统。在运行该命令之前,需要确保已经安装了usb_cam包,并且已经连接了USB摄像头。 ### 回答2: roslaunch usb_cam usb_cam-test.launch是一个ROS命令,用于启动一个名为usb_cam的功能包的usb_cam-test.launch文件。这个功能包提供一个ROS节点,可以读取和发布来自USB摄像机的图像。 在使用这个命令之前,首先需要安装并配置好ROS和usb_cam功能包。安装ROS后,可以在命令行通过rosdep install命令安装usb_cam功能包。完成安装后,将usb摄像机插入电脑上的USB口并启动设备。在终端输入roslaunch usb_cam usb_cam-test.launch命令后,就可以启动节点并开始读取摄像机的图像流数据。此时,ROS会自动创建一个图像话题并将摄像机的图像数据发布到该话题。 通过在终端使用rostopic list命令,可以查看所有发布和订阅的话题。通过rostopic echo [topic_name]命令,可以读取某一个话题的数据并在终端上显示。如果要保存摄像机的图像数据,可以使用rosbag命令将话题数据保存到一个ROS bag文件。 总之,使用roslaunch usb_cam usb_cam-test.launch可以快速方便地启动一个ROS节点来读取USB摄像机的图像数据,并将数据发布到一个图像话题,以便进行后续的图像处理和分析。 ### 回答3: roslaunch usb_cam usb_cam-test.launch是ROS用来启动usb_cam包的节点的命令。该命令会启动一个名为usb_cam_node的节点,用于从USB摄像头读取图像并将其发布到指定的ROS主题上。可以通过该主题来接收摄像头捕捉的视频流,并对其进行处理。 在使用该命令之前,需要先安装usb_cam包。该包是一个ROS驱动程序,用于连接常见USB摄像头,让用户可以轻松地将它们连接到ROS系统。安装步骤可以在官方ROS wiki找到。 在启动节点之后,可以使用rostopic list命令来列出当前所有可用的ROS主题。此外,也可以使用rostopic echo命令来查看摄像头发布的图像消息,并使用ROS的其他节点或库进行图像处理和计算机视觉操作。 总之,roslaunch usb_cam usb_cam-test.launch命令提供了一种简单而有效的方式,供ROS用户获取常见USB摄像头的视频流并将其用于机器人和计算机视觉应用程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值