点击箭头处“蓝色字”,关注我们哦!!
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
📖
🔥 内容介绍
在自动驾驶技术从L2级辅助驾驶向L4级高阶自动驾驶落地的进程中,车辆运动控制是决定无人车行驶安全性、平顺性与路径跟踪精度的核心模块。传统基于PID的车辆控制方法难以同时满足路径跟踪精度、乘坐舒适性、执行器约束等多目标优化需求,在复杂动态交通场景下容易出现控制量突变、跟踪偏差过大等问题。本套面向无人驾驶车辆的模型预测控制(MPC)系统,基于车辆动力学模型构建滚动优化框架,在每个控制周期内在线求解带约束的最优控制序列,同时兼顾路径跟踪精度、行驶平顺性与车辆执行器的物理边界约束,在高速行驶、复杂变道、低附着路面等典型场景下都能实现稳定高精度的运动控制,为无人车的安全落地提供可靠的底层控制支撑。
一、 无人车MPC控制系统整体架构与核心需求分析
本无人车MPC运动控制系统采用“环境感知层-决策规划层-MPC运动控制层-车辆执行层-状态反馈层”的五层闭环架构,核心设计思路是将无人车的路径跟踪控制问题转化为带多约束的有限时域滚动优化问题,在每个控制周期内基于车辆当前的状态信息,预测未来一段时间内车辆的运动轨迹,通过优化求解得到最优的前轮转角、纵向加速度控制序列,仅将控制序列的第一个元素作用于车辆,下一个周期根据新的车辆状态重新进行优化求解,实现闭环的高精度路径跟踪控制。
无人车的运动控制是一个典型的多约束、多目标、强非线性的复杂控制问题:车辆的前轮转角存在最大物理转角限制,前轮转角的变化率也受转向执行器的响应速度约束;纵向加速度与减速度受车辆动力系统、制动系统的性能限制,同时为了保证乘坐舒适性,加加速度(jerk)也需要控制在合理区间内;在高速行驶、低附着路面场景下,车辆的侧向动力学特性呈现强非线性,传统基于线性假设的控制方法很容易出现控制失稳,导致车辆偏离目标路径。传统的PID控制方法只能实现单目标的误差反馈调节,无法同时处理上述多约束条件,也难以兼顾路径跟踪精度与行驶平顺性的平衡,在复杂工况下的控制性能难以满足高阶自动驾驶的要求。
模型预测控制算法天生适配这类带多约束的优化控制场景,它的三大核心特征——预测模型、滚动优化、反馈校正,完美匹配无人车运动控制的需求:预测模型可以基于车辆动力学特性精准预测未来的运动状态;滚动优化可以在每个控制周期内在线处理所有执行器约束与安全约束,得到满足所有边界条件的最优控制量;反馈校正机制可以抵消模型误差、外界扰动带来的状态偏差,保证控制系统的鲁棒性。整套系统面向量产无人车的工程化需求设计,支持乘用车、物流无人车、接驳车等不同类型的无人驾驶车辆的运动控制适配,完全满足城市道路、高速道路、封闭园区等不同场景的自动驾驶控制要求。
二、 面向无人车的预测模型构建与线性化处理
预测模型是整个MPC控制系统的基础,模型的精度直接决定了车辆未来状态预测的准确性,本系统结合车辆运动学与动力学特性,构建了适配不同车速场景的分层预测模型,在保证预测精度的同时尽可能降低在线优化的计算量,满足车载控制器的实时性要求。
首先构建车辆的二自由度侧向动力学模型,这是无人车侧向控制的核心基础模型。该模型将车辆简化为仅考虑侧向运动与横摆运动的二自由度系统,忽略悬架的作用,假设左右侧轮胎的侧偏刚度相同,推导出车辆的侧向加速度、横摆角速度与前轮转角之间的动力学关系。在此基础上引入车辆的路径跟踪误差状态,将车辆相对于目标参考路径的横向偏差、航向角偏差作为扩展状态变量,构建完整的侧向状态空间方程。
针对纵向运动控制,构建车辆的纵向动力学模型,考虑车辆的行驶阻力、动力系统的响应延迟,将纵向加速度、纵向速度作为状态变量,油门开度、制动主缸压力作为控制输入,建立纵向运动的状态空间方程。最终将侧向动力学模型与纵向动力学模型整合,得到完整的车辆非线性预测模型,覆盖无人车运动控制的所有核心状态。
为了降低在线优化的计算复杂度,适配车载嵌入式控制器的算力限制,本系统对非线性预测模型进行线性化处理。以车辆当前的运行状态作为工作点,对非线性状态方程进行泰勒展开,忽略高阶小项,得到线性时变的状态空间方程。同时采用离散化方法将连续时间模型转化为离散时间模型,适配MPC的离散控制周期,最终得到可以直接用于滚动优化的线性预测模型。为了避免线性化带来的模型精度损失,系统在每个控制周期都会基于当前最新的车辆状态重新完成线性化更新,保证预测模型始终贴合车辆的实际运行状态,大幅提升模型在大偏差工况下的预测精度。
针对不同车速场景,系统还设计了模型自动切换机制:在低速园区场景下,自动切换为运动学预测模型,忽略复杂的动力学效应,降低计算量,提升低速路径跟踪的灵活性;在高速道路场景下,自动切换为高精度动力学预测模型,充分考虑轮胎侧偏、横摆运动的影响,保证高速行驶的稳定性。
三、 带多约束的滚动优化目标函数设计
滚动优化是MPC控制系统的核心环节,本系统设计了兼顾路径跟踪精度、行驶平顺性、执行器约束的多目标优化函数,在每个控制周期内在线求解最优控制序列,在满足所有物理约束的前提下实现综合控制性能的最优。
优化目标函数分为三个核心加权部分:第一部分是路径跟踪误差项,对预测时域内的车辆横向偏差、航向角偏差、纵向速度偏差进行加权求和,保证车辆尽可能贴近目标参考路径行驶,这是路径跟踪控制的核心目标;第二部分是控制量代价项,对控制时域内的前轮转角、纵向加速度的大小进行加权,避免控制量出现过大的突变,减少执行器的频繁动作损耗;第三部分是控制量变化率代价项,对前轮转角的变化率、纵向加加速度(jerk)进行加权求和,这一项直接决定了无人车行驶的平顺性,通过调整这一项的权重可以精准控制车辆行驶的乘坐舒适度,避免出现急打方向、急加减速等影响乘坐体验的控制动作。
为了保证车辆的行驶安全性与执行器的物理可实现性,系统在优化问题中加入了完整的多维度硬约束:首先是控制量约束,限制前轮转角的最大绝对值、纵向加速度的最大与最小值,保证输出的控制量都在车辆转向系统、动力制动系统的物理输出范围内;其次是控制量变化率约束,限制每个控制周期内前轮转角的最大变化量、纵向加速度的最大变化量,匹配转向电机、动力系统的响应速度上限,避免出现执行器无法跟踪控制指令的情况;最后还加入了状态量安全约束,在低附着路面场景下,自动限制车辆的侧向加速度最大值、轮胎侧偏角最大值,避免车辆出现侧滑、失稳等危险工况,保证车辆在极限工况下的行驶稳定性。
为了满足车载控制器的实时性要求,本系统将带约束的优化问题转化为标准的二次规划(QP)问题,采用高效的主动集法求解器进行在线求解,在常规车载MCU控制器上,单次优化求解的耗时可以控制在5ms以内,完全满足无人车运动控制100Hz的控制频率要求。同时系统设置了预测时域与控制时域的自适应调整机制:在高速行驶场景下,自动拉长预测时域,提升车辆的前向预测能力,保证高速行驶的稳定性;在低速复杂场景下,自动缩短控制时域,提升系统的动态响应速度,适配复杂场景下的路径快速跟踪需求。
📖
⛳️ 运行结果
📖
📣 部分代码
function params = params()
% PARAMS Define simulation parameters
% Returns a struct with all physical parameters and control gains.
% Based on: Wang et al., "Robust Cooperative Transportation of a
% Cable-Suspended Payload by Multiple Quadrotors", IEEE TITS 2024
% Parameters from Section VI (Simulation Results), Page 8
% ========== Physical Parameters (论文 Section VI) ==========
params.mL = 0.06; % Payload mass (kg) - 论文值
params.mi = 0.21; % Quadrotor mass (kg) - 论文值
params.theta_d = deg2rad(40); % Desired cable angle (zenith) - 论文值
params.li = 0.6; % Cable length (m)
params.g = 9.81; % Gravity (m/s^2)
params.n = 3; % Number of quadrotors
% ========== Control Gains (调整后 - 适配简化模型) ==========
params.beta = 0.5; % 耦合参数
params.k1 = 15; % 位置增益 (增大3倍提高响应速度)
params.k2 = 8; % 速度增益 (增大4倍提高阻尼)
params.kq = 15; % 缆绳方向增益 (增大3倍)
params.komega = 8; % 缆绳角速度增益 (增大4倍)
params.kr = 180; % 姿态增益 (简化模型中不使用)
params.kpsi = 1; % Yaw gain (简化模型中不使用)
% ========== Adaptive Parameters (简化模型中不使用) ==========
params.hq = 10; % 缆绳自适应
params.homega = 1; % 角速度自适应
params.hr = 30; % 姿态自适应
params.hdL = 0.5; % 载荷扰动估计 (已移除)
params.hdi = 0.2; % 无人机扰动估计 (已移除)
% ========== Disturbance Bounds (for projection) ==========
% 论文中使用的扰动界: dL_max 和 di_max
% 论文实际扰动: dL = 0.1*mL*g*[2/3,2/3,1/3], di = 0.1*mi*g*[2/3,2/3,1/3]
% 但我们先去除扰动验证稳定性
params.dL_max = 0.1 * params.mL * params.g; % 约0.059 N
params.di_max = 0.1 * params.mi * params.g; % 约0.206 N
% ========== Numerical Safety / Regularization ==========
params.force_alloc_reg = 1e-1; % Regularization for QQt inversion (增大以提高数值稳定性)
params.omega_cmd_limit = 20; % Cap commanded angular rate (降低以减少刚性)
% ========== True Disturbances (for simulation) ==========
% 论文 Section VI 使用: dL = 0.1*mL*g*[2/3,2/3,1/3]', di = 0.1*mi*g*[2/3,2/3,1/3]'
% 按你的要求,先去除扰动
params.d_L_true = zeros(3, 1);
params.d_i_true = zeros(3, params.n);
% 如需添加论文中的扰动,取消下面两行注释:
% params.d_L_true = 0.1 * params.mL * params.g * [2/3; 2/3; 1/3];
% params.d_i_true = 0.1 * params.mi * params.g * repmat([2/3; 2/3; 1/3], 1, params.n);
% Initial Conditions (handled in init_state)
end
📖
🔗 参考文献
📖
🌿 往期回顾可以关注主页,点击搜索