文章目录
- [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 设备类标准,专门用于视频设备(如摄像头)与主机(如电脑、嵌入式系统)之间的通信。
- 免驱支持: 只要是 UVC 兼容的摄像头,插入电脑即可被识别(即插即用)
- 跨平台兼容: 支持 Windows、Linux、macOS、Android、ROS 等
- 标准化协议: 规范了视频格式(如 MJPEG、YUY2、H.264)、分辨率、帧率、控制命令(如曝光、白平衡)等
- 广泛应用: 常见于 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 |
无限流输出(可配合管道转到 mplayer 或 ffplay ) |
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 |
压缩 | 视频码流 | 网络传输、录像存储。 |