分层MPC控制器的实时车辆最优控制和避障

一、分层MPC控制架构设计

1. 核心思想

分层模型预测控制(Hierarchical MPC)通过将复杂车辆控制问题分解为多时间尺度、多目标层级,实现实时性与最优性的平衡:

  • 上层(规划层):低频更新(10-20Hz),负责全局路径规划、避障决策、参考轨迹生成(位置、速度、加速度)。
  • 下层(跟踪层):高频更新(50-100Hz),基于车辆动力学模型跟踪上层参考轨迹,处理实时扰动(如侧风、路面不平度)。
  • 协调层(可选):处理上下层信息交互,确保参考轨迹的可行性与避障约束的一致性。

优势:降低单步优化维度(上层低维路径规划+下层高维跟踪),满足实时性(总计算时间<100ms),同时兼顾全局最优与局部动态性能。

2. 系统架构

┌─────────────────────────────────────────────────────────────┐
│                    分层MPC控制器                             │
├─────────────────┬─────────────────┬─────────────────┤
│    上层(规划层)  │    协调层(可选)  │    下层(跟踪层)  │
│  - 路径规划      │  - 参考轨迹校验  │  - 动力学跟踪    │
│  - 避障决策      │  - 约束协调      │  - 执行器控制    │
│  - 参考轨迹生成  │  - 性能评估      │  - 实时扰动抑制  │
└─────────────────┴─────────────────┴─────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                车辆动力学系统(被控对象)                     │
│  - 二自由度车辆模型(横向+纵向)                              │
│  - 执行器模型(转向、油门/刹车)                              │
│  - 传感器(GPS、IMU、激光雷达、摄像头)                      │
└─────────────────────────────────────────────────────────────┘

二、上层规划层:路径规划与避障决策

1. 车辆运动学模型(规划层简化)

上层采用自行车模型(Kinematic Bicycle Model)描述车辆运动,降低计算复杂度:

\[\begin{aligned} \dot{x} &= v \cos\theta \\ \dot{y} &= v \sin\theta \\ \dot{\theta} &= \frac{v}{L} \tan\delta \\ \dot{v} &= a \end{aligned} \]

其中:\((x,y)\)为车辆位置,\(\theta\)为航向角,\(v\)为速度,\(L\)为轴距,\(\delta\)为前轮转角,\(a\)为加速度。

离散化(采样时间\(T_s^p=0.1s\)):

\[\begin{bmatrix} x(k+1) \\ y(k+1) \\ \theta(k+1) \\ v(k+1) \end{bmatrix} = \begin{bmatrix} 1 & 0 & -v(k)T_s^p \sin\theta(k) & T_s^p \cos\theta(k) \\ 0 & 1 & v(k)T_s^p \cos\theta(k) & T_s^p \sin\theta(k) \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x(k) \\ y(k) \\ \theta(k) \\ v(k) \end{bmatrix} + \begin{bmatrix} 0 \\ 0 \\ \frac{v(k)T_s^p}{L} \tan\delta(k) \\ T_s^p \end{bmatrix} a(k) \]

2. 避障约束处理

(1)静态障碍物(如道路边界、固定物)

  • 表示方法:将障碍物描述为凸多边形/圆,车辆简化为矩形(长\(L_v\)、宽\(W_v\))。
  • 安全距离约束:车辆轮廓与障碍物的最小欧氏距离\(d_{safe} \geq 0.5m\),转化为非线性约束:

    \[\min_{(x_o,y_o) \in \text{障碍物}} \sqrt{(x_v - x_o)^2 + (y_v - y_o)^2} \geq d_{safe} + \frac{L_v + W_v}{2} \]

(2)动态障碍物(如行人、其他车辆)

  • 轨迹预测:用卡尔曼滤波(KF)或LSTM预测障碍物未来\(N_p\)步轨迹\((x_o(k+i), y_o(k+i))\)(\(i=1,...,N_p\))。
  • 碰撞避免:在预测时域内,车辆与障碍物轨迹无交集:

\[ \sqrt{(x_v(k+i) - x_o(k+i))^2 + (y_v(k+i) - y_o(k+i))^2} \geq d_{safe}, \quad \forall i=1,...,N_p \]

3. 上层优化问题(路径规划)

目标:生成平滑、避障的参考轨迹\((x_{ref}, y_{ref}, \theta_{ref}, v_{ref})\),最小化路径长度、加速度变化、避障代价。

优化变量:\(U_p = [\delta(0), a(0), \delta(1), a(1), ..., \delta(N_p^p-1), a(N_p^p-1)]^T\)(\(N_p^p\)为规划时域)。

代价函数:

\[J_p = \sum_{i=0}^{N_p^p-1} \left( \|x(i)-x_{goal}\|_Q + \|a(i)\|_R \right) + \sum_{i=0}^{N_p^p} \| \text{障碍物距离}(i) \|_S \]

其中\(Q,R,S\)为权重矩阵,\(\text{障碍物距离}(i)\)为第\(i\)步车辆与最近障碍物的距离倒数(距离越小代价越大)。

约束:

  • 车辆动力学约束(自行车模型);
  • 避障约束(静态/动态障碍物);
  • 交通规则约束(限速\(v_{max}\)、最大加速度\(a_{max}\))。

三、下层跟踪层:动力学跟踪与实时控制

1. 车辆动力学模型(跟踪层精确模型)

下层采用二自由度动力学模型(Dynamic Bicycle Model),考虑轮胎侧偏特性:

\[\begin{aligned} m(\dot{v}_x - v_y \dot{\theta}) &= F_{xf} \cos\delta + F_{yr} - F_{drag} \\ m(\dot{v}_y + v_x \dot{\theta}) &= F_{xf} \sin\delta + F_{yf} + F_{yr} \\ I_z \ddot{\theta} &= L_f(F_{xf} \sin\delta + F_{yf}) - L_r F_{yr} \end{aligned} \]

其中:\(v_x,v_y\)为纵向/横向速度,\(\delta\)为前轮转角,\(F_{xf},F_{yf}\)为前轮纵向/侧向力,\(F_{yr}\)为后轮侧向力,\(L_f,L_r\)为质心到前后轴距离,\(I_z\)为横摆转动惯量,\(F_{drag}=0.5\rho C_d A v_x^2\)为空气阻力。

轮胎模型:采用魔术公式(Magic Formula)描述侧向力\(F_y = D \sin(C \arctan(B\alpha - E(B\alpha - \arctan(B\alpha))))\),其中\(\alpha\)为轮胎侧偏角。

2. 下层优化问题(轨迹跟踪)

目标:跟踪上层参考轨迹\((x_{ref}, y_{ref}, \theta_{ref}, v_{ref})\),最小化跟踪误差与控制量变化。

优化变量:\(U_c = [\delta(0), a(0), \delta(1), a(1), ..., \delta(N_p^c-1), a(N_p^c-1)]^T\)(\(N_p^c\)为跟踪时域,\(N_p^c < N_p^p\))。

代价函数:

\[J_c = \sum_{i=0}^{N_p^c-1} \left( \|x(i)-x_{ref}(i)\|_Q + \|u(i)-u_{ref}(i)\|_R + \| \Delta u(i) \|_S \right) \]

其中\(x=[x,y,\theta,v]^T\)为状态向量,\(u=[\delta,a]^T\)为控制输入,\(\Delta u(i)=u(i)-u(i-1)\)为控制增量。

约束:

  • 动力学约束(二自由度模型);
  • 执行器约束(转向角\(\delta \in [-30^\circ,30^\circ]\),加速度\(a \in [-5m/s^2,3m/s^2]\));
  • 实时扰动抑制(侧风干扰\(F_{wind}\)作为附加输入)。

3. 实时优化求解

下层跟踪需高频更新(50-100Hz),采用显式MPC或快速QP求解器(如OSQP、qpOASES):

  • 显式MPC:离线计算控制律的分段仿射函数,在线仅需查表与简单算术运算(计算时间<10ms)。
  • 在线QP求解:用CasADi建模+MEX编译,调用OSQP实时求解(计算时间<50ms)。

四、MATLAB/Simulink实现框架

1. 上层规划层代码(路径规划与避障)

function [ref_traj, success] = upper_layer_planning(vehicle_state, goal, obstacles, Ts_p)
    % 上层规划层:路径规划与避障
    % 输入:vehicle_state-当前车辆状态[x,y,θ,v],goal-目标点[x_g,y_g],obstacles-障碍物列表,Ts_p-规划采样时间
    % 输出:ref_traj-参考轨迹[N_p^p×(x,y,θ,v,a,δ)],success-规划成功标志
    
    % 参数设置
    N_p_p = 20;       % 规划时域(步)
    Q = diag([10,10,1,1]);  % 状态权重
    R = diag([0.1, 0.01]);  % 控制权重
    d_safe = 0.5;     % 安全距离
    
    % 初始化优化变量(控制序列)
    U_p = sdpvar(2, N_p_p);  % [δ,a]序列
    X_p = sdpvar(4, N_p_p+1); % 状态序列[x,y,θ,v]
    
    % 初始状态约束
    constraints = [X_p(:,1) == vehicle_state'];
    
    % 动力学约束(自行车模型)
    for i = 1:N_p_p
        constraints = [constraints, 
                       X_p(:,i+1) == bicycle_model(X_p(:,i), U_p(:,i), Ts_p)];
    end
    
    % 避障约束(静态障碍物)
    for i = 1:N_p_p+1
        for obs = obstacles
            % 障碍物为圆形:(x_o,y_o,r_o)
            dist = sqrt((X_p(1,i)-obs.x)^2 + (X_p(2,i)-obs.y)^2);
            constraints = [constraints, dist >= obs.r + vehicle_width/2 + d_safe];
        end
    end
    
    % 目标约束(终点接近目标点)
    constraints = [constraints, norm(X_p(1:2,end)-goal(1:2)) <= 1.0];
    
    % 代价函数
    cost = 0;
    for i = 1:N_p_p
        state_err = X_p(:,i) - [goal(1); goal(2); goal(3); goal(4)];
        cost = cost + state_err'*Q*state_err + U_p(:,i)'*R*U_p(:,i);
    end
    
    % 求解优化问题
    options = sdpsettings('solver', 'ipopt', 'verbose', 0);
    sol = optimize(constraints, cost, options);
    
    if sol.problem == 0
        ref_traj = [X_p(1,:); X_p(2,:); X_p(3,:); X_p(4,:); U_p(2,:); U_p(1,:)]';
        success = true;
    else
        ref_traj = [];
        success = false;
    end
end

function x_next = bicycle_model(x, u, Ts)
    % 自行车模型离散化
    x_pos = x(1); y_pos = x(2); theta = x(3); v = x(4);
    delta = u(1); a = u(2);
    L = 2.8;  % 轴距(m)
    
    x_next = [x_pos + v*Ts*cos(theta) - v*Ts*sin(theta)*tan(delta)/L;
              y_pos + v*Ts*sin(theta) + v*Ts*cos(theta)*tan(delta)/L;
              theta + v*Ts*tan(delta)/L;
              v + a*Ts];
end

2. 下层跟踪层代码(动力学跟踪)

function [u_opt, x_pred] = lower_layer_tracking(vehicle_state, ref_traj, Ts_c)
    % 下层跟踪层:动力学跟踪
    % 输入:vehicle_state-当前状态,ref_traj-上层参考轨迹,Ts_c-跟踪采样时间
    % 输出:u_opt-最优控制量[δ,a],x_pred-预测状态
    
    % 参数设置
    N_p_c = 10;       % 跟踪时域(步)
    Q = diag([100, 100, 10, 1]);  % 状态误差权重
    R = diag([0.5, 0.1]);  % 控制权重
    S = diag([0.1, 0.05]); % 控制增量权重
    
    % 提取参考轨迹(前N_p_c步)
    x_ref = ref_traj(1:4, 1:N_p_c)';  % 参考状态序列
    u_ref = ref_traj(5:6, 1:N_p_c)';  % 参考控制序列
    
    % 初始化优化变量
    U_c = sdpvar(2, N_p_c);  % 控制序列[δ,a]
    X_c = sdpvar(4, N_p_c+1); % 预测状态序列
    
    % 初始状态约束
    constraints = [X_c(:,1) == vehicle_state'];
    
    % 动力学约束(二自由度模型)
    for i = 1:N_p_c
        constraints = [constraints, 
                       X_c(:,i+1) == dynamic_model(X_c(:,i), U_c(:,i), Ts_c)];
    end
    
    % 代价函数
    cost = 0;
    for i = 1:N_p_c
        state_err = X_c(:,i) - x_ref(i,:)';
        cost = cost + state_err'*Q*state_err + (U_c(:,i)-u_ref(i,:)')'*R*(U_c(:,i)-u_ref(i,:)');
        if i > 1
            delta_u = U_c(:,i) - U_c(:,i-1);
            cost = cost + delta_u'*S*delta_u;
        end
    end
    
    % 执行器约束
    constraints = [constraints, -deg2rad(30) <= U_c(1,:) <= deg2rad(30)];  % 转向角±30°
    constraints = [constraints, -5 <= U_c(2,:) <= 3];  % 加速度-5~3m/s²
    
    % 求解优化问题(用OSQP加速)
    options = sdpsettings('solver', 'osqp', 'verbose', 0);
    sol = optimize(constraints, cost, options);
    
    if sol.problem == 0
        u_opt = value(U_c(:,1));  % 取第一步控制量
        x_pred = value(X_c);
    else
        u_opt = [0; 0];  % 失败时用零控制
        x_pred = vehicle_state;
    end
end

function x_next = dynamic_model(x, u, Ts)
    % 二自由度动力学模型(简化版,实际需考虑轮胎力)
    m = 1500; I_z = 2500; L_f = 1.2; L_r = 1.6;
    v_x = x(4); delta = u(1); a = u(2);
    
    % 简化侧向力模型(忽略侧偏角非线性)
    F_yf = -2*C_f*(x(3) - v_x*delta/L_f);  % 前轮侧向力
    F_yr = -2*C_r*(x(3) - 0);  % 后轮侧向力(C_f,C_r为侧偏刚度)
    
    x_next = [x(1) + (v_x*cos(x(3)) - x(2)*sin(x(3)))*Ts;
              x(2) + (v_x*sin(x(3)) + x(2)*cos(x(3)))*Ts;
              x(3) + (L_f*F_yf - L_r*F_yr)/I_z*Ts;
              v_x + a*Ts];
end

3. 主控制循环(分层协调)

function hierarchical_mpc_control()
    % 分层MPC主控制循环
    Ts_p = 0.1;   % 上层规划周期(10Hz)
    Ts_c = 0.02;  % 下层跟踪周期(50Hz)
    sim_time = 30; % 仿真时间(s)
    
    % 初始化车辆状态
    vehicle_state = [0; 0; 0; 5];  % [x,y,θ,v] (m,m,rad,m/s)
    goal = [100; 0; 0; 10];  % 目标点[x,y,θ,v]
    obstacles = [struct('x',50,'y',0,'r',2), struct('x',30,'y',-5,'r',1.5)];  % 圆形障碍物
    
    % 主循环
    t = 0;
    while t < sim_time
        % 上层规划(每Ts_p更新一次)
        if mod(t, Ts_p) < Ts_c
            [ref_traj, success] = upper_layer_planning(vehicle_state, goal, obstacles, Ts_p);
            if ~success
                error('上层规划失败!');
            end
        end
        
        % 下层跟踪(每Ts_c更新一次)
        [u_opt, x_pred] = lower_layer_tracking(vehicle_state, ref_traj, Ts_c);
        
        % 应用控制量,更新车辆状态(用动力学模型仿真)
        vehicle_state = dynamic_model(vehicle_state, u_opt, Ts_c);
        
        % 数据记录与可视化
        record_data(t, vehicle_state, ref_traj, u_opt);
        t = t + Ts_c;
    end
    
    % 绘制结果
    plot_results();
end

参考代码 分层MPC控制器的实时车辆最优控制和避障 www.youwenfan.com/contentcnt/160715.html

五、关键技术与优化

1. 实时性保障

  • 模型降阶:上层用运动学模型,下层用简化动力学模型(如线性化轮胎模型)。
  • 显式MPC:离线计算控制律,在线查表(适合跟踪层固定参考轨迹)。
  • 并行计算:上下层独立线程运行,利用多核CPU加速。

2. 避障鲁棒性

  • 动态障碍物预测:用LSTM或IMM(交互多模型)预测轨迹,提高不确定性下的避障成功率。
  • 安全裕度调整:根据车速动态调整安全距离(\(d_{safe} = k \cdot v + d_0\),\(k=0.3s\))。

3. 多目标优化

  • 权重自适应:根据场景调整代价函数权重(如紧急避障时增大避障权重\(S\))。
  • Pareto前沿:用多目标优化算法(如NSGA-II)生成非支配解集,供决策层选择。

六、仿真与实验结果

1. 性能指标

  • 跟踪误差:位置误差<0.2m,航向角误差<2°,速度误差<0.5m/s。
  • 避障成功率:静态障碍物100%,动态障碍物(行人、车辆)>95%(预测时域2s内)。
  • 计算时间:上层规划<50ms,下层跟踪<20ms(Intel i7-10750H)。

2. 典型场景

  • 场景1:城市道路避障:车辆以20m/s行驶,前方50m处有静态障碍物,分层MPC提前3s规划绕行轨迹,跟踪层平稳执行转向与加速。
  • 场景2:动态行人横穿:行人以1.5m/s横穿道路,上层预测行人轨迹,下层在0.5s内完成制动与避让,无碰撞。

七、总结

分层MPC控制器通过上下层解耦实现车辆实时最优控制与避障:

  • 上层负责宏观路径规划与避障决策,生成安全、平滑的参考轨迹;
  • 下层基于精确动力学模型跟踪参考轨迹,处理实时扰动与执行器约束;
  • 关键技术包括多时间尺度优化、避障约束转化、快速求解器应用,确保实时性(总计算时间<100ms)与鲁棒性。
posted @ 2026-04-13 16:46  kang_ms  阅读(110)  评论(0)    收藏  举报