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

原链接:http://community.bwbot.org/topic/144
运行测试平台:小强ROS机器人

本文解决办法来源: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
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要订阅usb_cam读取到的摄像头信息,你可以使用ROS中的图像订阅器。以下是一些步骤来实现这个目标: 1. 首先,确保你已经安装了usb_cam驱动包。你可以通过apt-get命令或者从源码进行安装。 2. 启动usb_cam节点,发布摄像头图像话题。你可以使用roslaunch命令来启动usb_cam节点,例如: ``` roslaunch usb_cam usb_cam-test.launch ``` 3. 查看节点和话题,确保usb_cam节点已经在运行并发布了图像话题。你可以使用rosnode list命令查看节点列表,使用rostopic list命令查看话题列表。 4. 创建一个ROS订阅器节点,订阅usb_cam发布的图像话题。你可以使用rospy(Python)或者roscpp(C++)来编写订阅器节点的代码。 - 在Python中,你可以使用rospy.Subscriber来创建一个订阅器对象,并指定要订阅的话题和回调函数。回调函数将在接收到新的图像消息时被调用。 - 在C++中,你可以使用ros::Subscriber类来创建一个订阅器对象,并指定要订阅的话题和回调函数。回调函数将在接收到新的图像消息时被调用。 在回调函数中,你可以处理接收到的图像数据,例如显示图像、进行图像处理等。 请注意,你需要确保订阅器节点usb_cam节点在同一个ROS网络中运行,以便它们可以相互通信。 希望这些步骤可以帮助你订阅usb_cam读取到的摄像头信息。 #### 引用[.reference_title] - *1* *3* [ROS下使用usb_cam驱动读取摄像头数据](https://blog.csdn.net/Yangxiaoaijiejie/article/details/127061479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【ROS2】使用摄像头功能包 usb_cam](https://blog.csdn.net/u010168781/article/details/131120968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值