220 lines
6.7 KiB
Markdown
220 lines
6.7 KiB
Markdown
# 构型开发规范
|
||
|
||
本文档说明如何在本项目中新增或维护行星减速器构型。目标是让复合行星、多级串联、差动行星等新构型沿同一套结构扩展,避免把公式、位姿、CAD 和验证逻辑散落到各个模块中。
|
||
|
||
## 1. 总流程
|
||
|
||
新增构型必须按以下链路接入:
|
||
|
||
```text
|
||
requirement schema
|
||
-> configuration registry
|
||
-> topology template/runtime
|
||
-> parameter solver
|
||
-> kinematics
|
||
-> placement solver
|
||
-> CAD generator
|
||
-> assembly reader
|
||
-> validators
|
||
-> tests/examples
|
||
```
|
||
|
||
每一步只承担自己的职责:
|
||
|
||
- requirement 只描述用户目标、边界条件、齿形和候选范围。
|
||
- configuration 只描述构型图和构型族专属规则。
|
||
- parameter solver 只枚举、过滤、评分,不写死答案。
|
||
- kinematics 只从图关系生成运动方程。
|
||
- placement solver 只计算零件位姿。
|
||
- CAD generator 只按参数和位姿生成真实几何。
|
||
- validators 只读取 instance、snapshot、placement 和真实 CAD 输出进行验证。
|
||
|
||
## 2. 构型目录规范
|
||
|
||
每个构型族必须有独立目录:
|
||
|
||
```text
|
||
src/configurations/<family_name>/
|
||
family.py
|
||
topology.template.json
|
||
placement_rules.py
|
||
input/requirements/reducers/<family_name>/
|
||
tests/
|
||
```
|
||
|
||
必须在 `src/configurations/registry.py` 中注册:
|
||
|
||
```python
|
||
CONFIGURATIONS = {
|
||
"<family_name>": ConfigurationSpec(
|
||
family="<family_name>",
|
||
package_dir=CONFIGURATION_ROOT / "<family_name>",
|
||
topology_template_path=CONFIGURATION_ROOT / "<family_name>" / "topology.template.json",
|
||
),
|
||
}
|
||
```
|
||
|
||
禁止在 CLI、CAD generator、validator 中通过硬编码路径读取构型模板。
|
||
|
||
## 3. topology template 规范
|
||
|
||
`topology.template.json` 只描述构型,不写死最终齿数或具体输出文件。
|
||
|
||
节点字段必须遵守:
|
||
|
||
```text
|
||
id
|
||
kind: gear / carrier / housing / axis
|
||
role
|
||
gear_type: external / internal / null
|
||
repeat: single / planet_count
|
||
formula_ref
|
||
stage_id
|
||
local_role
|
||
```
|
||
|
||
关系字段必须遵守:
|
||
|
||
```text
|
||
id
|
||
source
|
||
target
|
||
relation_type: external_mesh / internal_mesh / revolute_joint / fixed / rigid / coaxial
|
||
carrier_ref
|
||
mesh_id
|
||
formula_ref
|
||
stage_id
|
||
```
|
||
|
||
命名规则:
|
||
|
||
- 单级构型使用 `sun/ring/planet/carrier/housing/main_axis`。
|
||
- 多级构型使用 `s1_sun/s1_ring/s1_planet_1/s1_carrier` 这类 stage 前缀。
|
||
- repeated 节点由 runtime 展开,不要在模板里手写 `planet_1..planet_n`。
|
||
- 关系 id 必须能反查来源,例如 `sun_to_planet_external_mesh`、`s1_output_to_s2_input_rigid`。
|
||
|
||
如果要新增 relation type,必须先扩展 relation validator registry 和运动学方程生成逻辑,不能只在模板中写一个新字符串。
|
||
|
||
## 4. family 规则规范
|
||
|
||
`family.py` 只放构型族专属逻辑,例如:
|
||
|
||
- 构型专属齿数闭合公式。
|
||
- stage/component 命名辅助。
|
||
- 多级构型拓扑构造。
|
||
- 构型专属派生参数。
|
||
|
||
通用逻辑必须放到通用模块:
|
||
|
||
- 通用参数约束放 `src/parameter_constraints/` 或 parameter solver 的通用规则层。
|
||
- 通用运动学关系放 `src/kinematics.py` 和 `src/relation_validators/`。
|
||
- 通用工业装配关系放 `src/physical_validators/`。
|
||
- 通用齿轮生成放 `src/cad/gear_factory.py`。
|
||
|
||
禁止事项:
|
||
|
||
- solver 中不得写死某组齿数作为答案。
|
||
- family 规则不得读取旧 `output/runs`。
|
||
- validation 不得无条件 `overall_passed=true`。
|
||
- SimpleCADAPI/OCP 缺失时不得生成假文件。
|
||
|
||
## 5. 参数求解规范
|
||
|
||
每个构型必须明确:
|
||
|
||
- 候选变量:齿数、模数、行星数、stage 数、齿形参数等。
|
||
- 闭合公式:例如 `z_ring = z_sun + 2 * z_planet`。
|
||
- 装配条件:例如行星均布、中心距一致、邻近行星间隙。
|
||
- 边界条件:input/fixed/output 或 fixed_members。
|
||
- 评分依据:ratio_error、外径、间隙、齿数惩罚等。
|
||
|
||
最终速比必须由图驱动运动学求解得到,不能只用手写传动比公式作为通过依据。手写公式只能用于搜索优化或静态交叉验证。
|
||
|
||
## 6. PlacementSolver 规范
|
||
|
||
每个构型必须注册 placement solver,并输出统一 `PlacementPlan`。
|
||
|
||
每个真实组件必须有 `ComponentPose`:
|
||
|
||
```text
|
||
component_id
|
||
frame_id
|
||
parent_frame_id
|
||
translation_mm
|
||
rotation_axis_angle_deg
|
||
axis_xyz
|
||
center_xyz_mm
|
||
source_relation_ids
|
||
source_formula_refs
|
||
details
|
||
```
|
||
|
||
约束:
|
||
|
||
- `center_xyz_mm`、`axis_xyz`、`rotation_axis_angle_deg` 必须来自 `PlacementPlan`。
|
||
- CAD manifest 中的位姿必须与 `placement_plan.json` 一致。
|
||
- CAD generator 不允许重新计算 planet、pin、bearing、spacer、bolt 等坐标。
|
||
- stage 构型必须使用 frame + z offset,不要把绝对坐标散落在 CAD 代码里。
|
||
|
||
## 7. CAD 生成规范
|
||
|
||
CAD generator 的职责是按参数和 placement 生成真实几何:
|
||
|
||
- 齿轮使用 `gear_factory`。
|
||
- 装配坐标使用 `PlacementPlan`。
|
||
- 输出真实 `STEP/model.json/session.json/assembly_manifest.json/build_meta.json`。
|
||
- `assembly_manifest.components[*]` 必须能反查 formula node、stage/local_role、tooth_count、module、center、axis、assembled_step_path。
|
||
|
||
如果某个构型暂时没有 CAD 能力,CLI generate/run 必须明确失败,例如 `unsupported_topology_family_for_cad`,不能生成占位 STEP。
|
||
|
||
## 8. 验证规范
|
||
|
||
验证分三层:
|
||
|
||
```text
|
||
relation validators
|
||
family validators
|
||
geometry/OCP validators
|
||
```
|
||
|
||
relation validators 自动覆盖:
|
||
|
||
- `external_mesh`
|
||
- `internal_mesh`
|
||
- `revolute_joint`
|
||
- `fixed`
|
||
- `rigid`
|
||
- `coaxial`
|
||
|
||
family validators 只写构型族专属公式,例如齿数闭合、stage coupling、复合行星同轴齿轮组等。
|
||
|
||
几何验证必须读取真实 STEP/component STEP:
|
||
|
||
- STEP 存在且非空。
|
||
- 组件体积 > 0。
|
||
- 中心距、同轴、均布、轴向 offset 正确。
|
||
- OCP 正体积干涉必须失败,并报告 component pair、common volume、possible cause。
|
||
|
||
## 9. 最小验收文件
|
||
|
||
每个新构型至少提供:
|
||
|
||
- 示例 requirement:`input/requirements/reducers/<family_name>/<example>.json`
|
||
- 构型模板:`src/configurations/<family_name>/topology.template.json`
|
||
- family 逻辑:`src/configurations/<family_name>/family.py`
|
||
- placement solver:`src/placement/<family_name>.py`
|
||
- 注册项:configuration registry 和 placement registry
|
||
- 单元测试:注册、拓扑展开、参数求解、运动学、placement
|
||
- CAD 集成测试:真实 STEP/model/session/manifest、placement 一致、validation report
|
||
|
||
## 10. 推荐新增构型顺序
|
||
|
||
建议优先:
|
||
|
||
1. 复合行星 / stepped planet:一个行星轴上多个齿轮,验证图驱动和 placement 扩展能力。
|
||
2. 差动行星:支持两个输入或一个输入一个控制输入。
|
||
3. 任意 N 级 cascade:从固定两级扩展为 stage list。
|
||
4. RV / 摆线针轮:单独作为新传动族处理。
|
||
|
||
新增构型时先做 `kinematic_demo`,再做 `industrial_core`,最后再接入关节模组。
|