DMS与ADAS深度协同:从独立告警到最小风险机动

引言:DMS不再是独立系统

传统方案

  • DMS独立工作,仅提供告警
  • ADAS独立工作,不感知驾驶员状态
  • 两个系统隔离,缺乏协同

Euro NCAP 2026要求

  • DMS必须与ADAS深度集成
  • 根据驾驶员状态调整ADAS灵敏度
  • 实现最小风险机动(MRM)

一、DMS-ADAS协同架构

1.1 协同层次

层次 协同方式 示例
L1:信息共享 DMS状态传递给ADAS 驾驶员疲劳时降低ACC灵敏度
L2:联动告警 组合告警策略 DMS告警+ADAS减速
L3:主动干预 ADAS执行动作 自动靠边停车
L4:最小风险机动 完全自动处理 无响应驾驶员MRM

1.2 系统架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
┌─────────────────────────────────┐
│ DMS模块 │
│ - 疲劳检测 │
│ - 分心检测 │
│ - 损伤检测 │
│ - 视线追踪 │
└─────────────────────────────────┘
↓ 状态输出
┌─────────────────────────────────┐
│ 协同决策模块 │
│ - 风险评估 │
│ - 干预策略选择 │
│ - HMI指令生成 │
└─────────────────────────────────┘
↓ 控制指令
┌─────────────────────────────────┐
│ ADAS模块 │
│ - ACC自适应巡航 │
│ - LSS车道支持 │
│ - AEB自动紧急制动 │
│ - EMS紧急转向 │
└─────────────────────────────────┘
↓ 车辆控制
┌─────────────────────────────────┐
│ 执行机构 │
│ - 转向、制动、加速 │
│ - HMI显示、声音 │
└─────────────────────────────────┘

二、协同控制策略

2.1 驾驶员状态分级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class DriverStateClassifier:
"""
驾驶员状态分级
"""
def __init__(self):
self.states = {
0: 'alert', # 清醒
1: 'mild_fatigue', # 轻度疲劳
2: 'moderate_fatigue',# 中度疲劳
3: 'severe_fatigue', # 重度疲劳
4: 'distraction', # 分心
5: 'impairment', # 损伤(酒驾等)
6: 'unresponsive' # 无响应
}

def classify(self, dms_output):
"""
分类驾驶员状态
"""
# 综合判断
if dms_output['unresponsive']:
return 6
elif dms_output['impairment_prob'] > 0.8:
return 5
elif dms_output['distraction_prob'] > 0.8:
return 4
elif dms_output['fatigue_level'] >= 3:
return 3
elif dms_output['fatigue_level'] >= 2:
return 2
elif dms_output['fatigue_level'] >= 1:
return 1
else:
return 0

2.2 ADAS调整策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class ADASAdjustmentPolicy:
"""
ADAS调整策略
"""
def __init__(self):
self.adjustments = {
# 状态: {ACC, LSS, AEB, Warning}
0: {'acc': 1.0, 'lss': 1.0, 'aeb': 1.0, 'warning': None},
1: {'acc': 1.0, 'lss': 1.2, 'aeb': 1.0, 'warning': 'visual'},
2: {'acc': 0.8, 'lss': 1.5, 'aeb': 1.2, 'warning': 'audio'},
3: {'acc': 0.6, 'lss': 2.0, 'aeb': 1.5, 'warning': 'haptic'},
4: {'acc': 0.7, 'lss': 1.5, 'aeb': 1.2, 'warning': 'audio'},
5: {'acc': 0.5, 'lss': 2.0, 'aeb': 2.0, 'warning': 'haptic'},
6: {'acc': 0.0, 'lss': 2.0, 'aeb': 2.0, 'warning': 'emergency'}
}

def get_adjustment(self, state):
"""
获取ADAS调整参数
"""
return self.adjustments.get(state, self.adjustments[0])

def apply_to_adas(self, adas_controller, adjustment):
"""
应用调整到ADAS控制器
"""
# 调整ACC跟车距离
adas_controller.set_acc_sensitivity(adjustment['acc'])

# 调整LSS灵敏度
adas_controller.set_lss_sensitivity(adjustment['lss'])

# 调整AEB阈值
adas_controller.set_aeb_sensitivity(adjustment['aeb'])

# 触发告警
if adjustment['warning'] == 'visual':
self.trigger_visual_warning()
elif adjustment['warning'] == 'audio':
self.trigger_audio_warning()
elif adjustment['warning'] == 'haptic':
self.trigger_haptic_warning()
elif adjustment['warning'] == 'emergency':
self.trigger_emergency_procedure()

三、最小风险机动(MRM)

3.1 MRM定义

Minimum Risk Maneuver:当驾驶员完全无响应时,车辆自动执行的最安全操作

触发条件

  • 驾驶员无响应持续**>10秒**
  • DMS检测到严重疲劳+无响应
  • ADAS检测到驾驶员手离方向盘**>15秒**

3.2 MRM流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class MRMController:
"""
最小风险机动控制器
"""
def __init__(self):
self.state = 'idle'
self.countdown = 0

def execute_mrm(self, vehicle_state, road_context):
"""
执行最小风险机动
"""
# 1. 阶段一:紧急告警
self.trigger_emergency_alert()
self.countdown = 10 # 10秒倒计时

# 2. 阶段二:减速
while self.countdown > 0:
self.gradual_deceleration()
self.check_driver_response()
self.countdown -= 1
time.sleep(1)

# 3. 阶段三:靠边停车
if not self.driver_responded:
self.safe_pull_over(road_context)

# 4. 阶段四:紧急呼叫
self.emergency_call()

def gradual_deceleration(self):
"""
渐进减速
"""
# 减速度0.3-0.5m/s²
target_decel = 0.4

# 如果后方有车,打开双闪
if self.rear_vehicle_detected():
self.activate_hazard_lights()

# 执行减速
self.vehicle_controller.brake(target_decel)

def safe_pull_over(self, road_context):
"""
安全靠边
"""
# 检查右侧车道
if road_context['right_lane_clear']:
# 变道到应急车道
self.vehicle_controller.change_lane('right')

# 完全停车
self.vehicle_controller.full_stop()

# 保持危险警报灯
self.activate_hazard_lights()

3.3 Euro NCAP要求

要求 说明
检测时间 无响应检测<10秒
告警阶段 声音+视觉+震动
减速阶段 渐进减速,避免后车追尾
靠边阶段 安全靠边停车
紧急呼叫 自动拨打紧急电话

四、无响应驾驶员处理

4.1 检测流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class UnresponsiveDriverDetector:
"""
无响应驾驶员检测器
"""
def __init__(self):
self.no_response_threshold = 10 # 秒
self.gaze_off_road_threshold = 5 # 秒

self.gaze_off_timer = 0
self.no_response_timer = 0

def detect(self, dms_data, vehicle_data, timestamp):
"""
检测无响应
"""
# 1. 视线偏离道路检测
if not dms_data['gaze_on_road']:
self.gaze_off_timer += 1
else:
self.gaze_off_timer = 0

# 2. 方向盘无响应检测
if vehicle_data['steering_torque'] < 0.1:
self.no_response_timer += 1
else:
self.no_response_timer = 0

# 3. 综合判断
is_unresponsive = (
self.gaze_off_timer > self.gaze_off_road_threshold * 30 and
self.no_response_timer > self.no_response_threshold * 30
)

return {
'is_unresponsive': is_unresponsive,
'gaze_off_duration': self.gaze_off_timer / 30,
'no_response_duration': self.no_response_timer / 30
}

4.2 干预策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class InterventionStrategy:
"""
干预策略
"""
def __init__(self):
self.strategies = {
'escalating_alert': self.escalating_alert,
'gradual_slowdown': self.gradual_slowdown,
'safe_stop': self.safe_stop,
'emergency_call': self.emergency_call
}

def select_strategy(self, state, duration):
"""
选择干预策略
"""
if state == 'unresponsive':
if duration < 5:
return self.escalating_alert
elif duration < 15:
return self.gradual_slowdown
else:
return self.safe_stop
return None

def escalating_alert(self):
"""
升级告警
"""
# 1. 视觉告警
self.visual_alert()
time.sleep(2)

# 2. 声音告警
self.audio_alert()
time.sleep(2)

# 3. 震动告警
self.haptic_alert()

def gradual_slowdown(self):
"""
渐进减速
"""
# 减速度0.3m/s²
self.vehicle_controller.set_deceleration(0.3)

def safe_stop(self):
"""
安全停车
"""
# 靠边停车
self.mrm_controller.execute_mrm()

# 紧急呼叫
self.emergency_call()

五、Euro NCAP 2026协同要求

5.1 测试场景

场景 DMS检测 ADAS动作
疲劳驾驶 PERCLOS>25% 降低ACC灵敏度+告警
分心驾驶 视线偏离>2秒 告警+准备干预
无响应 无响应>10秒 MRM

5.2 性能指标

指标 要求
检测延迟 <2秒
告警延迟 <1秒
MRM触发时间 <15秒
安全停车时间 <30秒

六、总结

6.1 核心结论

技术点 关键发现
协同层次 从信息共享到MRM四级
调整策略 根据状态动态调整ADAS
MRM 无响应驾驶员的最后防线
Euro NCAP 2026强制要求深度协同

6.2 实施建议

  1. 短期:信息共享+联动告警
  2. 中期:主动干预+MRM
  3. 长期:L3/L4级自动驾驶集成

参考文献

  1. Euro NCAP. “Driver Monitoring Test Protocol v1.1.” 2025.
  2. Smart Eye. “Driver Monitoring 2.0: Euro NCAP 2026.” 2025.
  3. Robotec.ai. “Euro NCAP 2026 Protocols from a DMS Perspective.” 2025.

本文是IMS系统集成系列文章之一


DMS与ADAS深度协同:从独立告警到最小风险机动
https://dapalm.com/2026/03/13/2026-03-13-DMS与ADAS深度协同-从独立告警到最小风险机动/
作者
Mars
发布于
2026年3月13日
许可协议