菜单

车载界面

相关源文件

Onroad 界面是当 openpilot 积极参与或可参与驾驶时显示的用户的用户界面。它为驾驶员提供了关于系统状态的关键视觉反馈,包括摄像头视图、警报、参与状态和其他与驾驶相关的信息。本文档涵盖了该界面的组件、架构和行为。

有关设置界面的信息,请参阅 设置和配置

架构概述

Onroad 界面主要通过几个与底层 openpilot 系统交互的基于 Qt 的组件来实现。让我们来检查一下整体架构。

来源: selfdrive/ui/ui.h selfdrive/ui/qt/home.h selfdrive/ui/qt/widgets/cameraview.h

状态管理

UIState 类

UIState 类是 UI 相关状态信息的中央存储库,跟踪从车辆状态到 UI 显示属性的所有内容。

来源: selfdrive/ui/ui.h53-63 selfdrive/ui/ui.h65-91 selfdrive/ui/ui.cc21-63

UIState 中的关键函数

  • updateStatus():根据 SelfdriveState 消息更新 UI 状态
  • engaged():返回 openpilot 当前是否已启用
  • update():UI 定时器调用的主更新函数

来源: selfdrive/ui/ui.h70-73 selfdrive/ui/ui.cc70-90 selfdrive/ui/ui.cc107-116

SelfdriveState 通信

SelfdriveState 消息是控制系统(selfdrived)和 UI 之间用于显示系统状态的主要通信通道。

来源: cereal/log.capnp810-850 selfdrive/selfdrived/selfdrived.py435-455

摄像头视图系统

摄像头视图是 Onroad 界面的核心元素,由 CameraWidget 类管理。

来源: selfdrive/ui/qt/widgets/cameraview.h30-87 selfdrive/ui/qt/widgets/cameraview.cc65-366

CameraWidget 的关键函数

  • vipcThread():用于接收摄像机帧的后台线程
  • paintGL():使用 OpenGL 渲染摄像机帧
  • calcFrameMatrix():计算帧渲染的变换矩阵
  • vipcConnected():连接到 VisionIPC 时设置 OpenGL 纹理

来源: selfdrive/ui/qt/widgets/cameraview.cc198-258 selfdrive/ui/qt/widgets/cameraview.cc314-359 selfdrive/ui/qt/widgets/cameraview.cc183-196 selfdrive/ui/qt/widgets/cameraview.cc260-308

驾驶员视图模式

一种特殊的摄像头视图模式是驾驶员视图,它显示面向驾驶员的摄像头和驾驶员监控可视化。

来源: selfdrive/ui/qt/offroad/driverview.h6-23 selfdrive/ui/qt/offroad/driverview.cc8-82

Onroad 用户界面

HomeWindow 类是 onroad 和 offroad 界面的容器,根据车辆状态在它们之间切换。

来源: selfdrive/ui/qt/home.h43-73 selfdrive/ui/qt/home.cc14-99

状态转换

Onroad 界面根据车辆和系统状态在不同状态之间切换。

来源: selfdrive/ui/qt/home.cc61-69 selfdrive/ui/qt/home.cc71-79 selfdrive/ui/qt/home.cc51-59

告警系统

警报系统向驾驶员提供有关系统状态、警告和错误的反馈

来源: selfdrive/selfdrived/events.py20-199 selfdrive/selfdrived/selfdrived.py422-434 selfdrive/selfdrived/selfdrived.py435-455

显示管理

Device 类管理亮度、电源状态等显示属性

来源: selfdrive/ui/ui.h96-129 selfdrive/ui/ui.cc118-186

关键的显示管理功能

  • updateBrightness():驾驶时根据环境光线调整屏幕亮度
  • updateWakefulness():根据活动和驾驶情况管理显示电源状态
  • setAwake():控制显示器的电源状态
  • resetInteractiveTimeout():重置保持屏幕亮起的超时设置

来源: selfdrive/ui/ui.cc146-173 selfdrive/ui/ui.cc175-186 selfdrive/ui/ui.cc130-137 selfdrive/ui/ui.cc139-144

操纵杆调试模式

Onroad 界面包含一个特殊的调试模式,允许使用操纵杆控制汽车

来源: tools/joystick/joystickd.py16-79 tools/joystick/joystick_control.py14-147

要使用操纵杆模式

  1. JoystickDebugMode 参数设置为 1
  2. 启动 joystickd.py 服务
  3. 连接操纵杆或使用键盘控制
  4. 系统将进入一个特殊的调试状态,显示操纵杆控件

来源: system/manager/process_config.py34-36 system/manager/process_config.py88-90

与 SelfdriveD 的交互

Onroad 界面与 SelfdriveD 进程紧密交互,该进程负责管理 openpilot 的整体状态

来源: selfdrive/selfdrived/selfdrived.py43-508 selfdrive/selfdrived/selfdrived.py434-456 selfdrive/selfdrived/selfdrived.py139-240

总结

Onroad 界面提供了驾驶时 openpilot 操作的全面可视化。它集成了摄像头视图、警报通知和状态信息,让驾驶员清楚了解系统的状态和意图。该界面会根据不同的条件动态调整,包括不同的光照条件和系统状态,以提供最佳用户体验。

构成 Onroad 界面的关键组件协同工作,创造无缝的体验

  1. UIState 类维护着核心状态信息
  2. CameraWidget 提供道路的视觉表示
  3. 警报系统将重要信息传达给驾驶员
  4. Device 类管理显示属性
  5. HomeWindowOnroadWindow 类提供容器和布局

这些组件共同创建了一个界面,让驾驶员在驾驶时能够高效、安全地监控 openpilot 的运行。

来源: selfdrive/ui/ui.h selfdrive/ui/qt/home.h selfdrive/ui/qt/widgets/cameraview.h selfdrive/selfdrived/selfdrived.py