智能机器人(41):USB-camera

一、camera的驱动
二、在linux种使用uvc驱动
三、在ros中使用uvc驱动
四、在ros中使用usb驱动

  • 一、camera的驱动

1、UVC
第一个概念是UVC:USB Video Device Class,大部分usb接口(包括主办集成)都兼容uvc,uvc的实现独立于linux/weindows等系统。
2、V4L
第二个概念是V4L或者V4L2:Video4Linux,它提供了一系列的API,新版本是2,V4L2。
3、usb_cam
ROS的usb_cam这个package实现了V4L,提供的node是usb_cam_node,发布的topic是<camera_name>/image,msg类型是sensor_msgs/Image ,参数主要有video_device,camera_name ,pixel_format ,camera_frame_id (The camera’s tf frame ),brightness。
4、uvc_camera
ROS的uvc_camera这个package实现了uvc视频流的用法,还支持两个相机组成的双目视觉,提供的node是UVC/USB camera,发布的topic主要有image_raw这个视频流,参数主要有device,fps,frame_id。该package已经不再维护,被libuvc_camera替代。
5、libuvc_camera
这个要求用户具有/dev/bus/usb/具体相机的写权限,所以最好:
$ sudo -E rosrun libuvc_camera camera_node vendor:=具体厂家
6、cv_camera
这个package是ROS提供的openCV驱动。

  • 二、在linux种使用uvc驱动

1、查看ID
$ lsusb
–Bus 001 Device 003: ID 1578:0076
–Bus 001 Device 004: ID 0547:4d35 Anchor Chips, Inc.
–Bus 001 Device 005: ID 04f2:b2ea Chicony Electronics Co., Ltd Integrated Camera [ThinkPad]
如果开发过usb设备的驱动程序,就很清楚04f2:b2ea是description里面的vendor和product,最常见的罗技c270是046d:0825,可以通过google这个ID,确定是否在uvc的支持列表。也可以在本机上运行:
$ lsusb -d 04f2:b2ea -v | grep “14 Video”
bFunctionClass         14 Video
bInterfaceClass        14 Video
bInterfaceClass        14 Video
bInterfaceClass        14 Video
bInterfaceClass        14 Video
bInterfaceClass        14 Video
bInterfaceClass        14 Video
bInterfaceClass        14 Video
这些输出信息说明兼容UVC,否则就是non-UVC camera。
2、看下设备
$ ls /dev | grep video
–video0
这说明有了硬件。
3、再看
$ lsmod | grep uvcvideo
uvcvideo               72275  0
videobuf2_core         39510  1 uvcvideo
videodev              108952  2 uvcvideo,videobuf2_core
videobuf2_vmalloc      13048  1 uvcvideo
4、如果没出现可以显式的加载模块
$ sudo modprobe uvcvideo
5、验证
$ lshal | grep video
system.hardware.primary_video.product = 1029  (0x405)  (int)
system.hardware.primary_video.vendor = 5549  (0x15ad)  (int)
info.linux.driver = ‘uvcvideo’  (string)
info.linux.driver = ‘uvcvideo’  (string)
info.capabilities = {‘video4linux’, ‘video4linux.video_capture’} (string list)
info.category = ‘video4linux’  (string)
info.subsystem = ‘video4linux’  (string)
info.udi = ‘/org/freedesktop/Hal/devices/usb_device_4f2_b2ea_noserial_if0_video4linux’  (string)
linux.device_file = ‘/dev/video0’  (string)
linux.subsystem = ‘video4linux’  (string)
linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-2/1-2:1.0/video4linux/video0’  (string)
video4linux.device = ‘/dev/video0’  (string)
video4linux.version = ‘2’  (string)
$ lshal | grep Cam
info.product = ‘Integrated Camera [ThinkPad]’  (string)
usb_device.product = ‘Integrated Camera [ThinkPad]’  (string)
usb.interface.description = ‘Integrated Camera’  (string)
info.product = ‘Integrated Camera’  (string)
info.product = ‘Integrated Camera’  (string)
input.product = ‘Integrated Camera’  (string)
info.product = ‘5.0M USB2.0 Camera’  (string)
usb_device.product = ‘5.0M USB2.0 Camera’  (string)
6、说明ok的
$ dmesg | grep video
[  409.572621] Linux video capture interface: v2.00
[  409.663484] usbcore: registered new interface driver uvcvideo
[ 4822.404813] uvcvideo: Found UVC 1.00 device Integrated Camera (04f2:b2ea)
$ dmesg | grep Cam
[  168.027246] usb 1-1: Product: USB2-Camera
[  267.368271] usb 1-1: Product: USB2-Camera
[ 3700.024321] usb 1-1: Product: 5.0M USB2.0 Camera
[ 4822.259972] usb 1-2: Product: Integrated Camera
[ 4822.404813] uvcvideo: Found UVC 1.00 device Integrated Camera (04f2:b2ea)
[ 4822.530930] input: Integrated Camera as /devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-2/1-2:1.0/input/input5
$ dmesg|tail -n20
7、开启视频
$ cheese –device=/dev/video0
这里用cheese查看视频。

  • 三、在ros中使用uvc驱动

1、安装uvc_cam
$ cd ~/catkin_ws
$ git clone https://github.com/ericperko/uvc_cam.git
$ cd ..
$ rosmake uvc_cam
这个,[uvc_cam] 的package位于用户的catkin_ws下面,所以要保证ROS_PACKAGE_PATH包含这个位置,可以roscd到uvc_cam。
当然,安装ros提供的也是可以的:
$ sudo apt-get install ros-hydro-uvc-camera
这样的话,[uvc_camera] 这个package就位于/opt的share下面了,关键的还是没法测试后续的rbx1的例程。
2、驱动测试
运行测试脚本
$ roslaunch  uvc_cam test_uvc.launch
查看视频
$ rosrun image_view image_view image:=/camera/image_raw
ok
3、进一步测试
3.1、借用下rbx1现成的launch脚本来运行[uvc_cam]驱动,(不是[uvc_camera])
$ roslaunch rbx1_vision  uvc_cam.launch  device:=/dev/video0
此时node增加了一个/uvc_cam_node,topic增加了许多。
3.2、或者使用[uvc_camera]而不用[uvc_cam]:
$ roslaunch rbx1_vision  uvc_camera.launch  device:=/dev/video0
同样的,node增加了一个/uvc_camera_node,topic增加了许多。
3.3、按照例程,后面还是使用 [uvc_cam] 。
3.4、查看视频:
利用vision_opencv这个package里面的image_view
$ rosrun image_view image_view image:=/camera/rgb/image_color
或者rqt里面plugins->imageview->选择/camera/rgb/image_color
$ rqt
ok

  • 四、在ros中使用usb驱动

1、安装usb_cam
$ cd ~/catkin_ws/src
$ git clone https://github.com/bosch-ros-pkg/usb_cam.git
$ cd ~/catkin_ws
$ catkin_make
或者:
$ cd ~
$ rosmake usb_cam
2、驱动测试
运行测试脚本
$ roslaunch usb_cam usb_cam-test.launch
在usb_cam的launch下面的usb_cam-test.launch这个脚本,把pixel_format设成了yuyv,有可能需要修改成mjpeg,然后保存。
也可以外部设置:
$ rosparam set /usb_cam/pixel_format yuyv
查看视频:
$ rosrun image_view image_view image:=/?????
3、为了进一步测试,写一个usb_cam.launch
$ cd ~/catkin_ws/src/rbx1/rbx1_vision/launch
仿照uvc_cam.launch的格式:
<launch>
<arg name=”device” default=”/dev/video0″ />
<node name=”uvc_cam_node” pkg=”uvc_cam” type=”uvc_cam_node” output=”screen”>
<remap from=”camera/image_raw” to=”camera/rgb/image_color” />
<param name=”device” value=”$(arg device)” />
<param name=”width” value=”320″ />
<param name=”height” value=”240″ />
<param name=”frame_rate” value=”20″ />
<param name=”exposure” value=”0″ />
<param name=”gain” value=”100″ />
</node>
</launch>
写成usb_cam.launch的脚本:
$ nano usb_cam.launch
<launch>
<arg name=”device” default=”/dev/video0″ />
<node name=”usb_cam_node” pkg=”usb_cam” type=”usb_cam_node” output=”screen”>
<remap from=”usb_cam_node/image_raw” to=”camera/rgb/image_color” />
<param name=”video_device” value=”$(arg device)” />
<param name=”image_width” value=”320″ />
<param name=”image_height” value=”240″ />
<param name=”framerate” value=”20″ />
<param name=”brightness” value=”128″ />
<param name=”contrast” value=”128″ />
<param name=”saturation ” value=”70″ />
</node>
</launch>
这里面为了使usb_cam和uvc_cam一样remap到camera/rgb/image_color,如果需要的话也加上修改图像格式这个:
<param name=”pixel_format ” value=”yuyv” />
4、进一步测试
运行驱动
$ roslaunch rbx1_vision  usb_cam.launch  device:=/dev/video0
查看视频
$ rosrun image_view image_view image:=/camera/rgb/image_color

0 回复

发表评论

Want to join the discussion?
Feel free to contribute!

发表评论