本页面详细介绍了 openpilot 如何通过 Panda 设备与车辆进行通信。内容涵盖 CAN 总线通信架构、消息时序要求以及负责处理车辆通信的进程。有关汽车接口系统的更多信息,请参阅 汽车接口系统。
OpenPilot 使用 Panda 设备作为计算设备和车辆内部通信网络之间的桥梁。这种设置使系统能够从车辆读取数据(例如速度、加速度、转向角)并发送控制命令(油门、制动、转向)。
通信遵循双向模式
来源:selfdrive/test/test_onroad.py85-90
来源:selfdrive/test/test_onroad.py39-50 selfdrive/test/test_onroad.py83-90
OpenPilot 服务使用发布-订阅消息系统进行通信,其中有几个关键服务专门用于车辆通信。
| 服务 | 目的 | 频率要求 |
|---|---|---|
can | 来自车辆的原始 CAN 消息 | 高频,严格的时序 |
sendcan | 发送到车辆的 CAN 消息 | 高频,严格的时序 |
pandaStates | Panda 设备的状态 | 定期更新 |
peripheralState | 外围设备的状态 | 定期更新 |
carState | 解析后的车辆状态信息 | 定期更新 |
carControl | 车辆的控制命令 | 高频,严格的时序 |
来源:selfdrive/test/test_onroad.py83-90
控制器局域网(CAN)总线是 openpilot 与车辆之间的主要通信媒介。Panda 设备充当 CAN 接口,允许软件读取和写入 CAN 消息。
来源:selfdrive/test/test_onroad.py83-90
精确的时序对于车辆通信至关重要。OpenPilot 对 CAN 相关服务强制执行严格的时序要求。
系统会监控时序统计数据以确保通信的可靠性。
来源:selfdrive/test/test_onroad.py83-90 selfdrive/debug/check_timings.py1-37
pandad 进程管理与 Panda 设备的通信。它负责:
card 进程负责:
carState 数据selfdrived 进程协调规划/控制系统和车辆接口之间的工作。
carState 信息用于规划carControl 消息来源:selfdrive/test/test_onroad.py39-50
为了确保可靠性和安全性,车辆通信受到了广泛的测试。
系统包含用于监控通信时序的工具。
check_timings.py:监控消息频率和时序方差。check_freq.py:跟踪消息频率统计数据。check_lag.py:检测通信延迟和异常。CAN 相关服务的示例时序要求
| 服务 | 最大/最小比率 | 最大 RSD |
|---|---|---|
| can | 2.5 | 0.35 |
| pandaStates | 2.5 | 0.35 |
| peripheralState | 2.5 | 0.35 |
| sendcan | 2.5 | 0.35 |
| carState | 2.5 | 0.35 |
| carControl | 2.5 | 0.35 |
来源:selfdrive/test/test_onroad.py83-101 selfdrive/debug/check_timings.py1-37 selfdrive/debug/check_freq.py1-51 selfdrive/debug/check_lag.py1-28
test_onroad.py 脚本对车辆通信系统进行了全面测试。
路测可确保车辆通信系统的所有组件在各种条件下都能正确协同工作。
来源:selfdrive/test/test_onroad.py115-463
当车辆通信失败时,系统必须做出适当的响应。
来源:selfdrive/test/test_onroad.py452-462
虽然 CAN 是主要的车辆通信协议,但系统也使用 I2C 与某些车载硬件组件进行通信。
I2C 通信功能实现在 I2CBus 类中,该类提供了读写 I2C 设备的方法。