ROS交流群
ROS Group
产品服务
Product Service
开源代码库
Github
官网
Official website
技术交流
Technological exchanges
激光雷达
LIDAR
ROS教程
ROS Tourials
深度学习
Deep Learning
机器视觉
Computer Vision

解决ROS的usb_cam节点无法正常读取mjpeg格式摄像头的方法



  • 本文解决办法来源:http://answers.ros.org/question/217382/garbled-image-problem-on-usb_cam/

    使用usb_cam读取mjpeg格式的usb摄像头时,如果提示类似下述的错误,是因为链接的ffmpeg解码库存在问题。

    [mjpeg @ 0x223e460] overread 8
    [mjpeg @ 0x223e460] overread 8
    [mjpeg @ 0x223e460] error count: 68
    [mjpeg @ 0x223e460] error y=38 x=1
    [mjpeg @ 0x223e460] error count: 64
    [mjpeg @ 0x223e460] error y=34 x=1
    [mjpeg @ 0x223e460] error count: 68
    [mjpeg @ 0x223e460] error y=40 x=4
    [mjpeg @ 0x223e460] error count: 64
    [mjpeg @ 0x223e460] error y=42 x=1
    [mjpeg @ 0x223e460] error count: 64
    [mjpeg @ 0x223e460] error y=31 x=0
    [mjpeg @ 0x223e460] error count: 64
    [mjpeg @ 0x223e460] error y=30 x=37
    [mjpeg @ 0x223e460] overread 8
    

    解决办法是安装新版本的ffmpeg,然后修改usb_cam的cmake依赖库链接设置

    1.ffmpeg的安装
    mkdir ~/ffmpeg_sources
    cd ~/ffmpeg_sources
    wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
    tar xjvf ffmpeg-snapshot.tar.bz2
    cd ffmpeg
    PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
    ./configure   --prefix="$HOME/ffmpeg_build"   --pkg-config-flags="--static"   --extra-cflags="-I$HOME/ffmpeg_build/include"   --extra-ldflags="-L$HOME/ffmpeg_build/lib"   --bindir="$HOME/bin"     --enable-shared --enable-pic --extra-cflags="-fPIC"
    make -j
    make install
    
    2. 现在ffmpeg开发库已经安装在home目录下的ffmpeg_build文件夹内,修改usb_cam的cmake文件

    为了方便自己,这里有一份已经修改好的usb_cam代码,git clone下来后,将CMakeLists.txt文件中对应下文部分的xiaoqiang替换成自己的用户名即可。ffmpeg库API一直在变化更新,上述修改好的usb_cam版本解决了这些匹配问题,因此推荐使用。

    ## pkg-config libraries
    ## find_package(PkgConfig REQUIRED)
    ## pkg_check_modules(avcodec libavcodec REQUIRED)
    ## pkg_check_modules(swscale libswscale REQUIRED)
    set(avutil_LIBRARIES /home/xiaoqiang/ffmpeg_build/lib/libavutil.so.55)
    set(avcodec_LIBRARIES /home/xiaoqiang/ffmpeg_build/lib/libavcodec.so.57)
    set(swscale_LIBRARIES /home/xiaoqiang/ffmpeg_build/lib/libswscale.so.4)
    set(ffmpeg_INCLUDE_DIRS  /home/xiaoqiang/ffmpeg_build/include/)
    
    3.执行catkin_make,重新编译usb_cam,问题解决

    例如

    cd ~/Documents/ros
    catkin_make
    
    4.对于蓝鲸智能的小强用户,现在使用下述命令可以正常以mjpeg方式获取小车的usb摄像头数据,修改launch文件中的分辨率为1920*1080还能获取30fps的1080p图像。
    roslaunch usb_cam ov2610mjpg.launch
    

Log in to reply