5.4 KiB
EM 完整方向段规划与可视化修复:阶段 01 交接
状态
完成(此前阻塞的构造调用传播已获用户明确授权扩展范围)。
环境、入口与前置核验
- 执行时间:2026-08-06T20:56:08.7268822+08:00;Windows / PowerShell / .NET SDK 10.0.302。
- 入口分支与 HEAD:
trajplanner/57ea36b8595c621783aba844e18d9969bccea378。 - 恢复交接祖先:
fcf7df17d54d84904278e993104e131afe8e405d。 - 以下提交均以
git merge-base --is-ancestor返回 0:c354f113060a5f95aa3b06c6f2b0be2d0c7d5da1、dff223c33a439d545537c803cb3531a673c7f2a3、46d5f9762d3d9972daea918c9fb43562ce25ce3b、57ea36b8595c621783aba844e18d9969bccea378、fcf7df17d54d84904278e993104e131afe8e405d。
实现提交
- Task 1:
f4e89b4b4fe67f4924420ba8b3e06dea1d4ccc8b—feat: define full-direction EM planning scope - Task 2:
048b4f618e2237cd0cb3d257bf6ee04a1d13670b—feat: select complete EM direction segments
接口与实际修改
- 新增
EmPlanningScope.RollingHorizon、FullDirectionSegment;request 与 metadata 均保存不可变 scope。 - 新增 desired speed、优化结点/发布上限、终端位置/yaw 容差、复制和交叉校验;默认值为 1.0/0.5 m/s、0.20 s、0.10 m、401、5001、0.03 m、5°。
- 新增
NoProgress、TerminalPoseMismatch、FullSegmentResourceLimitExceeded状态。 PlanningHorizonSelector.Select显式接收 scope;full 模式仅接受 Goal/GearSwitch,选择真实方向段末端并使用ExactStopAtBoundary;rolling 分支保持原有窗口/approach/exact 行为。EmPlanningService传递 scope,metadata 与 diagnostics 均携带 scope。- 用户随后授权的必需构造调用传播:
TrajectoryObservationPipeline.cs及 EM 验证宿主中的 coordinator/executor/trajectory/observation 构造夹具;所有旧调用显式使用RollingHorizon,没有改变 MovementTest 的规划行为。
实际修改文件为两个实现提交的 git show --stat 所列 21 个文件;Task 2 没有修改 EmTrajectoryAssembler.cs,因为现有 assembler 已基于 metadata 保留终端边界,完整段选择无需额外 assembly 行为。
新鲜 TDD 与回归证据
Task 1
RED:
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- foundation
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-planning-service
首次失败为缺少 EmPlanningScope(CS0246/CS0103)。同次曾出现 TrajectoryPlanningVisualization.dll 瞬时写锁;单独复现后锁未持续,已按 systematic-debugging 认定为外部构建竞争,未作为功能 RED。之后完整构造调用传播获授权。
GREEN:相同两个命令均退出 0,输出:PASS foundation、PASS em-planning-service。
Task 2
RED:
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model
失败为 PlanningHorizonSelector.Select 没有接收新增 scope 参数(CS1501),符合预期。
GREEN:
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-planning-service
均退出 0,输出:PASS longitudinal-model、PASS em-planning-service。测试覆盖 10 m/投影 3 m/legacy 1 m 的 full 真实末端、rolling 4 m 截断及 GearSwitch 边界;服务测试覆盖 scope metadata 和发布起止边界。
阶段回归:
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-core-all
退出 0,完整摘要:PASS longitudinal-model、PASS longitudinal-integration、PASS trajectory、PASS em-planning-service。首次回归时 TrajectoryChecks 的速度夹具受批准的硬上限变更影响,先触发加速度而非速度;夹具改为 1.10 m/s 以继续隔离速度上限,之后回归通过。
脏工作区与范围保护
EmPlannerConfiguration.cs的用户DistanceHorizonMeters = 500d和两条中文注释先保存 diff、始终未暂存;提交前以 index-only staging 核验其不在两个实现提交中。MovementTest.TrajectoryObservationTest.cs未编辑、未暂存、未提交。- 既有大量脏修改/未跟踪项均未清理;暂存区在本交接创建前为空。
- 未使用
git stash、git reset --hard、git checkout --、git add .或git add -A。 git diff --check 57ea36b8595c621783aba844e18d9969bccea378..048b4f618e2237cd0cb3d257bf6ee04a1d13670b通过。
未执行内容与阶段 02 输入
阶段 02–09 均未实现。尤其没有实现自适应 knot/T_end、静止起步、NoProgress 发布门禁、终端世界位姿门禁、MovementTest one-shot、Web 或 Painter。
阶段 02 从 048b4f618e2237cd0cb3d257bf6ee04a1d13670b 开始,消费本阶段的 scope/configuration。只允许总计划 Task 3 列出的 Longitudinal 文件、EmPlanningService.cs、LongitudinalModelChecks.cs、LongitudinalIntegrationChecks.cs 和 phase-02.md;不得触及静止起步、终端位姿或任何 MovementTest/UI。先运行 Task 3 RED longitudinal-model,再运行 longitudinal-model 与 longitudinal-integration GREEN,提交 feat: derive adaptive full-segment ST schedule,运行 em-core-all,最后单独提交 phase-02.md。