1. 简介
在上一篇文章中,介绍了GPOPS-II的基本用法和入门示例
这篇文章将更进一步,介绍GPOPS-II的进阶使用,侧重多阶段轨迹优化、初始轨迹与初始网格设置的工程经验
2. 多阶段轨迹优化
在航天任务、再入任务、以及飞行器的分级发射过程中,最优控制问题往往天然具有多阶段特性
此处以Launch Vehicle Ascent Problem(火箭发射问题)为例

该问题包含四个阶段:
- 第一阶段:助推器工作
- 第二阶段:助推器分离
- 第三阶段:一级火箭分离
- 第四阶段:二级入轨
目标函数: J = − m ( t f ) J=-m\left( t_f \right) J=−m(tf)
运动学方程: r ˙ ( t ) = v ( t ) v ˙ ( t ) = T u + D m + g m ˙ ( t ) = − T g 0 I s p \begin{array}{l} \dot{\boldsymbol{r}}\left( t \right) =\boldsymbol{v}\left( t \right)\\ \dot{\boldsymbol{v}}\left( t \right) =\frac{T\boldsymbol{u}+\boldsymbol{D}}{m}+\boldsymbol{g}\\ \dot{m}\left( t \right) =-\frac{T}{g_0I_{sp}}\\ \end{array} r˙(t)=v(t)v˙(t)=mTu+D+gm˙(t)=−g0IspT
路径约束: ∥ u ( t ) ∥ 2 = 1 \left\| \boldsymbol{u}\left( t \right) \right\| _2=1 ∥u(t)∥2=1
阶段连接约束: r ( t f ( i ) ) = r ( t 0 ( i + 1 ) ) v ( t f ( i ) ) = v ( t 0 ( i + 1 ) ) m ( t f ( i ) ) = m ( t 0 ( i + 1 ) ) , i = 1 , 2 , 3 \begin{array}{l} \boldsymbol{r}\left( t_{f}^{\left( i \right)} \right) =\boldsymbol{r}\left( t_{0}^{\left( i+1 \right)} \right)\\ \boldsymbol{v}\left( t_{f}^{\left( i \right)} \right) =\boldsymbol{v}\left( t_{0}^{\left( i+1 \right)} \right)\\ m\left( t_{f}^{\left( i \right)} \right) =m\left( t_{0}^{\left( i+1 \right)} \right)\\\end{array}, i=1,2,3 r(tf(i))=r(t0(i+1))v(tf(i))=v(t0(i+1))m(tf(i))=m(t0(i+1)),i=1,2,3
边界条件: r ( 0 ) = r 0 , v ( 0 ) = v 0 a ( t f ) = a f , e ( t f ) = e f , i ( t f ) = i f , Ω ( t f ) = Ω f , ω ( t f ) = ω f \begin{array}{l} \boldsymbol{r}\left( 0 \right) =\boldsymbol{r}_0, \boldsymbol{v}\left( 0 \right) =\boldsymbol{v}_0\\ a\left( t_f \right) =a_f,e\left( t_f \right) =e_f,i\left( t_f \right) =i_f,\varOmega \left( t_f \right) =\varOmega _f,\omega \left( t_f \right) =\omega _f\\ \end{array} r(0)=r0,v(0)=v0a(tf)=af,e(tf)=ef,i(tf)=if,Ω(tf)=Ωf,ω(tf)=ωf
在 GPOPS-II 中,每个阶段都可以拥有自己的时间范围、状态变量、控制变量以及动力学方程
阶段之间的状态需要通过事件约束(eventgroup)实现连续性
2.1 主函数:launchMain.m
阶段时间固定:通过将下界finaltime.lower和上界finaltime.upper设定为同一固定值
终端时间自由:通过设置不同的上下界,让优化器自动决定阶段时间
归一化处理:为了提高收敛性,GPOPS-II通常要求对问题进行缩放
clear all; clc
% 物理参数
earthRadius = 6378145;
gravParam = 3.986012e14;
initialMass = 301454;
earthRotRate = 7.29211585e-5;
seaLevelDensity = 1.225;
densityScaleHeight = 7200;
g0 = 9.80665;
% 归一化尺度
scales.length = earthRadius;
scales.speed = sqrt(gravParam/scales.length);
scales.time = scales.length/scales.speed;
scales.acceleration = scales.speed/scales.time;
scales.mass = initialMass;
scales.force = scales.mass*scales.acceleration;
scales.area = scales.length^2;
scales.volume = scales.area.*scales.length;
scales.density = scales.mass/scales.volume;
scales.gravparam = scales.acceleration*scales.length^2;
omega = earthRotRate*scales.time;
auxdata.omegaMatrix = omega*[0 -1 0;1 0 0;0 0 0];
auxdata.mu = gravParam/scales.gravparam;
auxdata.cd = 0.5;
auxdata.sa = 4*pi/scales.area;
auxdata.rho0 = seaLevelDensity/scales.density;
auxdata.H = densityScaleHeight/scales.length;
auxdata.Re = earthRadius/scales.length;
auxdata.g0 = g0/scales.acceleration;
lat0 = 28.5*pi/180;
x0 = auxdata.Re*cos(lat0);
y0 = 0;
z0 = auxdata.Re*sin(lat0);
r0 = [x0 y0 z0];

最低0.47元/天 解锁文章
2067

被折叠的 条评论
为什么被折叠?



