本文档描述了 openpilot 中的摄像头系统,涵盖了硬件配置、软件架构和图像处理流水线。摄像头系统负责从多个摄像头捕获视频帧,处理图像数据,并将其提供给视觉神经网络、驾驶员监控系统和用户界面等其他组件。
openpilot 系统在 comma 3/3X 设备上使用了多摄像头设置,共有三个主要摄像头:
来源:system/camerad/cameras/hw.h10-69 system/camerad/sensors/ar0231.cc1-137 system/camerad/sensors/ox03c10.cc1-142 system/camerad/sensors/os04c10.cc1-135
该摄像头系统支持不同类型的传感器,其中 AR0231 是主要的受支持传感器。每种摄像头都有特定的配置,包括焦距、输出格式和处理流水线,这些都定义在 hw.h 中。
| 摄像头 | 流类型 | 焦距 | 输出类型 | 畸变校正 |
|---|---|---|---|---|
| 宽道路 | VISION_STREAM_WIDE_ROAD | 1.71毫米 | ISP_IFE_PROCESSED | 已禁用 |
| 道路 | VISION_STREAM_ROAD | 8.0毫米 | ISP_IFE_PROCESSED | 已启用 |
| 驱动程序 | VISION_STREAM_DRIVER | 1.71毫米 | ISP_BPS_PROCESSED | 已禁用 |
来源:system/camerad/cameras/hw.h32-66
摄像头系统的软件架构包括几个关键组件,它们协同工作以捕获、处理和分发摄像头数据。
来源:system/camerad/cameras/spectra.h60-219 system/camerad/cameras/camera_qcom2.cc37-87 system/camerad/cameras/camera_common.h1-47 system/camerad/sensors/sensor.h19-116
SpectraMaster
SpectraCamera
CameraBuf
CameraState
SensorInfo 和派生类
摄像头系统的初始化遵循以下步骤:
来源:system/camerad/cameras/camera_qcom2.cc257-323 system/camerad/cameras/spectra.cc176-231
摄像头系统通过几个阶段处理原始图像数据,以生成最终的输出帧。
来源:system/camerad/cameras/ife.h1-235 system/camerad/cameras/spectra.cc669-895
openpilot 摄像头系统支持三种图像处理输出类型:
道路摄像头和宽道路摄像头使用 ISP_IFE_PROCESSED,而驾驶员摄像头使用 ISP_BPS_PROCESSED。
摄像头系统包含一个自动曝光控制机制,该机制根据场景亮度调整曝光时间和增益。
来源:system/camerad/cameras/camera_qcom2.cc126-254 system/camerad/cameras/camera_common.cc79-104
自动曝光算法
摄像头帧通过 Vision IPC 机制分发给其他系统组件。
来源:system/camerad/cameras/camera_common.cc47-64 selfdrive/ui/qt/widgets/cameraview.cc65-312 selfdrive/ui/ui.cc1-197
摄像头系统通过以下几个组件与 UI 集成:
CameraWidget
DriverViewWindow
光传感器集成
来源:selfdrive/ui/qt/widgets/cameraview.cc1-312 selfdrive/ui/qt/offroad/driverview.cc1-82 selfdrive/ui/ui.cc55-61
摄像头系统通过以下几个接口公开其数据:
Vision IPC 接口
消息系统
UI 显示接口
来源:selfdrive/ui/qt/widgets/cameraview.h1-90 system/camerad/cameras/camera_qcom2.cc224-254
摄像头系统包含测试基础设施来验证性能。
来源:system/camerad/test/test_camerad.py1-99
测试验证了