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.rhkb.cn/news/435401.html

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

相关文章

复刻谷歌爆火的AI生成播客应用:高效方案分享

随着Google Illuminate等产品的推出,将复杂文档转换为音频播客的需求日益增长。MIT最近开源的PDF2Audio项目为此提供了一个开放且高效的解决方案。本文将详细介绍如何复刻这一功能,并分享一个适用于AI代理和播客创业者的高效方案。 一、背景 近年来,将文本内容转换为音频播…

平安养老险肇庆中心支公司开展“2024年金融教育宣传月”活动

为加强消费者金融教育宣传&#xff0c;切实提升社会公众金融素养&#xff0c;有效防范化解金融风险&#xff0c;营造和谐健康金融环境&#xff0c;在肇庆金融监管分局指导下&#xff0c;平安养老险肇庆中心支公司开展金融教育宣传月暨反洗钱宣传月系列活动。 9月11日&#xff…

基于php的民宿预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

数据结构串的kmp相关(求next和nextval)

傻瓜版&#xff0c;用来演示手算过程&#xff0c;个人理解用的&#xff0c;仅供参考。

spring简短注入

新建bean 创建set方法 jpackage com.dependency.spring6.bean;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class User {private static final Logger LOGGER LoggerFactory.getLogger(User.class);private String username;private String password;pr…

存储技术(CXL、open-channel SSD)

一、CXL技术 1.1 CXL技术要解决的问题 1、对系统和设备的一致性访问 传统的是使用Cache&#xff08;L1/L2/L3&#xff09;和内存的方式实现一致性访问的&#xff0c;通过PCIE总线访问的方式通常是非一致性的读写。 主机对连接到 PCIe 设备内存的每次访问也要由 PCIe 设备处理…

【知了社保-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

【易上手快捷开发新框架技术】nicegui组件button用法庖丁解牛深度解读源代码IDE运行和调试通过截图为证

传奇开心果微博文系列 前言一、button 组件基本用法1. 最基本用法示例2. 创建带图标按钮 二、button按钮组件样式定制1. 按钮的尺寸调整2. 改变颜色示例3. 按钮的自定义字体大小4. 圆角形状示例5. 自定义边框6. 添加阴影7. 复合按钮8. 浮动按钮9. 可扩展浮动操作按钮QFAB10. 按…

24.2.29蓝桥杯|单位换算--8道题

本篇或者本系列文章使用蓝桥云课平台&#xff0c;借助CSDN梳理思路&#xff0c;给自己做一个电子笔记 单位换算类题目注意事项&#xff1a; 在参加蓝桥杯等编程竞赛时&#xff0c;进行单位换算是一个常见的题目类型&#xff0c;特别是涉及到数据存储和传输的问题。在处理单位换…

【AI驱动TDSQL-C Serverless 数据库技术实战营】基于Langchain的电商可视化分析

人工智能技术的飞速发展已深刻影响电商行业&#xff0c;显著提升了个性化推荐、用户行为分析、库存管理和市场预测等领域的效率。构建一个高效的AI驱动电商数据分析平台已成为行业的核心需求。本文里&#xff0c;我们将使用腾讯云的高性能应用平台 HAI&#xff08;专为AI和科学…

OpenCV threhold()函数

OpenCV threhold()函数的主要用途是将灰度图转换为二值图像,实现灰度图的二值化&#xff0c;在机器视觉中使用频度较高&#xff0c;如尺寸量测&#xff0c;物体识别等。其原型如下&#xff1a; 函数参数&#xff1a; src 输入数组&#xff08;多通道、8 位或 32 位浮点&#xf…

[RabbitMQ] 7种工作模式详细介绍

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

软件测试|数据库常见面试题

在软件测试数据库的面试中&#xff0c;面试官通常会考察应聘者对数据库的理解、SQL语言的应用、数据库性能优化、以及数据库相关的技术栈和工具等方面的知识。以下是一些可能的面试问题及建议的回答思路&#xff1a; 1、什么是关系型数据库&#xff0c;主键&#xff0c;外键&am…

【C++算法】6.双指针_有效三角形的个数

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解&#xff1a; 题目链接&#xff1a; 611.有效三角形的个数 题目描述&#xff1a; 解法 数学知识&#xff1a; 给我们3个数&#xff0c;判断是否能够构成三角形。 平时&#xff1a;ab>c&am…

12、echarts 没有显示折线图

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

SpringMVC4-SpringMVC获取请求参数

目录 通过ServletAPI获取&#xff08;不常用&#xff09; 通过控制器方法的形参获取请求参数 RequestParam RequestHeader CookieValue 通过POJO获取请求参数 解决获取请求参数的乱码问题 test_param.html&#xff1a; <!DOCTYPE html> <html lang"en&qu…

vue2中使用tailwindCss 详细教程

1、先看官方文档&#xff1a;https://www.tailwindcss.cn/ 2、先安装&#xff1a;npm install -D tailwindcss ---------------通过 npm 安装 tailwindcss&#xff0c;然后创建你自己的 create your tailwind.config.js 配置文件。 npm install -D tailwindcss 3、初始化文件…

vue 同一个页面第二次跳转路由内容不更新

问题出现原因 在vue中相同路由之间跳转&#xff0c;默认在跳转路由时会采用缓存策略,并不会刷新当前路由组件。导致mounted&#xff08;初始化&#xff09;,beforeDestory&#xff08;销毁&#xff09;等生命周期钩子函数并不会触发&#xff0c;从而产生路由跳转了&#xff0c;…

SpringMVC源码-SpringMVC源码请求执行流程及重点方法doDispatch讲解

一、开始请求 在浏览器访问http://localhost:8080/spring_mymvc/userlist这个接口&#xff0c;是个get请求。 FrameworkServlet类的service方法会被请求到: 调用路径如下&#xff1a; service:945, FrameworkServlet (org.springframework.web.servlet) service:764, HttpSer…

??实验——完全使用Ansible部署多台服务器的服务

文章目录 需求“NTP时间同步服务”“Zabix”“ELK”gitlab、Jenkis集群架构自动上线代码两台Web服务器部署同一Web应用WeCenter&#xff0c;且两台服务器的用户上传的数据目录挂载到共享存储服务器中&#xff0c;总数据保存在一台数据库服务器中使用sersync简单实现两台共享存储…