ROS学习笔记(四):使用 `ros2 run usb_cam usb_cam_node_exe` 启动 USB 摄像头

文章目录

  • 前言
  • 1 安装 `usb_cam` 包
  • 2 启动 USB 摄像头
  • 3 订阅相机发布的节点信息并进行可视化
        • 3.1 使用 `rqt_image_view`
        • 3.2 使用 `image_view`
        • 3.3 使用 `rviz`
  • 4 常见问题与解决方案
      • 4.1 摄像头未被识别
      • 4.2 相机显示异常
      • 4.3 如何指定不同的相机
          • 4.4 摄像头参数调整
        • 5. 调试信息
  • 5. 结论


前言

关于Ubuntu与ROS的常规安装,可以看这几篇。

  • SLAM实操入门(一):在已有WIN10的电脑上安装Ubuntu20.04
  • SLAM实操入门(二):安装ROS Noetic并运行“小乌龟”程序
  • ROS学习笔记(一):ROS1入门简明介绍(附详细注释)
  • ROS学习笔记(二):鱼香ROS — 超便捷的一键安装/配置/换源指令
  • ROS学习笔记(三):VSCode集成开发环境快速安装,以及常用扩展插件配置

本系列主要用来记录学习ROS的相关内容,本文为ROS操作系统简明概要。


在 ROS2 中,`usb_cam` 节点提供了与 USB 摄像头的交互能力,可以用于获取相机的图像数据。但是,在使用过程中,可能会遇到一些问题。本文将详细介绍如何使用 `ros2 run usb_cam usb_cam_node_exe` 命令以及在使用过程中可能遇到的常见问题及其解决方案。

1 安装 usb_cam

在开始之前,请确保已安装 usb_cam 包。可以通过以下命令安装:

sudo apt-get install ros-<ros2-distro>-usb-cam

<ros2-distro> 替换为当前使用的 ROS2 版本(如 foxygalactic)。

2 启动 USB 摄像头

要启动 USB 摄像头,可以使用以下命令:

ros2 run usb_cam usb_cam_node_exe

这个命令将启动 usb_cam 节点并默认连接到 /dev/video0(第一个检测到的相机)。

3 订阅相机发布的节点信息并进行可视化

在启动相机后,可以通过订阅相机发布的节点信息来获取实时图像数据。在ROS2中,可以使用rqt工具或image_view工具进行可视化。

3.1 使用 rqt_image_view
  1. 安装 rqt_image_view(如果未安装):

    sudo apt install ros-<distro>-rqt-image-view
    

    其中,<distro> 是的ROS2发行版,如 galacticfoxy

  2. 启动 rqt_image_view

    rqt_image_view
    
  3. 选择相机话题

    rqt_image_view 界面中,可以选择相机发布的图像话题(通常是 /camera/image_raw 或者 /your_camera_name/image_raw)。选择后,将能够实时查看相机捕获的图像。

3.2 使用 image_view

image_view 是另一个用于图像可视化的工具,使用方法如下:

  1. 启动 image_view

    ros2 run image_view image_view --ros-args -r image:=/your_camera_name/image_raw
    

    这里的 image 是想要订阅的图像话题。

3.3 使用 rviz
sudo apt install rviz
rviz2

4 常见问题与解决方案

4.1 摄像头未被识别

如果在运行命令时发现 /dev/video* 中没有设备,可以使用以下命令来列出所有连接的摄像头:

ls /dev/video*
  • 如果没有设备被列出,可能是摄像头未正确连接或驱动程序问题,如下图:

  • 请确保摄像头已连接并重新启动计算机

正常显示为:
在这里插入图片描述

该命令将会启动 usb_cam 节点,默认情况下会选择第一个可用的相机(通常是 /dev/video0)。启动后,能够在控制台看到相机的状态信息,包括相机分辨率、帧率等。

4.2 相机显示异常

如果启动 usb_cam 节点后,看到图像是绿色的,可能是由于以下原因:

  • 图像格式不匹配:确保相机支持 yuyv 或其他兼容的图像格式。
  • 驱动程序问题:有时,USB 摄像头的驱动程序可能存在兼容性问题。尝试更新驱动程序或使用不同的 USB 端口。

在使用Intel深度相机时,设备通常支持RGB和深度图像的输出。如果未明确指定所需的输出类型,可能会出现显示异常。

例如,启动相机后,可能会看到绿色的图像,这是因为系统默认选择了深度输出
在这里插入图片描述

4.3 如何指定不同的相机

如果计算机上连接了多个相机,可以通过 --ros-args -p 参数来指定相机。例如,指定第二个相机可以使用:

ros2 run usb_cam usb_cam_node_exe --ros-args -p camera_name:=camera1

同时,可以通过设置相机设备路径来指定相机(比如遇到显示异常的情况):

ros2 run usb_cam usb_cam_node_exe --ros-args -p device_id:=/dev/video4

确保将 /dev/video4 替换为希望使用的相机设备路径。

在这里插入图片描述

4.4 摄像头参数调整

usb_cam 允许通过 YAML 文件指定摄像头的参数,例如分辨率、帧率等。可以创建一个 YAML 文件,并在启动节点时加载它:

camera_name: default_cam
image_width: 640
image_height: 480
framerate: 30

启动命令示例:

ros2 run usb_cam usb_cam_node_exe --ros-args -p camera_info_url:=file:///path/to/your/camera.yaml
5. 调试信息

在启动 usb_cam 节点时,可以通过查看终端输出的调试信息来确认相机的连接状态、当前帧率和图像格式等信息。

例如,可能会看到如下输出:

[INFO] [usb_cam]: Starting 'default_cam' (/dev/video0) at 640x480 via mmap (yuyv) at 30 FPS

这表明相机已成功启动,并在指定的分辨率和帧率下工作。

5. 结论

使用 ros2 run usb_cam usb_cam_node_exe 启动相机是一个相对简单的过程,但在使用深度相机时需要特别注意输出类型的选择。同时,通过 rqt_image_viewimage_view 可以方便地订阅相机发布的节点信息并进行可视化,从而帮助更好地调试和使用相机。


## 相关链接

其他内容可参考:

  • SLAM实操入门(八):使用Robosence-16转换数据格式,进行基于A-Loam的三维SLAM
  • SLAM实操入门(九):录制基于A-Loam的三维SLAM数据并保存为PCL格式
  • ROS学习笔记(一):ROS1入门简明介绍(附详细注释)
  • ROS学习笔记(二):鱼香ROS — 超便捷的一键安装/配置/换源指令
  • ROS学习笔记(三):VSCode集成开发环境快速安装,以及常用扩展插件配置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9.5K Star,开源在线网盘

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 随着云存储的广泛应用&#xff0c;越来越多的人和企业需要一个简单、…

用Promise实现前端并发请求

/** * 构造假请求 */ async function request(url) {return new Promise((resolve) > {setTimeout(() > {resolve(url);},// Math.random() * 500 800,1000,);}); }请求一次&#xff0c;查看耗时&#xff0c;预计应该是1s&#xff1a; async function requestOnce() {c…

docker安装Portainer CE

docker安装Portainer CE 教程 1、简介 Portainer 是一款开源的容器管理工具&#xff0c;旨在帮助用户更轻松地管理 Docker 环境。无论您是 Docker 新手还是经验丰富的开发人员&#xff0c;Portainer 都提供了直观的用户界面&#xff0c;使您能够方便地创建、部署和监控容器。…

黑马头条day5- 延迟任务精准发布文章

这个过程主要是流程负责 但是我没有仔细的过所有的流程 需要多刷几遍 今天只是照着md文档执行了一下 运行起来没差错 主要实现文章定时发布 通过schedule模块作为延迟队列的任务 通过redis实现的延迟任务 具体 实现还要在多走几遍流程 逻辑一点不清楚 没看网课 这节要多看几遍…

Redis 篇-深入了解 Redis 中的 RESP 通信协议与内存回收(过期 key 处理、内存淘汰策略)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Redis 通信协议 - RESP 协议 2.0 Redis 内存回收 2.1 Redis 内存回收 - 过期 key 处理 2.1.1 Redis 是如何知道一个 Key 是否过期呢&#xff1f; 2.1.2 是不是 TT…

GESP等级考试C++二级-数学函数

C的cmath库中有丰富的数学函数&#xff0c;通过这些函数可以进行相应的数学计算。 1 cmath库的导入 通过import指令导入cmath库&#xff0c;代码如图1所示。 图1 导入cmath库的代码 2 abs()函数 abs()函数用来获取指定数的绝对值&#xff0c;代码如图2所示。 图2 abs()函数…

X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版 前言准备安装基础软件1.安装Docker19.03安装Nvidia驱动安装配置Nvidia container toolkit 下载Apollo源码&#xff08;笔者下载的是releases下9.0.0版本&#xff0c;大家可以参考&#xff09;编译Apollo9.0下载资源包…

vue-cli,element-plus,axios,proxy

一、vue-cli vue-cli俗称vue脚手架&#xff0c;是vue官方提供的快速生成vue 工程化项目的工具。 1.官网&#xff1a;https://cn.vuejs.org/ 中文官网: https://cli.vuejs.org/zh/ 特点&#xff1a;基于webpack&#xff0c;功能丰富且易于扩展&#xff0c;支持创建vue2和vu…

对话总结:Scale AI的创始人兼CEO Alex Wang

AI的三大支柱 计算:主要由大公司如NVIDIA推动。算法:顶尖实验室如OpenAI主导。数据:Scale致力于推动数据进展。前沿数据的重要性 与人类智能相比较,前沿数据是AI发展的关键。互联网数据是机器与人类合作的结果。语言模型的发展 第一阶段:原始的Transformer论文和GPT的小规…

一书直接讲透自然语言处理《Getting Started with Google BERT_ Build and train》

《Getting Started with Google BERT: Build and Train》是一本面向初学者和中级读者的指南&#xff0c;旨在帮助他们理解和使用Google的BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;模型。BERT是近年来自然语言处理&#xff08;NLP&…

Linux下的git开篇第一文:git的意义

目录 1.git版本控制器 2.git gitee&&github 3.Linux中gitee的使用 &#xff08; 三板斧 git add git commit -m " " git push &#xff09; 4.git log 查看之前的修改信息 &#xff08;所有提交日志&#xff09; 5.git status 查看工作目录与本地…

透传 vs 非透传|数据传输效率与安全性的权衡及应用指南

官方原文&#xff1a;一分钟搞懂透传和非透传的区别-成都纵横指控 在当今数字化时代,数据传输已经成为各行各业的关键环节。在数据通信和物联网应用中,"透传"和"非透传"是两个常见且重要的概念。了解它们的区别,对于选择合适的通信方式至关重要。 什么是…

【java】前端RSA加密后端解密

目录 1. 说明2. 前端示例3. 后端示例3.1 pom依赖3.2 后端结构图3.3 DecryptHttpInputMessage3.4 ApiCryptoProperties3.5 TestController3.6 ApiCryptoUtil3.7 ApiDecryptParamResolver3.8 ApiDecryptRequestBodyAdvice3.9 ApiDecryptRsa3.10 ApiCryptoProperties3.11 KeyPair3…

C++(Qt)软件调试---内存调试器Dr.Memory(21)

C(Qt)软件调试—内存调试器Dr. Memory&#xff08;21&#xff09; 文章目录 C(Qt)软件调试---内存调试器Dr. Memory&#xff08;21&#xff09;[toc]1、概述&#x1f41c;2、安装Dr.Memory&#x1fab2;3、命令行使用Dr.Memory&#x1f997;4、Qt Creator集成使用Dr.Memory&…

excel快速入门(二)

Excel的概念说明 文章目录 Excel的概念说明常见术语说明单元格/单元格区域活动单元格/单元格区域行或列单元格引用相对引用绝对引用混合引用 Excel的常见格式说明单元格格式数字格式 Excel 工作表编辑鼠标指针介绍1.白色十字状2.单向黑色箭头状3.双向单竖线箭头状4.双向双竖线箭…

AI新掌舵:智享AI直播系统:直播界的新浪潮还是真人主播的终结者?

AI新掌舵&#xff1a;智享AI直播系统&#xff1a;直播界的新浪潮还是真人主播的终结者&#xff1f; 在数字化浪潮的汹涌澎湃中&#xff0c;人工智能&#xff08;AI&#xff09;以其前所未有的速度渗透至各行各业&#xff0c;其中&#xff0c;直播领域正经历着一场前所未有的变革…

C# CS1612 尝试修改集合中值类型的情况

在C#中&#xff0c;发现尝试直接修改集合中值类型的中的值发生报错 提示“它不是变量”&#xff0c;通过官方索引的链接可知&#xff0c;尝试修改某一值类型&#xff0c;但是该值类型作为中间表达式的结果生成但不存储在变量中&#xff0c;会发生报错。 正确做法是将其赋值给局…

【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构

一、html5 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script type"text/javascript" src"http://51.onelink.ynwlzc.net/o2o/tpl/Merchant/static/js…

nginx 安装(Centos)

nginx 安装-适用于 Centos 7.x [rootiZhp35weqb4z7gvuh357fbZ ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.9.2009 (Core) Release: 7.9.2009 Codename: Core# 创建文件…

基于springboot vue网上摄影工作室系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…