对火箭回收算法的讨论
CuNO32023/12/21原创 航天技术 IP:吉林

准确来说是着陆算法, 不过不计较了, 这篇无论是中文还是外文网络都没见人做过, 所以填个空, 也为未来想做小VTVL或者液发成功后尝试回收的研发人员做参考. 由于我自己有着长而痛苦的液体火箭发动机入门和回收入门的学习过程, 所以我会写的详细些, 把我知道的都说说.希望有大佬能给出改进建议, 我在很多方面都不足, 最优化理论部分和控制理论就是半吊子, 很多数学部分也没学到.

目前, 火箭回收算法的研究主要集中在两个方面: 有动力的下降算法, 以及无动力(气动)部分的导引算法. 新算法的开发主要集中在数学部分和优化问题上, 有基于伪谱法(和其变种)以及配点法的算法, 也有基于凸优化的算法. 对凸优化回收算法的改进尝试是国外的一个热点, 无损凸优化路线诞生了LCvx, 基于SCA思想又发明了SCvx和GuSTO. 基于机器学习的神经网络路线也有一些尝试. 一些较为简单的算法也被应用在一些小飞行器上.

控制算法, 航天工业常用的仍是经典,老式,优良的PID, 或者是基于PID的改进算法. 这一点到没什么变化.

接下来讨论不同的算法(仅考虑已实装或有价值的).

这两天重新看一下论文, 尽量兼顾全面和精确, 慢慢拓展和更新文章, 也希望有相关的大佬增补一下, 这篇就当抛砖引玉了.

G-FOLD算法

发布时两个作者(Lars Blackmore, Behcet Acikmese)都在JPL工作, 现在一个在UW, 一个在SpX. (据说)Falcon 9用的算法. 基于所谓的"无损凸优化", Bcikmese的研究.

G-FOLD的Problem 1(未LCvx处理前的最小错误着陆)如下:

$$ min \|Er(t_f) - q\| $$ 

最小化可行降落点到目标点位置, $t_f$是人为设置的着陆时间

$$ m(0) = m_0, m(t_f ) ≥ m_0 − m_f > 0 $$

初始质量等于人为设置的初始质量参数, 最终质量大于等于初始质量-最终质量

$$ r(0) = r_0, \dot{r}(0) = \dot{r_0} $$

初始位置和速度等于人为设定的参数

$$ e^T_1 r(t _f)=0, \dot{r}(t_f) = 0 $$

结束高度和速度等于0

$$ 0 < \rho_1 ≤ \|T_c(t)\|≤ \rho_2, \hat{n}^TT_c(t) ≥ \|T_c(t)\|cos\theta $$

节流阀限制(节流阀不能像KSP一样0~100, 只能设置推力上下限来防止算法算出一个引擎无法达到的推力), $\rho_1$, $\rho_2$是推力大小, $\hat{n}$是人为设置的推力正方向, 后面这段限制了TVC时的推力不大于正方向推力.

$$x(t) \in X, \forall t \in [0, t_f]$$

X是可行域(接下来讲到), 就是航天器可以到达的位置

$$ X = \{(r,\dot{r} \in \Bbb{R}^6 : \|\dot{r}\| \le V_{max} , \| E(r-r(t_f)) \| -c^T(r-r(t_f)) \le 0\}$$

X的定义, $V_max$是航天器能允许的最大速度, 后面部分是Glideslope cone(锥体限制),这里

$$c \triangleq \frac{e_1}{tan \gamma_{gs} }, \gamma_{gs} \in (0, \pi/2)$$

c是椎体, $\gamma_{gs}$是人为定义的角度, 锥体约束还限制了着陆器不能地下飞行(莫名的搞笑).

$$\dot{x}(t) = A(\omega)x(t) + B(\frac{g + T_c(t)}{m})$$

$$\dot{m}(t) = -\alpha\|T_c(t)\|$$

这个是有关速度和质量的约束, $\alpha \gt 0$是一个参数, 描述了燃料消耗率.

在这里

$$ A(\omega)= \begin{bmatrix} 0 & I \\ -S(\mathbf{\omega})^2 & -2S(\mathbf{\omega}) \end{bmatrix} $$

$$ B= \begin{bmatrix} 0 \\ I \end{bmatrix} $$

$$ S(\omega)= \begin{bmatrix} 0 & -\omega_3 & \omega_2 \\ \omega_3 & 0 & -\omega_1 \\ -\omega_2 & \omega_1 & 0 \end{bmatrix} $$

$ \mathbf{\omega} = (\omega_1,\omega_2,\omega_3)$是星球的角速度参数的向量形式, g是重力参数(向量表示)

文章中提到的$Er(t_f)$里的E是和方向有关的单位向量(就像$e^T_1$一样), 实际上相当于取出了X,Y坐标, 不考虑Z坐标(因为着陆后Z肯定是0)

$$ E = \begin{bmatrix} e^T_2 \\ e^T_3 \end{bmatrix} = \begin{bmatrix} 0&1&0\\ 0&0&1\end{bmatrix}$$

2023.12.23更新:

G-FOLD分两步, 第一步求解一个最小错误问题(离设定着陆点最近), 第二步求解一个最小燃料消耗问题, 如果第二步得到的着陆点比第一步得到的着陆点离目标距离相等或更小,(第二个问题可行(feasible)) 就采用第二个算法求解的轨迹, 否则采用第一个算法求解出的轨迹

$$ min \int^{t_f}_0 a\|T_c(t)\| $$

相当于对每个时间步消耗的燃料做积分, 最小化总燃料消耗

其他约束同上, 多一条约束是和第一步目标点有关的

$$ \|E_r(t_f) - q\| \le \|d^*_{p1} - q\| $$

$d^*_{p1}$是第一步求解出的最优着陆点, 这条约束了第二个算法的着陆点, 如果这条不能满足, 问题就是无解的(infeasible)

接下来, 我们将说这个算法真正的核心: LCvx处理后的问题

LCvx(无损凸化)是一种针对非凸问题的处理方法, 能将一个非凸问题变成凸问题, 随后通过数学手段证明后者的解等价.

这个文章暂时不涉及LCvx本身.

凸化后的最小错误问题:

最小化目标没有变

这几条约束

$$ \dot{x}(t) = A(\omega)x(t)=B(g+\frac{T_c(t)}{m}) $$

$$ \dot{m}(t) = -\alpha \Gamma(t) $$

$$ \|T_c(t) \le \Gamma(t)\|, 0\lt \rho_1 \le \Gamma(t) \le \rho_2 $$

$$ \hat{n}^T T_c(t) \ge cos\theta \Gamma(t)$$

加上几条和前面问题一样的不变的约束:

$$x(t) \in X, \forall t \in [0, t_f]$$

$$ m(0) = m_0, m(t_f ) ≥ m_0 − m_f > 0 $$

$$ r(0) = r_0, \dot{r}(0) = \dot{r_0} $$

$$ e^T_1 r(t _f)=0, \dot{r}(t_f) = 0 $$

引入了新的Slack参数$\Gamma$,用以将非凸问题做凸化处理

凸化后的最少燃料问题包括了前面凸化后的最小错误问题的全部约束, 以及一个有提到过的

$$ \|E_r(t_f) - q\| \le \|d^*_{P3} - q\| $$

但是最小化目标变为

$$  min \int^{t_f}_0\Gamma(t)dt$$

因为引入了$\Gamma$

接下来是一系列对变量的更改, 将原本的约束替换为新的参数写成的

新定义了$\sigma \triangleq \frac{\Gamma}{m}$, $u \triangleq \frac{T_c}{m}$, 以及$z \triangleq \ln m$

这样质量消耗参数被重写为$\dot{z} = \frac{\dot{m}(t)}{m(t)} = -\alpha\sigma(t)$

新的重写后的约束:

$$ \|u(t)\| \le \sigma(t), \hat{n}^Tu(t) \ge cos\theta\sigma(t), \forall t \in [0, t_f]$$

$$ \rho_1e^{-z(t)} \le \sigma(t) \le  \rho_2e^{-z(t)}, \forall t \in [0, t_f]  $$

再次更改后面这条约束, 用一个最高项二次的展开取代原本的约束来使其变为凸约束

$$ \rho_1e^{-z_0}[ 1-(z(t)-z_0(t))+\frac{(z(t)-z_0(t))^2}{2}] \le \sigma(t) \le \rho_2e^{-z_0}[ 1-(z(t)-z_0(t))]$$

在这里, $$ z_0(t) = \ln(m_0-\alpha\rho_2t) $$

到这里, 整个算法基本完成. 算法的实现可以用cvx或者cvxpy做测试, 如果要放在嵌入式的话(C/C++), 基本只能自己写内点法求解. CVXGEN可以生成C代码, 但是付费.

下次更新整理一下文章, 各位有什么意见和问题可以提一下

SPLITE DQG算法

暂时就提到一嘴, DQG涉及SCA,双四元数和刚体力学(因为是6-DOF), 留给想看的有心人先看, 我实在没时间看从头看SCA了. 双四元数我也不熟悉,所以有可能咕了. 把相关的PDF留下, 能解释的大佬可以起个新帖.

DQG(Dual Quaternion Guidance)是JPL和UW为NASA SPLICE开发的着陆算法, 是整个SPLICE项目(包括硬件(计算机, 多普勒雷达, 激光雷达等)和软件(着陆点选择, 避障, 着陆引导等)的一部分. 这个东西被安装在Blue Origin的新谢泼德号上用作测试, 也作为蓝源月球着陆器的一部分.

attachment icon main.pdf 550.30KB PDF 31次下载 预览

attachment icon 1.G004536.pdf 2.68MB PDF 19次下载 预览

和DQG有关的论文和Presentation.

[修改于 1年0个月前 - 2023/12/23 09:47:30]

来自:航空航天 / 航天技术严肃内容:专业科普
0
5
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}