Robotics StackExchange | Archived questions

How to get usb camera frame?

I use ubuntu 14.04 and indigo. I install usbcam. My launch file is under `home/rosbuildws/package_dir`. The content of it is below :

<launch>
     <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video1" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <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>

I run below command on terminal and get errors :

~/rosbuild_ws/package_dir$ roslaunch camera.launch

Unable to open camera calibration file [/home/user/.ros/camera_info/head_camera.yaml]
[ WARN] [1435933649.952842400]: Camera calibration file /home/user/.ros/camera_info/head_camera.yaml not found.
 [ INFO] [1435933649.952876387]: Starting 'head_camera' (/dev/video1) at 640x480 via mmap (mjpeg) at 30 FPS
 [ WARN] [1435933649.984525524]: unknown control 'white_balance_temperature_auto'

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

 [ERROR] [1435933650.169146261]: Webcam: expected picture but didn't get it...
 [ERROR] [1435933650.200955971]: Webcam: expected picture but didn't get it...
 [ERROR] [1435933650.232933986]: Webcam: expected picture but didn't get it...

How can I get rgb camera frame and show in ros-indigo?

Asked by jossy on 2015-07-03 09:55:31 UTC

Comments

Answers

Maybe the mode you selected is not supported by the camera or the node. I have some problem with that too. I could not get to use libuvc_camera to give me an mjpeg stream with 30 fps in my desired resolution. I always struggled even with other tools. Just vlc worked for me so far.

You can list supported formats by:

v4l2-ctl --list-formats-ext -d /dev/video0 

UPDATE:

I tried usb_cam with mine now. It seems to work perfectly for me:

    <launch>
      <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
        <param name="video_device" value="/dev/video1" />
        <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>   
    </launch>

Found it here

So I guess I will probably use usb_cam instead of libuvc_camera.

(btw not mjpg -> mjpeg)

UPDATE2:

I checked the code for the io_method and the formats supported by the node:

io_methods: mmap, read, userptr

formats: yuyv, uyvy, mjpeg, yuvmono10, rgb24

UsbCam::pixel_format UsbCam::pixel_format_from_string(const std::string& str)
{
    if (str == "yuyv")
      return PIXEL_FORMAT_YUYV;
    else if (str == "uyvy")
      return PIXEL_FORMAT_UYVY;
    else if (str == "mjpeg")
      return PIXEL_FORMAT_MJPEG;
    else if (str == "yuvmono10")
      return PIXEL_FORMAT_YUVMONO10;
    else if (str == "rgb24")
      return PIXEL_FORMAT_RGB24;
    else
      return PIXEL_FORMAT_UNKNOWN;
}

Asked by cyborg-x1 on 2015-07-03 11:36:32 UTC

Comments

I run the command for /dev/video1, result of it is Index : 1 Type : Video Capture Pixel Format: 'MJPG' (compressed) Name : MJPEG When I set pixel value mjpg , I get Unknown pixel format 'mjpg'

Asked by jossy on 2015-07-04 00:51:10 UTC

I set pixel value as yuyv, it works with video0 and video1. But the command says video0 pixel type is yuyv and video1 pixel type is mjpg.

Asked by jossy on 2015-07-04 00:55:28 UTC

See my update above, that works for me.

Asked by cyborg-x1 on 2015-07-04 06:07:31 UTC

What is the output of v4l2-ctl --list-formats-ext -d /dev/video0 ? Maybe you could also check for the io_method, read is not supported for my camera, while userptr and mmap work.

Asked by cyborg-x1 on 2015-07-04 06:30:04 UTC

Tried another camera, I got the same error like you "Webcam: expected picture but didn't get it..." then I retried with another io_method and it started working.

Asked by cyborg-x1 on 2015-07-04 16:50:45 UTC

the output of v4l2-ctl --list-formats-ext -d /dev/video0 is Index:0 Pixel Format: 'YUYV' .... Index:1 Index : 1 Type : Video Capture Pixel Format: 'MJPG' (compressed). I tried to run with 'yuyv' and it works .

Asked by jossy on 2015-07-06 00:37:05 UTC