Robotaxi乘员情绪识别:真实自动驾驶中的多模态序数情绪分析框架

论文信息

项目 内容
标题 Understanding and Recognizing Passenger Emotion during Real-World Robotaxi Rides: Evidence from Vehicle Motion, Physiological Responses, and Individual Rating Patterns
平台 SSRN预印本
发表 2026年9月
作者 Wenhao Liu, Liu Yang, Shuo Zhao, Xiaowei Jing, Xin Zhang
关键词 Robotaxi, passenger emotion, EDA, EEG, vehicle dynamics, ordinal recognition

核心创新

首个在真实Robotaxi运营中采集乘员多模态生理信号(EDA+EEG+车辆动力学)进行情绪识别的研究。提出序数情绪分析框架,解决传统分类方法忽略情绪等级顺序的问题。


研究背景

Robotaxi乘员情绪的必要性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
robotaxi_emotion_context = {
"场景": "L4级自动驾驶Robotaxi,乘员为乘客(非驾驶员)",
"情绪触发": [
"急刹车/急加速 → 恐惧/焦虑",
"变道突兀 → 不安全感",
"低速行驶 → 无聊/急躁",
"平滑驾驶 → 满意/放松"
],
"商业价值": [
"乘员体验优化(NPS提升)",
"驾驶策略调整(降低负面情绪)",
"安全监控(恐慌→紧急停车)",
"个性化服务(情绪自适应)"
],
"法规驱动": "Euro NCAP 2026 OMS要求乘员状态监测"
}

传统方法的局限

方法 局限
主观评分 事后回忆偏差
分类模型 忽略情绪等级顺序(积极<中性<消极)
单模态 仅车辆动力学或仅生理,鲁棒性差

方法详解

1. 实验设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
experiment_design = {
"vehicle": "L4级Robotaxi",
"participants": "真实Robotaxi乘客(非受控实验被试)",
"sensors": {
"EDA": "手腕式电皮肤活动传感器",
"EEG": "便携式脑电设备",
"vehicle_dynamics": "加速度/减速度/横摆角速度"
},
"emotion_model": {
"type": "ordinal", # 序数而非标称
"levels": ["非常消极", "消极", "中性", "积极", "非常积极"],
"advantage": "保留情绪等级信息,比5类分类更合理"
},
"ratings": {
"self_report": "乘车后情绪评分",
"individual_patterns": "个人历史评分基线"
}
}

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
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
import torch
import torch.nn as nn

class OrdinalEmotionModel(nn.Module):
"""
序数情绪识别模型

核心思想:情绪有顺序关系
"非常消极" < "消极" < "中性" < "积极" < "非常积极"

传统分类损失(cross-entropy)忽略顺序
序数损失(CORAL/CORN)保留等级信息
"""

def __init__(self, input_dim=128, num_classes=5):
super().__init__()
self.feature_extractor = nn.Sequential(
nn.Linear(input_dim, 256),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(256, 128),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(128, 64)
)
# 序数输出层:每个阈值一个binary分类
self.ordinal_outputs = nn.Linear(64, num_classes - 1)

def forward(self, x):
"""
输入: EDA+EEG+车辆动力学融合特征
输出: 序数概率

第k个输出 = P(emotion_level > k)
"""
features = self.feature_extractor(x)
logits = self.ordinal_outputs(features)
# 累积概率转换
probs = torch.sigmoid(logits) # P(level > k)
return probs

def predict_level(self, x):
"""从序数概率推断情绪等级"""
probs = self.forward(x)
# P(level=0) = 1 - P(>0)
# P(level=k) = P(>k-1) - P(>k)
# P(level=K-1) = P(>K-2)
levels = torch.zeros(x.shape[0], len(probs[0]) + 1)
levels[:, 0] = 1 - probs[:, 0]
for k in range(1, len(probs[0])):
levels[:, k] = probs[:, k-1] - probs[:, k]
levels[:, -1] = probs[:, -1]
return levels.argmax(dim=1)


class MultiModalFusion(nn.Module):
"""多模态融合层"""

def __init__(self, eda_dim=16, eeg_dim=64, dyn_dim=48):
super().__init__()
self.eda_encoder = nn.LSTM(eda_dim, 32, batch_first=True, bidirectional=True)
self.eeg_encoder = nn.Conv1d(eeg_dim, 64, kernel_size=3, padding=1)
self.dyn_encoder = nn.LSTM(dyn_dim, 32, batch_first=True, bidirectional=True)

# 跨模态注意力
total_dim = 64 + 64 + 64 # 双向LSTM输出×2 + CNN
self.cross_attention = nn.MultiheadAttention(total_dim, 4, batch_first=True)

self.fusion_fc = nn.Sequential(
nn.Linear(total_dim, 128),
nn.ReLU()
)

def forward(self, eda, eeg, dynamics):
# EDA编码
eda_out, _ = self.eda_encoder(eda) # (B, T, 64)

# EEG编码
eeg_out = self.eeg_encoder(eeg.transpose(1, 2)).transpose(1, 2) # (B, T, 64)

# 车辆动力学编码
dyn_out, _ = self.dyn_encoder(dynamics) # (B, T, 64)

# 拼接
combined = torch.cat([eda_out, eeg_out, dyn_out], dim=2) # (B, T, 192)

# 跨模态注意力
attended, _ = self.cross_attention(combined, combined, combined)

# 池化
pooled = attended.mean(dim=1) # (B, 192)

return self.fusion_fc(pooled) # (B, 128)


# 测试
if __name__ == "__main__":
model = OrdinalEmotionModel(input_dim=128, num_classes=5)
x = torch.randn(32, 128) # 32个样本
probs = model(x)
levels = model.predict_level(x)
print(f"序数概率: {probs.shape}")
print(f"预测等级: {levels.shape}")

3. 个体差异处理

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
class PersonalizedEmotionModel:
"""
个性化情绪识别

论文核心发现:个体评分模式差异大
解决方案:个性化基线 + 序数模型
"""

def __init__(self):
self.global_model = OrdinalEmotionModel()
self.personal_baselines = {} # 用户ID → 基线评分

def calibrate(self, user_id, first_ride_data):
"""首次乘车建立个人基线"""
baseline = self._compute_baseline(first_ride_data)
self.personal_baselines[user_id] = baseline

def predict(self, user_id, sensor_data):
"""个性化预测"""
features = self._extract_features(sensor_data)

# 全局模型预测
global_pred = self.global_model.predict_level(features)

# 个性化校正
if user_id in self.personal_baselines:
baseline = self.personal_baselines[user_id]
# 基于个人基线调整
adjusted = self._adjust_to_baseline(global_pred, baseline)
return adjusted

return global_pred

实验结果

情绪识别性能

方法 准确率 说明
传统5类分类 72.3% 忽略等级顺序
序数模型 81.7% 保留等级信息
序数+个性化 85.2% 加入个人基线
仅车辆动力学 61.5% 无生理信号
仅EDA 68.9% 单模态
仅EEG 65.3% 单模态
EDA+EEG+动力学 81.7% 多模态最优

不同情绪等级检测率

情绪等级 检测率 误报率 说明
非常消极 89% 5% 急刹场景
消极 76% 12% 不舒适驾驶
中性 83% 8% 正常行驶
积极 71% 15% 平滑驾驶
非常积极 68% 18% 愉快体验

车辆动力学特征贡献

特征 SHAP值 说明
纵向加速度方差 0.23 最强情绪预测因子
减速度峰值 0.19 恐惧触发
横摆角速度变化率 0.15 舒适度
车速标准差 0.12 一致性
转向频率 0.08 路线复杂度

IMS开发启示

1. Robotaxi OMS架构

2. 序数模型的应用价值

应用场景 传统分类 序数模型 优势
疲劳检测 3类(清醒/疲劳/极度) 序数(清醒>疲劳>极度) 保留严重程度
分心检测 2类(专注/分心) 序数(专注>轻分心>严重) 渐进预警
酒驾检测 2类(正常/醉酒) 序数(正常>轻微>明显>严重) BAC分级
情绪监测 5类分类 5级序数 保留等级

3. 驾驶策略自适应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class EmotionAdaptiveDriving:
"""
情绪自适应驾驶策略

Robotaxi根据乘员情绪调整驾驶风格
"""

STRATEGY_MAP = {
"非常消极": {"action": "decelerate", "target": "smooth_stop", "urgency": "high"},
"消极": {"action": "smooth_drive", "target": "reduce_jerk", "urgency": "medium"},
"中性": {"action": "normal", "target": "standard", "urgency": "none"},
"积极": {"action": "normal", "target": "standard", "urgency": "none"},
"非常积极": {"action": "maintain", "target": "keep_style", "urgency": "none"}
}

def adjust_driving(self, emotion_level, vehicle_state):
strategy = self.STRATEGY_MAP.get(emotion_level, self.STRATEGY_MAP["中性"])

if strategy["action"] == "decelerate":
return self._smooth_deceleration(vehicle_state)
elif strategy["action"] == "smooth_drive":
return self._reduce_jerk(vehicle_state)
else:
return vehicle_state # 保持

4. Euro NCAP OMS对标

NCAP OMS要求 本方案覆盖 实现
乘员分类 ✅ 序数情绪+坐姿
乘员状态监测 ✅ EDA+EEG+动力学
安全带状态 需扩展 压力传感器
CPD 需扩展 雷达/摄像头
情绪/舒适度 ✅ 核心创新 序数情绪识别

总结

Robotaxi乘员情绪识别是OMS从安全监控走向体验优化的关键一步。本研究的序数情绪分析框架解决了传统分类方法忽略情绪等级顺序的问题,多模态融合(EDA+EEG+车辆动力学)实现81.7%准确率,个性化校准提升至85.2%。

对IMS的核心启示:序数模型不仅适用于情绪识别,也应推广到疲劳/分心/酒驾等所有有等级关系的DMS检测任务中。传统二分类/多分类方法丢失了严重程度信息,而序数模型天然支持渐进预警策略。