【机器人-基础知识】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 压缩 视频码流 网络传输、录像存储。
相关推荐
工控小楠31 分钟前
稳联技术EthernetIP转ModbusTCP网关连接发那科机器人与三菱PLC的集成方案
机器人·ethernet·modbus
BB8=_=NiMotion33 分钟前
一体化伺服电机在管道焊缝检测爬行机器人中的应用案例
机器人
拓端研究室1 小时前
专题:2025人形机器人、工业机器人、智能焊接机器人、扫地机器人产业洞察报告 | 附158+份报告PDF、数据仪表盘汇总下载
microsoft·机器人·pdf
星马梦缘3 小时前
Matlab机器人工具箱7 搬运动画展示
matlab·机器人·仿真·逆解
星马梦缘19 小时前
Matlab机器人工具箱使用2 DH建模与加载模型
人工智能·matlab·机器人·仿真·dh参数法·改进dh参数法
星马梦缘1 天前
Matlab机器人工具箱使用1 简单的描述类函数
matlab·矩阵·机器人·位姿·欧拉角·rpy角
神仙别闹1 天前
基于单片机的六足机器人控制系统设计
单片机·嵌入式硬件·机器人
南山二毛2 天前
机器人控制器开发(传感器层——奥比大白相机适配)
数码相机·机器人
房开民3 天前
使用海康机器人相机SDK实现基本参数配置(C语言示例)
c语言·数码相机·机器人
南山二毛3 天前
机器人控制器开发(导航算法——导航栈关联坐标系)
人工智能·架构·机器人