虚拟机用ros usb_cam 打开笔记本摄像头是绿屏

环境:主机macbook,虚拟机软件VirtualBox,虚拟机Ubuntu20,ros版本——noetic
在终端输入roslaunch usb_cam usb_cam-test.launch,摄像头能点亮,但跳出来的窗口是花屏

img

但用openCV能正常打开摄像头,不知道是不是ros usb_cam对虚拟机兼容性不好,请问道友们有没有解决方法或相关链接

终端具体信息如下:

~/catkin_ws/src/usb_cam/build$ roslaunch usb_cam usb_cam-test.launch
... logging to /home/erin/.ros/log/5c227e5a-0993-11ec-9a9f-89ce01692739/roslaunch-erin-VirtualBox-10335.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://erin-VirtualBox:41103/

SUMMARY
========

PARAMETERS
 * /image_view/autosize: True
 * /rosdistro: noetic
 * /rosversion: 1.15.11
 * /usb_cam/camera_frame_id: usb_cam
 * /usb_cam/image_height: 480
 * /usb_cam/image_width: 640
 * /usb_cam/io_method: mmap
 * /usb_cam/pixel_format: yuyv
 * /usb_cam/video_device: /dev/video0

NODES
  /
    image_view (image_view/image_view)
    usb_cam (usb_cam/usb_cam_node)

ROS_MASTER_URI=http://localhost:11311

process[usb_cam-1]: started with pid [10349]
process[image_view-2]: started with pid [10350]
[ INFO] [1630337617.736986359]: Initializing nodelet with 1 worker threads.
[ INFO] [1630337617.914545813]: Using transport "raw"
[ INFO] [1630337618.000285673]: using default calibration URL
[ INFO] [1630337618.008409458]: camera calibration URL: file:///home/erin/.ros/camera_info/head_camera.yaml
[ INFO] [1630337618.008519466]: Unable to open camera calibration file [/home/erin/.ros/camera_info/head_camera.yaml]
[ WARN] [1630337618.008573806]: Camera calibration file /home/erin/.ros/camera_info/head_camera.yaml not found.
[ INFO] [1630337618.008627093]: Starting 'head_camera' (/dev/video0) at 640x480 via mmap (yuyv) at 30 FPS
[ WARN] [1630337618.153641151]: unknown control 'white_balance_temperature_auto'

[ WARN] [1630337618.160093523]: unknown control 'focus_auto'

launch文件如下:

img

花了一晚上,终于解决了。的确是launch文件里输出格式pixel_format的问题,但没想到还要改图片大小,宽=1280,高=720。如下:

<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="1280" />
    <param name="image_height" value="720" />
    <param name="pixel_format" value="mjpeg" />
    <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>

这样就有正常的图像了,但终端里会出现“ deprecated pixel format used, make sure you did set range correctly”,参考 ROS:使用usb_cam调用UVC摄像头遇到的坑_Flag_ing的博客-CSDN博客 坑一:直接装包,启用后图像是花屏如果直接使用如下命令安装usb_cam功能包:sudo apt-get install ros-melodic-usb-cam然后插上自己的UVC摄像头,运行如下指令: https://blog.csdn.net/Flag_ing/article/details/108637513 成功解决