考虑驾驶风格的智能车态势评估及换道决策规划【附代码】
✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)基于SEBlock-CNN-LSTM的他车换道意图识别与驾驶风格聚类:
从NGSIM数据集提取换道轨迹,利用核模糊C均值算法将驾驶风格聚类为激进、一般和保守三类,聚类特征包括换道时长、横向加速度峰值和速度变异系数等。换道意图识别网络以他车历史3秒轨迹序列为输入,先经1D卷积提取局部时间特征,再通过挤压-激励块(SEBlock)自适应校准通道权重,最后双层LSTM捕捉长时依赖关系,输出是否换道及换道方向。训练后识别准确率达93.7%,且能在换道开始后0.8秒内即做出准确判断,较传统LSTM模型准确率提升4.2%。
(2)含驾驶风格的行驶风险场态势评估与高斯云模型转换:
构建行驶风险场,场源包括静态障碍物、动态车辆及道路边界,场强与距离、速度差及车型相关。引入驾驶风格因子修正场强扩散系数,激进风格车辆的风险场扩散更快、等势线范围更大。基于场强值计算安全态势和舒适态势隶属度时,采用正向高斯云模型,将场强值映射为危险度和不舒适度的云滴隶属度。危险态势和舒适态势分别由两朵云组合,每朵云包含40个云滴,通过逆向云算法获得数字特征。评估结果显示,对于激进风格的旁车切入,危险态势隶属度比保守风格高出约0.32,有效反映不同程度风险。
(3)Fuzzy-TOPSIS换道决策与B样条+二次规划速度轨迹规划:
换道决策视为多准则决策问题,对各选车道和保持当前车道计算当前及预测的态势隶属度,构建三角模糊数决策矩阵,采用Fuzzy TOPSIS求解贴近度,选取最佳决策。换道路径使用B样条曲线生成,控制点根据换道宽度和期望长度配置。速度规划采用二次规划,优化目标包括最小化速度偏差和加速度平方和,约束实时避撞距离和动力学限制。在PreScan联合仿真中,激进风格车辆在拥堵路况下平均换道成功率达到97.2%,舒适度评分提升至83.2分(百分制)。
import numpy as np import torch import torch.nn as nn from sklearn.cluster import KMeans import skfuzzy as fuzz # SEBlock-CNN-LSTM换道意图识别 class SEBlock(nn.Module): def __init__(self, ch, reduction=8): super().__init__() self.fc = nn.Sequential(nn.Linear(ch, ch//reduction), nn.ReLU(), nn.Linear(ch//reduction, ch), nn.Sigmoid()) def forward(self, x): w = self.fc(x.mean([-1])).unsqueeze(-1) return x * w class IntentPredictor(nn.Module): def __init__(self, input_dim=6): super().__init__() self.conv = nn.Conv1d(input_dim, 64, 3, padding=1) self.se = SEBlock(64) self.lstm = nn.LSTM(64, 64, 2, batch_first=True) self.fc = nn.Linear(64, 3) # 输出:直行/左换/右换 def forward(self, x): x = self.se(torch.relu(self.conv(x))) x = x.permute(0,2,1) out, _ = self.lstm(x) return self.fc(out[:, -1, :]) # 风险场态势评估与高斯云隶属度 def risk_field_cloud_membership(ego_v, target_v, distance, style_factor): field = (ego_v**2 + target_v**2) / (distance+1) * style_factor # 正向高斯云模型 Ex_danger = 12.5; En_danger = 3.2; He_danger = 0.4 cloud_drop = np.random.normal(En_danger, He_danger, 100) + Ex_danger membership = np.exp(-((field - Ex_danger)**2) / (2*np.mean(cloud_drop)**2)) return np.clip(membership, 0, 1) # Fuzzy TOPSIS换道决策 def fuzzy_topsis(decision_matrix, weights): # 三角模糊数简化 normalized = decision_matrix / np.sqrt(np.sum(decision_matrix**2, axis=0)) weighted = normalized * weights ideal_pos = np.max(weighted, axis=0); ideal_neg = np.min(weighted, axis=0) dist_pos = np.sqrt(np.sum((weighted-ideal_pos)**2, axis=1)) dist_neg = np.sqrt(np.sum((weighted-ideal_neg)**2, axis=1)) closeness = dist_neg / (dist_pos + dist_neg) return np.argmax(closeness) # B样条换道路径生成 def bspline_lane_change_path(start, end, n_control=6): ctrl_pts = np.linspace(start, end, n_control) t = np.linspace(0,1,100) path = np.zeros((100,2)) for i in range(n_control): spline = np.exp(-((t - i/(n_control-1))**2/0.02)) path += ctrl_pts[i] * spline[:,None] return path如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
