openpilot 哪些情况下不能依赖驾驶员监控 DM 的判断【免费下载链接】openpilotopenpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars.项目地址: https://gitcode.com/GitHub_Trending/op/openpilotopenpilot 的驾驶员监控DMDriver Monitoring负责判断驾驶员是否处于分心状态并在持续分心时逐级升级告警直至 lockout。但官方限制文档明确写明openpilot DM should not be considered an exact measurement of the alertness of the driver并且不应依赖 DM 来评估自己的注意力水平。本文基于 docs/LIMITATIONS.md 的 “Limitations of openpilot DM” 一节和 DM 策略源码 policy.py整理出哪些情况下 DM 的判断不可依赖以及如何从driverMonitoringState消息判断 DM 当前实际处于什么状态。DM 的两套策略决定了它的判断边界DM 策略定义在 policy.py 的DRIVER_MONITOR_SETTINGS中实际运行时有两套并存的监控策略vision 策略基于座舱相机检测到的人脸、姿态pitch/yaw、闭眼blink和持手机phone概率。模型输出经dmonitoringmodeld以 20Hz 发布driverStateV2dmonitoringd订阅后更新awareness值见 dmonitoringd.py。wheeltouch 策略只看驾驶员是否接触方向盘或加速踏板driver_engaged steeringPressed or gasPressed。策略切换的关键逻辑在 policy.pyself.is_model_uncertain self.hi_stds self.settings._HI_STD_FALLBACK_TIME self._set_policy(MonitoringPolicy.vision if self.face_detected and not self.is_model_uncertain else MonitoringPolicy.wheeltouch)也就是说只有当人脸被检测到faceProb _FACE_THRESHOLD阈值为 0.7且模型不确定性不高时DM 才使用 vision 策略判断“你是否在看路”。一旦人脸丢失或模型连续不确定超过 10 秒_HI_STD_FALLBACK_TIME源码注释fall back to wheel touch if model is uncertain for 10sDM 会退回 wheeltouch 策略——此时 DM 实际上不再评估你的眼神和姿态只在你持续不碰方向盘时累计分心。告警阈值同样由策略决定见 policy.py策略alert 1alert 2alert 3需接管vision5s8s13swheeltouch5s15s25s几个直接影响“DM 判断是否可信”的机制佩戴墨镜时闭眼检测失效blink概率会乘以(sunglassesProb _SG_THRESHOLD)的因子见 policy.py墨镜概率超过 0.9 时闭眼信号完全不参与分心判断。低速豁免车速低于 10 km/h_ALERT_MIN_SPEED 2.8时lowspeed_exemption生效——awareness 降到 alert 1 阈值后不再继续下降见 policy.py且踩油门或碰方向盘会直接重置 awareness。姿态校准未完成时使用自然姿态阈值_POSE_OFFSET_MIN_COUNT要求以高于 30 mph 的速度、检测到人脸累计 1 分钟以上才开始校准_POSE_CALIB_MIN_SPEED 13校准前的 pitch 判断使用_PITCH_NATURAL_THRESHOLD。lockout 机制alert 3 累计 2 次或 no-response 累计 1 次触发 lockout锁定时长依次为 1、5、15、30 分钟_LOCKOUT_TIMES。文档明确列出的不可依赖场景docs/LIMITATIONS.md 的 “Limitations of openpilot DM” 一节给出了官方清单。以下情况都会影响 DM 性能使其无法按预期工作低光条件夜间行驶、黑暗隧道等强光对向车灯、阳光直射等驾驶员面部部分或完全脱离座舱相机的视野范围座舱相机被遮挡、覆盖或损坏。文档同时强调两点边界上述清单不是穷尽does not represent an exhaustive list驾驶员不应依赖 DM 来评估自己的注意力水平。结合策略源码可以对应理解这些场景下 DM 实际发生了什么低光、强光、相机被遮挡都会导致人脸检测失败faceDetected为 false或模型输出标准差升高触发 wheeltouch 回退面部移出视野则直接丢失faceProb。此时“DM 没报警”不代表系统认为你注意力良好——它可能已经放弃了视觉判断仅靠你碰方向盘来维持状态。换句话说在以上场景里DM 的“没报警”不构成你可以放松驾驶的依据。如何核对 DM 当前状态判断“此刻的 DM 判断是否可信”不需要猜测可以直接看driverMonitoringState消息。dmonitoringd每帧调用DM.get_state_packet(validvalid)发布该消息关键字段见 policy.pyactivePolicy当前是vision还是wheeltouch。看到wheeltouch就说明 DM 已回退视觉判断已停止visionPolicyState.faceDetected人脸是否被检测到阈值 0.7visionPolicyState.awarenessPercent视觉策略的 awareness 百分比visionPolicyState.distractedTypespose/eye/phone当前触发的分心类型visionPolicyState.pose.calibrated与pose.uncertainty姿态是否完成校准、模型不确定度wheeltouchPolicyState.driverInteracting驾驶员是否在接触方向盘/踏板lockout/lockoutMinutesRemaining是否处于锁定期。车机 UI 的行车界面通过 driver_state.py 消费该消息进行展示。策略单测在 test_monitoring.py 中可以用来核对上面各阈值对应的告警时序是否符合预期。限制与边界上述阈值与超时来自DRIVER_MONITOR_SETTINGS源码注释明确要求 fork 维护者不要修改这些安全相关数值“Disabling or nerfing safety features will get you and your users banned from our servers”。dmonitoringd会实时读取AlwaysOnDM参数使 DM 在非激活状态下继续运行但挡位不正确时always_on不生效always_on_valid self.always_on and not wrong_gear见 policy.py。DM 判断依赖座舱相机链路dmonitoringmodelddmonitoringmodeld.py从camerad的 cabin 视频流取帧运行模型相机链路异常时driverStateV2停止更新dmonitoringd会直接跳过该帧if not sm.updated[driverStateV2]: continue。回到标题本身当处于文档列出的低光、强光、面部出视野、相机被遮挡这四类场景时以及你看到activePolicy已回退为wheeltouch时DM 都不构成对“驾驶员是否清醒”的可靠测量——此时唯一有效的判断来源仍然是驾驶员自己并随时准备接管车辆。【免费下载链接】openpilotopenpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars.项目地址: https://gitcode.com/GitHub_Trending/op/openpilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考