很多相机支持uvc[1]的传输格式。
ros官网自带的libuvc,支持uvc格式的视频流,本文主要对这个链接中的一些细节,进行补充说明。
step 1
插入usb
step 2 获取基本信息
查找camera的Bus、device、vendor和product号码。
lsusb
例子中,
Bus id = 001
Device id = 020(这个号码,每次usb插拔后会变化,目前不知道怎么固定)
Vendor id = 0x0c45
Product id = 64ab
step 3 赋予相机接口权限
sudo chmod o+w /dev/bus/usb/001/020
# where 020 is the device id, and 001 is the bus id.
step 4 禁用其他USB视觉和自媒体驱动
You may need to disable your operating system’s builtin USB video or audio drivers. On Linux, the snd-usb-audio and uvcvideo modules conflict with libuvc. Try unloading them with sudo rmmod snd-usb-audio; sudo rmmod uvcvideo and consider blacklisting them – e.g., add the lines blacklist uvcvideo and blacklist snd-usb-audio to an /etc/modprobe.d/uvc.conf file. (Applications that don’t use libuvc will be unable to stream from the camera.)
snd-usb-audio和uvcvideo会和libuvc发生冲突。
命令行来进行禁用,似乎只在当前终端下有效。一劳永逸的方法可能还是将其加入黑名单。
sudo rmmod snd-usb-audio
以及
sudo rmmod uvcvideo
step 5 查看相机帧率、压缩格式和画幅大小
v4l2-ctl --list-formats-ext
上图列出了相机输出的压缩格式(yuyv)、画幅尺寸和相对的帧率。
其他压缩格式有uncompressed/yuyv/nv12/jpeg,可以参考[2]。
step 6 安装ros官方的libuvc包
sudo apt-get install ros-版本-libuvc_camera
step 7 编写roslaunch文件,并运行。
模板可以从ros官网下复制,将上述的参数,填入对应位置,然后运行即可。
其中,因为没有标定,所以出现黄色的warning表示找不到内参文件,这并不妨碍图像的输出。可以暂时忽视它。
step 8 检查话题消息,并可视化输出图片。
如果step6 运行成功,则可以接收到相关的rostopic
rostopic echo /camera/image_raw
可以通过rviz来输出图像数据。
添加image数据类型的topic,选择对应的rostopic,即可输出对应的图像。