This commit is contained in:
2026-01-14 23:40:42 +08:00
parent ce78a98f46
commit 79e5a1c4fe
+7 -5
View File
@@ -99,6 +99,9 @@ def auto_land_predictive(host='localhost', port=50000, target_altitude=0.5, targ
status = {'result': 'failed', 'logs': []} status = {'result': 'failed', 'logs': []}
# WAIT 阶段按折减推力估算刹车距离(提前点火,补偿点火/推力建立延迟)
thrust_discount_wait = 0.9
def _get_g(local_vessel): def _get_g(local_vessel):
try: try:
body = local_vessel.orbit.body body = local_vessel.orbit.body
@@ -153,7 +156,6 @@ def auto_land_predictive(host='localhost', port=50000, target_altitude=0.5, targ
pass pass
# 倒计时/等待点火 # 倒计时/等待点火
ignited = False
last_log_t = 0.0 last_log_t = 0.0
while True: while True:
alt, srf_speed, v_speed, mass, avail_thrust, g_local, situation_name = _read_state() alt, srf_speed, v_speed, mass, avail_thrust, g_local, situation_name = _read_state()
@@ -164,10 +166,11 @@ def auto_land_predictive(host='localhost', port=50000, target_altitude=0.5, targ
vf = max(0.0, abs(float(target_vspeed))) vf = max(0.0, abs(float(target_vspeed)))
# 若推力不可用,直接点火尝试(避免永远等不到) # 若推力不可用,直接点火尝试(避免永远等不到)
if mass <= 0 or avail_thrust <= 1e-6: avail_thrust_wait = float(avail_thrust) * float(thrust_discount_wait)
if mass <= 0 or avail_thrust_wait <= 1e-6:
a_max_up = 0.0 a_max_up = 0.0
else: else:
a_max_up = max(0.0, avail_thrust / mass - g_local) a_max_up = max(0.0, avail_thrust_wait / mass - g_local)
if a_max_up <= 1e-6: if a_max_up <= 1e-6:
braking_dist = float('inf') braking_dist = float('inf')
@@ -185,7 +188,7 @@ def auto_land_predictive(host='localhost', port=50000, target_altitude=0.5, targ
msg = ( msg = (
f'WAIT alt={alt:.1f} rem={remaining_alt:.1f} ' f'WAIT alt={alt:.1f} rem={remaining_alt:.1f} '
f'srf_speed={srf_speed:.2f} vs={v_speed:.2f} ' f'srf_speed={srf_speed:.2f} vs={v_speed:.2f} '
f'a_max_up={a_max_up:.2f} braking={braking_dist:.1f} ' f'a_max_up={a_max_up:.2f} braking={braking_dist:.1f} thr_disc={thrust_discount_wait:.2f} '
f'countdown={(countdown if countdown is not None else float("nan")):.2f}' f'countdown={(countdown if countdown is not None else float("nan")):.2f}'
) )
status['logs'].append(msg) status['logs'].append(msg)
@@ -208,7 +211,6 @@ def auto_land_predictive(host='localhost', port=50000, target_altitude=0.5, targ
vessel.control.activate_next_stage() vessel.control.activate_next_stage()
except Exception: except Exception:
pass pass
ignited = True
# 燃烧闭环:根据 remaining_alt 反推需要的减速度 -> 油门 # 燃烧闭环:根据 remaining_alt 反推需要的减速度 -> 油门
while True: while True: