There are several ways to use ROS Indigo/Jade with a webcam. The one way working at most computer is using a ROS package called uvc_camera which has been created by Ken Tossell. UVC in this context stands for USB Video Class, which is a standard that covers almost all consumer webcams.
Unfortunately there currently is no step by step tutorial how to use the package, which is why I created this page. In order to run the package, you will need a local catkin workspace as we created it in another post. This is caused by the fact, that the available package is outdated and does not contain any launch files.
Step by Step Guide
We start by cloning the files into our workspace ./src directory, solving the dependencies with rosdep and finally building the workspace with catkin_make:
cd ~/catkin_ws/src/ #change directory to your source folder git clone https://github.com/ktossell/camera_umd.git #clone the package from its repo rosdep install camera_umd uvc_camera jpeg_streamer cd .. #go one dir up to catkin_ws catkin_make #build the workspace
Before I could build my workspace with the newly cloned files, I still was required to install video4linux support libraries in their development version by:
sudo apt-get install libv4l-dev
After catkin_make finished you can launch the uvc_camera node by:
roscd uvc_camera/launch/ roslaunch ./camera_node.launch
After having a roscore running, the camera_node.launch file should give you something like the following output:
opening /dev/video0 pixfmt 0 = 'YUYV' desc = 'YUV 4:2:2 (YUYV)' discrete: 640x480: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 160x120: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 176x144: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 320x176: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 320x240: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 352x288: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 432x240: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 544x288: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 640x360: 1/30 1/25 1/20 1/15 1/10 1/5 pixfmt 1 = 'MJPG' desc = 'MJPEG' discrete: 640x480: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 160x120: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 176x144: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 320x176: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 320x240: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 352x288: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 432x240: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 544x288: 1/30 1/25 1/20 1/15 1/10 1/5 discrete: 640x360: 1/30 1/25 1/20 1/15 1/10 1/5 int (Brightness, 0, id = 980900): 0 to 255 (1) int (Contrast, 0, id = 980901): 0 to 255 (1) int (Saturation, 0, id = 980902): 0 to 255 (1) bool (White Balance Temperature, Auto, 0, id = 98090c): 0 to 1 (1) int (Gain, 0, id = 980913): 0 to 255 (1) menu (Power Line Frequency, 0, id = 980918): 0 to 2 (1) 0: Disabled 1: 50 Hz 2: 60 Hz int (White Balance Temperature, 16, id = 98091a): 0 to 10000 (10) int (Sharpness, 0, id = 98091b): 0 to 255 (1) int (Backlight Compensation, 0, id = 98091c): 0 to 1 (1) menu (Exposure, Auto, 0, id = 9a0901): 0 to 3 (1) int (Exposure (Absolute), 16, id = 9a0902): 1 to 10000 (1) bool (Exposure, Auto Priority, 0, id = 9a0903): 0 to 1 (1) Setting auto_focus is not supported Setting focus_absolute is not supported
where you can see the possible run modes you know can configure in your custom launch file:
<launch> <node pkg="uvc_camera" type="uvc_camera_node" name="uvc_camera" output="screen"> <param name="width" type="int" value="640" /> <!-- we raised the value by the factor 2, as it is supported by previous output --> <param name="height" type="int" value="480" /> <!-- we raised the value by the factor 2 --> <param name="fps" type="int" value="30" /> <param name="frame" type="string" value="wide_stereo" /> <param name="auto_focus" type="bool" value="False" /> <param name="focus_absolute" type="int" value="0" /> <!-- other supported params: auto_exposure, exposure_absolute, brightness, power_line_frequency --> <!-- in case you want to use a different video input device, change the value below --> <param name="device" type="string" value="/dev/video0" /> <param name="camera_info_url" type="string" value="file://$(find uvc_camera)/example.yaml" /> </node> </launch>
You can now start rqt and its plugin Visualization > Image View, choose e.g. the /image_raw topic and in case you have club mate and a hitchhiker’s guide to the galaxy by Douglas Adams around, you’ll get the following output: