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集成开发环境快速安装,以及常用扩展插件配置

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

pyboard405意外故障,micropython OLED例程无法运行,折腾了大半天。

thonny报告&#xff1a; Traceback (most recent call last): File "<stdin>", line 3, in <module> RuntimeError: name too mode # main.py -- put your code here! from machine import I2C,Pin #从machine模块导入I2C、Pin子模块 from ss…

SpringBoot项目请求不中断动态更新代码

在开发中&#xff0c;有时候不停机动态更新代码热部署是一项至关重要的功能&#xff0c;它可以在请求不中断的情况下下更新代码。这种方式不仅提高了开发效率&#xff0c;还能加速测试和调试过程。本文将详细介绍如何在 Spring Boot 项目在Linux系统中实现热部署&#xff0c;特…

MySQL - 运维篇

一、日志 1. 错误日志 2. 二进制日志 3. 查询日志 记录了所有的增删改查语句以及DDL语句 4. 慢查询日志 二、主从复制 1. 概述 2. 原理 3. 搭建 三、分库分表 1. 介绍 2. Mycat概述 3. Mycat入门 4. Mycat配置 5. Mycat分片 6. Mycat管理及监控 四、读写分离 1. 介绍 2. 一…

PostgreSQL的安装与使用指南

PostgreSQL,简称Postgres,是一个功能强大的开源对象-关系数据库系统。它以其稳定性、可靠性、数据完整性以及对SQL标准的严格遵循而著称,广泛应用于各种规模的企业级应用、Web应用和数据仓库中。本文将详细介绍PostgreSQL在不同操作系统上的安装、配置及基本使用方法。 一、…

html+css+js实现Tabs标签页

实现效果 HTML部分 <div class"tab"><ul class"tab-nav"><li><a href"#" class"active" >用户管理</a></li><li><a href"#" >配置管理</a></li><li>&l…

毕业论文设计javaweb+VUE高校教师信息管理系统

目录 一、系统概述 二、功能详解 1. 教师管理 2. 部门管理 3. 奖惩管理 4. 业绩管理 5. 培训管理 6. 报表查询 三、总结 四、示例代码 1 前端VUE 2 后端SpringBootjava 3 数据库表 随着教育信息化的发展&#xff0c;传统的手工管理方式已经不能满足现代学校对教师…

程序员的自我修养(链接、装载与库)--摘录与汇总(一)

指令和地址分开原因&#xff1a;&#xff08;P59&#xff09; 1、独立权限&#xff0c;防止程序指令非预期改写 程序装载后&#xff0c;数据和指令分别被映射到两个虚存区域。由于数据区域对于进程来说是可读写的&#xff0c;而指令区域对于进程来说是只读的&#xff0c;所以…

系统数据文件和信息

系统数据文件和信息 Unix 系统的正常运行需要使用大量与系统有关的数据文件&#xff0c;例如&#xff0c;口令文件 /etc/passwd 和组文件 /etc/group 都是经常被多个程序频繁使用的两个文件。用户每次登录 Unix 系统以及每次执行 ls -l 命令时都要使用口令文件。 /etc/passwd…

【设计模式-命令】

定义 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使您能够使用不同的请求、排队请求或记录请求&#xff0c;并支持可撤销的操作。该模式通过将请求与其执行分离&#xff0c;使得请求者和接收者之间…

第十四周学习周报

目录 摘要Abstract1. LSTM的代码实现2. 序列到序列模型3. 梯度与方向导数总结 摘要 在上周的学习基础之上&#xff0c;本周学习的内容有LSTM的代码实现&#xff0c;通过对代码的学习进一步加深了对LSTM的理解。为了切入到transformer的学习&#xff0c;本文通过对一些应用例子…

AGI时代存内计算芯片的语音识别之旅 —— 知存科技开发板体验与感悟

目录 一、简介 二、活动内容 2.1 多模态时代&#xff0c;存内计算框架的应用与发展 1、多模态时代计算需求 2、存内计算技术 3、知存科技存内产品 2.2 分布式环境下深度学习任务的高效可靠执行研究 基于强化学习的流水线分布式训练调度方案&#xff08;PG-MPSS&#xf…

前端工程规范-4:Git提交前代码规范检查(Husky + Lint-staged)

Git提交前代码规范检查 在前端项目开发中&#xff0c;规范git提交信息&#xff0c;也是经常使用的手段&#xff0c;如何确保团队成员都遵循ESint规则&#xff0c;且不会将不符合规范的代码推送到Git仓库&#xff1f; 答案是&#xff1a;使用带有git hooks功能的husky。git hoo…

【LLM大模型】Ollama 运行 GGUF 模型

Ollama 默认直接支持很多模型&#xff0c;只需要简单的使用 ollama run命令&#xff0c;示例如下&#xff1a; ollama run gemma:2b就可安装、启动、使用对应模型。 通过这样方式直接支持的模型我们可以通过https://ollama.com/library 找到。 在https://huggingface.co/mod…

大端、小端区分与判断

大小端的判断是根据系统如何存储二进制数据来判断的 大端顾名思义&#xff0c;以数据的高位做开端的操作系统、小端也是以数据的低位做开端的操作系统 用最简单的例子&#xff1a; 对于数据0x01来说&#xff0c;高位为0低位为1&#xff0c;转十进制&#xff1a; 0x01 0 * 1…

RK3588主板PCB设计学习(五)

DDR中的一组信号线如何进行走线&#xff1a; 高亮这一组的焊盘&#xff0c;按照DDR4的走线要求&#xff0c;TOP层贴元器件的话从最下面的层开始走线&#xff1a; 先行CPU这一端把线拉出来&#xff0c;怎么顺怎么拉&#xff1a;如果在第六层拉不出来的话&#xff0c;在表层进行…

STM32DMA学习日记

STM32 DMA学习日记 写于2024/9/28晚 文章目录 STM32 DMA学习日记1. DMA简介2. I/O方式2.1 程序查询方式2.2 程序中断方式2.3 DMA方式 3.DMA框图4. 相关寄存器4.1 DMA中断状态寄存器&#xff08;DMA_ISR&#xff09;4.2 DMA中断标志清除寄存器&#xff08;DMA_IFCR&#xff09;…

[CSP-J 2022] 解密

题目来源&#xff1a;洛谷题库 [CSP-J 2022] 解密 题目描述 给定一个正整数 k k k&#xff0c;有 k k k 次询问&#xff0c;每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni​,ei​,di​&#xff0c;求两个正整数 p i , q i p_i, q_i pi​,qi​&#xff0c;使 n …

verilog实现FIR滤波系数生成(阶数,FIR滤波器类型及窗函数可调)

在以往采用 FPGA 实现的 FIR 滤波功能&#xff0c;滤波器系数是通过 matlab 计算生成&#xff0c;然后作为固定参数导入到 verilog 程序中&#xff0c;这尽管简单&#xff0c;但灵活性不足。在某些需求下&#xff08;例如捕获任意给定台站信号&#xff09;需要随时修改滤波器的…

【教程】57帧! Mac电脑流畅运行黑神话悟空

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 1、先安装CrossOver。网上有许多和谐版&#xff0c;可自行搜索。&#xff08;pd虚拟机里运行黑神话估计够呛的&#xff09; 2、运行CrossOver&#xf…

12、echarts 没有显示折线图

一、问题描述 echarts 没有显示折线图&#xff0c;但是&#xff0c;有数据显示&#xff1a; 看图表展示&#xff0c;y轴数据全部没有显示&#xff0c;直接可以判定是数据结构出问题了。 检查 series.data[] 数据结构&#xff1a; dataList [{"dateStr":"202…