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.mzph.cn/news/91188.shtml

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

相关文章

26947-2011 手动托盘搬运车 学习记录

声明 本文是学习GB-T 26947-2011 手动托盘搬运车. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了手动托盘搬运车(以下简称托盘车)的结构参数、技术要求、试验方法、检验规则、 标志、包装、运输和贮存。 本标准适用于额定载荷…

GPIO的输入模式

1. GPIO支持4种输入模式&#xff08;浮空输入、上拉输入、下拉输入、模拟输入&#xff09; 1. 模拟输入 首先GPIO输出部分(N-MOS,P-MOS)是不起作用的。并且TTL施密特触发器也是不工作的。 上下拉电阻的开关都是关闭的。相当于I/o直接接在模拟输入。 模拟输入模式下&#xff…

【每日一题】种花问题

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心 写在最后 Tag 【贪心】【数组】【2023-09-29】 题目来源 605. 种花问题 题目解读 种花要种在空地&#xff08;没有种过花的位置&#xff09;上&#xff0c;花不能种在相邻位置上否则会抢夺水资源无法正常生长&a…

ChatGPT,AIGC 助力人力资源管理对身份证号处理

HR&#xff0c;行政&#xff0c;文员办公对于员工信息管理中有一项目非常重要的操作&#xff0c;便是从身份证号中提取相关信息如下&#xff1a; 可以用ChatGPT完成三个字段的提取与计算。 我们先让ChatGPT描述一下身份证号每一位都代表什么意思。 接下来从身份证号中提取出生…

集合-ArrayList源码分析(面试)

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 目录 系列文章目录 前言 一 . 什么是ArrayList? 二 . ArrayList集合底层原理 总结 前言 大家好,今天给大家讲一下Arra…

高仿互站网多套模板完整源码

高仿互站网 后台手机端两套模板 电脑端二十套模版&#xff0c;简单介绍几个功能&#xff0c; 支持用户注册开店 开店申请&#xff0c;支持用户发布自己商品 支持卡密形式或实物形式&#xff0c; 支持用户自己发布求助 任务大厅功能&#xff0c;源码完整 更多功能自己去发现吧…

iTOP-RK3588开发板体验RKNN_DEMO

RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型&#xff0c;是以.rknn 结尾的模型文件。 RKNN SDK 提 供 的 demo 程 序 中 默 认 自 带 了 RKNN 模 型 &#xff0c; 在 RKNN SDK 的 examples/rknn_yolov5_demo/model/RK3588/目录下&#xff0c;如下图所示&#xff…

爬取北京新发地当天货物信息并展示十五天价格变化(三)---获取物品十五天内的价格

。。。。。。。。。。。。。。。。。。。。。。 1.网页请求一下内容2.通过爬虫进行请求3.获取商品十五天详细数据并绘制折线图4.项目详细代码 1.网页请求一下内容 通过抓包我们发现一共七个参数 limit: 20 # 一页多少数据 current: …

Python计算巴氏距离

Python计算巴氏距离 巴氏距离简介 在统计中&#xff0c;巴氏距离&#xff08;Bhattacharyya Distance&#xff09;测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的巴氏系数密切相关。巴氏距离和巴氏系数以20世纪30年代曾在印度统计研究所工作…

大麦订单截图生成 大麦一键生成订单截图

新版大麦订单生成 图样式展示 这个样式图就是在大麦生成完的一个订单截图&#xff0c;它的状态是等待卖家发货 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;修改conf数据库账号密码 不会的可以看源码里有搭建教程 下载程序&#xff1a;https://pan.baidu.com/…

Android widget 小部件使用指南强化版

Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图&#xff0c;这些数据和功能可以直…

如何在 Elasticsearch 中使用 Openai Embedding 进行语义搜索

随着强大的 GPT 模型的出现&#xff0c;文本的语义提取得到了改进。 在本文中&#xff0c;我们将使用嵌入向量在文档中进行搜索&#xff0c;而不是使用关键字进行老式搜索。 什么是嵌入 - embedding&#xff1f; 在深度学习术语中&#xff0c;嵌入是文本或图像等内容的数字表示…

使用GDIView排查GDI对象泄漏导致的程序UI界面绘制异常问题

目录 1、问题说明 2、初步分析 3、查看任务管理器&#xff0c;并使用GDIView工具分析 4、GDIView可能对Win10兼容性不好&#xff0c;显示的GDI对象个数不太准确 5、采用历史版本比对法&#xff0c;确定初次出现问题的时间点&#xff0c;并查看前一天的代码修改记录 6、将…

MySQL架构 InnoDB存储引擎

1. 什么是Mysql&#xff1f; 我们在开发的时候&#xff0c;我们都需要对业务数据进行存储&#xff0c;这个时候&#xff0c;你们就会用到MySQL、Oracal等数据库。 MySQL它是一个关系型数据库&#xff0c;这种关系型数据库就有Oracal、 MySQL&#xff0c;以及最近很火的PgSQL等。…

Docker-Windows安装使用

1.下载docker https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.配置虚拟化环境 通过控制面板“设置”启用 Hyper-V 角色 右键单击 Windows 按钮并选择“应用和功能”。选择相关设置下右侧的“程序和功能”。选择“打开或关闭 Windows 功能”。选择“Hyper-…

ElementUI -- Mock.js介绍和使用与首页导航栏左侧菜单搭建

1.1 mockjs介绍 Mock.js是一个用于生成随机数据和模拟接口请求的JavaScript库。它可以帮助开发人员在前端开发过程中模拟后端接口的返回数据&#xff0c;以便进行前端页面的开发和测试。 Mock.js有两个重要的特性风靡前端: 数据类型丰富 Mock.js提供了一套简单易用的API&#x…

双指针算法——移动零

双指针算法——移动零&#x1f60e; 前言&#x1f64c;题目详情&#xff1a;图解分析&#xff1a;代码分享&#xff1a;B站讲解视频链接&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧…

红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;获取初步立足点并搜集信息 第四步&#xff1a;软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶&#xff0c;详述了…

基于SSM的教师办公管理的设计与实现(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的教师办公管理的设计与实现&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…

你的游戏项目有这些问题吗?

在移动游戏对高品质画面的要求不断增加的背景下&#xff0c;我们一直专注于移动设备GPU性能的优化&#xff0c;以确保您的游戏体验得以最佳展现。然而&#xff0c;不同GPU芯片之间的性能差异以及由此可能引发的GPU瓶颈问题使得优化工作更加具有挑战性。 因此&#xff0c;在不久…