在移动机器人控制领域,目标点镇定(Point Stabilization)是一个基础而关键的问题。简单来说,就是让机器人从任意初始位置出发,最终准确到达并稳定在指定的目标位置。这听起来似乎很简单,但在实际应用中却面临着诸多挑战,特别是在存在传感器噪声和执行器噪声的双重干扰下。
想象一下,你蒙着眼睛(传感器噪声)并且手部有轻微颤抖(执行器噪声)的情况下,试图将一枚硬币准确地放入储蓄罐中。这就是移动机器人在实际环境中面临的情况。传统的控制方法往往只考虑其中一种噪声,或者将状态估计和控制设计分开处理,这就像只用一只手来解决两个问题,效果自然有限。
本文提出的MPC-MHE集成框架,就像是给机器人配备了一个"智能助手":MHE负责实时"猜测"机器人的真实状态(相当于帮你判断硬币当前的位置),MPC则根据这个猜测规划最佳动作路径(相当于指导你的手如何移动)。最重要的是,这两个过程是协同工作的,形成了一个完整的闭环系统。
模型预测控制(MPC)和滚动时域估计(MHE)本质上都是基于滚动时域优化的方法,这是它们能够天然融合的关键。MPC着眼于未来,通过优化未来一段时间内的控制序列来实现控制目标;MHE则回顾过去,利用历史观测数据来估计当前状态。
这种"瞻前顾后"的特性使得MPC-MHE集成框架特别适合处理噪声环境下的控制问题。具体工作流程如下:
采用典型的差速驱动机器人模型:
code复制ẋ = v·cosθ
ẏ = v·sinθ
θ̇ = ω
其中(x,y)表示位置,θ为朝向角,v和ω分别为线速度和角速度。在离散时间下,系统方程可表示为:
code复制xk+1 = f(xk, uk + wk)
这里wk就是执行器噪声,代表实际执行的控制与指令之间的偏差。
假设使用测距-测角传感器,观测方程为:
code复制zk = h(xk) + vk
其中vk是测量噪声,h(·)将状态转换为距离和角度观测。
MHE在估计时域Ne内求解:
code复制min Σ||xk-j - f(xk-j-1,uk-j-1)||²_Q + Σ||zk-j - h(xk-j)||²_R
其中Q和R分别是过程噪声和测量噪声的协方差矩阵的逆,起到加权作用。
MPC在预测时域N内求解:
code复制min Σ||xk+j - xs||²_Wx + Σ||uk+j||²_Wu
s.t. xk+j+1 = f(xk+j,uk+j)
uk+j ∈ U
其中Wx和Wu是权重矩阵,U是控制量约束集合。
多重打靶法(Multiple Shooting)将连续时间问题离散化为多个子区间,在每个子区间上独立积分系统动态,然后通过匹配相邻区间的状态值来保证连续性。这种方法相比单一打靶法(Single Shooting)具有更好的数值稳定性和收敛性。
具体实现时,我们将预测时域N分成M段,每段长度为ΔT=N/M。在每段内:
CasADi是一个用于非线性优化的符号计算框架,特别适合解决MPC这类参数化非线性规划问题。我们的实现主要涉及以下组件:
matlab复制x = casadi.SX.sym('x',nx); % 状态变量
u = casadi.SX.sym('u',nu); % 控制变量
p = casadi.SX.sym('p',np); % 参数变量
matlab复制f = casadi.Function('f',{x,u},{x_next});
matlab复制w = {x0,u0,x1,u1,...,xN}; % 决策变量
g = {x1-f(x0,u0),...,xN-f(xN-1,uN-1)}; % 约束
J = sum((xi-xs)'*Wx*(xi-xs) + ui'*Wu*ui); % 目标函数
nlp = struct('x',vertcat(w{:}), 'f',J, 'g',vertcat(g{:}));
matlab复制solver = casadi.nlpsol('solver','ipopt',nlp);
result = solver('x0',w0,'lbg',0,'ubg',0);
为保证算法能在实际系统中实时运行,我们采取了以下优化措施:
我们在Matlab环境下搭建了仿真平台,主要参数配置如下:
| 参数 | 值 | 说明 |
|---|---|---|
| 预测时域N | 10 | MPC向前预测的步数 |
| 控制周期Δt | 0.1s | 两次控制之间的时间间隔 |
| 状态权重Wx | diag([10,10,5]) | x,y,θ的误差权重 |
| 控制权重Wu | diag([1,1]) | v,ω的权重 |
| 过程噪声Q | diag([0.01,0.01,0.005]) | 执行噪声协方差 |
| 测量噪声R | diag([0.1,0.05]) | 传感器噪声协方差 |
初始状态x0=[2;2;π/2],目标状态xs=[0;0;0],模拟机器人从(2,2)位置朝向y轴正方向出发,最终需要到达原点并朝向x轴正方向。
我们比较了三种控制策略:
性能指标对比如下:
| 方法 | 稳态误差(m) | 收敛时间(s) | 控制能量 |
|---|---|---|---|
| 纯MPC | 0.12±0.05 | 8.2 | 15.7 |
| MPC+KF | 0.08±0.03 | 7.5 | 14.2 |
| MPC+MHE | 0.05±0.02 | 6.8 | 13.5 |
从结果可以看出,MPC-MHE集成方法在各项指标上均表现最优,特别是在稳态误差方面比传统方法提高了约40%,验证了联合优化的优势。
为验证系统鲁棒性,我们在不同噪声水平下进行了测试:
| 噪声水平 | 稳态误差(m) | 超调量(%) |
|---|---|---|
| 低(Q=0.1Q0, R=0.1R0) | 0.02 | 5.2 |
| 中(Q=Q0, R=R0) | 0.05 | 8.7 |
| 高(Q=10Q0, R=10R0) | 0.15 | 15.3 |
即使在10倍标称噪声的情况下,系统仍能保持稳定,只是性能有所下降,表现出良好的鲁棒性。
经过大量实验,我们总结了以下参数调节经验:
预测时域N:通常选择使N·Δt覆盖系统主要动态过程。对于我们的机器人模型,1-2秒的预测范围(即N=10-20)效果较好。
权重矩阵:
噪声协方差:
在实际实现中,我们遇到了以下典型问题及解决方案:
求解器不收敛:
高频控制抖动:
实时性不足:
针对嵌入式平台部署,我们还实现了以下优化:
MPC-MHE框架不仅适用于移动机器人导航,还可扩展到以下领域:
在实际部署中,有几个实用建议: