基于NMPC算法实现的车辆路径跟踪控制,建立车辆动力学模型,

基于NMPC算法实现的车辆路径跟踪控制,建立车辆动力学模型,跟踪具有参考速度的期望路径
通过CarSim和Simulink联合仿真,仿真效果良好
图为车辆路径图,纵向速度,前轮转角图
有对应的参考论文及Carsim配置cpr文件
在这里插入图片描述


基于非线性模型预测控制(NMPC)的车辆路径跟踪控制是一种高效的控制方法,能够处理复杂的非线性系统和约束。以下是一个完整的实现方案,包括车辆动力学模型、NMPC控制器设计、CarSim 和 Simulink 的联合仿真配置以及代码示例。


1. 车辆动力学模型

我们使用自行车模型(Bicycle Model)来描述车辆的动力学行为:

状态变量
  • ( x ): 车辆纵向位置
  • ( y ): 车辆横向位置
  • ( \psi ): 航向角
  • ( v ): 纵向速度
  • ( \dot{\psi} ): 横摆角速度
输入变量
  • ( \delta ): 前轮转角
  • ( a ): 加速度
动力学方程

[
\begin{aligned}
\dot{x} &= v \cos(\psi) \
\dot{y} &= v \sin(\psi) \
\dot{\psi} &= \frac{v}{L} \tan(\delta) \
\dot{v} &= a
\end{aligned}
]
其中,( L ) 是车辆轴距。


2. NMPC 控制器设计

NMPC 通过优化目标函数来生成控制输入,同时考虑系统约束。

目标函数

[
J = \sum_{k=0}^{N-1} \left( |x_k - x_{ref,k}|^2 + |y_k - y_{ref,k}|^2 + |\psi_k - \psi_{ref,k}|^2 + |\delta_k|^2 + |a_k|^2 \right)
]

约束条件
  • 车辆动力学约束
  • 输入约束:( |\delta| \leq \delta_{max}, |a| \leq a_{max} )
  • 状态约束:( v_{min} \leq v \leq v_{max} )
NMPC 实现

使用 MATLAB 的 fmincon 或 MPC 工具箱实现优化问题。


3. CarSim 和 Simulink 联合仿真

CarSim 配置
  1. 在 CarSim 中定义车辆参数(如质量、轴距、轮胎特性等)。
  2. 导出车辆的状态变量(如车速、横摆角速度、位置等)到 Simulink。
  3. 接收 Simulink 的控制信号(如前轮转角和加速度)。
Simulink 模型结构
  1. 参考轨迹生成模块

    • 使用五次多项式或三次样条插值生成参考路径和速度。
  2. NMPC 控制模块

    • 输入:参考轨迹、车辆当前状态。
    • 输出:前轮转角 ( \delta ) 和加速度 ( a )。
  3. CarSim 接口模块

    • 将 NMPC 输出传递给 CarSim,并接收车辆状态反馈。

在这里插入图片描述

4. 代码实现

4.1 参考轨迹生成
function [x_ref, y_ref, v_ref] = generate_reference_trajectory(initial_pos, target_pos, initial_speed, target_speed, time)
    % 输入参数:
    % initial_pos: 初始位置 [x0, y0]
    % target_pos: 目标位置 [xf, yf]
    % initial_speed: 初始速度 (m/s)
    % target_speed: 目标速度 (m/s)
    % time: 时间序列 (秒)

    t = time;
    T = max(t);
    a0_x = initial_pos(1);
    a1_x = initial_speed;
    a2_x = 0;
    a3_x = (10*(target_pos(1)-initial_pos(1)) - (4*T*initial_speed + 6*T*target_speed)) / T^3;
    a4_x = (-15*(target_pos(1)-initial_pos(1)) + (7*T*initial_speed + 8*T*target_speed)) / T^4;
    a5_x = (6*(target_pos(1)-initial_pos(1)) - (3*T*initial_speed + 3*T*target_speed)) / T^5;

    b0_y = initial_pos(2);
    b1_y = 0;
    b2_y = 0;
    b3_y = (10*(target_pos(2)-initial_pos(2))) / T^3;
    b4_y = (-15*(target_pos(2)-initial_pos(2))) / T^4;
    b5_y = (6*(target_pos(2)-initial_pos(2))) / T^5;

    v_ref = initial_speed + (target_speed - initial_speed) * t / T;

    x_ref = a0_x + a1_x*t + a2_x*t.^2 + a3_x*t.^3 + a4_x*t.^4 + a5_x*t.^5;
    y_ref = b0_y + b1_y*t + b2_y*t.^2 + b3_y*t.^3 + b4_y*t.^4 + b5_y*t.^5;
end
4.2 NMPC 控制器
function [delta, a] = nmpc_controller(x_ref, y_ref, psi_ref, v_ref, x_car, y_car, psi_car, v_car, L, N, dt)
    % 输入参数:
    % x_ref, y_ref, psi_ref, v_ref: 参考轨迹
    % x_car, y_car, psi_car, v_car: 当前车辆状态
    % L: 车辆轴距
    % N: 预测时域长度
    % dt: 时间步长

    % 定义优化问题
    options = optimoptions('fmincon', 'Display', 'off');
    u0 = [0; 0]; % 初始猜测
    lb = [-pi/4; -5]; % 输入下界
    ub = [pi/4; 5];   % 输入上界

    % 目标函数
    cost_func = @(u) nmpc_cost(u, x_ref, y_ref, psi_ref, v_ref, x_car, y_car, psi_car, v_car, L, N, dt);

    % 优化求解
    [u_opt, ~] = fmincon(cost_func, u0, [], [], [], [], lb, ub, [], options);

    % 输出控制量
    delta = u_opt(1);
    a = u_opt(2);
end

function cost = nmpc_cost(u, x_ref, y_ref, psi_ref, v_ref, x_car, y_car, psi_car, v_car, L, N, dt)
    % 提取控制输入
    delta = u(1);
    a = u(2);

    % 初始化状态
    x = x_car;
    y = y_car;
    psi = psi_car;
    v = v_car;

    % 计算代价
    cost = 0;
    for k = 1:N
        % 动力学更新
        x = x + v * cos(psi) * dt;
        y = y + v * sin(psi) * dt;
        psi = psi + (v / L) * tan(delta) * dt;
        v = v + a * dt;

        % 跟踪误差
        cost = cost + (x - x_ref(k))^2 + (y - y_ref(k))^2 + (psi - psi_ref(k))^2 + 0.1*delta^2 + 0.01*a^2;
    end
end

5. CarSim 配置

  1. 在 CarSim 中设置车辆模型,导出状态变量(如车速、位置等)。
  2. 使用 .cpr 文件配置 CarSim 和 Simulink 的接口。
  3. 在 Simulink 中加载 .cpr 文件并运行联合仿真。

6. 仿真结果

  • 车辆路径图:显示车辆实际轨迹与参考轨迹的对比。
  • 纵向速度图:显示车辆速度随时间的变化。
  • 前轮转角图:显示前轮转角随时间的变化。

7. 参考论文

  • “Nonlinear Model Predictive Control for Autonomous Vehicles” by J. Kong et al.
  • “Vehicle Dynamics and Control” by R. Rajamani.

以上代码和配置仅供参考,实际应用中需根据具体需求进行调整。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值