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

文章目录

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

bash 复制代码
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=1 1 表示自动,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 / 缩写 位深度 存储方式 说明与用途
RGB888 RGB3 / BGR3 24-bit 每像素 3 字节 (R,G,B) 无压缩,彩色图,常用于图像处理。
RGBA8888 RGB4 / BGR4 32-bit 每像素 4 字节,含 Alpha 通道 透明度支持,GUI 或视频特效。
YUYV YUYV / YUY2 16-bit YUV 4:2:2 常见于 USB 摄像头,亮度+色度交错存储。
UYVY UYVY 16-bit YUV 4:2:2 与 YUYV 类似,U/Y 交换顺序。
NV12 NV12 12-bit YUV 4:2:0,平面存储,UV 交错 Jetson 硬件加速常用格式(ISP 输出)。
NV21 NV21 12-bit YUV 4:2:0,平面存储,VU 交错 Android 摄像头常见格式。
I420 I420 / YUV420 12-bit YUV 4:2:0,3 平面 图像编码、视频压缩前处理。
GRAY8 GREY 8-bit 单通道灰度图 工业相机、机器视觉。
Bayer RGGB RGGB 8-bit Bayer 原始传感器数据 相机 ISP 输入,需去马赛克。
Bayer BGGR BGGR 8-bit Bayer 原始传感器数据 另一种 Bayer 排列方式。
Bayer GBRG GBRG 8-bit Bayer 原始传感器数据 另一种 Bayer 排列方式。
Bayer GRBG GRBG 8-bit Bayer 原始传感器数据 另一种 Bayer 排列方式。
Bayer RG10 RG10 10-bit Bayer 原始传感器数据,高精度 工业相机、高分辨率相机(如 IMX477、IMX708)。
Bayer RG12 RG12 12-bit Bayer 原始传感器数据 高动态范围拍摄。
MJPEG MJPG 压缩 JPEG 帧序列 节省带宽,USB 摄像头常用。
H.264 H264 压缩 视频码流 网络传输、录像存储。
相关推荐
aircrushin3 小时前
从春晚看分布式实时协同算法与灵巧手工程实现
人工智能·机器人
ZPC82105 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82105 天前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
2501_946205525 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
xybDIY5 天前
Kiro Workshop - 使用 AI 代理聊天机器人构建电子商务网站
人工智能·机器人
宝贝儿好5 天前
【强化学习】第十章:连续动作空间强化学习:随机高斯策略、DPG算法
人工智能·python·深度学习·算法·机器人
大江东去浪淘尽千古风流人物5 天前
【SLAM】GenRobot / IO-AI / Scale / Appen 能力对比表(机器人数据与闭环视角)
人工智能·机器学习·机器人·大模型·概率论·端侧部署·巨身智能
梦想的旅途25 天前
企业微信API:外部群自动化推送实战指南
大数据·机器人·自动化·企业微信·rpa
鲁邦通物联网5 天前
架构设计:基于边缘网关构建异构电梯协议的统一机器人梯控中间件
机器人·机器人梯控·agv梯控·机器人乘梯·机器人自主乘梯·agv机器人梯控
RobotNow5 天前
优秀的机器人厂商集中平台哪家创新力强
机器人