Skip to content

Implementation Roadmap

> Status: NEW · 已对齐 PCR Master Blueprint v1.0 §6 > 目的: 把 Blueprint 四波迁移计划锚定到 Architecture_v2 文档体系。 > 裁定权威: dev_doc/Refactoring/PCR_Master_Blueprint.md §6(本文为索引视图,非二次裁定)


0. 大方向

四波,自下而上,结构先行

Wave 0 · 目录正骨 + 结构定型(无逻辑变化)  ──────► 编译骨架对齐 v1.0


Wave 1 · Plant Physics 内核恢复  ──────► force computer + probe + 单 body 弹道


Wave 2 · 设备层 + Avionics 闭环  ──────► 全设备 step + 总线单源化 + 模飞测试


Wave 3 · FCC + Mission + 全闭环  ──────► FCC 复活 + 三种部署 + closed_loop_full

每波都有强制守门测试(bench/trajectory/integration 三级,详见 08_Cross_Cutting/Testing_Framework.md)。


1. Wave 0 · 目录正骨

1.1 目标

把 v0 的目录拓扑改造为 Blueprint §2.1 的 13 库依赖图:

                              runtime


                            simulation
                ┌─────────┬─────┴────┬──────┬─────┬──────────┐
                ▼         ▼          ▼      ▼     ▼          ▼
         dynamics_core   fcc    avionics/  plant  bus    environment
                │         │     devices    │ │     │         │
                └─────────┴────────┴───────┴─┴─────┴─────────┘


                              contracts
                                /  |  \
                            types frames monad

关键约束:dynamics_core 必须保持业务领域无关(Blueprint §7.16);simulation 是唯一合法的跨域聚合层(§7.17);runtime 不持有业务定义(§7.18)。

1.2 行动清单

#行动涉及 v2 文档
1删除 src/plant_model/ / 旧 src/dynamics_core/ / src/plant/interface/
2创建 src/environment/{Atmosphere,GravityField,WindField}.h02_Physical_World/Environment_Fields.md
3创建 src/dynamics_core/{ode,algebra,pipeline,state}/05_Dynamics_Core/Universal_ODE_Kernel.mdForces_Monoid.mdTopology_Algebra.mdSpatialState_and_Frames.md
4创建 src/simulation/{state,env,probe,pipeline}/ 骨架06_Simulation/Dual_Layer_RWS.mdRocketBody_Composite.mdWorldEnv_Assembly.mdBody_World_Tick.md
5创建 src/types/frames/,析出 phantom types01_Foundation/Coordinate_Frames.mdContracts_PerBodyFrames.md
6src/bus/{IBus,BusPayloads,TransparentBus}.h include 路径03_Avionics_and_Bus/Semantic_Bus_Pattern.md
7src/bus/BusChannel.h + SignalTag[[deprecated]](Wave 2 删)03_Avionics_and_Bus/Semantic_Bus_Pattern.md
8dynamics_core/algebra/:class → 模板化自由函数 evolve_topology<Body>05_Dynamics_Core/Topology_Algebra.md
9dynamics_core/algebra/StageOp.henum class WorldStage : uint16_t {}05_Dynamics_Core/Topology_Algebra.md §2
10simulation/state/RocketBody.h:device-as-unified-entity 形态06_Simulation/RocketBody_Composite.md
11simulation/env/{WorldEnv,BodyEnv}.h:严格只读,强类型环境对象06_Simulation/WorldEnv_Assembly.md
12simulation/probe/Probe.h:声明 probe_aero/probe_traj/probe_mass_props06_Simulation/WorldEnv_Assembly.md §4
13runtime/ 清空业务定义,保留 Assembler/Runner/IDynChannel07_Runtime/Assembler_and_Runner.mdIDynChannel_SIL_HIL.mdPlantScope.md

1.3 CMake 库划分

每个顶层模块一个 CMake target(详见 Blueprint §6.0.2):

Target依赖
contractsINTERFACE(header-only)
environmenttypes, frames
plant_modeltypes, frames, contracts
plant_hardwaretypes, frames, contracts
plant_physicstypes, frames, monad, contracts, plant_model, environment
bustypes, contracts
avionics_devicestypes, contracts, bus, plant_model, plant_hardware
fcctypes, monad, contracts, bus
dynamics_coretypes, frames, monad, contracts(禁止 link plant/avionics/fcc/bus/environment/simulation)
simulation上面所有 + dynamics_core
runtimesimulation

> 强契约grep -r "plant/\|avionics/\|fcc/\|bus/\|environment/\|simulation/" src/dynamics_core/零命中

1.4 自底向上逐层编译

1. types + frames + monad           独立编译
2. + contracts
3. + environment + plant/model + plant/hardware
4. + plant/physics
5. + bus
6. + avionics/devices
7. + fcc
8. + dynamics_core
9. + simulation
10. + runtime

每层保持上面 N 个 target 链接通过,下面所有 add_subdirectory 暂时注释。

1.5 守门

守门必须
10 个 CMake target 全绿
现有所有测试至少通过编译(功能 stub 可)
dynamics_core 不引用任何业务子域
runtime/WorldEnv.h 等业务定义

2. Wave 1 · Plant Physics 内核恢复

2.1 目标

simulation::body_tick 在相同 BodyEnv 输入下,与 main 力/力矩输出相对误差 ≤ 1e-6

2.2 准备

  • 生成 main golden trajectory:./build/bin/closed_loop_10s --dump-state ./golden_traj.csv
  • 此 trajectory 作为 Wave 1 全程的回归基线。

2.3 迁移顺序

#模块来源目标涉及文档
1FlightStateProbermain:pipeline/FlightStateProber.cpp(104 行)plant/physics/FlightStateProber.{h,cpp}02_Physical_World/Plant_Physics_Constitutive.md
2compute_drag(上升/下降双模 + 完整 6 分量)main:pipeline/Drag.cpp(137 行)plant/physics/Drag.{h,cpp}05_Dynamics_Core/Forces_Monoid.md §4
3compute_thrust(三阶段 + EngineForceState)main:pipeline/Thrust.cpp(158 行)plant/physics/Thrust.{h,cpp}05_Dynamics_Core/Forces_Monoid.md §4
4compute_gravity + ECF→LIC 旋转既有简化版扩展plant/physics/Gravity.{h,cpp}01_Foundation/Coordinate_Frames.md
5probe_aero / probe_traj / probe_mass_props 实现新写simulation/probe/Probe.{h,cpp}06_Simulation/WorldEnv_Assembly.md §4
6sim::body_tick 雏形:probe → forces → integrate新写simulation/pipeline/BodyTick.{h,cpp}06_Simulation/Body_World_Tick.md §2
7删除 dynamics/PhysicalRegistry.*

2.4 守门

bench + trajectory 双级:

试验类别期望
bench_prober_static_sea_levelbench4 气动角全 0,q=0
bench_prober_above_karmanbenchdyn_pressure=0,mach=0
bench_drag_ascending_subsonicbenchF_x ≈ -Cd·S·q
bench_drag_descending_gridfinbench含力矩
bench_thrust_perturbationbench公式验证
bench_thrust_pressure_compensationbenchΔF = Sa·101325
bench_thrust_off_axis_enginebench旋转方向
trajectory_physics_vs_maintrajectory力/力矩对 main 相对差 ≤ 1e-6

测试组织详见 08_Cross_Cutting/Testing_Framework.md


3. Wave 2 · 设备层 + Avionics 闭环

3.1 目标

每个 device 独立工作(fidelity=Transparent),FCC 模飞测试(avionics_dry deployment)跑通。

3.2 行动清单

#行动涉及文档
1Plant Hardware step 函数:step_engine_mech / step_servo_mech / step_fin_mech02_Physical_World/Plant_Hardware_Mech.md
2Device step 函数:ecu::step(含 EngineFSM)03_Avionics_and_Bus/Sensor_Modeling.mdDevice_Dual_Face.md
3Device step 函数:scu::step(采样真实摆角)03_Avionics_and_Bus/Device_Dual_Face.md
4Device step 函数:fin_ctrl::step03_Avionics_and_Bus/Device_Dual_Face.md
5Device step 函数:imu::step(从 body.aux 读真值)03_Avionics_and_Bus/Sensor_Modeling.md §3
6Device step 函数:gps::step(从 body.spatial 读 ECF 真值)03_Avionics_and_Bus/Sensor_Modeling.md §4
7Device step 函数:icu::step(计时器 → DiscreteEvent)03_Avionics_and_Bus/Sensor_Modeling.md §5
8Bus 单源化:删 BusChannel.h + SignalTag;BusBuffer 挂 RocketBody03_Avionics_and_Bus/Semantic_Bus_Pattern.md
9sim::body_tick 完整化:avionics step → physics → integrate06_Simulation/Body_World_Tick.md §2.2
10DiscreteEvent 解释器:sim::world_tick 末尾把 events → StageOp06_Simulation/Body_World_Tick.md §5
11bus::IBus Writer 内化(BusLog)03_Avionics_and_Bus/Semantic_Bus_Pattern.md §3

3.3 守门

试验类别期望
unit_device_imu_quantizationbench真值经 IMU step → bus 上 ImuPayload 量化正确
unit_device_ecu_fsmbenchEngineFSM 状态转移正确
unit_device_icu_timer_eventbench计时器到期发 DiscreteEvent
integration_avionics_dry_smokeintegrationphysics 冻结,bus traffic 正常,5s 不崩
integration_bus_route_local_globalintegration跨 body 消息从 BusBuffer → IBus → BusBuffer 正确

详见 Blueprint §6 Wave 2 原表(v1.0 未改写)。


4. Wave 3 · FCC + Mission + 全闭环

4.1 目标

三种部署都跑通:

  • sil_monolithic 全闭环 10s 无崩溃
  • hil_dyn 双进程通信稳定
  • hil_fcc 占位(实际 RTOS 板卡接入是后续工作)

4.2 行动清单

#行动涉及文档
1FCC 复活:git show main:src/fcc/... 整组迁回04_FCC/Free_Monad_DSL.md04_FCC/Interpreter_and_RWS.md
2适配 FccInFrame 从 BusMessage 组装(由 sim::body_tick 完成)06_Simulation/Body_World_Tick.md §2.2
3FccStage 代数:fcc/stage/FccStageOp.h + evolve_fcc_stage 自由函数04_FCC/FCC_State_Machine.md
4Per-stage 预编译:mission profile + Pipeline Factory04_FCC/Pipeline_Factory_and_Compilation.mdStatic_Compilation_FSM.md
5stages.yaml 加载:runtime::Assembler 解析为 FccEnv.stage_table[]07_Runtime/Assembler_and_Runner.md §3.2
6Mission YAML:data/input/missions/nominal_ascent.yaml07_Runtime/PCR_Configuration.md
7Deployment YAML:sil_monolithic.yaml + hil_dyn.yaml + hil_fcc.yaml07_Runtime/PlantScope.md §3
8closed_loop_10s.cpp 改名 ballistic_smoke_test.cpp
9新建 closed_loop_full.cpp:通过 Runner 跑全闭环07_Runtime/Assembler_and_Runner.md §5
10GNC 算法接入:fcc/algorithms/{nav,guidance,control}/ 实例化08_Cross_Cutting/Algorithm_Integration_Guide.md

4.3 守门

试验类别期望
integration_sil_full_10sintegration全闭环 10s,apogee ≈ 期望值(mission 配置)
integration_hil_dyn_loopbackintegrationlocalhost UDP,1s 内 50 FCC tick
integration_avionics_dry_5sintegrationphysics 冻结,FCC 完成完整调度循环
regression_main_vs_full_loopregression全闭环结果 vs main golden 误差 ≤ 1e-3

5. v2 文档完成状态

下表给出 v2 文档当前完成度(这是元信息,与 Wave 进度无关):

Batch主题状态
B101_Foundation✓ (4/4)
B202_Physical_World✓ (4/4)
B303_Avionics_and_Bus✓ (4/4)
B404_FCC✓ (5/5)
B505_Dynamics_Core✓ (4/4)
B606_Simulation✓ (4/4)
B707_Runtime + 08_Cross_Cutting + Foundation PATCH✓ (本批)

详见 00_Index.md 完整文件列表。


6. 删除 v0 Architecture 目录

v2 完成后,dev_doc/Architecture/ 整体删除(git 是唯一备份)。

删除前确认清单

  • [ ] 所有 v2 文档已 commit
  • [ ] Architecture_v2/Refactoring/PCR_Master_Blueprint.md 引用闭合
  • [ ] dev_doc/AGENTS.md 更新(Architecture/ 路径全部改为 Architecture_v2/

7. C-Distillation Roadmap(远期)

Blueprint §7.12:C-Distillation 软化——不强求一蹴而就,按子域分阶段。

阶段目标状态
阶段 1fcc/algorithms/ 全部 POD + 无堆分配Wave 3 之后启动
阶段 2fcc/interpreter/ 蜕化为 switch-caseTBD
阶段 3bus/ 静态 dispatchTBD
阶段 4simulation/pipeline/ 静态 scheduleTBD(HIL 真机部署的前置)
阶段 5dynamics_core/ode/ 整数定点版本可选(精度评估后决定)

每个子域都有自己的 C-Distillation 说明(参见各章节末"C-Distillation 路径"节)。


8. 引用

  • Blueprint §5(当前状态迁移基线)、§6(迁移计划四波)、§7.12(C-Distillation 软化)、§7.15–7.19(v1.0 新增裁定)
  • 00_Index.md(v2 文档全索引)
  • 所有 */AGENTS.md(子域局部行动指南)
  • 08_Cross_Cutting/Testing_Framework.md(每波守门测试如何组织)
  • 08_Cross_Cutting/Symmetric_RWS_Philosophy.md(演化中的不变核心)