MPC在驾驶控制中的跟车场景应用举例

文章介绍了模型预测控制(MPC)的概念,指出其在多输入、多输出控制问题中的优势。通过驾驶控制实例,展示了如何使用MPC解决在高速公路上保持固定车距的问题,与PID控制相比,MPC能处理更复杂的控制任务。文章还提供了用Python和CasADi工具包实现MPC控制器的代码示例,并提到将控制器应用于highway_env环境进行实验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前借助highway_env环境尝试了比例控制和PID控制在驾驶中车速控制中的应用。但无论是比例控制还是PID都是较为基础的方法,对于多输入、多输入和多优化目标的控制问题,求解能力较弱。所以要探索新的方法。

MPC简介

模型预测控制(Model Predictive Control),简称MPC。顾名思义,就是在进行优化控制前要先建模、再预测,其中的建模和预测方式都不固定,有很大的自定义发挥空间,也就是说MPC并不是某种优化算法,而是一种优化控制思路的框架。它要求在进行优化控制之前,被控对象的特性能够被一定描述,以此为基础建模进行未来一段时间的状态预测,并求出未来一段时间内的连续最优控制量取值。原理如同梯度下降,搜索范围越大,计算结果越接近全局最优解,但计算开销也越大,or vice versa.

驾驶控制举例

之前写了两篇文章利用PID尝试过两个简单的控制目标(分别是车速航向),现在设计一个新的控制任务,和之前的任务相比更加复杂:在高速公路上前后分别有两辆车,无论前车速度如何变化,希望后车能够与前车始终保持固定的距离。借助highway_env环境完成实验,环境简介可看前文

与之前的车速控制相比,汽车的位移控制相当于对车速又进行了一次积分,而且对汽车位移的控制不可能不考虑速度。因此这个任务实际上在位移和速度两方面都要进行控制。设计反馈控制策略就需要考虑两方面的误差。

MPC建模

MPC需要系统提前以一个模型的预测结果为指导,考虑未来一段时间的最优控制量。因此需要提前建立一个机理或数据驱动的模型,在这个例子中的车辆运动学方程较为简单,直接拿已知的模型作为预测模型即可,相当于是一种不存在建模误差的理想状况。在汽车速度控制任务中需要考虑的模型是运动学模型,离散形式描述如下:
{ v ˙ k + 1 = v k + a k + 1 Δ t x ˙ k + 1 = x k + v k + 1 Δ t \begin{cases} \dot{v}_{k+1}=v_k+a_{k+1}\Delta t \\ \dot{x}_{k+1}=x_k+v_{k+1}\Delta t \end{cases}\\ {v˙k+1=vk+ak+1Δtx˙k+1=xk+vk+1Δt
MPC用该模型将未来 N N N个时刻的优化动作生成的预测状态与期望的状态(参考信号)进行对比,可以写出代价函数:
m i n   J = ∑ i = 0 N ( w 1 ∗ ( x ˉ i − x i ) 2 + w 2 ∗ u i 2 ) s . t . a m i n ≤ u ≤ a m a x x ˉ 0 = X i n i t u 0 = 0 x i = X r e f e r e n c e v ˉ i + 1 = v ˉ i − u i + 1 ∗ Δ t x ˉ i + 1 = x ˉ i + v ˉ i + 1 ∗ Δ t min \ J=\sum_{i=0}^{N} \big(w_1*(\bar{x}_i-x_i)^2+w_2*u_i^2 \big) \\ \begin{aligned} s.t. \quad &a_{min}\leq u\leq a_{max}\\ &\bar{x}_0=X_{init}\\ &u_0=0\\ &x_i=X_{reference}\\ &\bar{v}_{i+1}=\bar{v}_i-u_{i+1}*\Delta t\\ &\bar{x}_{i+1}=\bar{x}_i+\bar v_{i+1}*\Delta t \end{aligned} min J=i=0N(w1(xˉixi)2+w2ui2)s.t.aminuamaxxˉ0=Xinitu0=0xi=Xreferencevˉi+1=vˉiui+1Δtxˉi+1=xˉi+vˉi+1Δt
其中 u u u代表控制量,在highway_env环境中,对车辆的直接控制方式就是设置加速度的值,所以将加速度作为优化控制量, x x x代表前后车的距离,因为控制的是后车,所以当后车加速时,两车的速度差变小。代价函数的第一项是误差项,第二项是正则项,优化目标是在降低两车实际距离与期望距离的误差的同时尽可能减小控制量,二者的trade-off关系用权重系数来调节,保持 w 1 + w 2 = 1 w_1+w_2=1 w1+w2=1。有了代价函数和约束,就可以使用优化控制算法进行最优求解,典型的数学方法我已在上一篇文章中介绍过,但既然用代码的方式解决数学问题,自然优先考虑现成的工具包,这里我们使用CasADi——一个用于非线性优化和算法微分的开源工具,用pip安装后直接导入python环境即可。

import casadi as ca

代码实现

现在用python语言把这个控制器表示出来:

def mpc_controller(xr,dv,dx,N,dt):
    u = ca.MX.sym('u',N) #控制量,未来N个时刻
    v_= dv
    x_= dx #当前时刻的距离差

    obj=0  #优化函数初始值
    w1=0.7
    w2=1-w1
    weight=[w1,w2]

    #预测
    for step in range(0,N,1):        
        v_=v_-u[step]*dt
        x_=x_+v_*dt  #模型       
        obj=obj+weight[0]*(x_-xr)**2+weight[1]*u[step]**2

    nlp = {'x': u, 'f': obj}

    solver = ca.nlpsol('solver','ipopt', nlp)    
    solution = solver(x0=0,lbx=-5,ubx=5)
    u=solution['x'].full()[0][0]
    return u

将控制器嵌入highway_env交互环境,选择比例控制和PID作为参照组,根据结果可画出曲线图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
具体的程序文件我已上传至资源,欢迎免费下载。

### MWorks 自适应巡航控制原理与实现 #### 控制系统的建模与仿真环境 MWorks 提供了一个强大的平台用于控制系统的设计、分析和仿真。对于自适应巡航控制系统 (ACC),该系统能够自动调整车辆速度以保持设定的安全距离[^1]。 #### ACC 系统的工作原理 自适应巡航控制系统利用传感器获取前方道路状况的信息,包括但不限于雷达测距数据和其他感知设备的数据。这些信息被传递给控制器,在这里执行复杂的算法来决定加速或减速的程度,从而维持安全跟车间距。此过程涉及到多个子模块之间的协调工作,如目标识别、路径规划以及纵向运动控制等[^2]。 #### 设计与仿真的具体步骤 为了在 MWorks 中构建一个完整的 ACC 应用程序,建议遵循如下指南: - **初始化环境**:确保已经正确安装并配置好了所需的所有库文件,可以通过命令行依次输入 `using TyControlSystems`、`using TyPlot` 和 `using TyBase` 来完成加载。 - **建立物理模型**:基于实际汽车动力学特性定义车辆行为方程,并考虑外部因素的影响,比如风阻系数、坡度变化等因素。 - **开发控制策略**:采用合适的控制理论和技术(PID, MPC),编写相应的 MATLAB/Simulink 或者 Python 脚本来模拟不同的驾驶场景下的响应情况。 - **验证测试方案**:通过多次迭代优化参数直至达到预期效果为止;同时支持保存多种设计方案以便日后对比评估其优劣之处[^3]。 ```matlab % 初始化必要的包 using TyControlSystems; using TyPlot; using TyBase; % 定义基本参数 vehicle_mass = 1500; % kg max_acceleration = 3.0; % m/s² min_distance_to_front_vehicle = 50; % meters % 创建简单的 PID 控制器实例 controller = pidController('kp', 0.5, 'ki', 0.01, 'kd', 0); % 主循环逻辑处理部分省略... while true distance_to_front_car = getDistanceToCarAhead(); % 获取前车的距离 error = min_distance_to_front_vehicle - distance_to_front_car; acceleration_command = controller.update(error); setAccelerationCommand(acceleration_command); % 设置加速度指令 end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值