相机工具
相关源文件
生成此 wiki 页面时使用了以下文件作为上下文:
dataset_tools 包提供一组工具,用于保证不同机器人本体和数据采集会话之间的传感器一致性。这些工具聚焦两个主要方向:使用 ArUco 标记进行几何对齐,以及通过硬件图像信号处理器(ISP)流水线进行光度对齐。
1. 相机对齐工具(camera_alignment)
camera_alignment 工具用于将相机的物理视角恢复到“golden”参考位置。它使用 ArUco markers(具体为 DICT_4X4_50 family)计算像素级位移误差 src/dataset_tools/docs/tools/camera_alignment.md:1-3。
实现与数据流
该工具直接从 V4L2 设备或 OpenCV 索引读取 src/dataset_tools/dataset_tools/camera_alignment.py:102-104。它计算检测到的 markers 角点与已保存 reference payload 之间的平均欧氏距离 src/dataset_tools/dataset_tools/camera_alignment.py:51-76。
对齐数据流
graph TD
V4L["V4L2 Device /dev/videoX"] --> OCV["OpenCVFrameSource"]
OCV --> DET["ArUco Detector (DICT_4X4_50)"]
DET --> ERR["compute_alignment_error()"]
REF["Reference JSON (image_width, image_height, markers)"] --> ERR
ERR --> HUD["OpenCV GUI HUD (Green < 3px, Red >= 3px)"]
subgraph "Logic Entities"
OCV
DET
ERR
end
来源: src/dataset_tools/dataset_tools/camera_alignment.py:51-76, src/dataset_tools/docs/tools/camera_alignment.md:94-100
关键函数
compute_alignment_error:遍历reference_data和detected_markers,计算角点位移的平均 L2 norm src/dataset_tools/dataset_tools/camera_alignment.py:51-76。serialize_reference_payload:将当前 marker 位置和帧尺寸捕获为 JSON 格式,供后续会话使用 src/dataset_tools/dataset_tools/camera_alignment.py:203-214。
2. Camera ISP Calibrator(camera_isp_calibrator)
camera_isp_calibrator 是一个高级工具,用于将实时相机画面的视觉特性(曝光、色彩平衡、对比度)匹配到参考图像。它主要面向 UVC 兼容相机的硬件 ISP registers src/dataset_tools/dataset_tools/camera_isp_calibrator.py:1-25。
硬件 ISP 流水线
标定遵循 hw_pipeline.py 中定义的 4 阶段顺序状态机 src/dataset_tools/dataset_tools/camera_isp/hw_pipeline.py:1-15:
Stage |
Logic Entity |
Purpose |
|---|---|---|
Stage 1 |
|
使用过曝保护将 |
Stage 2 |
|
必要时提高 gain,但验证 SNR ≥ 20 dB。如果触及噪声底,则回退到 brightness offset src/dataset_tools/dataset_tools/camera_isp/hw_stages.py:63-70。 |
Stage 3 |
|
根据参考统计量缩放 saturation 和 contrast,并裁剪到驱动默认值的 ±30% src/dataset_tools/dataset_tools/camera_isp/hw_stages.py:71-72。 |
Stage 4 |
|
使用 McCamy 公式和 Planckian locus 投影,将 chromaticity 映射到 Kelvin src/dataset_tools/dataset_tools/camera_isp/solver.py:6-33。 |
系统架构(ISP 标定)
该工具通过 bridge pattern 连接高层 GUI 交互和低层 V4L2 控制。
ISP 控制架构
graph LR
GUI["CalibratorWindow (OpenCV GUI)"] -->|"Triggers"| PIPE["hw_pipeline.run_full_pipeline"]
PIPE -->|"Proposes"| STAGES["hw_stages.py (Pure Functions)"]
PIPE -->|"Writes via"| BRIDGE["CameraBridge / StageBridge"]
BRIDGE -->|"Executes"| V4L2["v4l2_ctl.py (Shell Wrapper)"]
V4L2 -->|"IO"| DEV["/dev/videoX"]
subgraph "Logic Entities"
PIPE
STAGES
V4L2
end
来源: src/dataset_tools/dataset_tools/camera_isp/hw_pipeline.py:7-23, src/dataset_tools/dataset_tools/camera_isp/v4l2_ctl.py:1-17
V4L2 控制集成
v4l2_ctl.py 模块处理 Linux UVC 驱动的复杂性,并为重命名 controls 提供回退,例如 white_balance_automatic vs white_balance_temperature_auto src/dataset_tools/dataset_tools/camera_isp/v4l2_ctl.py:1-17。它确保 solver 尝试写入参数前,手动模式已经启用 src/dataset_tools/dataset_tools/camera_isp/v4l2_ctl.py:141-159。
统一颜色搜索(KCS)
对于高级颜色匹配,该工具实现了 “Unified K/C/Sat Search”(color_search.py)。它在 Kelvin、Contrast 和 Saturation 上执行坐标下降,以最小化代价函数(ΔE2000)src/dataset_tools/dataset_tools/camera_isp/color_search.py:1-38。
24-card mode:根据 ColorChecker24 patch truths 最小化误差 src/dataset_tools/dataset_tools/camera_isp/color_search.py:12-15。
ROI mode:匹配实时图像和参考图像中用户定义区域的平均 Lab 值 src/dataset_tools/dataset_tools/camera_isp/color_search.py:16-17。
配置与持久化
标定结果会作为 JSON overrides 保存到 ~/.ros/ibrobot/camera_isp_overrides/{camera}.json src/dataset_tools/dataset_tools/camera_isp_calibrator.py:118-121。这些 overrides 会被 robot_config 中的 perception.py launcher 自动检测并应用,保证一致性,同时不修改中心 YAML 单一事实源 src/dataset_tools/README.md:191-193。
来源:
src/dataset_tools/dataset_tools/camera_isp_calibrator.py:1-121
src/dataset_tools/dataset_tools/camera_isp/hw_pipeline.py:1-150
src/dataset_tools/dataset_tools/camera_isp/hw_stages.py:1-183
src/dataset_tools/dataset_tools/camera_isp/v4l2_ctl.py:1-159
src/dataset_tools/dataset_tools/camera_isp/color_search.py:1-130