激光门控改为可配置, 本设备(无激光)置false

链路: 新增link.require_laser_valid(默认true, 有激光机型的锁定位置位粘滞兜底);
本吊舱厂商确认不含激光测距 → pod_bridge.json 置false, 并加部署配置回归测试。
文档新增§10记录设备特性(无激光/锁定位置位丢失后不复位/脱靶量无无效标志位)。
全量351条通过(新增3条激光门控用例)
This commit is contained in:
keita
2026-09-28 15:22:14 +08:00
parent 6589a5215c
commit d255d22fc9
5 changed files with 85 additions and 11 deletions
+13 -4
View File
@@ -171,16 +171,25 @@ class PodBridge:
)
def _pod_locked(self, now_ms: int) -> bool:
"""吊舱锁定门控:表2-2 遥测在 link.telemetry_timeout_ms 内且状态字节1
bit2=锁定 才算锁定。从未收到遥测 / 遥测超龄 / 搜索状态一律视为未锁定
(宁可刹车,不朝搜索状态下的无意义坐标飞)。"""
"""吊舱目标门控:表2-2 遥测在 link.telemetry_timeout_ms 内、状态字节1
bit2=锁定、且(若 link.require_laser_valid)激光测距有效,才算目标有效。
实测依据:部分吊舱目标丢失后**锁定位置位不复位**(脱靶量也没有无效标志位,
恒为 0),仅凭 bit2 会朝过期坐标继续飞;激光无效时吊舱不解算目标经纬度,
故此兜底。无激光或激光恒无效的吊舱把 require_laser_valid 置 False。
从未收到遥测 / 遥测超龄 / 搜索状态 / 激光无效 一律视为目标无效(宁可刹车)。"""
tel = self._latest_telemetry
if tel is None:
return False
frame, t_ms = tel
if is_stale(t_ms, now_ms, self._cfg.link.telemetry_timeout_ms):
return False
return frame.is_target_locked
if not frame.is_target_locked:
return False
if self._cfg.link.require_laser_valid and frame.laser_range_m is None:
return False
return True
async def _dispatch(self, out, now_ms: int) -> None:
if out.mode is ControlMode.VELOCITY_HEADING and out.valid: