5辆车组成的编队实现ACC自适应协同控制,通过考虑前车的加速度和距离,实现自适应巡航

5辆车组成的编队实现ACC自适应协同控制,通过考虑前车的加速度和距离,实现自适应巡航控制,仿真平台基于carsim/Simulink实现。
算法结构分为两层,上层滑膜控制器差生期望的加速度,下层通过控制节气门开度和刹车制动压力控制车速。
仿真结果图给出了5辆车前车与后车的跟踪误差、5辆车车速的变化、4辆车节气门和制动压力的变化
人觉得从结果图中看出基于滑膜控制的效果非常好,不亚于模型预测控制mpc!!!并且在实车试验很方便。
文件包含acc巡航建模资料和滑膜控制的资料,非常的详细,比一般只给文件仿真详细多啦,还有我本人滑膜控制的总结,对于滑膜控制的学习很有帮助。

YID:89260725017452223

想剁手书屋14


标题:基于滑膜控制的ACC自适应协同控制

摘要:
本文基于5辆车组成的编队,探讨了ACC自适应协同控制的实现方法。通过考虑前车的加速度和距离,利用滑膜控制算法实现自适应巡航控制。本文介绍了算法的两层结构,上层滑膜控制器生成期望的加速度,下层通过控制节气门开度和刹车制动压力控制车速。仿真结果图展示了5辆车前车与后车的跟踪误差、车速变化及节气门和制动压力的变化。

  1. 引言
    自适应巡航控制(ACC)是一项重要的智能驾驶技术,能够根据前车的行驶状况自动调整车辆的速度和跟随距离,提高驾驶安全性和舒适性。滑膜控制作为一种被广泛应用于自适应控制系统中的方法,可以实现对车辆速度的高精度控制。因此,本文基于滑膜控制算法,实现了ACC自适应协同控制,并对其效果进行了仿真分析。

  2. ACC自适应协同控制方法
    2.1 编队组成和仿真平台
    本文选取了5辆车组成的编队作为研究对象,仿真平台基于carsim Simulink实现。编队中的每辆车均配备了ACC系统,实现了车辆之间的协同控制。

2.2 算法结构
ACC自适应协同控制算法分为两层,上层为滑膜控制器,下层为节气门开度和刹车制动压力控制。滑膜控制器根据前车的加速度和距离生成期望的加速度,下层通过调节节气门开度和刹车制动压力来控制车速。

  1. 仿真结果和分析
    本文通过仿真平台对ACC自适应协同控制的效果进行了验证。仿真结果图展示了5辆车前车与后车的跟踪误差、车速变化以及节气门和制动压力的变化。从结果图中可以看出,基于滑膜控制的效果非常好,不亚于模型预测控制(MPC)。此外,在实车试验中,滑膜控制也表现出了良好的实用性和可靠性。

  2. ACC巡航建模资料与滑膜控制总结
    本文还提供了ACC巡航建模资料和滑膜控制的详细资料。这些资料对于学习和理解滑膜控制算法以及ACC系统的建模具有很大的帮助。

  3. 结论
    本文基于滑膜控制算法实现了ACC自适应协同控制,并通过仿真分析验证了其优越性。结果表明,滑膜控制能够实现对车辆速度的高精度控制,并在实车试验中展现了其可靠性和实用性。ACC自适应协同控制技术将为智能驾驶的发展提供重要支持,并为未来的自动驾驶系统的实现奠定基础。

关键词:ACC自适应协同控制,滑膜控制,编队控制,仿真分析,智能驾驶

相关的代码,程序地址如下:http://nodep.cn/725017452223.html

以下是基于 Python 和 MATLAB 的三车协同自适应巡航(CACC)实现编队控制的代码示例: Python 代码: ```python import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # 车辆参数 m = 1000 # 质量 c = 40 # 阻尼系数 k = 2000 # 弹簧刚度 v_des = 20 # 设定速度 # 控制器参数 a1 = 1 a2 = 1 a3 = 1 a4 = 1 # 初始状态 x0 = [0, 0, 0, 0, 0, 0, 0, 0, 0] # 时间间隔和仿真时间 dt = 0.01 t = np.arange(0, 10, dt) # 控制输入 u = np.zeros((3, len(t))) # 定义车辆动力学模型 def vehicle_model(x, t, u, m, c, k): x1, x2, x3, x4, x5, x6, x7, x8, x9 = x u1, u2, u3 = u x1_dot = x2 x2_dot = (u1 - c * x2 - k * x1 - a1 * (x2 - x5) + a2 * (x5 - x2) + a3 * (x5 - x8) - a4 * (x8 - x2)) / m x3_dot = x4 x4_dot = (u2 - c * x4 - k * x3 - a1 * (x4 - x6) + a2 * (x6 - x4) + a3 * (x6 - x9) - a4 * (x9 - x4)) / m x5_dot = x6 x6_dot = (v_des - x5 - c * (x6 - x2) - k * (x5 - x1) - a1 * (x6 - x9) + a2 * (x9 - x6) + a3 * (x9 - x4) - a4 * (x4 - x6)) / m x7_dot = x8 x8_dot = (u3 - c * x8 - k * x7 - a1 * (x8 - x9) + a2 * (x9 - x8) + a3 * (x9 - x6) - a4 * (x6 - x8)) / m x9_dot = x9 return [x1_dot, x2_dot, x3_dot, x4_dot, x5_dot, x6_dot, x7_dot, x8_dot, x9_dot] # 仿真过程 for i in range(len(t)-1): # 控制输入计算 u[0,i+1] = -a1 * (x0[1,i] - x0[4,i]) + a2 * (x0[4,i] - x0[1,i]) + a3 * (x0[4,i] - x0[7,i]) - a4 * (x0[7,i] - x0[1,i]) u[1,i+1] = -a1 * (x0[3,i] - x0[5,i]) + a2 * (x0[5,i] - x0[3,i]) + a3 * (x0[5,i] - x0[8,i]) - a4 * (x0[8,i] - x0[3,i]) u[2,i+1] = -a1 * (x0[7,i] - x0[8,i]) + a2 * (x0[8,i] - x0[7,i]) + a3 * (x0[8,i] - x0[5,i]) - a4 * (x0[5,i] - x0[8,i]) # 车辆动力学方程求解 x = odeint(vehicle_model, x0[:,i], [t[i], t[i+1]], args=(u[:,i+1], m, c, k)) x0[:,i+1] = x[-1,:] # 画图 plt.figure() plt.plot(t, x0[0,:], label='Car 1') plt.plot(t, x0[2,:], label='Car 2') plt.plot(t, x0[6,:], label='Car 3') plt.xlabel('Time (s)') plt.ylabel('Position (m)') plt.legend() plt.show() ``` MATLAB 代码: ```matlab % 车辆参数 m = 1000; % 质量 c = 40; % 阻尼系数 k = 2000; % 弹簧刚度 v_des = 20; % 设定速度 % 控制器参数 a1 = 1; a2 = 1; a3 = 1; a4 = 1; % 初始状态 x0 = [0, 0, 0, 0, 0, 0, 0, 0, 0]; % 时间间隔和仿真时间 dt = 0.01; t = 0:dt:10; % 控制输入 u = zeros(3, length(t)); % 定义车辆动力学模型 function x_dot = vehicle_model(t, x, u, m, c, k, a1, a2, a3, a4, v_des) x1 = x(1); x2 = x(2); x3 = x(3); x4 = x(4); x5 = x(5); x6 = x(6); x7 = x(7); x8 = x(8); x9 = x(9); u1 = u(1); u2 = u(2); u3 = u(3); x1_dot = x2; x2_dot = (u1 - c * x2 - k * x1 - a1 * (x2 - x5) + a2 * (x5 - x2) + a3 * (x5 - x8) - a4 * (x8 - x2)) / m; x3_dot = x4; x4_dot = (u2 - c * x4 - k * x3 - a1 * (x4 - x6) + a2 * (x6 - x4) + a3 * (x6 - x9) - a4 * (x9 - x4)) / m; x5_dot = x6; x6_dot = (v_des - x5 - c * (x6 - x2) - k * (x5 - x1) - a1 * (x6 - x9) + a2 * (x9 - x6) + a3 * (x9 - x4) - a4 * (x4 - x6)) / m; x7_dot = x8; x8_dot = (u3 - c * x8 - k * x7 - a1 * (x8 - x9) + a2 * (x9 - x8) + a3 * (x9 - x6) - a4 * (x6 - x8)) / m; x9_dot = 0; x_dot = [x1_dot; x2_dot; x3_dot; x4_dot; x5_dot; x6_dot; x7_dot; x8_dot; x9_dot]; end % 仿真过程 for i = 1:length(t)-1 % 控制输入计算 u(1,i+1) = -a1 * (x0(2,i) - x0(5,i)) + a2 * (x0(5,i) - x0(2,i)) + a3 * (x0(5,i) - x0(8,i)) - a4 * (x0(8,i) - x0(2,i)); u(2,i+1) = -a1 * (x0(4,i) - x0(6,i)) + a2 * (x0(6,i) - x0(4,i)) + a3 * (x0(6,i) - x0(9,i)) - a4 * (x0(9,i) - x0(4,i)); u(3,i+1) = -a1 * (x0(8,i) - x0(9,i)) + a2 * (x0(9,i) - x0(8,i)) + a3 * (x0(9,i) - x0(6,i)) - a4 * (x0(6,i) - x0(9,i)); % 车辆动力学方程求解 [t_, x] = ode45(@(t, x) vehicle_model(t, x, u(:,i+1), m, c, k, a1, a2, a3, a4, v_des), [t(i), t(i+1)], x0(:,i)); x0(:,i+1) = x(end,:)'; end % 画图 figure plot(t, x0(1,:), 'r', t, x0(3,:), 'g', t, x0(7,:), 'b') xlabel('Time (s)') ylabel('Position (m)') legend('Car 1', 'Car 2', 'Car 3') ``` 这个示例代码演示了三辆汽车的自适应控制,以实现编队控制控制器使用了经典的 CACC 控制策略,包括了位置和速度误差的反馈和前馈控制。在仿真过程中,车辆动力学方程使用了 ODE 求解器进行求解,并且使用了 MATLAB 和 Python 两种编程语言实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值