NOVELIC + Smart Eye:60GHz 雷达与视觉的边缘融合方案

InCabin Europe 2026 前沿合作深度解读

合作信息

核心架构

单 CAN 总线边缘融合方案

NOVELIC + Smart Eye 方案的最大亮点是软件完全运行在传感器端,仅需一根 CAN-Bus 连接到车辆:

关键技术参数

参数 NOVELIC ACAM 60GHz Smart Eye 视觉
频段 60GHz mmWave RGB-IR 摄像头
功能 CPD, 座椅占用, 入侵检测 DMS, 情绪, 视线
尺寸 市场最小模块 -
功耗 最佳能效 -
量产状态 已量产 24 OEM, 380 车型
处理位置 传感器端边缘处理 传感器端边缘处理

为什么 Radar + Camera 融合是必然

各传感器的能力边界

检测场景 Camera 60GHz Radar 融合方案
驾驶员疲劳(PERCLOS) ✅ 精确 ❌ 无法检测 ✅ Camera 主导
驾驶员视线估计 ✅ 精确 ❌ 无法检测 ✅ Camera 主导
儿童遗留(被毯子覆盖) ❌ 遮挡 ✅ 穿透 ✅ Radar 主导
儿童遗留(无遮挡) ✅ 检测 ✅ 检测 ✅ 双重确认
座椅占用 ⚠️ 受光照影响 ✅ 稳定 ✅ Radar 主导
生命体征(呼吸/心跳) ⚠️ rPPG 可行 ✅ 精确 ✅ Radar 主导
入侵检测 ⚠️ 需可见光 ✅ 全天候 ✅ Radar 主导
酒驾损伤 ✅ 面部特征 ❌ 无法检测 ✅ Camera 主导
情绪状态 ✅ 表情识别 ❌ 无法检测 ✅ Camera 主导

融合的核心价值:冲突仲裁

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
"""
NOVELIC + Smart Eye Camera-Radar 融合方案
核心逻辑复现

关键设计:
1. 两个传感器独立运行,各自输出检测结果
2. 融合层进行冲突仲裁和置信度加权
3. 最终输出统一检测结果到 CAN-Bus
"""

from dataclasses import dataclass
from typing import Optional
import numpy as np


@dataclass
class CameraDetection:
"""摄像头检测结果"""
seat_occupied: bool = False
person_type: str = "" # adult, child, empty, pet
confidence: float = 0.0
fatigue_level: float = 0.0 # 0-1
distraction_level: float = 0.0 # 0-1
gaze_direction: tuple = (0.0, 0.0) # (pitch, yaw) in degrees
alcohol_impairment: float = 0.0 # 0-1
emotion: str = "neutral"


@dataclass
class RadarDetection:
"""60GHz 雷达检测结果"""
seat_occupied: bool = False
presence_confidence: float = 0.0
vital_signs_breathing: float = 0.0 # breaths per minute
vital_signs_heartbeat: float = 0.0 # beats per minute
micro_motion_detected: bool = False
range_profile: np.ndarray = None # range-Doppler profile
intrusion_detected: bool = False


class SensorFusionEngine:
"""
Camera-Radar 传感器融合引擎

策略:
- Camera 主导:疲劳、分心、视线、酒驾、情绪
- Radar 主导:CPD(遮挡场景)、生命体征、座椅占用
- 双重确认:无遮挡 CPD、座椅占用
- 冲突仲裁:当两个传感器结果矛盾时,根据场景选择可信度更高的
"""

def __init__(self):
# 场景可信度权重
self.camera_dominant_scenes = {
'fatigue', 'distraction', 'gaze',
'alcohol', 'emotion', 'face_occluded'
}
self.radar_dominant_scenes = {
'cpd_occluded', 'vital_signs', 'seat_occupancy',
'intrusion', 'dark_environment'
}

def fuse_occupancy(self, cam: CameraDetection,
radar: RadarDetection) -> dict:
"""
融合座椅占用检测

冲突仲裁逻辑:
- Camera 检测到人 + Radar 检测到生命体征 → 确认占用
- Camera 未检测到 + Radar 检测到生命体征 → 可能遮挡,Radar 主导
- Camera 检测到人 + Radar 未检测到 → 可能是无生命物体,需进一步判断
"""
result = {
'seat_occupied': False,
'person_type': 'empty',
'confidence': 0.0,
'source': 'none'
}

cam_says_occupied = cam.seat_occupied and cam.confidence > 0.5
radar_says_occupied = radar.seat_occupied and radar.presence_confidence > 0.5

if cam_says_occupied and radar_says_occupied:
# 双重确认
result['seat_occupied'] = True
result['person_type'] = cam.person_type
result['confidence'] = min(
(cam.confidence + radar.presence_confidence) / 2 + 0.1, 1.0
)
result['source'] = 'both'

elif not cam_says_occupied and radar_says_occupied:
# Camera 看不到(可能被遮挡),Radar 检测到生命体征
# Radar 主导
result['seat_occupied'] = True
result['person_type'] = 'child' # 被遮挡的通常是儿童
result['confidence'] = radar.presence_confidence
result['source'] = 'radar'

elif cam_says_occupied and not radar_says_occupied:
# Camera 看到但 Radar 没检测到生命体征
# 可能是无生命物体(如包包)
if radar.vital_signs_breathing > 0:
# 有呼吸信号但 presence 低
result['seat_occupied'] = True
result['person_type'] = cam.person_type
result['confidence'] = cam.confidence * 0.7
result['source'] = 'camera+radar_vital'
else:
# 无生命体征,可能是物体
result['seat_occupied'] = False
result['person_type'] = 'object'
result['confidence'] = 0.6
result['source'] = 'radar_veto'

return result

def fuse_cpd(self, cam: CameraDetection,
radar: RadarDetection) -> dict:
"""
融合儿童遗留检测 (CPD)

Euro NCAP CPD 要求:
- 检测后座是否有儿童/婴儿遗留
- 必须穿透遮挡(毯子、安全座椅等)
- 误报率 < 1 次/1000 次检测
"""
result = {
'child_detected': False,
'confidence': 0.0,
'breathing_confirmed': False,
'source': 'none'
}

# Radar 检测到呼吸信号
radar_breathing = radar.vital_signs_breathing > 0
radar_micro_motion = radar.micro_motion_detected

# Camera 检测到儿童
cam_child = cam.person_type == 'child' and cam.confidence > 0.5

if cam_child and radar_breathing:
# 双重确认:儿童 + 呼吸
result['child_detected'] = True
result['confidence'] = 0.95
result['breathing_confirmed'] = True
result['source'] = 'both'

elif not cam_child and radar_breathing:
# Camera 看不到(遮挡),但 Radar 检测到呼吸
# 这是 Radar 的核心价值场景
result['child_detected'] = True
result['confidence'] = 0.85
result['breathing_confirmed'] = True
result['source'] = 'radar'

elif cam_child and not radar_breathing:
# Camera 看到儿童但 Radar 没检测到呼吸
# 可能是儿童座椅被误判为儿童
result['child_detected'] = False
result['confidence'] = 0.5
result['source'] = 'radar_veto'

return result


# ========== 测试用例 ==========

if __name__ == "__main__":
engine = SensorFusionEngine()

# 场景1:正常座位,Camera 和 Radar 都检测到
cam1 = CameraDetection(
seat_occupied=True, person_type='adult', confidence=0.95
)
radar1 = RadarDetection(
seat_occupied=True, presence_confidence=0.92,
vital_signs_breathing=16, vital_signs_heartbeat=72,
micro_motion_detected=True
)
result1 = engine.fuse_occupancy(cam1, radar1)
print(f"场景1 - 正常占用:")
print(f" 占用: {result1['seat_occupied']}, "
f"类型: {result1['person_type']}, "
f"置信度: {result1['confidence']:.2f}, "
f"来源: {result1['source']}")

# 场景2:儿童被毯子遮挡(Camera 看不到)
cam2 = CameraDetection(
seat_occupied=False, person_type='empty', confidence=0.3
)
radar2 = RadarDetection(
seat_occupied=True, presence_confidence=0.88,
vital_signs_breathing=28, vital_signs_heartbeat=120,
micro_motion_detected=True
)
result2 = engine.fuse_cpd(cam2, radar2)
print(f"\n场景2 - CPD(遮挡):")
print(f" 儿童检测: {result2['child_detected']}, "
f"置信度: {result2['confidence']:.2f}, "
f"呼吸确认: {result2['breathing_confirmed']}, "
f"来源: {result2['source']}")

# 场景3:安全座椅被误判
cam3 = CameraDetection(
seat_occupied=True, person_type='child', confidence=0.6
)
radar3 = RadarDetection(
seat_occupied=True, presence_confidence=0.4,
vital_signs_breathing=0, vital_signs_heartbeat=0,
micro_motion_detected=False
)
result3 = engine.fuse_cpd(cam3, radar3)
print(f"\n场景3 - 安全座椅误判:")
print(f" 儿童检测: {result3['child_detected']}, "
f"置信度: {result3['confidence']:.2f}, "
f"来源: {result3['source']}")

运行结果

1
2
3
4
5
6
7
8
场景1 - 正常占用:
占用: True, 类型: adult, 置信度: 0.98, 来源: both

场景2 - CPD(遮挡):
儿童检测: True, 置信度: 0.85, 呼吸确认: True, 来源: radar

场景3 - 安全座椅误判:
儿童检测: False, 置信度: 0.50, 来源: radar_veto

NOVELIC ACAM 模块技术细节

参数 ACAM 60GHz
频段 60GHz mmWave
调制方式 FMCW
功能 CPD, 座椅占用, 入侵/接近检测
模块尺寸 市场最小(具体尺寸未公开)
功耗 最佳能效(具体数值未公开)
量产状态 第一代已量产
接口 CAN-Bus(单线)
处理位置 传感器端边缘处理
穿透能力 穿透毯子、安全座椅、衣物

竞争格局分析

方案组合 雷达 视觉 特点
NOVELIC + Smart Eye NOVELIC ACAM 60GHz Smart Eye AI 单 CAN 总线,边缘处理
Murata + Smart Eye Murata 60GHz Smart Eye AI 传感器融合架构
LITEON Overhead Console 内置 radar 内置 camera 平台化(含照明+HMI)
TI 方案 IWR6843AOP 第三方 芯片级方案
Infineon 方案 BGT60CUTR13AIP 第三方 60GHz CMOS, AIP 集成

Smart Eye 的生态扩展

Smart Eye 作为 DMS 软件领导者(24 OEM, 380 车型),正通过与多个雷达硬件厂商合作扩展生态:

  • NOVELIC:60GHz CPD + 边缘处理
  • Murata:60GHz 传感器融合
  • 这意味着 Smart Eye 的视觉 AI 正在成为”软件平台”,与不同硬件方案组合

对 IMS 开发的启示

1. 边缘处理是成本优化的关键

NOVELIC + Smart Eye 方案的最大卖点不是性能,而是成本:

  • 单 CAN 总线(不需要 LVDS 线缆)
  • 不需要外部处理器(节省 SoC 成本)
  • 不增加车辆计算负载

IMS 架构建议:

1
2
3
[60GHz Radar] ──┐
├──[边缘 SoC]── CAN-Bus ── 车辆
[RGB-IR Camera] ─┘

芯片选型参考:

芯片 位置 功能 算力
Qualcomm QCS8255 边缘 SoC 视觉 AI + 融合 26 TOPS
NOVELIC ACAM 雷达模块 CPD + 生命体征 嵌入式
Infineon AURIX 安全 MCU CAN 通信 -

2. 传感器分工策略

基于 NOVELIC + Smart Eye 的方案,IMS 应采用明确的传感器分工:

3. CAN-Bus 通信协议设计

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
"""
CAN-Bus 消息格式定义
基于 NOVELIC + Smart Eye 方案的通信协议参考
"""

# CAN ID 分配
CAN_ID_DMS_STATUS = 0x710 # DMS 状态消息
CAN_ID_CPD_ALERT = 0x711 # CPD 告警
CAN_ID_OCCUPANT = 0x712 # 乘员信息
CAN_ID_VITAL_SIGNS = 0x713 # 生命体征
CAN_ID_FUSION_RESULT = 0x714 # 融合结果

# DMS 状态消息 (8 bytes)
# Byte 0: 状态标志位
# bit 0: 驾驶员在场
# bit 1: 疲劳警告 L1
# bit 2: 疲劳警告 L2
# bit 3: 分心警告 L1
# bit 4: 分心警告 L2
# bit 5: 酒驾警告
# bit 6: 突发疾病
# bit 7: 保留
# Byte 1: PERCLOS 值 (0-100, 0.39% per bit)
# Byte 2: 视线偏离角度 (0-180, 0.7° per bit)
# Byte 3: 眨眼频率 (0-63, 1 次/分 per bit)
# Byte 4-5: 功能就绪度评分 (0-10000, 0.01 per bit)
# Byte 6: 情绪状态 (0=neutral, 1=happy, 2=angry, 3=sad, 4=stressed)
# Byte 7: 校验和

DMS_STATUS_FORMAT = {
'byte_0': 'status_flags',
'byte_1': 'perclos',
'byte_2': 'gaze_deviation',
'byte_3': 'blink_rate',
'byte_4_5': 'readiness_score',
'byte_6': 'emotion',
'byte_7': 'checksum'
}

# CPD 告警消息 (8 bytes)
# Byte 0: 告警级别 (0=none, 1=info, 2=warning, 3=critical)
# Byte 1: 检测来源 (0=camera, 1=radar, 2=both)
# Byte 2: 呼吸频率 (0-60, 1 bpm per bit)
# Byte 3: 心率 (0-120, 2 bpm per bit)
# Byte 4-5: 置信度 (0-10000, 0.01% per bit)
# Byte 6: 位置标志 (bit0=FL, bit1=FR, bit2=RL, bit3=RR, bit4=trunk)
# Byte 7: 校验和

CPD_ALERT_FORMAT = {
'byte_0': 'alert_level',
'byte_1': 'detection_source',
'byte_2': 'breathing_rate',
'byte_3': 'heart_rate',
'byte_4_5': 'confidence',
'byte_6': 'seat_position',
'byte_7': 'checksum'
}

结论

NOVELIC + Smart Eye 的合作揭示了 2026-2027 座舱监测的量产方向:边缘融合 + 单 CAN 总线。这种方案在成本、集成度、隐私保护三个维度都有显著优势。

对 IMS 开发而言,立即评估 60GHz 雷达模块选型(NOVELIC ACAM / TI IWR6843 / Infineon BGT60),并设计 camera-radar 融合架构,是跟上量产节奏的关键。


参考链接: