Files
osmWorkflow/.trellis/tasks/08-25-rc-p4-drawtonomy-ext/prd.md

4.5 KiB
Raw Blame History

后续计划drawtonomy 扩展 PoC

前置任务:08-25-road-compiler-extraction 的 Phase 0-3 完成并完成验收。 评估依据:父任务归档前的 design.md §4 决策记录 D1 / D2 / D3。

Goal

编译器仓库内实现一个 drawtonomy 扩展:把编译产物注入其浏览器编辑器, 回读快照后走其开源导出器产出 OpenDRIVE / Lanelet2。

定位是 PoC不进关键路径。目的是验证「编译器当 scene generator + drawtonomy 当编辑器与工业格式后端」这条链路是否值得投入。

前提认知(已核实)

必须先明确,否则会做错方向:

  • drawtonomy 编辑器闭源,克隆仓库只有 SDK / dev-server / mcp-server。 README 卖点里的 topology-aware lanes、lane tool、intersection templates、 Map→lanes 全部不在开源代码内。
  • 它不做 raw OSM 推导exporter/osmParser.ts 是 Lanelet2 解析器 (车道左右边界已显式)。整个 exporter 目录 grep highway 命中 1 次且是 车道类型字符串。→ 不能替代本编译器,只能做下游。
  • junctionTools 不能做成扩展:无 canvas/overlay 能力、无工具注册、 无任何 change 事件推送ExtensionClient.handleMessage 入站只有 ext:init / 5 个 *-response / ext:error,读取全靠轮询)。 → junction 编辑留在自有 workbench。
  • drawtonomy-dev-server 是 drawtonomy.com 的缓存代理TTL 1 小时), 非自托管。宿主协议会漂manifest 有 minHostVersion)。→ 不进关键路径。

Requirements

R4.1 扩展:编译产物 → 编辑器

  • manifest capabilitiesshapes:writeui:panelsnapshot:readui:notify
  • 面板调编译器的本地 HTTP 服务(road-workbench 已经是一个 HTTP 服务)取产物
  • 车道边界 → createLaneWithBoundaries(leftPoints, rightPoints, opts)addShapes()
  • 坐标转换:本项目 WGS84/ENU→ drawtonomy 画布像素。 沿用其 drawtonomy_origin_lat/lon + latLonToCanvas 约定
  • ⚠️ 借它的结构,不借它的坐标系:其 BaseShape.x/y 是画布像素 z 注释明确写 "world units — NOT canvas pixels like x/y")。 编译器内部坐标系不得因此改变

R4.2 回读 → 工业格式导出

  • requestSnapshot() 取回快照
  • 本地跑其开源 exportToOpenDrive / lanelet2Apache-2.0
  • 产出 .xodr / .osm(Lanelet2),用其 validateOpenDrive 自校验
  • Lanelet2 是 Autoware 的输入格式 —— 对本项目 V2X 方向有实际价值

R4.3 许可与依赖合规

  • drawtonomy SDK 是 Apache-2.0:借用代码需保留 NOTICE / 署名
  • 若依赖 drawtonomy.com 托管服务需查其服务条款app 非 Apache-2.0
  • ESM/CJS 互操作SDK 是 ESM+TS编译器是 CJS。 本阶段可局部引入构建步骤,但仅限扩展目录,不得污染编译器核心 (父任务 C2 的边界)

R4.4 归属

扩展代码放编译器仓库,不放宿主 —— 符合父任务「独立维护」目标。

Acceptance Criteria

  • AC4.1 扩展能把一个区域的编译产物注入 drawtonomy 编辑器并正确显示车道
  • AC4.2 编辑器内手改后回读快照,能导出通过 validateOpenDrive.xodr
  • AC4.3 能导出 Lanelet2 .osm
  • AC4.4 编译器核心未引入构建步骤(构建仅限扩展目录)
  • AC4.5 编译器内部坐标系未因适配画布像素而改变
  • AC4.6 Apache-2.0 署名 / NOTICE 已按要求保留
  • AC4.7 结论记录:这条链路是否值得继续投入,写入任务 research/

启动条件

  • 道路编译器独立化父任务Phase 0-3已完成验收。
  • 编译器仓库、稳定 CLI 与版本化输出契约已可用。
  • 此任务不阻塞道路编译器抽离或渲染分离的交付。

明确不做

  • junctionTools 做成扩展API 不支持,见前提认知)
  • 把 drawtonomy 放进生产构建链路
  • 用 drawtonomy 替代编译器D1 已否决)
  • 自建通用白板编辑器

后续可能(不属本阶段)

父任务 design §4 的 D3 列了三项值得从 drawtonomy 借用的东西, 它们与本阶段独立,应各自开任务:

  • odrGeometryFit.ts 的拟合器 → 替掉手调的 approachWidthMultiplier=1.45 / coreRadiusMeters=28,改为对 referenceFile 拟合、残差作质量指标
  • validator 的 mutation-proven 方法 → 给现有 31 条诊断规则建触发证明
  • validator 的分层命名空间(xml.* / ref.* / junction.* / geom.* → 替代当前平铺的 31 条规则