教程
camera_calibration移动画面示例
usb_cam使用介绍和下载
我使用的是USB相机,所以直接使用ros的usb_cam功能包驱动相机闭关获取实时图像,然后用ros的camera_calibration标定相机。
查询摄像机的信息
v4l2-ctl -d 0 --all的作用
命令详解:
v4l2-ctl
:这是 V4L2 的命令行控制工具,属于v4l-utils
软件包。-d 0
:指定设备节点/dev/video0
。-d
表示 device,后面的数字是设备索引号,例如:/dev/video0
对应索引 0,/dev/video1
对应索引 1,依此类推。
--all
:显示该设备的所有可用信息,包括:- 设备驱动信息
- 支持的视频格式
- 当前设置的视频格式
- 支持的帧率
- 控制项(如亮度、对比度、饱和度等)
- 流媒体状态等
我的设备:
v4l2-ctl -d 0 --all
Driver Info:Driver name : uvcvideoCard type : SDYH-8P0P: SDYH-8P0PBus info : usb-xhci-hcd.2.auto-1.1Driver version : 6.1.83Capabilities : 0x84a00001Video CaptureMetadata CaptureStreamingExtended Pix FormatDevice CapabilitiesDevice Caps : 0x04200001Video CaptureStreamingExtended Pix Format
Media Driver Info:Driver name : uvcvideoModel : SDYH-8P0P: SDYH-8P0PSerial : Bus info : usb-xhci-hcd.2.auto-1.1Media version : 6.1.83Hardware revision: 0x00000823 (2083)Driver version : 6.1.83
Interface Info:ID : 0x03000002Type : V4L Video
Entity Info:ID : 0x00000001 (1)Name : SDYH-8P0P: SDYH-8P0PFunction : V4L2 I/OFlags : defaultPad 0x01000007 : 0: SinkLink 0x02000010: from remote pad 0x100000a of entity 'Extension 3' (Video Pixel Formatter): Data, Enabled, Immutable
Priority: 2
Video input : 0 (Input 1: ok)
Format Video Capture:Width/Height : 1920/1080Pixel Format : 'MJPG' (Motion-JPEG)Field : NoneBytes per Line : 0Size Image : 4147200Colorspace : sRGBTransfer Function : Rec. 709YCbCr/HSV Encoding: ITU-R 601Quantization : Default (maps to Full Range)Flags
Driver Info(驱动信息)
Driver Info:Driver name : uvcvideoCard type : SDYH-8P0P: SDYH-8P0PBus info : usb-xhci-hcd.2.auto-1.1Driver version : 6.1.83Capabilities : 0x84a00001Video CaptureMetadata CaptureStreamingExtended Pix FormatDevice CapabilitiesDevice Caps : 0x04200001Video CaptureStreamingExtended Pix Format
- Driver name:使用的内核驱动名称,这里是
uvcvideo
,表示这是一个支持 USB Video Class (UVC) 的设备。 - Card type:设备型号,这里是摄像头的名字:
SDYH-8P0P
。 - Bus info:设备连接的总线位置,这里是通过 USB 接口连接的。
- Driver version:驱动程序版本号,这里是 Linux 内核版本 6.1.83。
- Capabilities:设备能力位掩码,表示该设备支持的功能:
Video Capture
:可以捕获视频流。Metadata Capture
:支持元数据(如时间戳等)。Streaming
:支持流式传输。Extended Pix Format
:支持扩展像素格式。Device Capabilities
:支持查询设备能力。
- Device Caps:设备接口的能力,比
Capabilities
更细粒度,这里与上面类似。
Media Driver Info(媒体驱动信息)
Media Driver Info:Driver name : uvcvideoModel : SDYH-8P0P: SDYH-8P0PSerial : Bus info : usb-xhci-hcd.2.auto-1.1Media version : 6.1.83Hardware revision: 0x00000823 (2083)Driver version : 6.1.83
- Model:设备型号,同上。
- Serial:序列号,这里为空,表示未提供。
- Media version:媒体框架的版本号。
- Hardware revision:硬件版本号(十六进制),可用于识别不同批次硬件。
- Driver version:驱动版本号
Interface Info(接口信息)
Interface Info:ID : 0x03000002Type : V4L Video
- ID:接口唯一标识符。
- Type:接口类型,这里是标准的 V4L2 视频接口
Entity Info(实体信息)
Entity Info:ID : 0x00000001 (1)Name : SDYH-8P0P: SDYH-8P0PFunction : V4L2 I/OFlags : defaultPad 0x01000007 : 0: SinkLink 0x02000010: from remote pad 0x100000a of entity 'Extension 3' (Video Pixel Formatter): Data, Enabled, Immutable
- Entity:是 Media Framework 中的一个概念,代表一个功能模块(比如传感器、编码器等)。
- Function:这个实体的功能是作为 V4L2 输入/输出设备。
- Pad:表示实体的输入/输出端口。
Sink
表示这是输入端口。 - Link:表示与其他实体之间的连接关系,这里是来自另一个实体“Extension 3”的输出端口的数据链路,且为启用状态。
Format Video Capture(当前视频采集格式)
这是重点
Format Video Capture:Width/Height : 1920/1080Pixel Format : 'MJPG' (Motion-JPEG)Field : NoneBytes per Line : 0Size Image : 4147200Colorspace : sRGBTransfer Function : Rec. 709YCbCr/HSV Encoding: ITU-R 601Quantization : Default (maps to Full Range)Flags
- Width/Height:当前设置的图像分辨率,这里是 1920×1080。
- Pixel Format:当前像素格式为
'MJPG'
,即 Motion JPEG,这是一种压缩格式,常用于摄像头以减少带宽需求。 - Field:场模式,
None
表示非隔行扫描(逐行扫描)。 - Bytes per Line:每行字节数,对于 MJPG 格式通常为 0,因为它是压缩格式。
- Size Image:一帧图像的大小(字节),这里是 1920×1080×(压缩后平均约 2B) ≈ 4MB。
- Colorspace:色彩空间,这里是
sRGB
。 - Transfer Function:传输函数,这里是 Rec. 709(标准伽马曲线)。
- YCbCr Encoding:色度编码方式,这里是 ITU-R BT.601(适用于标清视频)。
- Quantization:量化方式,
Default (Full Range)
表示亮度值范围为 0~255(而不是 16~235 的 TV 范围)。 - Flags:格式标志,目前为空。
查看相机支持的像素格式
v4l2-ctl -d 0 --list-formats
问题
swscaler @ 0xaaaaf438c7e0] No accelerated colorspace conversion found from yuv422p to rgb24.
硬件加速不可用:你的系统可能缺少必要的硬件加速支持或驱动程序,无法提供从 YUV 到 RGB 的快速转换。
意味着 FFmpeg 在尝试将 YUV422P 格式的图像转换为 RGB24 格式时,没有找到任何硬件加速的方法来进行这个颜色空间转换。因此,它只能使用软件方式来完成这一任务,这通常会导致更高的 CPU 使用率,而且音频话题发送频率慢。
YUV 到 RGB 转换的需求:当你使用 usb_cam
节点以原始像素格式(如 YUYV 或 YUV422P)读取摄像头数据时,ROS 需要将其转换为更常用的 RGB 格式以便进一步处理。如果没有硬件加速选项可用,这个转换过程将由 CPU 执行。
FFmpeg:
这是一个命令行工具,用于格式转换、裁剪、合并、缩放等操作。它可以将音频和视频数据从一种格式转换为另一种,并且支持大量的编解码器和文件格式。
本质上就是具有音频存储和发送格式转换一套代码。