4.1 KiB
EM 观察网页可视化阶段 05 交接
状态:完成
阶段目标:完成集成计划 Task 3 的活动方向段滚动规划控制器和异步观察循环;保持 OBSERVE_ONLY,不实现静态/动态图表 Adapter、网页生命周期或插件发布。
基线提交:e141a76fdbef33f20821d6b69cad684d438eef43(阶段 04 交接)。b0b79e5 已核对为祖先。
实现提交:
51f744bfeat: observe EM planning across gear segments
修改文件:
ClumsyPilot/ParkrobTrajplanner/tarjplanner_movementtest/TrajectoryObservationPipeline.csClumsyPilot/tests/EMPlannerVerificationHost/TrajectoryObservationSegmentChecks.csClumsyPilot/tests/EMPlannerVerificationHost/TrajectoryObservationChecks.cs
新增或确认的接口:
TrajectoryObservationController.ActiveSegment、SegmentState和PreviousTrajectoryForVisualization由 tracker 的不可变状态统一驱动;TryAdvanceSegment(...)仅在 tracker 确认N -> N+1后替换 coordinator/executor。- 同段请求使用当前 coordinator 的
PublishedTrajectory作为 previous seed;确认换向时旧轨迹只保留在PreviousTrajectoryForVisualization,新 coordinator 首次请求的PreviousTrajectory为null。 - 会话 trajectory ID 在 coordinator 替换后继续单调增长;
CreateEffectiveConfigurationSnapshot()返回configuration.Copy()。 - 等待换向时 executor 使用当前确认方向、下一段期望方向和
directionConfirmed=false;没有伪造档位读数。 TrajectoryObservationLoopTick暴露SegmentAdvanced与 tracker 的不可变SegmentState。loop 仅在已消费完成任务且无飞行任务时调用TryAdvanceSegment,不会为切段取消规划。
验证命令与结果:
git merge-base --is-ancestor b0b79e5 HEAD:退出码0。- RED:
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- trajectory-observation:退出码1,首个断言为active observation segment is not hardcoded to zero was false,准确捕获既有segmentIndex = 0。 - GREEN 与最终回归:
dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- trajectory-observation:退出码0,输出PASS trajectory-observation。 dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- coordinator:退出码0,输出PASS coordinator。dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- executor:退出码0,输出PASS executor。rg -n "segmentIndex = 0|SendXYThSpeed|SendMotion|DriveStop|PredefinedDriveStop|AccumulateSpeed" ClumsyPilot/ParkrobTrajplanner/tarjplanner_movementtest:退出码1,无匹配;运行源码既无硬编码活动段,也无执行器写调用。git diff --check 51f744b^..51f744b -- <Task 3 三个文件>:退出码0;git diff-tree --no-commit-id --name-status -r 51f744b只列出这三个 Task 3 文件。
未运行的验证及原因:无。
已知警告或遗留问题:退出验证中的主项目编译保留两条既有 obsolete 警告,位于 MovementTests.TireFollowing.cs 的 Lidar2dDetect2LegTray.LegWidth 和 TireFollowing.cs 的 MultiWheelChassis.GetSteerWheels();均不属于本阶段文件。启动时 trajectory-observation 首次构建曾因 TrajectoryPlanningVisualization.dll 的一次性写锁报 CS2012(退出码 1);经进程与目标检查后单独重跑同一入口通过,未修改源码处理该环境锁。实现提交后仍有 129 项无关工作区脏项,暂存区为空,均未展开、重置或提交。
与原计划的偏差:无代码范围偏差;Task 3 的三文件实现提交保持独立。阶段文件按阶段协议单独提交。
下一阶段注意事项:阶段 06 只实现集成计划 Task 4–5 的静态/动态快照、图表和 handoff 指标。它必须消费 ActiveSegment、SegmentState、PublishedTrajectory 与 PreviousTrajectoryForVisualization,不能恢复跨方向 previous seed,也不能改变 OBSERVE_ONLY 或引入网页生命周期。