💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
航天器交会的分布式MPC模型预测控制研究
一、分布式MPC与航天器交会控制概述
-
分布式MPC的基本原理
分布式模型预测控制(DMPC)通过分解多智能体系统的全局优化问题为局部子问题,每个子系统独立求解优化目标,并通过信息交换实现协同控制。其核心流程包括:- 预测模型:基于动力学方程(如离散时间系统 x(k+1)=f(x(k),u(k))构建局部预测模型。
- 滚动优化:每个子系统在有限时域内优化控制序列,仅执行首步控制输入。
- 协同机制:通过通信网络交换状态或控制信息,协调全局性能(如合作式DMPC需共享耦合约束信息)。
-
航天器交会的控制需求
交会对接需实现六自由度协同控制,包括:- 相对位置跟踪:精确调整追踪航天器与目标航天器的轨道相位差。
- 姿态同步:消除姿态动力学耦合对位置控制的干扰(如柔性附件振动抑制)。
- 约束处理:燃料消耗、推进器死区(最小点火时间)、碰撞避免等混合整数约束。
二、分布式MPC在航天器交会中的应用现状
- 典型架构与算法
架构类型 | 特点 | 适用场景 |
---|---|---|
协作式DMPC | 各子系统共享耦合信息,共同优化全局成本函数 | 高精度交会(如天宫对接任务) |
分层式DMPC | 上层协调全局目标,下层执行局部优化 | 多航天器编队飞行 |
事件驱动DMPC | 仅在状态偏差超过阈值时触发优化,减少通信与计算负荷 | 资源受限的深空任务 |
- 关键技术进展
- 解耦策略:针对状态/输入耦合问题,采用增广拉格朗日法(ALM)或ADMM算法分解优化问题。
- 稳定性保证:通过设计终端集(如Lyapunov函数)与耦合约束松弛技术,确保闭环稳定性。
- 在线优化加速:利用并行计算(如Matlab的IPOPT求解器)处理推进器死区等混合整数约束。
三、技术挑战与解决方案
- 耦合约束的动态协调
- 挑战:轨道与姿态动力学耦合导致优化问题非凸。
- 方案:引入分布式滑模控制或自适应反馈补偿,如文献[9]设计的姿态-位置耦合控制器。
- 通信延迟与带宽限制
- 挑战:深空任务中通信延迟可能破坏DMPC的同步性。
- 方案:采用鲁棒预测补偿或异步通信协议(如TTP/C协议支持容错与热插拔)。
- 计算复杂度与实时性
- 挑战:多航天器协同需高频率优化(如13小时快速交会任务)。
- 方案:
- 离线显式MPC:为非旋转目标平台生成分段线性反馈律。
- 硬件加速:FPGA实现MPC控制器,提升计算吞吐量(如天舟一号任务)。
四、典型研究的技术路线与创新点
以天宫空间站交会对接控制为例:
- 技术路线
- 动力学建模:采用Hill方程描述相对运动,结合PWM算法抑制太阳能翼振动。
- 协同优化:设计“n圈+6脉冲”全相位追赶策略,实现360°全向对接。
- 仿真验证:通过地面3-DOF模拟系统(含IMU与机械臂)验证控制精度(姿态误差<2.5°)。
2. 创新点
- 耦合控制反馈:将姿态控制效果反馈至位置控制环,消除横向耦合误差。
- 自主切换机制:从地面引导过渡到自主控制的平滑切换策略,提升可靠性。
- 快速交会算法:13小时完成23吨级航天器对接,创世界纪录。
五、未来研究方向
- 智能化扩展:结合深度学习预测耦合动力学(如Transformer模型用于轨迹优化)。
- 异构系统协同:研究空间机器人(如机械臂)与航天器的联合DMPC控制。
- 深空任务适应:开发低通信依赖的自主式DMPC,支持月球/火星基地建设。
六、总结
分布式MPC通过局部优化-全局协调机制,为航天器交会提供了兼顾精度与实时性的解决方案。然而,多约束耦合、通信延迟等问题仍需结合算法创新与硬件加速突破。未来,随着自主控制与AI技术的融合,DMPC有望在深空探测与在轨服务中发挥更重要作用。
📚2 运行结果
可视化:
%% FUNCTION TO PLOT RESULTS
function plot_result(DMPC,DecMPC,pp,an_or_num,tmax)
% initialize figure
figure('Position',[540,100,700,800]);
% semi-major axis [km]
subplot(6,1,1);
hold on;
plot(DMPC.t,DMPC.a1,'LineWidth',1.5,'Color',pp.matlab_blue)
plot(DecMPC.t,DecMPC.a1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.a2,'LineWidth',1.5,'Color',pp.matlab_red)
plot(DecMPC.t,DecMPC.a2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$a\;[\mathrm{km}]$','Interpreter','latex','FontSize',18);
title({"\textbf{Orbital Element Trajectories ("+an_or_num+...
" Solution)}",''},'Interpreter','latex','FontSize',18);
legend('spacecraft 1 (DMPC)','spacecraft 1 (DecMPC)',...
'spacecraft 2 (DMPC)','spacecraft 2 (DecMPC)');
% x-component of eccentricity vector [-]
subplot(6,1,2);
hold on;
plot(DMPC.t,DMPC.ex1,'LineWidth',1.5,'Color',pp.matlab_blue)
plot(DecMPC.t,DecMPC.ex1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.ex2,'LineWidth',1.5,'Color',pp.matlab_red)
plot(DecMPC.t,DecMPC.ex2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$e_{x}$','Interpreter','latex','FontSize',18);
% y-component of eccentricity vector [-]
subplot(6,1,3);
hold on;
plot(DMPC.t,DMPC.ey1,'LineWidth',1.5,'Color',pp.matlab_blue)
plot(DecMPC.t,DecMPC.ey1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.ey2,'LineWidth',1.5,'Color',pp.matlab_red)
plot(DecMPC.t,DecMPC.ey2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$e_{y}$','Interpreter','latex','FontSize',18);
% inclination [deg]
subplot(6,1,4);
hold on;
plot(DMPC.t,DMPC.i1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.i1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.i2,'LineWidth',1.5,'Color',pp.matlab_red);
plot(DecMPC.t,DecMPC.i2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$i\;[{}^{\circ}]$','Interpreter','latex','FontSize',18);
% RAAN [deg]
subplot(6,1,5);
hold on;
plot(DMPC.t,DMPC.Om1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.Om1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.Om2,'LineWidth',1.5,'Color',pp.matlab_red);
plot(DecMPC.t,DecMPC.Om2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$\Omega\;[{}^{\circ}]$','Interpreter','latex','FontSize',18);
% argument of latitude [deg]
subplot(6,1,6);
hold on;
plot(DMPC.t,DMPC.u2-DMPC.u1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.u2-DecMPC.u1,'LineWidth',1.5,'Color',...
pp.matlab_light_blue);
hold off;
grid on;
xlim([0,tmax]);
xlabel('Time $[\mathrm{h}]$','Interpreter','latex','FontSize',18);
ylabel('$u_{2}-u_{1}\;[{}^{\circ}]$','Interpreter','latex',...
'FontSize',18);
legend('DMPC','DecMPC');
% -------------------------------
% Cumulative delta-V usage [m/s].
% -------------------------------
figure('Position',[540,100,700,300]);
hold on;
plot(DMPC.t,DMPC.dV1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.dV1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.dV2,'LineWidth',1.5,'Color',pp.matlab_red);
plot(DecMPC.t,DecMPC.dV2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$\Delta V$ (cumulative) $[\mathrm{m/s}]$','Interpreter',...
'latex','FontSize',18);
title("\textbf{Cumulative} \boldmath$\Delta V$ \textbf{Usage ("+...
an_or_num+" Solution)}",'Interpreter','latex','FontSize',18);
legend('spacecraft 1 (DMPC)','spacecraft 1 (DecMPC)',...
'spacecraft 2 (DMPC)','spacecraft 2 (DecMPC)');
% RTN Position Plot
figure;
hold on;
plot(DMPC.t,DMPC.RTN_2wrt1(1,:),'LineWidth',1.5,'Color',...
pp.matlab_blue);
plot(DecMPC.t,DecMPC.RTN_2wrt1(1,:),'LineWidth',1.5,'Color',...
pp.matlab_light_blue);
plot(DMPC.t,DMPC.RTN_2wrt1(2,:),'LineWidth',1.5,'Color',...
pp.matlab_red);
plot(DecMPC.t,DecMPC.RTN_2wrt1(2,:),'LineWidth',1.5,'Color',...
pp.matlab_light_red);
plot(DMPC.t,DMPC.RTN_2wrt1(3,:),'LineWidth',1.5,'Color',...
pp.matlab_yellow);
plot(DecMPC.t,DecMPC.RTN_2wrt1(3,:),'LineWidth',1.5,'Color',...
pp.matlab_light_yellow);
hold off;
grid on;
xlim([0,tmax]);
xlabel('Time $[\mathrm{h}]$','Interpreter','latex','FontSize',18);
ylabel('Relative Position $[\mathrm{km}]$','Interpreter','latex',...
'FontSize',18);
title("\textbf{Relative RTN Position of Spacecraft 2 w.r.t. Space"+...
"craft 1}",'Interpreter','latex','FontSize',18);
legend('R (DMPC)','R(DecMPC)','T (DMPC)','T (DecMPC)',...
'N(DMPC)','N (DecMPC)');
end
%% FUNCTION TO PLOT RESULTS
function plot_result(DMPC,DecMPC,pp,an_or_num,tmax)
% initialize figure
figure('Position',[540,100,700,800]);
% semi-major axis [km]
subplot(6,1,1);
hold on;
plot(DMPC.t,DMPC.a1,'LineWidth',1.5,'Color',pp.matlab_blue)
plot(DecMPC.t,DecMPC.a1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.a2,'LineWidth',1.5,'Color',pp.matlab_red)
plot(DecMPC.t,DecMPC.a2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$a\;[\mathrm{km}]$','Interpreter','latex','FontSize',18);
title({"\textbf{Orbital Element Trajectories ("+an_or_num+...
" Solution)}",''},'Interpreter','latex','FontSize',18);
legend('spacecraft 1 (DMPC)','spacecraft 1 (DecMPC)',...
'spacecraft 2 (DMPC)','spacecraft 2 (DecMPC)');
% x-component of eccentricity vector [-]
subplot(6,1,2);
hold on;
plot(DMPC.t,DMPC.ex1,'LineWidth',1.5,'Color',pp.matlab_blue)
plot(DecMPC.t,DecMPC.ex1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.ex2,'LineWidth',1.5,'Color',pp.matlab_red)
plot(DecMPC.t,DecMPC.ex2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$e_{x}$','Interpreter','latex','FontSize',18);
% y-component of eccentricity vector [-]
subplot(6,1,3);
hold on;
plot(DMPC.t,DMPC.ey1,'LineWidth',1.5,'Color',pp.matlab_blue)
plot(DecMPC.t,DecMPC.ey1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.ey2,'LineWidth',1.5,'Color',pp.matlab_red)
plot(DecMPC.t,DecMPC.ey2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$e_{y}$','Interpreter','latex','FontSize',18);
% inclination [deg]
subplot(6,1,4);
hold on;
plot(DMPC.t,DMPC.i1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.i1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.i2,'LineWidth',1.5,'Color',pp.matlab_red);
plot(DecMPC.t,DecMPC.i2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$i\;[{}^{\circ}]$','Interpreter','latex','FontSize',18);
% RAAN [deg]
subplot(6,1,5);
hold on;
plot(DMPC.t,DMPC.Om1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.Om1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.Om2,'LineWidth',1.5,'Color',pp.matlab_red);
plot(DecMPC.t,DecMPC.Om2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$\Omega\;[{}^{\circ}]$','Interpreter','latex','FontSize',18);
% argument of latitude [deg]
subplot(6,1,6);
hold on;
plot(DMPC.t,DMPC.u2-DMPC.u1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.u2-DecMPC.u1,'LineWidth',1.5,'Color',...
pp.matlab_light_blue);
hold off;
grid on;
xlim([0,tmax]);
xlabel('Time $[\mathrm{h}]$','Interpreter','latex','FontSize',18);
ylabel('$u_{2}-u_{1}\;[{}^{\circ}]$','Interpreter','latex',...
'FontSize',18);
legend('DMPC','DecMPC');
% -------------------------------
% Cumulative delta-V usage [m/s].
% -------------------------------
figure('Position',[540,100,700,300]);
hold on;
plot(DMPC.t,DMPC.dV1,'LineWidth',1.5,'Color',pp.matlab_blue);
plot(DecMPC.t,DecMPC.dV1,'LineWidth',1.5,'Color',pp.matlab_light_blue);
plot(DMPC.t,DMPC.dV2,'LineWidth',1.5,'Color',pp.matlab_red);
plot(DecMPC.t,DecMPC.dV2,'LineWidth',1.5,'Color',pp.matlab_light_red);
hold off;
grid on;
xlim([0,tmax]);
ylabel('$\Delta V$ (cumulative) $[\mathrm{m/s}]$','Interpreter',...
'latex','FontSize',18);
title("\textbf{Cumulative} \boldmath$\Delta V$ \textbf{Usage ("+...
an_or_num+" Solution)}",'Interpreter','latex','FontSize',18);
legend('spacecraft 1 (DMPC)','spacecraft 1 (DecMPC)',...
'spacecraft 2 (DMPC)','spacecraft 2 (DecMPC)');
% RTN Position Plot
figure;
hold on;
plot(DMPC.t,DMPC.RTN_2wrt1(1,:),'LineWidth',1.5,'Color',...
pp.matlab_blue);
plot(DecMPC.t,DecMPC.RTN_2wrt1(1,:),'LineWidth',1.5,'Color',...
pp.matlab_light_blue);
plot(DMPC.t,DMPC.RTN_2wrt1(2,:),'LineWidth',1.5,'Color',...
pp.matlab_red);
plot(DecMPC.t,DecMPC.RTN_2wrt1(2,:),'LineWidth',1.5,'Color',...
pp.matlab_light_red);
plot(DMPC.t,DMPC.RTN_2wrt1(3,:),'LineWidth',1.5,'Color',...
pp.matlab_yellow);
plot(DecMPC.t,DecMPC.RTN_2wrt1(3,:),'LineWidth',1.5,'Color',...
pp.matlab_light_yellow);
hold off;
grid on;
xlim([0,tmax]);
xlabel('Time $[\mathrm{h}]$','Interpreter','latex','FontSize',18);
ylabel('Relative Position $[\mathrm{km}]$','Interpreter','latex',...
'FontSize',18);
title("\textbf{Relative RTN Position of Spacecraft 2 w.r.t. Space"+...
"craft 1}",'Interpreter','latex','FontSize',18);
legend('R (DMPC)','R(DecMPC)','T (DMPC)','T (DecMPC)',...
'N(DMPC)','N (DecMPC)');
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]谭天乐.航天器交会对接的模型预测与反演制导控制[J].控制与决策, 2019(4):6.DOI:10.13195/j.kzyjc.2017.1319.
[2]党庆庆.基于模型预测控制的航天器精准着陆制导与控制研究[D].中山大学[2023-10-25].