这是一个简易的回收方法,精度不高(10米以内)。

如果只是想抄一下程序或者看的不太懂,后面有实例讲解,可以直接抄程序和调节参数。

为了简化教程,教程将火箭和目标,速度,方向控制都视在同一平面内(只是为了方便讲解,实际不影响)。

首先本回收方法的想法是将速度方向控制在目标方向上。

屏幕截图 2026-03-07 170339.png

就是从前两张图的的情况变成第三张图的情况。

这是对于速度方向的控制和大小无关,所以直接对速度和目标方向直接取方向向量

image-ZhRZ.png
屏幕截图 2026-03-07 174023.png

再将目标向量投影到水平平面上。

image-JAiL.png
屏幕截图 2026-03-07 174207.png

在减去速度的方向向量。

image-CFCb.png

这样就得到了火箭的朝向。

在发动机点火的情况下。

首先分析情况

下面分析中其实存在一些漏洞(没有考虑竖直方向速度的变化,就是默认竖直方向上的速度大小不变,火箭推力的竖直方向的分量平衡了重力),不过为了简化讲解先不提,后面会讲清楚

当火箭的速度方向在目标方向的上方时

屏幕截图 2026-03-07 172939.png

火箭会朝右方向偏转一些,以减少横向速度,时速度方向往目标方向偏转(有时并不能使速度方向往目标方向偏转,这里为了简化先不讲)。

当速度方向在目标方向的下方时

火箭会朝左方向偏转一些,以增加横向速度,时速度方向往目标方向偏转。

只有当速度方向刚好在目标方向上时

image-xlys.png

火箭朝向竖直向上,水平方向上的速度大小不变,即火箭朝目标方向运动(一样的问题,同理)。

这就是一个简单的负反馈调节。

到这里火箭着陆程序已经基本能用了,能把火箭往目标方向引导。

image-OWtO.png

但是还是存在一些问题(不是上面粗体字描述的问题),高度过低时火箭会不停晃动,不好立着着陆,可以在低高度时,锁定速度逆向解决。

image-tSdf.png

在这样的情况下就能完成基本的着陆,但是误差会有点大。

如果要继续提高精度就需要下面的内容。

火箭在回收时会发生晃动

具体为两种晃动,高频小幅度晃动低频大幅度晃动

高频小幅度晃动:周期1s~3s,晃动的角度比较大

低频大幅度晃动:周期一般<0.5s,箭体晃动不怎么明显,可通过RCS喷气的频率看出

在上面的程序中只会出现低频大幅度晃动

其实就时火箭的水平加速度过大了

在火箭朝向程序中加入与加速度相关的部分来抑制火箭过大的水平加速度。

屏幕截图 2026-03-08 155120.png

如上图所示,先把加速度投影到水平面上在乘以系数-0.025。

屏幕截图 2026-03-08 155112.png

但是高度不同时所需要k是不同的

屏幕截图 2026-03-08 163337.png

所以把-0.025替换成图中右边部分

不同的火箭所需要系数是不一样的,

大了会发生低频大幅度晃动

小了会发生高频小幅度晃动

更据不同高度的情况和反比例函数的性质调节一下参数即可。

例如高度小于100m发生高频小幅度晃动时,把后面的100改成150或200,这样在低高度时系数就变小了,其他高度系数的变化不大。

同时也可以解决火箭在回收时会冲过头(侧面看的话就是从左上方跑到右上方去了)

其次是使用的高度会有误差。

用系统自带的高度会有一个问题,目标高度并不是0高度,也就是火箭与目标的高度差并不是Vizzy自带的AGL

image-jmCk.png

用这个替换原来的AGL可以减少一定着陆误差。

然后是将目标方向该为目标上方的一点(也可以不用,在少数情况下有可能会增加一点着陆误差)

这是原来的

image-xxVa.png

这是改进后的

屏幕截图 2026-03-08 165633.png

首先是这一部分

image-QNsn.png

负责将目标坐标转换为(精度,纬度,高度)

image-uGAn.png

然后加上火箭高度的四分之一(经度,纬度,目标高度+火箭高度的四分之一)

屏幕截图 2026-03-08 165825.png

再转回坐标

image-itYD.png

在减去火箭坐标

这样目标方向就变成了目标上方的一点而不是目标上。

到这里着陆原理已经讲完了,上面粗体字的问题其实不用解决也能完成着陆

实例讲解

首先是火箭

我用我自己做的火箭==>回收火箭1.xml

火箭已有正常发射入轨的程序

在一级燃料还剩25%时,一二级分离进行回收

image-KbPB.png

在图中发射程序插入广播程序

一定要等待一下发出广播,如果不等待的话广播接收会有问题

广播程序会发出一个叫“zz”的广播

打开一级的芯片加入下面程序

芯片中接受广播后再发出广播,广播的内容是火箭一级的名字

回到飞船控制器中加入上图程序,接受火箭一级发出的广播,将一级的名称转换为ID再切换控制

这样控制就回到了一级,接下来的程序就全是一级的了

在一级中添加上图这些程序,后面要用,之前或在其他文章中已经讲过原理了,这里就不多讲了

然后一级把RCS打开,外圈发动机关闭(外圈发动已经设置好了激活组1,这里打开再关闭就把外圈发动机关了)

将回收场设置为目标,更据计算的落点误差调整方向,并开一点节流阀

然后就是把发动机开到最大,修正落点误差,循环结束的条件是落点误差越来越大或误差小于5000m

display语句是用来看一些数据的,对程序没影响,后面的同理

这样火箭就会朝向回收场的方向加速

结束之后把节流阀设置为0,等待竖直方向上的速度小于零,也就是开始往下落

然后在高度大于15000m时,通过空气阻力来修正落点

然后再加入以下程序

火箭就会开始往着陆场方向飞,B中的50和165是我测试了很多次得到的参数

最后打开着陆腿,把火箭朝向锁定在速度逆向,等待着陆

着陆后,把节流阀设为零,取消方向锁定,并输出落点误差

这样火箭就完成了着陆,误差控制在了10m以内

最终完成的火箭==>回收火箭2.xml

上面三处粗体字提到的问题,火箭朝向其实并不能准确的控制速度方向

导致了火箭到后面还是会有点晃动,解决不了,精度也会变低,但这里够用

火箭着陆时会有三个力,重力、火箭推力、空气阻力

这三个力的合力的加速度才是控制速度的关键

但在上面的控制程序中,加速度方向并不能很好的控制,使得速度方向也不能很好的控制,会有点偏差,导致落点精度不高

这个问题我现在也没解决,但是作为一个简单的着陆程序这个精度也够了

而且再加东西的话这个程序就会变得更难,对新手不友好,所以就没去解决

火箭程序也有人试过了==>朱诺新起源:新着陆制导(向量)精度也还行

上面的回收火箭可以拿去做视频,但要标注一下出处,直接挂这个页面的链接就行

我的B站主页==>zz623333的个人空间-zz623333个人主页-哔哩哔哩视频

如果有问题可以直接问,我有时间就会回答。