✨ 长期致力于智能汽车、不确定性、态势评估、容错感知与控制、意图识别、交互性行为决策研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)广义行车态势评估体系与云模型不确定性量化:
建立一种多层级态势评估框架,第一层为传感器容错感知模块,对毫米波雷达和摄像头数据进行Sage-Husa自适应滤波,输出目标车辆的运动状态(位置、速度、加速度)及其不确定协方差。第二层为驾驶意图识别模块,利用自适应隐马尔可夫模型输出周围车辆换道意图的概率分布。第三层为行车安全场计算器,将自车周围分割为六个扇形区域(每60度一个),每个区域综合计算势场力,包括道路边界排斥场、目标车辆动能场以及天气湿滑因子。然后采用正向高斯云模型将每个区域的场力值映射到三个概念指标:危险态势的确定度、舒适态势的确定度、空闲态势的确定度。云模型的期望值Ex根据历史数据拟合,熵En设定为场力标准差的0.5倍。在实际高速场景测试中,该体系对切入车辆的危险预警提前量平均为2.3秒,比传统安全距离模型提高0.8秒。
(2)基于混合逻辑动态的主动容错感知与控制:
针对毫米波雷达可能发生的三种故障类型(数据丢失、固定偏差、噪声增大),设计一个故障检测与隔离模块。采用四阶Sage-Husa滤波器并行运行四个模型,分别对应正常模式和各故障模式,每个模式的状态估计通过交互多模型更新。将故障事件建模为离散状态,ACC上层控制器建立混合逻辑动态模型,其中连续状态为自车速度和间距,离散状态为故障标志。模型预测控制求解时混合整数二次规划问题,优化目标为保持安全跟车距离并最小化加加速度。在CarSim仿真中,模拟雷达突然固定偏差故障(+0.5m距离误差),传统ACC出现追尾风险(最小间距2.1m),而容错控制器在0.6秒内检测到故障并切换模型,稳定后间距维持在3.8m,无碰撞风险。
(3)非合作不完全信息动态博弈的决策模型:
将行车博弈建模为序贯博弈,顺序由驾驶风格激进程度决定(激进者优先动作)。每个博弈者不知道对方确切收益函数但知道类型分布(保守型、普通型、激进型),通过贝叶斯更新修正信念。设计多目标收益函数,包括安全性(碰撞时间倒数)、效率(速度与期望速度差)和舒适性(加速度变化率)。在交叉口无信号灯场景中,自车与右侧来车博弈,使用逆向归纳求解序贯均衡。在Matlab/Simulink联合仿真平台(基于Frenet坐标系规划轨迹)上测试,与完全信息博弈相比,不完全信息模型使得自车决策更保守但安全性提高,高风险冲突事件减少43%;同时由于考虑到对方激进概率,必要时自车会主动让行,通行效率仅下降7%。
import numpy as np from scipy.stats import multivariate_normal class CloudModelUncertainty: def __init__(self, Ex, En, He=0.1): self.Ex = Ex self.En = En self.He = He def compute_certainty(self, x): En_prime = np.random.normal(self.En, self.He) return np.exp(- (x - self.Ex)**2 / (2 * En_prime**2)) class InteractiveMultipleModel: def __init__(self, models, trans_prob): self.models = models self.trans_prob = trans_prob self.mu = np.ones(len(models)) / len(models) def update(self, z): # mode-matched filtering for i, (model, cov) in enumerate(self.models): x_pred = model.predict() innov = z - model.H @ x_pred S = model.H @ cov @ model.H.T + model.R likelihood = multivariate_normal.pdf(innov, cov=S) self.mu[i] = likelihood * self.mu[i] self.mu /= np.sum(self.mu) # mix probabilities self.mu = self.trans_prob.T @ self.mu return self.mu class SafetyFieldCalculator: def __init__(self, ego_state): self.ego = ego_state def compute_zone_force(self, other_vehicles, zone_angle_range): force = 0.0 for veh in other_vehicles: angle = np.arctan2(veh.y - self.ego.y, veh.x - self.ego.x) * 180/np.pi if zone_angle_range[0] <= angle <= zone_angle_range[1]: dist = np.hypot(veh.x - self.ego.x, veh.y - self.ego.y) vel_term = (veh.vx - self.ego.vx)**2 + (veh.vy - self.ego.vy)**2 force += 1000.0 / (dist+1) * (1 + 0.1*vel_term) return force def bayesian_game_solver(types_dist, payoff_matrices, action_order): # types_dist: list of probabilities for each player # backward induction for sequential equilibrium n_players = len(action_order) strategies = [] for player in reversed(action_order): best_actions = [] for t in range(len(types_dist[player])): expected_payoff = [] for act in range(payoff_matrices[player].shape[1]): exp_val = 0 for opp_t in range(len(types_dist[1-player])): prob = types_dist[1-player][opp_t] exp_val += prob * payoff_matrices[player][t, act, opp_t] expected_payoff.append(exp_val) best_actions.append(np.argmax(expected_payoff)) strategies.append(best_actions) return strategies def fault_tolerant_mpc(x0, fault_flag_estimate, horizon=10): # Mixed integer quadratic programming simulation from cvxopt import matrix, solvers Q = np.eye(2) R = np.eye(1) # simplified: solve MIQP with binary variable representing fault mode c = matrix(np.zeros(horizon*2+horizon)) # ... (省略具体求解细节) return np.zeros(horizon)