一、引言与背景
移动机器人路径跟踪是自主导航的核心技术,其目标是通过控制机器人的线速度和角速度,使其精确跟踪预设的参考路径。模型预测控制(MPC)因其显式处理多约束的能力,成为路径跟踪的主流方法。
1. MPC在路径跟踪中的优势
- 约束处理:可同时考虑速度、加速度、转向角等物理限制;
- 预测优化:基于模型预测未来状态,滚动优化控制序列;
- 多目标协调:平衡跟踪精度、控制平滑性、能耗等指标。
2. 技术挑战
- 实时性:非线性MPC(NMPC)计算量大,难以实时运行;
- 模型精度:线性MPC(LMPC)简化模型可能降低跟踪精度;
- 不确定性:环境干扰、传感器噪声、模型误差影响鲁棒性。
二、MPC基本原理
1. 核心思想
MPC在每个控制周期执行三步:
- 预测:基于当前状态和系统模型,预测未来N步的输出;
- 优化:求解使目标函数最小的控制序列(通常为二次规划);
- 执行:应用优化序列的第一个控制量,下一周期重复。
2. 数学表述
minuk∣k,...,uk+N−1∣k∑i=0N−1(∥xk+i∣k−xref∥Q2+∥uk+i∣k∥R2)+∥xk+N∣k−xref∥P2\min_{u_{k|k},...,u_{k+N-1|k}} \sum_{i=0}^{N-1} \left( \|x_{k+i|k} - x_{ref}\|Q^2 + \|u{k+i|k}\|R^2 \right) + \|x{k+N|k} - x_{ref}\|P^2uk∣k,...,uk+N−1∣kmini=0∑N−1(∥xk+i∣k−xref∥Q2+∥uk+i∣k∥R2)+∥xk+N∣k−xref∥P2
s.t. xk+i+1∣k=f(xk+i∣k,uk+i∣k)\text{s.t. } x{k+i+1|k} = f(x_{k+i|k}, u_{k+i|k})s.t. xk+i+1∣k=f(xk+i∣k,uk+i∣k)
umin≤uk+i∣k≤umax,xmin≤xk+i∣k≤xmaxu_{min} \leq u_{k+i|k} \leq u_{max}, \quad x_{min} \leq x_{k+i|k} \leq x_{max}umin≤uk+i∣k≤umax,xmin≤xk+i∣k≤xmax
其中:xxx为状态,uuu为控制输入,Q,R,PQ,R,PQ,R,P为权重矩阵,NNN为预测时域。
三、移动机器人建模
1. 常见机器人类型
| 类型 | 驱动方式 | 自由度 | 典型应用 |
|---|---|---|---|
| 差速驱动 | 两独立驱动轮 | 3 (x,y,θ) | 仓储机器人、清洁机器人 |
| 全向移动 | 3+全向轮 | 3 (x,y,θ) | 狭窄空间作业 |
| 类车机器人 | 前轮转向+后轮驱动 | 3 (x,y,θ) | 无人配送车 |
2. 运动学模型
差速驱动机器人
状态:[x,y,θ,v]T[x, y, θ, v]^T[x,y,θ,v]T,控制:[ωl,ωr]T[ω_l, ω_r]^T[ωl,ωr]T(左右轮转速)
{x˙=vcosθy˙=vsinθθ˙=ωr−ωlLv˙=ωr+ωl2\begin{cases} \dot{x} = v\cosθ \\ \dot{y} = v\sinθ \\ \dot{θ} = \frac{ω_r - ω_l}{L} \\ \dot{v} = \frac{ω_r + ω_l}{2} \end{cases}⎩ ⎨ ⎧x˙=vcosθy˙=vsinθθ˙=Lωr−ωlv˙=2ωr+ωl
其中LLL为轮距。
类车机器人(自行车模型)
状态:[x,y,θ,v]T[x, y, θ, v]^T[x,y,θ,v]T,控制:[a,δ]T[a, δ]^T[a,δ]T(加速度、前轮转角)
{x˙=vcos(θ+β)y˙=vsin(θ+β)θ˙=vcosβLf+Lrtanδv˙=a\begin{cases} \dot{x} = v\cos(θ+β) \\ \dot{y} = v\sin(θ+β) \\ \dot{θ} = \frac{v\cosβ}{L_f+L_r}\tanδ \\ \dot{v} = a \end{cases}⎩ ⎨ ⎧x˙=vcos(θ+β)y˙=vsin(θ+β)θ˙=Lf+Lrvcosβtanδv˙=a
其中β=arctan(LrLf+Lrtanδ)β=\arctan\left(\frac{L_r}{L_f+L_r}\tanδ\right)β=arctan(Lf+LrLrtanδ),Lf,LrL_f,L_rLf,Lr为前后轴距。
3. 模型离散化
连续模型 \\dot{x}=f(x,u) 离散化(采样时间离散化(采样时间离散化(采样时间T_s):
xk+1=xk+Tsf(xk,uk)x_{k+1} = x_k + T_s f(x_k, u_k)xk+1=xk+Tsf(xk,uk)
或采用更精确的龙格-库塔法。
四、MPC控制器设计
1. 设计流程
matlab
% MPC设计伪代码
function mpc_controller = design_mpc_for_mobile_robot()
% 1. 定义系统模型
robot_model = define_kinematic_model(); % 运动学模型
% 2. 线性化(LMPC)或保持非线性(NMPC)
if use_linear_mpc
[A, B, C, D] = linearize_model(robot_model, operating_point);
mpc_model = ss(A, B, C, D, Ts);
else
mpc_model = robot_model; % 非线性模型
end
% 3. 配置MPC参数
mpc_controller = mpc(mpc_model, Ts, prediction_horizon, control_horizon);
% 4. 设置权重
mpc_controller.Weights.OutputVariables = [Q_x, Q_y, Q_theta]; % 状态权重
mpc_controller.Weights.ManipulatedVariables = [R_v, R_w]; % 控制权重
mpc_controller.Weights.ManipulatedVariablesRate = [R_dv, R_dw];% 控制变化率权重
% 5. 设置约束
mpc_controller.ManipulatedVariables.Min = [v_min, w_min];
mpc_controller.ManipulatedVariables.Max = [v_max, w_max];
mpc_controller.ManipulatedVariables.RateMin = [dv_min, dw_min];
mpc_controller.ManipulatedVariables.RateMax = [dv_max, dw_max];
% 6. 配置参考信号
mpc_controller.Model.Nominal = struct('U', u_nominal, 'Y', y_nominal);
end
2. 目标函数设计
- 跟踪误差 :最小化位置(x,y)(x,y)(x,y)和航向θθθ的偏差;
- 控制代价:惩罚过大控制量,保证平滑性;
- 终端代价:确保预测时域末端接近参考,提升稳定性。
3. 约束设置
- 输入约束:电机扭矩、转向角范围;
- 状态约束:避障区域、速度限制;
- 输出约束:跟踪误差允许范围。
参考代码 移动机器人路径跟踪的设计与仿真模型预测控制 www.youwenfan.com/contentcst/160668.html
五、仿真实现
1. MATLAB/Simulink仿真框架
matlab
% 主仿真脚本
clear; clc; close all;
% 参数设置
Ts = 0.1; % 采样时间
T_sim = 30; % 仿真时长
N = 10; % 预测时域
% 参考轨迹生成(圆形轨迹)
t = 0:Ts:T_sim;
R = 5; % 半径
xref = R*cos(0.2*t);
yref = R*sin(0.2*t);
thetaref = atan2(diff(yref), diff(xref));
thetaref = [thetaref, thetaref(end)];
% 机器人初始状态
x0 = [xref(1)+0.5, yref(1)+0.5, thetaref(1), 0]'; % 初始偏移
% MPC控制器
mpc_controller = design_mpc_for_mobile_robot();
% 仿真循环
x_history = zeros(4, length(t));
u_history = zeros(2, length(t));
x = x0;
for k = 1:length(t)
% 当前参考
ref = [xref(k); yref(k); thetaref(k)];
% MPC求解
u = mpc_controller(x, ref);
% 状态更新(运动学模型)
x = kinematic_update(x, u, Ts);
% 记录
x_history(:, k) = x;
u_history(:, k) = u;
end
% 可视化
plot_trajectory(xref, yref, x_history(1,:), x_history(2,:));
plot_errors(xref, yref, thetaref, x_history);
2. CarSim/Simulink联合仿真
对于类车机器人,常采用CarSim(车辆动力学模型)与Simulink(MPC控制器)联合仿真:
- CarSim配置:设置车辆参数、道路环境;
- Simulink接口:通过S-Function或CarSim Block交换数据;
- 联合运行:Simulink调用CarSim求解器,实现高保真仿真。
3. 仿真结果分析指标
| 指标 | 计算公式 | 目标值 |
|---|---|---|
| 最大位置误差 | max∣(x,y)−(xref,yref)∣\max|(x,y)-(x_{ref},y_{ref})|max∣(x,y)−(xref,yref)∣ | < 0.1m |
| 均方根误差 | 1N∑ei2\sqrt{\frac{1}{N}\sum e_i^2}N1∑ei2 | < 0.05m |
| 控制量平滑度 | ∑∣uk−uk−1∣\sum |u_{k}-u_{k-1}|∑∣uk−uk−1∣ | 最小化 |
| 实时性 | 单步求解时间 | < 10ms (100Hz) |
六、MPC变体与改进
1. 线性MPC(LMPC)
- 原理:在工作点线性化非线性模型;
- 优点:计算快,适合嵌入式部署;
- 缺点:大范围运动时精度下降。
2. 非线性MPC(NMPC)
- 原理:直接使用非线性模型优化;
- 优点:全局精度高;
- 缺点:计算复杂,实时性差。
3. 积分MPC(IMPC)
- 改进:在目标函数中加入误差积分项;
- 效果:消除稳态误差,提升鲁棒性;
- 性能:与传统MPC相比,稳态误差减少60%以上。
4. 前馈MPC(FMPC)
- 改进:结合逆运动学前馈补偿;
- 效果:在曲率路径跟踪中,位移误差从0.2493m降至0.0290m(降幅88.37%);
- 实时性:单步求解<5ms,比NMPC快80%。
5. 自适应MPC
- 改进:在线估计模型参数(如摩擦力);
- 效果:提升模型不确定下的鲁棒性。
6. 终端约束MPC
- 改进:在预测时域末端施加约束;
- 效果:保证闭环稳定性,提高跟踪精度。
七、案例研究
1. 差速机器人圆形轨迹跟踪
- 场景:半径5m圆形,速度0.5m/s;
- 控制器:LMPC,预测时域N=10;
- 结果:最大误差0.08m,平均误差0.03m。
2. 全向移动机器人双移线跟踪
- 场景:标准双移线测试轨迹;
- 控制器:自适应MPC+扩张状态观测器;
- 结果:位置误差<0.05m,航向误差<0.03rad。
3. 类车机器人户外导航
- 系统:感知建图-A*规划-MPC跟踪;
- 环境:动态户外场景;
- 性能:相比传统PID,跟踪精度提升40%,避障成功率95%。
4. 机场ULD分拣机器人
- 要求:载重大(>500kg)、精度高(误差<0.02m);
- 方案:四差速全向移动机器人+积分MPC;
- 成效:分拣效率提升3倍,人力成本降低70%。
八、实践建议
1. 模型选择
- 简单场景:运动学模型+LMPC;
- 复杂动态:动力学模型+NMPC或自适应MPC;
- 实时要求高:LMPC或FMPC。
2. 参数整定
- 预测时域 :N=TresponseTsN = \frac{T_{response}}{T_s}N=TsTresponse,通常N=10−20N=10-20N=10−20;
- 权重调整 :先调QQQ(跟踪精度),再调RRR(控制平滑);
- 采样时间 :Ts=0.05−0.2sT_s=0.05-0.2sTs=0.05−0.2s,平衡精度与计算量。
3. 实时性优化
- 代码生成:MATLAB Coder生成C代码;
- 求解器选择:qpOASES、OSQP等高效QP求解器;
- 硬件加速:GPU并行计算或FPGA实现。
4. 鲁棒性增强
- 扰动观测器:估计并补偿摩擦力、风阻等;
- 软约束:允许约束轻微违反,避免无解;
- 多速率控制:内环高频(电机控制),外环低频(路径跟踪)。