Skip to content

Repository files navigation

gearbox-design-compiler

小型ロボット向け遊星減速機の 設計候補生成 → 評価 → 軽量/詳細CAD生成 を行うツール。 YAML 入力から候補を列挙・スコアリングし、BOM/レポートを出力。FreeCAD を CAD バックエンドとして 軽量レイアウト(phase 2)と詳細歯形 STEP(phase 3)を生成する。設計判断ロジックは FreeCAD なしで動く。

詳細仕様は ai/project_spec.yaml / ai/project_work_flow.yaml / ai/job_system_spec.yaml を参照。

⚠️ 機械的成立は保証しない。出力の estimates / assumptions / risk_notes は概算で、実機検証が前提。

セットアップ

python -m venv .venv
./.venv/Scripts/python.exe -m pip install -r requirements.txt   # ランタイム依存は PyYAML のみ
./.venv/Scripts/python.exe -m pip install -e .                  # パッケージを import 可能に
# 開発用: pip install pytest ruff

FreeCAD(phase 2/3 の STEP 生成)は別途インストール(既定の探索先 C:/Program Files/FreeCAD*/bin/freecadcmd.exe、 または環境変数 GEARBOX_FREECADCMD で指定)。

使い方

0. 対話デザイン CLI(config → 候補を選ぶ → CAD まで一括)

# 1 行で実行(PowerShell の行継続は `\` ではなくバックティック)
./.venv/Scripts/python.exe -m gearbox_planner.design --config configs/examples/planetary_mvp.yaml --out outputs/my_design

YAML を 1 つ用意したら、表示される候補表から番号を選ぶだけで selected_candidate.json + FreeCAD アセンブリ(cad/)まで生成。非対話は --select 2(単段)/ --select 1,1(多段は各段)。--no-cad で計画・選択のみ。 二段は各段で候補を選び、一体の連結アセンブリ(cad_train/planetary_train.step)を出力。

1. 候補生成(planning, CAD 不要)

./.venv/Scripts/python.exe -m gearbox_planner.plan --config configs/examples/planetary_mvp.yaml --out outputs/test_run

出力(outputs/test_run/): candidate_report.md / candidates.json / rejected_candidates.json / bom.csv / run_log.txt

二段遊星: 入力 YAML に stages(各段の ratio と大きさを手動指定)を書くと多段トレインを 設計する。合計減速比=各段の積、トルクは段間で分配(最終段が目標トルク)。 例: configs/examples/planetary_two_stage.yaml (4×5=20)。candidates.json は {type: multi_stage, stages: [...]} 形式。CAD は run_freecad.py manufacturing <candidates.json> <out> <stage_index> で各段を、 ... <out> all で全段を積み上げた一体トレイン(planetary_train.step)を生成。

2. パラメータ掃引(sweep)

./.venv/Scripts/python.exe -m gearbox_jobs.sweep --config configs/examples/planetary_sweep.yaml --out outputs/sweeps/run1

→ sweep_summary.csv / ranked_candidates.json / sweep_report.md

3. ジョブランナー(file ベースキュー)

./.venv/Scripts/python.exe -m gearbox_jobs.runner --once     # 次の pending を1件実行
./.venv/Scripts/python.exe -m gearbox_jobs.runner --all      # pending を全実行
./.venv/Scripts/python.exe -m gearbox_jobs.list              # キュー状況
./.venv/Scripts/python.exe -m gearbox_jobs.summarize --root outputs/jobs

ジョブ定義は jobs/pending/*.yaml(例: jobs/pending/planetary_001.yaml)。 状態は pending → running → succeeded/failed/skipped に移動。job_type: plan / sweep / export_layout / export_manufacturing。

4. CAD 生成(FreeCAD)

FreeCAD は CLI フラグ・位置引数を横取りするため、venv ラッパ scripts/run_freecad.py (freecadcmd を解決し環境変数を渡す)経由で実行するのが簡単:

# phase 2: 軽量レイアウト(envelope.step / layout.step / gearbox_layout.FCStd / layout.svg)
./.venv/Scripts/python.exe scripts/run_freecad.py layout outputs/test_run/candidates.json outputs/test_run/cad 0

# phase 3: 印刷可能な組立(2分割ハウジング / 2枚キャリア / 入出力軸 / 型番付きベアリング円筒 / ねじ)
#          STEP(Import.export で名前付き) / FCStd / manufacturing.svg / 印刷用 offset STL(stl/) を出力
./.venv/Scripts/python.exe scripts/run_freecad.py manufacturing outputs/test_run/candidates.json outputs/test_run/cad 0

# 二段(candidates.json が multi_stage)の一体トレイン:  最後の引数を all に
./.venv/Scripts/python.exe scripts/run_freecad.py manufacturing outputs/two_stage/candidates.json outputs/two_stage/cad_train all

phase 3 は印刷可能・組立可能なアセンブリを出力する。固定ハウジングは2分割:

  • ring_housing: 内歯バレル+上(出力)側ベアリング座を一体化。ねじ穴はギアから離すため バレル外径を自動拡大(穴縁がリング歯元から ≥1.5·壁厚)。
  • bearing_cap_lower: 下(入力)側ベアリングを保持する別体キャップ。スピゴットでバレルに はめ込み(上下ベアリングの同軸出し)+ねじ留め。

回転出力は2枚の板に分割(一体ブロックを避け、造形性・強度を改善):

  • carrier_lower_plate: 遊星ピン一体。中心穴は大きく、下から sun_gear を挿入可能。
  • output_plate: 出力軸一体、遊星ピン頭を受ける。housing.output_coupling: hex で六角ボスにも。

座の肩逃げ径は 外輪のみ接触(OD−0.3·(OD−bore)、回転内輪を逃がす)。ベアリングの抜け止めは 入出力軸+スペーサ前提(追加形状なし)。sun_gear は入力軸を圧入、遊星はすべり/フランジブッシュ (フランジ用ザグリ)/ベアリングを選択可。出力: planetary_manufacturing.step(Import.export で STEP product 名=ボディ名、Inventor 可視)/ planetary.FCStd / manufacturing.svg / stl/<body>.stl (print_offsets: gear_backlash / shaft_clearance / fit_clearance / outer_offset を適用)。 各ベアリングは型番名の OD/ID/高さ円筒で配置。

*.svg は FreeCAD 不要で生成される即時可視化(前面/側面/歯形)。GEARBOX_INDEX で候補リスト中の インデックスを選択(0 = 最良)。ジョブランナー経由(export_layout / export_manufacturing)でも実行可。

5. 部品カタログの再生成

./.venv/Scripts/python.exe scripts/catalogue/build_catalogue.py

data/catalogue/ のカタログから転記したデータで data/parts/misumi_bearings.csv / data/parts/oiles_bushings.csv / data/materials/*.csv を生成。新カタログは scripts/catalogue/build_catalogue.py に表を追加すれば ローダが自動マージ(*bearings.csv / *bushings.csv)。

入力 YAML(要点)

target:        { ratio: {target, tolerance_percent}, output_torque_nm, max_diameter_mm, max_length_mm }
manufacturing: { preferred_method: fdm_3d_print|desktop_cnc, min_module_mm,
                 nozzle_diameter_mm: 0.4, min_wall_thickness_mm: 0.8 }   # FDM printability
bearings:      { policy: require_standard|prefer_standard|allow_bushing, output_shaft_diameter_mm, load_safety_factor }
shaft:         { material: PLA|ABS|PETG|A5052|SUS304, diameter_mm, safety_factor, overhang_length_mm }
supports:      { input_shaft_diameter_mm, input_policy: prefer_ball_bearing,
                 planet_bore_diameter_mm, planet_policy: ball_bearing|bushing|sliding }
gears:         { planet_count, pressure_angle_deg, module_mm_options, sun/planet_teeth_min/max, face_width_mm }

完全な例: configs/examples/planetary_mvp.yaml

候補の評価ステージ(reject 理由は machine-readable に出力)

ratio → assembly → size → manufacturing → shaft → bearings → diameter → rating → supports

  • ratio: ring=sun+2·planet, ratio=ring/sun+1、許容誤差で判定
  • assembly: 等配条件 (sun+ring)%N==0 と隣接遊星の干渉
  • size: 外径/全長の上限
  • manufacturing: 最小モジュール、最小歯数、FDM のノズル径(歯厚 π·m/2 ≥ nozzle)・壁厚(≥ 2·nozzle)
  • shaft: 曲げによる必要軸径 d=(32M/πσ)^{1/3}(材料許容曲げ応力 ÷ 安全率、軸長 overhang)
  • bearings/diameter/rating: 出力軸支持の内径一致・包絡内収まり・定格(min(Cr/SF, Cor) / ブッシュ面圧)
  • supports: 入力軸(玉軸受優先)・遊星(すべり可)の per-location 選定

スコア(compactness/size/backlash/cost/reliability の加重 0–100)と score_breakdown を付与。

データ / ディレクトリ

パス 内容
src/gearbox_planner/ 純設計ロジック(FreeCAD 非依存)
src/gearbox_jobs/ file ベースのジョブ/掃引
src/freecad_export/ CAD 生成(*_model/svg_view/gear_geometry は FreeCAD 非依存、*_generator は FreeCAD)
data/parts/, data/materials/ 部品 DB・材料物性(CSV)
data/catalogue/ 出典カタログ(PDF/画像)
configs/examples/ 入力 YAML 例
ai/ 仕様・タスク・レビュー方針
outputs/, jobs/{running,…} 生成物・キュー状態(git 管理外)

テスト / Lint

./.venv/Scripts/python.exe -m pytest
./.venv/Scripts/python.exe -m ruff check .
./.venv/Scripts/python.exe -m ruff format --check .
./.venv/Scripts/python.exe -m compileall src tests scripts

実装状況

  • ✅ phase 1: 遊星1段の候補生成・評価・レポート/BOM
  • ✅ phase 2: 軽量レイアウト STEP(envelope/layout)+ FCStd + SVG
  • ✅ phase 3: 詳細インボリュート歯形 STEP(sun/planet/内歯リング/キャリア)+ FCStd + SVG
  • ⏳ 今後: cycloidal、多段、強度/寿命の高精度化、FreeCAD Workbench 化

About

CLI tool to automately build gearbox CAD data using FreeCAD function

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages