记录0x0E解除锁定有效; 自动解锁判据转为待定项
实测0x0E停止跟踪后bit2复位(厂商软件锁定框同步消失); --auto-unlock 的触发判据 (表4超时)对本设备存疑(无激光时表4可能根本不发→一锁定就误解锁), 已在代码标注 风险并在部署文档新增§10.1列出待确认项与5种候选判据。全量351条通过
This commit is contained in:
@@ -177,4 +177,27 @@ WantedBy=multi-user.target
|
||||
表2-2 脱靶量是定长字段且协议**没有无效标志位**,丢失时表现为 0,
|
||||
无法区分"不输出"与"输出 0"。
|
||||
→ 单靠 bit2 会在目标丢失后继续朝过期坐标飞,**必须有第二判据**(见 §8/§11)。
|
||||
- **主动解除锁定有效**:发 `0x0E 停止跟踪` 后 bit2 复位为未锁定,厂商测试软件的
|
||||
锁定框同步消失(2026-09-28 实测)。重新锁定:重发 0x07 或 0x0F+0x10。
|
||||
|
||||
### 10.1 自动解锁机制(待定,勿贸然启用)
|
||||
|
||||
`pod_console.py --auto-unlock SEC` 现按「锁定中 + 表4 超过 SEC 秒未更新」触发 0x0E。
|
||||
**该判据对本设备存疑**,开箱前需确认:
|
||||
|
||||
| 待确认项 | 影响 |
|
||||
|---|---|
|
||||
| 本设备无激光,锁定后**到底发不发 表4** | 若表4 根本不发,`last_tgt_s` 恒空 → 一锁定就被误解锁,机制不可用 |
|
||||
| 表4 的实际发送频率(规格 1~60Hz) | SEC 必须远大于实际周期(建议 ≥5s 且 ≥3 倍周期),否则误杀 |
|
||||
| 解锁后是否自动重发 0x0F/0x10 重新捕获 | 自动重发可能与"假锁定"形成震荡;建议单次解锁 + 告警,不循环 |
|
||||
|
||||
候选替代判据(按可靠性排序):
|
||||
1. **操作员按键 `u`**(台架阶段推荐,零误杀);
|
||||
2. 表4 超时(需先确认表4 存在);
|
||||
3. 锁定持续超过 T 秒且**从未**收到表4 → 判为假锁定,解锁一次并告警(不循环);
|
||||
4. 脱靶量恒为 0 持续 T 秒 —— 居中跟踪时也会为 0,**误杀风险高**,不推荐;
|
||||
5. 由我方视觉链路(stereo_yolo / target_tracker)交叉验证 —— 最可靠,待集成。
|
||||
|
||||
飞行期的正确行为是**刹车保护**(现有 `target_stale_ms` 已覆盖),与"解锁以便重新
|
||||
搜索"是两件事,不要混为一谈。
|
||||
|
||||
|
||||
@@ -133,7 +133,9 @@ def main() -> int:
|
||||
help="在识别开之后追加 发现目标自动锁定(0x0F)与 识别转跟踪(0x10)")
|
||||
ap.add_argument("--motor-on", action="store_true", help="启动时先下发 开电机(0x27)")
|
||||
ap.add_argument("--auto-unlock", type=float, default=0.0, metavar="SEC",
|
||||
help="锁定中若表4 超过 SEC 秒未更新,自动发 0x0E 解除锁定")
|
||||
help="锁定中若表4 超过 SEC 秒未更新,自动发 0x0E 解除锁定。"
|
||||
"⚠ 触发判据依赖表4;本设备无激光测距,表4 可能根本不发, "
|
||||
"启用前须实测确认(见部署文档 §10)")
|
||||
ap.add_argument("--unlock-on-exit", action="store_true",
|
||||
help="退出前发一帧 0x0E 解除锁定")
|
||||
args = ap.parse_args()
|
||||
@@ -218,6 +220,9 @@ def main() -> int:
|
||||
latest_tgt = frame
|
||||
|
||||
# ---- 自动解除锁定:锁定中但表4 长时间不更新 ----
|
||||
# ⚠ 本设备无激光测距,表4(目标经纬度)可能始终不发 → last_tgt_s 恒为
|
||||
# None,此判据会一锁定就误解锁。启用前先用控制台观察「目标帧 距今」,
|
||||
# 确认锁定后表4 真的在发。触发判据的替代方案见部署文档 §10。
|
||||
if (args.auto_unlock > 0 and latest is not None
|
||||
and latest.is_target_locked
|
||||
and (last_tgt_s is None or now_s - last_tgt_s > args.auto_unlock)
|
||||
|
||||
Reference in New Issue
Block a user