当前位置: 首页 > news >正文

【机器人-基础知识】ROS常见功能架构

文章目录

  • 1. ROS 驱动、节点、Launch
  • 2. 相机
    • 2.1. UVC(USB Video Class)
    • 2.2. CSI Camera(Camera Serial Interface)
    • 2.3. v4l2-ctl(Video for Linux 2)
      • 2.3.1. 安装:
      • 2.3.2. 常见命令
    • 2.4. GStreamer
      • 2.4.1. 基本语法结构
      • 2.4.2. 常用命令
      • 2.4.3. gscam (GStreamer Camera Driver for ROS)
    • 2.5. 像素格式(Pixel Format)

1. ROS 驱动、节点、Launch

在这里插入图片描述

2. 相机

2.1. UVC(USB Video Class)

USB 设备类标准,专门用于视频设备(如摄像头)与主机(如电脑、嵌入式系统)之间的通信。

  1. 免驱支持: 只要是 UVC 兼容的摄像头,插入电脑即可被识别(即插即用)
  2. 跨平台兼容: 支持 Windows、Linux、macOS、Android、ROS 等
  3. 标准化协议: 规范了视频格式(如 MJPEG、YUY2、H.264)、分辨率、帧率、控制命令(如曝光、白平衡)等
  4. 广泛应用: 常见于 USB 摄像头、网络摄像头、工业相机、机器人视觉系统

2.2. CSI Camera(Camera Serial Interface)

专为嵌入式系统和移动设备设计的高速、低功耗的摄像头模块。它通过 MIPI CSI(Mobile Industry Processor Interface Camera Serial Interface)标准与主机处理器(如 SoC)直接连接。

2.3. v4l2-ctl(Video for Linux 2)

一个 命令行工具,用于控制和查询 Linux 系统中支持 V4L2(Video for Linux 2) 标准的视频设备(如摄像头)。它是 v4l-utils 软件包的一部分,广泛用于调试、配置和查看 USB 摄像头(尤其是 UVC 摄像头)的参数。

2.3.1. 安装:

sudo apt update
sudo apt install v4l-utils

验证:

v4l2-ctl --version

2.3.2. 常见命令

功能命令说明
列出视频设备v4l2-ctl --list-devices显示所有摄像头设备及 /dev/videoX 路径
列出所有格式v4l2-ctl -d /dev/video0 --list-formats-ext列出支持的分辨率、帧率、像素格式
获取当前格式v4l2-ctl -d /dev/video0 --get-fmt-video显示当前设置的分辨率、像素格式等
设置分辨率和像素格式v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=MJPG选择分辨率和像素格式(如 YUYV, MJPG, RG10
抓取单帧图片v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=1 --stream-to=frame.raw抓取一帧保存为 frame.raw
抓取多帧并保存v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=10 --stream-to=out.raw抓取多帧连续数据
设置帧率v4l2-ctl -d /dev/video0 --set-parm=30设置目标帧率(需驱动支持)
查询当前帧率v4l2-ctl -d /dev/video0 --get-parm显示当前帧率和捕获参数
列出控件v4l2-ctl -d /dev/video0 --list-ctrls列出所有可调节参数(曝光、增益、白平衡等)
设置曝光v4l2-ctl -d /dev/video0 --set-ctrl=exposure_absolute=500设置曝光值(不同摄像头范围不同)
自动曝光开关v4l2-ctl -d /dev/video0 --set-ctrl=exposure_auto=11 表示自动,0 表示手动
设置增益v4l2-ctl -d /dev/video0 --set-ctrl=gain=10设置模拟/数字增益
自动白平衡开关v4l2-ctl -d /dev/video0 --set-ctrl=white_balance_automatic=0关闭自动白平衡
设置白平衡v4l2-ctl -d /dev/video0 --set-ctrl=white_balance_temperature=4500手动设置色温
连续预览(终端输出)v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=0无限流输出(可配合管道转到 mplayerffplay

2.4. GStreamer

GStreamer 是一个开源的、跨平台的底层多媒体处理框架,用于构建高效的音频、视频处理流水线(Pipeline)。它广泛应用于嵌入式系统、桌面应用、流媒体服务和机器人开发中,特别是在 NVIDIA Jetson(如 Orin Nano) 平台上,是处理摄像头、编码、解码、推流的首选工具。

2.4.1. 基本语法结构

gst-launch-1.0 [选项] <元素1> ! <元素2> ! <元素3> ... ! <元素N>

2.4.2. 常用命令

用途命令示例说明
查看可用插件gst-inspect-1.0列出所有已安装的 GStreamer 插件
查看某插件信息gst-inspect-1.0 nvarguscamerasrc显示插件的属性、参数、支持的格式
摄像头实时预览(CSI 摄像头)gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! nveglglessink从 CSI 摄像头读取并直接显示
摄像头预览 + 缩放gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! "video/x-raw,width=640,height=480" ! nveglglessink缩放视频到指定分辨率显示
保存为 JPG 图片gst-launch-1.0 nvarguscamerasrc num-buffers=1 ! nvjpegenc ! filesink location=frame.jpg截取一帧并保存为 JPG
保存为 MP4 视频(H.264 编码)gst-launch-1.0 nvarguscamerasrc ! nvv4l2h264enc ! h264parse ! qtmux ! filesink location=video.mp4保存视频为 MP4 格式
USB 摄像头实时预览gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink从 USB 摄像头读取并显示
播放本地 MP4 文件gst-launch-1.0 filesrc location=video.mp4 ! qtdemux ! h264parse ! avdec_h264 ! autovideosink解码 MP4 并播放
播放 RTSP 流gst-launch-1.0 rtspsrc location=rtsp://ip/stream ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink播放 H.264 编码的 RTSP 视频流
网络推流(H.264 → UDP)gst-launch-1.0 nvarguscamerasrc ! nvv4l2h264enc ! rtph264pay ! udpsink host=192.168.1.100 port=5000从摄像头采集并推送到远程主机
网络接收(UDP → 显示)gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp,media=video,encoding-name=H264" ! rtph264depay ! avdec_h264 ! autovideosink接收 UDP 视频并播放

2.4.3. gscam (GStreamer Camera Driver for ROS)

摄像头驱动包( ROS/ROS2 节点),利用 GStreamer 多媒体框架来捕获视频流,并将其发布为 ROS 中的标准图像消息(如 sensor_msgs/Image),从而让 ROS 系统可以处理来自摄像头的图像数据。


2.5. 像素格式(Pixel Format)

格式名称FourCC / 缩写位深度存储方式说明与用途
RGB888RGB3 / BGR324-bit每像素 3 字节 (R,G,B)无压缩,彩色图,常用于图像处理。
RGBA8888RGB4 / BGR432-bit每像素 4 字节,含 Alpha 通道透明度支持,GUI 或视频特效。
YUYVYUYV / YUY216-bitYUV 4:2:2常见于 USB 摄像头,亮度+色度交错存储。
UYVYUYVY16-bitYUV 4:2:2与 YUYV 类似,U/Y 交换顺序。
NV12NV1212-bitYUV 4:2:0,平面存储,UV 交错Jetson 硬件加速常用格式(ISP 输出)。
NV21NV2112-bitYUV 4:2:0,平面存储,VU 交错Android 摄像头常见格式。
I420I420 / YUV42012-bitYUV 4:2:0,3 平面图像编码、视频压缩前处理。
GRAY8GREY8-bit单通道灰度图工业相机、机器视觉。
Bayer RGGBRGGB8-bitBayer 原始传感器数据相机 ISP 输入,需去马赛克。
Bayer BGGRBGGR8-bitBayer 原始传感器数据另一种 Bayer 排列方式。
Bayer GBRGGBRG8-bitBayer 原始传感器数据另一种 Bayer 排列方式。
Bayer GRBGGRBG8-bitBayer 原始传感器数据另一种 Bayer 排列方式。
Bayer RG10RG1010-bitBayer 原始传感器数据,高精度工业相机、高分辨率相机(如 IMX477、IMX708)。
Bayer RG12RG1212-bitBayer 原始传感器数据高动态范围拍摄。
MJPEGMJPG压缩JPEG 帧序列节省带宽,USB 摄像头常用。
H.264H264压缩视频码流网络传输、录像存储。
http://www.lryc.cn/news/621864.html

相关文章:

  • 微软自曝Win 11严重漏洞:可导致全盘数据丢失
  • Kafka生产者原理深度解析
  • 从ChatGPT到智能助手:Agent智能体如何颠覆AI应用
  • Python爬虫反爬检测失效问题的代理池轮换与请求头伪装实战方案
  • 【121页PPT】智慧方案智慧综合体智能化设计方案(附下载方式)
  • java + html 图片点击文字验证码
  • 结构体(Struct)、枚举(Enum)的使用
  • 电源测试系统ATECLOUD-Power,让您告别电源模块测试痛点!
  • MLOps已死,AgenticOps当立:构建新一代AI智能体的全新工程范式
  • 【Redis】Redis典型应用——分布式锁
  • 【部署K8S集群】 1、安装前环境准备配置
  • k8s1.28.2集群部署istioctl的1.20.0版本(X86架构)
  • Mac(一)常用的快捷键整理
  • Mac Mysql 卸载
  • 18- 网络编程
  • Java ArrayList的介绍及用法
  • 单片机闪烁灯实验
  • HDFS数据倾斜导致MapReduce作业失败的排查与优化实践
  • 3分钟解锁网页“硬盘“能力:离线运行VSCode的新一代Web存储技术
  • 【数据分享】2022 年黑龙江省小麦、玉米和水稻幼苗影像数据集
  • 经典回顾:Hive执行原理、MapReduce执行流程、Spark执行流程
  • 系统思考:情绪内耗与思维模式
  • 学习笔记与效率提升指南:编程、记忆与面试备考
  • 腾讯云开发小程序工具箱使用心得
  • LeetCode Hot100:递归穿透值传递问题
  • 三天速通 Vue+Flask+SQLite 项目+阿里云轻量应用级服务器【宝塔面板】①
  • 【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器
  • 非中文语音视频自动生成中文字幕的完整实现方案
  • 【HarmonyOS】鸿蒙应用迁移实战指南
  • STM32传感器模块编程实践(十四)DIY语音+满溢检测智能垃圾桶模型