Euro NCAP 2026 CPD 儿童遗留检测协议详解:从间接提醒到直接检测

发布时间: 2026-04-14
关键词: CPD、儿童遗留检测、Euro NCAP 2026、OMS、雷达、毫米波


协议演进:从间接到直接

Euro NCAP 对儿童遗留检测(Child Presence Detection, CPD)的要求在 2026 年迎来重大升级:

版本 年份 要求 得分
v1.0 2023 间接检测可得分(如车门开启提醒) 最多 3 分
v1.2 2024 鼓励直接检测,间接得分减少 最多 4 分
v1.3 2026 必须直接检测才能得分 最多 5 分

核心变化:2026 年协议明确拒绝”后座提醒”(Rear Seat Reminder)类间接方案,要求系统必须直接检测儿童的生理特征(运动、呼吸、心跳)。


直接检测技术路线

Euro NCAP 认可的检测方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────────────────────────────────────────┐
│ CPD 直接检测技术对比 │
├─────────────────────────────────────────────────┤
│ │
│ 摄像头方案 ────────────────────────────┐ │
│ • 视觉检测儿童/婴儿座椅 │ │
│ • 受遮挡影响大 │ │
│ • 成本低 │ │
│ │ │
│ 60GHz 毫米波雷达 ───────────────────────┤ │
│ • 检测呼吸、心跳、微动 │ │
│ • 穿透毛毯/座椅 │ │
│ • 成本中等 │ │
│ │ │
│ 超声波传感器 ──────────────────────────┤ │
│ • 检测运动 │ │
│ • 受温度影响 │ │
│ • 成本最低 │ │
│ │ │
│ 多模态融合 ────────────────────────────┘ │
│ • 雷达 + 摄像头 │ │
│ • 最高可靠性和 Euro NCAP 得分 │ │
└─────────────────────────────────────────────────┘

各方案对比

技术 检测原理 优势 劣势 Euro NCAP 兼容性
摄像头 视觉识别儿童/婴儿座椅 成本低、可复用 OMS 摄像头 遮挡、光线敏感 ⭐⭐⭐
60GHz 雷达 呼吸/心跳微动检测 穿透性强、全天候 成本较高 ⭐⭐⭐⭐⭐
超声波 运动检测 成本最低 无法检测静止呼吸 ⭐⭐
融合方案 雷达+摄像头 互补优势 复杂度高 ⭐⭐⭐⭐⭐

Euro NCAP 2026 CPD 测试场景

场景一:儿童被遗留在锁定车辆

要求 规范
检测时限 车辆锁定后 15 秒内发出警告
检测范围 所有座椅位置(含可拆卸座椅)、脚坑、驾驶员座椅
儿童年龄 ≤ 6 岁
初始警告 车外可视/可听信号,持续 ≥ 3 秒
延迟选项 可通过明确操作延迟一次,最长 10 分钟
升级警告 初始警告结束后 90 秒内开始,每分钟重复,持续 ≥ 20 分钟

场景二:儿童进入未锁定车辆被困

要求 规范
检测时限 车门关闭后 10 分钟内发出警告
初始警告 同场景一
升级警告 同场景一

覆盖区域要求

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
┌─────────────────────────────────────────┐
│ 车内 CPD 检测区域 │
├─────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ 必须覆盖 │
│ │ 前排左 │ │ 前排右 │ ────────┐ │
│ └─────────┘ └─────────┘ │ │
│ │
│ ┌─────────┐ ┌─────────┐ │ │
│ │ 后排左 │ │ 后排右 │ ────────┤ │
│ └─────────┘ └─────────┘ │ │
│ │
│ ┌───────────────────────┐ │ │
│ │ 后排中间 │ ────────┤ │
│ └───────────────────────┘ │ │
│ │
│ ┌─────────┐ ┌─────────┐ │ │
│ │ 脚坑左 │ │ 脚坑右 │ ────────┤ │
│ └─────────┘ └─────────┘ │ │
│ │
│ ┌───────────────────────┐ │ │
│ │ 驾驶员座椅 │ ────────┘ │
│ └───────────────────────┘ │
│ │
│ ════════════════════════════════ │
│ 后备箱(排除在检测范围外) │
└─────────────────────────────────────────┘

干预功能得分

除检测和警告外,Euro NCAP 为主动干预功能提供额外得分:

干预功能 要求 得分
空调激活 锁车后 10 分钟内或首次警告后 5 分钟内启动 +0.5 分
车门解锁 允许外部救援进入 +0.5 分
远程通知 通过 App 或第三方服务通知车主 +0.5 分
温度应急响应 车内温度达到危险水平时立即响应 +0.5 分

满分策略:检测 + 警告 + 全部干预功能 = 5 分


60GHz 毫米波雷达方案详解

为什么选择 60GHz?

频段 呼吸检测 心跳检测 穿透性 车载应用
24GHz 传统雷达
60GHz CPD 最佳
77GHz ADAS 主流

60GHz 频段特点:

  • 波长 5mm,可检测微米级振动
  • 可同时检测呼吸(0.1-0.5 Hz)和心跳(1-2 Hz)
  • 穿透毛毯、座椅、衣物

硬件配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# TI IWR6843AOP 配置示例
radar_config = {
'device': 'IWR6843AOP', # 60GHz, 4发4收
'max_range': 2.0, # 最大检测距离 2m(足够车内)
'range_resolution': 0.04, # 4cm 距离分辨率
'velocity_resolution': 0.1, # 0.1 m/s 速度分辨率
'frame_rate': 30, # 30 fps

# 天线配置
'tx_antennas': 4,
'rx_antennas': 4,
'virtual_antennas': 16, # MIMO

# Chirp 配置
'chirp_duration_us': 50,
'num_chirps_per_frame': 128,
'start_freq_GHz': 60,
'freq_slope_MHz_us': 70,
}

信号处理流程

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import numpy as np
from scipy import signal
from scipy.fft import fft, fftfreq

class CPDRadarDetector:
"""60GHz 雷达 CPD 检测器"""

def __init__(self, frame_rate=30, fft_size=4096):
self.frame_rate = frame_rate
self.fft_size = fft_size

# 呼吸和心跳频率范围
self.breath_band = (0.1, 0.5) # Hz
self.heartbeat_band = (1.0, 2.0) # Hz

def process_point_cloud(self, adc_data):
"""处理雷达 ADC 数据

Args:
adc_data: (n_chirps, n_rx, n_samples) 原始 ADC 数据

Returns:
point_cloud: (n_points, 4) [x, y, z, velocity]
"""
# Range FFT
range_fft = fft(adc_data, axis=-1, n=self.fft_size)

# Doppler FFT
doppler_fft = fft(range_fft, axis=0, n=self.fft_size)

# CFAR 检测
detected_points = self._cfar_detection(doppler_fft)

# 角度估计(DBF)
angles = self._digital_beamforming(detected_points)

return angles

def detect_vital_signs(self, range_bin, time_series):
"""检测呼吸和心跳

Args:
range_bin: 目标距离单元
time_series: 时间序列数据(相位或幅度)

Returns:
dict: {'breathing_rate': Hz, 'heartbeat_rate': Hz, 'confidence': float}
"""
# 去趋势
detrended = signal.detrend(time_series)

# 带通滤波
breath_filtered = self._bandpass_filter(
detrended, self.breath_band[0], self.breath_band[1]
)
heart_filtered = self._bandpass_filter(
detrended, self.heartbeat_band[0], self.heartbeat_band[1]
)

# 功率谱密度
breath_psd = self._compute_psd(breath_filtered)
heart_psd = self._compute_psd(heart_filtered)

# 峰值检测
breath_freq = self._find_peak_frequency(breath_psd, self.breath_band)
heart_freq = self._find_peak_frequency(heart_psd, self.heartbeat_band)

# 能量比作为置信度
total_energy = np.sum(np.abs(detrended)**2)
breath_energy = np.sum(np.abs(breath_filtered)**2)
confidence = breath_energy / total_energy

return {
'breathing_rate': breath_freq,
'heartbeat_rate': heart_freq,
'breathing_detected': breath_freq > 0,
'heartbeat_detected': heart_freq > 0,
'confidence': confidence,
'is_child_present': confidence > 0.3 # 阈值可调
}

def _bandpass_filter(self, data, low, high):
"""带通滤波器"""
nyquist = self.frame_rate / 2
b, a = signal.butter(4, [low/nyquist, high/nyquist], btype='band')
return signal.filtfilt(b, a, data)

def _compute_psd(self, data):
"""计算功率谱密度"""
freqs, psd = signal.periodogram(data, fs=self.frame_rate,
nfft=self.fft_size)
return freqs, psd

def _find_peak_frequency(self, psd_tuple, freq_band):
"""在指定频带内找峰值频率"""
freqs, psd = psd_tuple
mask = (freqs >= freq_band[0]) & (freqs <= freq_band[1])
if not np.any(mask):
return 0

band_psd = psd[mask]
band_freqs = freqs[mask]
peak_idx = np.argmax(band_psd)
return band_freqs[peak_idx]

融合方案:雷达 + 摄像头

架构设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─────────────────────────────────────────────────────┐
│ CPD 多模态融合架构 │
├─────────────────────────────────────────────────────┤
│ │
│ 60GHz 雷达 ──► 呼吸/心跳检测 ──┐ │
│ (IWR6843AOP) │ │
│ │ │
│ OMS 摄像头 ──► 儿童座椅检测 ──┼──► 融合决策 ──► 警告 │
│ (RGB-IR) │ (卡尔曼滤波) │
│ │ │
│ 座椅传感器 ──► 座椅占用 ─────┘ │
│ (压力传感器) │
│ │
└─────────────────────────────────────────────────────┘

融合算法

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
59
60
61
62
63
64
65
66
67
68
69
import numpy as np
from filterpy.kalman import KalmanFilter

class CPDFusion:
"""CPD 多模态融合检测器"""

def __init__(self):
# 初始化卡尔曼滤波器
self.kf = KalmanFilter(dim_x=2, dim_z=3) # [occupancy, vital_confidence]

# 观测矩阵:[radar, camera, seat_sensor]
self.kf.H = np.array([
[1, 0], # 雷达观测占用状态
[1, 0], # 摄像头观测占用状态
[1, 0], # 座椅传感器观测占用状态
])

# 传感器协方差
self.radar_var = 0.1 # 雷达较准
self.camera_var = 0.2 # 摄像头中等
self.seat_var = 0.3 # 座椅传感器不太准(可能误触)

self.kf.R = np.diag([self.radar_var, self.camera_var, self.seat_var])

def update(self, radar_detection, camera_detection, seat_detection):
"""更新融合状态

Args:
radar_detection: dict from CPDRadarDetector
camera_detection: dict with 'child_seat_detected', 'occupancy'
seat_detection: dict with 'weight', 'is_occupied'

Returns:
dict: 融合后的检测结果
"""
# 构造观测向量
z = np.array([
radar_detection['is_child_present'],
camera_detection.get('child_seat_detected', False),
seat_detection['is_occupied']
])

# 卡尔曼更新
self.kf.predict()
self.kf.update(z)

# 提取状态
occupancy_prob = self.kf.x[0]
vital_confidence = radar_detection['confidence']

return {
'occupancy_probability': occupancy_prob,
'vital_signs_confidence': vital_confidence,
'breathing_rate': radar_detection['breathing_rate'],
'heartbeat_rate': radar_detection['heartbeat_rate'],
'is_child_present': occupancy_prob > 0.7 and vital_confidence > 0.3,
'alert_level': self._determine_alert_level(occupancy_prob, vital_confidence)
}

def _determine_alert_level(self, occupancy_prob, vital_confidence):
"""确定警告级别"""
if occupancy_prob > 0.9 and vital_confidence > 0.5:
return 'CRITICAL' # 立即警告
elif occupancy_prob > 0.7 and vital_confidence > 0.3:
return 'WARNING' # 标准警告
elif occupancy_prob > 0.5:
return 'MONITOR' # 持续监控
else:
return 'NONE'

Euro NCAP 测试数据需求

训练数据要求

数据类型 数量 来源
婴儿座椅(后向) 500+ 场景 合成数据 + 实车采集
婴儿座椅(前向) 500+ 场景 合成数据 + 实车采集
儿童座椅 300+ 场景 合成数据 + 实车采集
遮挡场景(毛毯/玩具) 200+ 场景 合成数据
不同光线 100+ 场景 实车采集
不同温度 50+ 场景 实车采集

合成数据工具

推荐使用 Anyverse InCabin 生成 Euro NCAP 测试场景:

  • 支持雷达信号仿真(SBR 方法)
  • 支持摄像头多模态
  • 可模拟不同光照、遮挡、儿童姿态

开发时间线

阶段 任务 时间
Phase 1 摄像头方案原型 3-6 月
Phase 2 60GHz 雷达评估与选型 6-9 月
Phase 3 单模态验证(雷达或摄像头) 9-12 月
Phase 4 多模态融合开发 12-18 月
Phase 5 Euro NCAP 测试认证 18-24 月

参考资源