docs: refine visualization implementation constraints

This commit is contained in:
梁薄云
2026-08-05 22:50:27 +08:00
parent dc3d072343
commit c48f33e4e5
@@ -75,6 +75,8 @@ localhost browser
主项目通过 `ProjectReference` 引用新类库,并排除对子项目源码的重复编译。插件发布流程必须包含新增程序集及其必要依赖。网页资源作为程序集嵌入资源发布,不依赖 CDN、Node.js 或外网。
类库和主项目均继续以 `netstandard2.0` 为目标框架并使用 C# 10。JSON 使用仓库现有的 `Newtonsoft.Json 13.0.4`;不引入 ASP.NET Core、Kestrel 或新的前端包。由于 Windows `HttpListener` 可能要求额外的 HTTP.sys URL ACL,运行时使用 `TcpListener(IPAddress.Loopback, port)` 实现本功能所需的受限 HTTP/1.1 GET 与 SSE 子集,不依赖管理员预注册。
## 4. 可视化类库公共边界
类库只暴露三个主要生命周期操作:
@@ -92,7 +94,7 @@ visualization.Stop();
- 静态快照:地图边界、障碍物、全局粗路径、Local G2 路径、全部方向段、换向点和冻结后的生效配置。每次会话只生成并传输一次。
- 动态快照:实车状态、当前段、当前/上一轮轨迹、当前采样点、本轮规划结果、交接指标和诊断摘要。
服务只绑定 `127.0.0.1`。页面和事件接口均校验随机会话令牌。服务最多接受两个浏览器客户端,额外连接被拒绝。前端静态资源通过普通 HTTP 获取,动态帧通过 Server-Sent Events 发送;客户端断开或读取缓慢时丢弃旧帧,不对发布者形成反压。
服务只绑定 `127.0.0.1`。页面和事件接口均校验随机会话令牌。服务最多接受两个浏览器客户端,额外连接被拒绝。前端静态资源通过普通 HTTP 获取,动态帧通过 Server-Sent Events 发送;客户端断开或读取缓慢时丢弃旧帧,不对发布者形成反压。请求解析器只接受 `GET`,请求头上限为 `16 KiB`,首行/请求头读取超时为 `2 s`;其他方法返回 `405`,未知路径返回 `404`,令牌错误返回 `403`
## 5. 资源与性能约束
@@ -129,6 +131,8 @@ GearSwitchStopHoldSeconds = 0.20
原生 Painter 与网页独立控制。`EnableNativePainterVisualization=false` 时不取得或刷新 World、LS、ST Painter,避免与浏览器重复绘图。两种显示都关闭时,规划循环和控制台诊断仍工作。
自动打开浏览器只由 MovementTest 主机调用 `Process.Start`,类库本身不读取桌面环境或启动外部进程。该调用必须捕获异常;Windows 服务会话或无桌面环境中只打印完整 URI。
## 7. 多方向段观察状态机
现有硬编码 `segmentIndex = 0` 改为只允许顺序前进的活动段状态机。
@@ -185,6 +189,8 @@ GearSwitchStopHoldSeconds = 0.20
- `j[i]` 表示真实区间 `[tᵢ,tᵢ₊₁)`;jerk 曲线点数严格为轨迹点数减一。最后一个轨迹点不绘制伪造的 `j=0`,而标注“末点后无时间区间”。
- 同图展示实际带符号车速与当前选中轨迹点速度。
纵向加速度与 jerk 由当前主程序集内的 EM Adapter 读取 `EmTrajectoryPoint` 的现有内部字段并转换成通用曲线 DTO;不为可视化修改 EMPlanner 的公共契约。
### 8.4 周期历史
最近 `VisualizationHistoryCycleLimit` 个周期展示:周期号、时间、成功/失败、是否发布、规划耗时、段索引、方向、纵向模式、终端类型、末端速度、末端加速度和失败原因摘要。
@@ -233,6 +239,7 @@ GearSwitchStopHoldSeconds = 0.20
- `Publish` 非阻塞且最新帧容量为 `1`
- 历史严格受容量限制。
- 服务只监听回环地址并校验令牌。
- 原始 TCP HTTP 解析器拒绝超大请求头、非 GET 方法、未知路径和错误令牌。
- 慢客户端不阻塞发布者。
- 静态快照不重复进入动态帧。
- 启停、重复停止和端口释放。
@@ -283,3 +290,4 @@ dotnet build ClumsyPilot/ClumsyPilot.csproj -p:ExcludeLegacyAutoAvoidance=true
- 滚动末端语义、jerk 区间语义和换向分段高亮均能由页面直接观察。
- 可视化关闭或失败时不改变 EM 规划行为。
- 源码和运行时证据均证明 `OBSERVE_ONLY` 不变。
- 插件包包含 `ClumsyPilot.dll``TrajectoryPlanningVisualization.dll`、固定 OSQP 运行时及许可证,且没有遗漏新增托管依赖。