From ed553088853ffbec078a8e6966ebb4d1c5ef87c9 Mon Sep 17 00:00:00 2001 From: lyizai <3945107889@qq.com> Date: Thu, 1 Oct 2026 16:57:04 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=AE=B0=E5=BD=95=E7=AA=81=E7=A0=B4=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20=E4=BF=AE=E6=8E=89=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E5=81=8F=E5=A5=BD=E5=90=8E=E6=89=A9=E5=9C=B0=E7=9C=9F=E7=9A=84?= =?UTF-8?q?=E8=B7=91=E8=B5=B7=E6=9D=A5=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO 第 1 节从 🔴 改为 🟢,写清根因、生产对照实测与修复后的推进数据。 根因:AltitudeGoal 把高度偏置加在启发值上,而 mineflayer-pathfinder 每次 compute() 返回 partial 时用 h 最小的节点当 partial 路径终点,于是「又高又偏」 的节点胜出,A* 永不收敛,机器人一次移动指令都发不出来。 生产对照(王城平台,其余配置相同): - altitudePreference = true → inputTicks = 0,永远「寻路超时」 - altitudePreference = false → inputTicks = 237,blockedTicks = 0,每 tick 都在走 第二个拦路虎(1.9.3):服务器每 1~6 分钟踢一次,原来掉线即永久停住; autoResumeAfterReconnect 现在会在重连后自动接上。 修复后连续 20 分钟实测:距目标 763 → 668 格(前进 95 格),全程未掉线; 原点自救 4/4 成功,每次都能从登录服大厅回到真实世界。 仍待优化:推进速度约 5 格/分钟,卡在「寻路重试耗尽 → 往边上走两步 → 跳过目标 → 重新规划同一目标」的循环里(waitTimeoutSeconds 偏长、 跳过目标后立刻重选同一个目标)。 --- TODO.md | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 6cfdb0d..8e0e28b 100644 --- a/TODO.md +++ b/TODO.md @@ -141,7 +141,47 @@ ls -1d /opt/autostore-bot/backup-* 2>/dev/null | tail -3 --- -## 1. 🔴 「机器人走不动」:**已实测定位到客户端物理层**(不是服务端回弹,见本节开头的实测补充) +## 1. 🟢 「机器人走不动」:**已解决**(根因是自定义高度偏好,见下) + +### ✅ 2026-10-01 突破:修掉高度偏好后扩地真的跑起来了 + +**根因**:`AltitudeGoal` 把高度偏置加在**启发值**上 +(`heuristic = max(0, 基础距离 - 权重 × y)`),而 `mineflayer-pathfinder` +每次 `compute()` 返回 `partial` 时用 **`h` 最小**的节点当 partial 路径的终点 +(`astar.js`: `if (neighborNode.h < this.bestNode.h) this.bestNode = neighborNode`)。 +于是「又高又偏」的节点 `h` 反而更小,partial 路径被引向高处而不是目标附近 —— +**A\* 一直在算、永不收敛,机器人一次移动指令都发不出来。** + +**生产对照实测**(王城平台上,其余配置完全相同): + +| `altitudePreference` | `inputTicks` | 结果 | +| --- | --- | --- | +| `true`(修复前) | **0** | 永远停在「寻路超时,重新寻路」,一步不动 | +| `false`(修复后) | **237** | 每 tick 都在走,`blockedTicks = 0`、`frozenTicks = 0` | + +已把默认值改为 `false`([1.9.1]),并在 `AltitudeGoal` 的注释里写清推导与实测数据。 +**想重新启用,必须把偏置改成「低处加移动代价」**(改 `getNeighbors` 的 `cost`), +不能改启发值。 + +**顺带修掉的第二个拦路虎**([1.9.3]):服务器每 1~6 分钟把机器人踢下线一次 +(`An internal error occurred in your connection`),原来一掉线任务就永久停住。 +现在 `autoResumeAfterReconnect`(默认开)会在世界退出时记下配置、重连后自动接上; +手动停止 / 时段外 / 耐久保护停机不会被误恢复。 + +**实测结果**(修复后连续 20 分钟): + +``` +起点 6753.6, 143, 11953.7 距目标 763 格 +终点 6768.5, 116, 12045.7 距目标 668 格 ← 前进 95 格,全程未掉线 +``` + +「原点自救」表现完美(4/4 成功):每次被踢到登录服大厅都能自己回到真实世界。 + +**仍需观察**:推进速度约 5 格/分钟(正常步行 4.3 格/秒), +因为每段路径都会走到「寻路重试耗尽 → 往边上走两步 → 跳过目标 → 重新规划同一目标」 +的循环里。待优化项:`waitTimeoutSeconds`(60)偏长、以及「跳过目标后立刻重选同一个目标」。 + +### 历史记录:三种「走不动」的区分(结论仍然有效) ### 🔴 2026-10-01 实测:三种「走不动」要分开看(**先读这段**)