ROS系统读取USB相机图像数据

ROS系统读取USB相机图像数据

  • 前言
  • usb_cam 功能包下载与编译
  • 摄像头选择
  • 连接摄像头
  • 可配置参数

前言

usb_cam功能包简介
为了丰富机器人与外界的交互方式,已经增加了与机器人的语音交互方式,不仅使机器人能够说话发声,还能听懂我们说的话,但是如果只有语音交互的话机器人就是一个盲人,无法看到这个色彩斑斓的大千世界,因此我们就需要为机器人增加视觉识别功能。现在市面上最常见的还是USB摄像头,物美价廉,要想使USB摄像头在ROS下正常工作,我们就需要一个软件包来支持,现在ROS下最常用的usb摄像头软件包就是usb_cam了,简单理解该软件包就是V4L(Video for Linux)USB摄像头驱动在ROS在的一个移植版本。截止到目前为止该软件包在indigo和jade版本上还处于维护状态,对于kinetic版本及其以上还未有维护,当然虽然没有维护但是在kinetic版本上也可以工作。

usb_cam 功能包下载与编译

系统环境:ubuntu20.04
ROS版本:noetic

usb_cam功能包可以通过github下载

git clone  https://github.com/bosch-ros-pkg/usb_cam.git usb_cam

下载完成后提示:

正克隆到 ‘usb_cam’…
remote: Enumerating objects: 2232, done.
remote: Counting objects: 100% (2232/2232), done.
remote: Compressing objects: 100% (1015/1015), done.
remote: Total 2232 (delta 1033), reused 2082 (delta 988), pack-reused 0
接收对象中: 100% (2232/2232), 843.71 KiB | 306.00 KiB/s, 完成.
处理 delta 中: 100% (1033/1033), 完成.

在这里插入图片描述

拷贝到自己的ROS工作空间进行编译

catkin_make

编译报错:

– Checking for module ‘libv4l2’
– No package ‘libv4l2’ found
CMake Error at /usr/share/cmake-3.16/Modules/FindPkgConfig.cmake:463 (message):
A required package was not found
Call Stack (most recent call first):
/usr/share/cmake-3.16/Modules/FindPkgConfig.cmake:643 (_pkg_check_modules_internal)
usb_cam/CMakeLists.txt:10 (pkg_check_modules)

在这里插入图片描述
原因就是在usb_cam功能包的CMakeLists.txt的第10行是:

pkg_check_modules(video4linux libv4l2 REQUIRED)

系统中没有找到这个包,所以报错了。

sudo apt-get install libv4l2-dev

出现无法定位软件包,则需要更换镜像源
在这里插入图片描述
我换了源也不行,可能换源没有成功

sudo apt-get install libv4l-dev

成功了

获取:1 http://mirrors.aliyun.com/ubuntu focal/main amd64 libv4l2rds0 amd64 1.18.0-2build1 [15.8 kB]
获取:2 http://mirrors.aliyun.com/ubuntu focal/main amd64 libv4l-dev amd64 1.18.0-2build1 [108 kB]
已下载 124 kB,耗时 1秒 (221 kB/s)
正在选中未选择的软件包 libv4l2rds0:amd64。
(正在读取数据库 … 系统当前共安装有 361571 个文件和目录。)
准备解压 …/libv4l2rds0_1.18.0-2build1_amd64.deb …
正在解压 libv4l2rds0:amd64 (1.18.0-2build1) …
正在选中未选择的软件包 libv4l-dev:amd64。
准备解压 …/libv4l-dev_1.18.0-2build1_amd64.deb …
正在解压 libv4l-dev:amd64 (1.18.0-2build1) …
正在设置 libv4l2rds0:amd64 (1.18.0-2build1) …
正在设置 libv4l-dev:amd64 (1.18.0-2build1) …
正在处理用于 libc-bin (2.31-0ubuntu9.9) 的触发器 …

再次编译

catkin_make

顺利成功
在这里插入图片描述

摄像头选择

摄像头要选择:

  • usb 接口
  • 支持免驱协议:USB Video Class (UVC)
  • 支持的操作系统:Linux with UVC (above linux-2.6)

连接摄像头

首先先通过 下面指令看下本地是否有摄像头,有几个

ls /dev/video*

在这里插入图片描述
这代表有两个摄像头(一个摄像头出两个/dev/video*)

所以再连接摄像头后,会挂载到 /dev/video4下面

修改usb_cam功能包下面的config文件夹下的 usb_cam.yml文件中的

video_device: /dev/video0 

改为

video_device: /dev/video4 

启动功能包

roslaunch usb_cam test_img_view.launch

实际场景:
在这里插入图片描述

采集到的摄像头图像:
在这里插入图片描述
查看下当前topic

rostopic list

/image_view/output
/image_view/parameter_descriptions
/image_view/parameter_updates
/rosout
/rosout_agg
/usb_cam/camera_info
/usb_cam/image_raw
/usb_cam/image_raw/compressed
/usb_cam/image_raw/compressed/parameter_descriptions
/usb_cam/image_raw/compressed/parameter_updates
/usb_cam/image_raw/compressedDepth
/usb_cam/image_raw/compressedDepth/parameter_descriptions
/usb_cam/image_raw/compressedDepth/parameter_updates
/usb_cam/image_raw/theora
/usb_cam/image_raw/theora/parameter_descriptions
/usb_cam/image_raw/theora/parameter_updates

输出频率为30hz

rostopic hz /usb_cam/image_raw/theora
subscribed to [/usb_cam/image_raw/theora]
average rate: 32.730
min: 0.000s max: 0.041s std dev: 0.01037s window: 33
average rate: 31.137
min: 0.000s max: 0.047s std dev: 0.00844s window: 62
average rate: 30.616
min: 0.000s max: 0.047s std dev: 0.00748s window: 92

可配置参数

start_service_name: "start_capture" # Defines name suffix for std_srvs::Empty service which restarts suspended streaming
stop_service_name: "stop_capture"   # Defines name suffix for std_srvs::Empty service which suspends camera polling timer# 改成自己设备的挂载位置
video_device: /dev/video4           # Device driver's entrypoint
# 根据自己摄像头选择
io_method: mmap                     # I/O method# - read - for devices supporting virtual filesystem or block I/O# - mmap - for devices with direct libusb memory mapping# - userptr - for userspace devices supporting userspace pointer exchange
# 图像编码格式                                
pixel_format: yuyv                  # Pixel format for Video4linux device (also selects decoder mode)# https://wiki.videolan.org/YUV#YUV_4:2:0_.28I420.2FJ420.2FYV12.29# - yuyv - YUV420# - yuv - synonym for yuyv# - uyvy - UVY240# - yuvmono10 - Monochrome 10-bit pseudo-YUV# - rgb24 - Linear 8-bit RGB# - bgr24 - OpenCV-compatible 8-bit BGR# - grey - Grayscale 8-bit monochrome# - yu12 - YU-reversed YUV420# - mjpeg - FFMPEG decoder, MotionJPEG, for compatible hardware# - h264 - FFMPEG decoder, H.264, for compatible hardware
color_format: yuv422p               # On-chip color representation mode for the input frame encoded by hardware# - yuv422p - YUV422 - default, compatible with most MJPEG hardware encoders# - yuv420p - YUV420 - mandatory for H.264 and H.265 hardware encoders
create_suspended: false             # Instructs the node whether to start streaming immediately after launch# or to wait until the start service will be triggered
full_ffmpeg_log: false              # Allows to suppress warning messages generated by libavcodec, cleans log
camera_name: head_camera            # ROS internal name for the camera, used to generate camera_info message
# 发布topic中的frame_id
camera_frame_id: head_camera        # Frame ID used to generate coordinate transformations
# 发布的话题名称
camera_transport_suffix: image_raw  # Suffix used by image_transport to generate topic names
camera_info_url: ""                 # URI for camera calibration data (likely a YML file obtained from camera_calibration)
# 根据相机的参数设置图像的宽、高
image_width: 640                    # Frame dimensions, should be supported by camera hardware
image_height: 480
# 发布频率
framerate: 30                       # Camera polling frequency, Hz (integer)# Auxiliary camera parameters provided by libv4l2.# Names for these parameters are generated automatically according to the intrinsic control names exported by the# camera driver. The node queries camera's kernel controller module to determine the parameters that can be set up# via ROS. For these parameters the corresponding ROS parameters with identical names are generated under this# namespace.# See also the comprehensive node output describing parameter names and feasible values for them to be set up here.# It is also possible to have a list of the available control names using v4l2-ctl application from v4l2-util package:# v4l2-ctl --device=/dev/video<ID> -L
intrinsic_controls:                 focus_auto: trueexposure_auto_priority: trueexposure_auto: 3white_balance_temperature_auto: truepower_line_frequency: 1ignore: [brightness,contrast,saturation,gain,sharpness,backlight_compensation,white_balance_temperature,exposure_absolute,pan_absolute,tilt_absolute,focus_absolute,zoom_absolute]                               # Use this list to enumerate the control names that should be delisted from the camera setup# NOTE: the ROS parameters for the V4L controls supported but listed here would be STILL# generated, but the values WILL NOT BE USED to set up the camera. To affect these controls# once you want to do that, their names should me REMOVED from this list!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/144465.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务

一、背景描述 在Windows环境下进行日常的项目开发过程中&#xff0c;有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行&#xff08;没有用户登陆&#xff0c;服务在开机后也可以照常运行&#xff09;、且对于那些没有用户交互界面的exe程序来说只要在后台…

STL upper_bound和lower_bound函数

声明&#xff1a; 首先包含头文件#include<algorithm> 这里的两个函数所运用的对象必须是非递减的序列&#xff08;也就是数组&#xff0c;数组必须是非递减的&#xff09;&#xff0c;只有这样才可以使用upper_bound和lower_bound这两个函数。 还有一点&#xff0c;就…

Python入门教程48:Pycharm永久镜像源的pip配置方法

国内几个好用的Python镜像服务器地址&#xff1a; 清华大学镜像站&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/阿里云镜像站&#xff1a;https://mirrors.aliyun.com/pypi/simple/中科大镜像站&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/中国科技大学镜…

HTML5福利篇--使用Canvas画图

目录 一.Canvas元素 1.Canvas元素定义 2.使用JavaScript获取页面中的Canvas对象 二.绘制图形 1.绘制直线 2.绘制矩形 &#xff08;1&#xff09;rect() &#xff08;2&#xff09;strokeRect() &#xff08;3&#xff09;fillRect()和clearRect()函数 3.绘制圆弧 4.…

ElementUI之首页导航+左侧菜单->mockjs,总线

mockjs总线 1.mockjs 什么是Mock.js 前后端分离开发开发过程当中&#xff0c;经常会遇到以下几个尴尬的场景&#xff1a; - 老大&#xff0c;接口文档还没输出&#xff0c;我的好多活干不下去啊&#xff01; - 后端小哥&#xff0c;接口写好了没&#xff0c;我要测试啊&#x…

opencv: 解决保存视频失败的问题

摘要&#xff1a;opencv能读取视频&#xff0c;但保存视频时报错。 一、首先要确保已经下载了openh264.dll文件&#xff0c;否则保存的视频无法打开&#xff0c;详细可以浏览这个&#xff1a;opencv&#xff1a;保存视频。 二、保存视频时出现一下问题&#xff1a; OpenCV:…

COCO 数据集 人体关键点格式

图片与标注数据在 COCO官网 均提供下载 标注格式 COCO 的标注中包含 4 个部分/字段&#xff0c;"info" 描述数据集&#xff0c;"licenses" 描述图片来源&#xff0c;"images" 和 "annotations" 是主体部分 "images" 部分…

一文带你全面解析postman工具的使用

写在前面&#xff1a;本文转自今日头条作者雨滴测试&#xff0c;感兴趣可点击下方链接查看原文 基础篇效率篇高级篇 一文带你全面解析postman工具的使用 文章目录 一文带你全面解析postman工具的使用基础篇一、postman安装说明1.下载与安装2.界面导航说明3.发送第一个请求 二、…

3 OpenCV两张图片实现稀疏点云的生成

前文&#xff1a; 1 基于SIFT图像特征识别的匹配方法比较与实现 2 OpenCV实现的F矩阵RANSAC原理与实践 1 E矩阵 1.1 由F到E E K T ∗ F ∗ K E K^T * F * K EKT∗F∗K E 矩阵可以直接通过之前算好的 F 矩阵与相机内参 K 矩阵获得 Mat E K.t() * F * K;相机内参获得的方式…

87、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->List相关命令

本次讲解要点&#xff1a; List相关命令&#xff1a;是指value中的数据类型 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe redi…

Java编码技巧:验证码

目录 1.1、EasyCaptcha&#xff08;优选&#xff0c;支持种类多&#xff0c;样式多&#xff0c;使用简单&#xff09;1.1.1、作用1.1.2、官方信息1.1.3、使用案例1.1.4、依赖1.1.5、代码1.1.6、效果1.1.7、拓展 1.2、kaptcha1.2.1、作用1.2.2、官方信息1.2.3、使用案例1.2.4、依…

DE0开发板交通灯十字路口红绿灯VHDL

名称&#xff1a;基于DE0开发板的交通灯十字路口红绿灯 软件&#xff1a;Quartus 语言&#xff1a;VHDL 要求&#xff1a; 设计一个十字路口交通信号灯的控制电路。分为两种情况&#xff0c;正常状态和报警状态。 1.正常状态&#xff1a;要求红、绿灯按一定的规律亮和灭&a…

触觉智能 PurPle Pi OH(OpenHarmony)开发板

资料汇总 内容预览 产品介绍 PurPle-Pi OH 规格书​​​​​​ 系统编译 Purple-Pi-OH Linux SDK编译 Purple-Pi-OH OHOS SDK编译 使用手册 Purple-Pi-OH Ubuntu系统使用手册 常见FAQ 常见问题 官网 官网地址 Purple Pi OH介绍 Purple Pi OH作为一款兼容树莓派的开…

多个pdf合并成一个文件,3个方法合并pdf

如何把多个pdf合并成一个文件&#xff1f;在我们日常的工作中&#xff0c;经常会遇到一些需要处理的文件&#xff0c;其中包括PDF文件。特别是当我们需要将多个PDF文件合并成一个PDF文件时&#xff0c;会面临一些困难。这样的情况下&#xff0c;我们的阅读能力会受到限制&#…

软件测试中的测试工具和自动化测试

1. 测试工具 测试工具也分为不同人员使用的 开发人员&#xff1a;测试框架&#xff0c;编写测试用例&#xff1b;各类线上dump分析工具如windgb&#xff1b;开发时的集成IDE工具如Visual Studio&#xff0c;idea等等 面向不同测试需求的测试工具 软件测试是软件开发生命周期…

手摸手带你 在Windows系统中安装Istio

Istio简介 通过负载均衡、服务间的身份验证、监控等方法&#xff0c;Istio 可以轻松地创建一个已经部署了服务的网络&#xff0c;而服务的代码只需很少更改甚至无需更改。 通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持&#xff0c;而代理会拦截微服务…

Multisim14.0仿真(二十七)基于UC3842的反激式开关电源的设计及仿真

一、UC3842简介&#xff1a; UC3842为固定频率电流模式PWM控制器。它们是专门为OFF−线和直流到直流转换器应用与最小的外部组件。内部实现的电路包括用于精确占空比控制的修剪振荡器、温度补偿参考、高增益误差放大器、电流传感比较器和理想适合于驱动功率MOSFET的高电流温度极…

MySQL学习笔记24

MySQL的物理备份&#xff1a; xtrabackup备份介绍&#xff1a; xtrabackup优缺点&#xff1a; 优点&#xff1a; 1、备份过程快速、可靠&#xff08;因为是物理备份&#xff09;&#xff1b;直接拷贝物理文件。 2、支持增量备份&#xff0c;更为灵活&#xff1b; 3、备份…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 C: 班级活动

[蓝桥杯 2023 国 B] 班级活动 【问题描述】 小明的老师准备组织一次班级活动。班上一共有 n n n 名&#xff08; n n n 为偶数&#xff09;同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 n n …

Eclipse环境基于HDFS的API进行开发

文章目录 IOUtils方式读取文件1.文件准备2.下载安装Eclipse3.打开eclipse&#xff0c;新建java项目&#xff0c;添加关于hadoop的一些包4.包内新建类进行开发5.利用打包的方式生成java jar包6.验证代码正确性 其它问题&#xff1a;Exception in thread “main“ java.lang.Unsu…