RESEARCH NOTE / 01 FGF 変形補正 PoC

形を、
先に整える。

冷えたあとに、目標の形へ。
造形前の形状を補正する、小さな研究。

ペレットから樹脂を積層するFGF(Fused Granulate Fabrication)。造形・冷却で生じる変形を見越して、入力形状を調整する方法を探っています。

収縮と補正を体験する
目標形状と先回りして補正したメッシュの概念図青緑の補正候補と、濃紺の目標形状を重ねた壁状メッシュ。実測データや解析結果ではない。 TARGET / 100 mmCONCEPT MESHNOT SIMULATION DATA 補正候補
補正候補目標形状概念図 / 縮尺・変形は模式的
PYTHON + NUMPY / LOCAL RESEARCHP0 数値検証済み・実機未検証

01 / PRINCIPLE

変形を予測して、
逆向きに補正する。

目標は固定したまま、候補形状だけを更新。予測した形と目標の差を測り、評価済み候補の中から最も誤差の小さいものを残します。

01

目標を固定

入力メッシュの頂点と接続関係を保持。まず「どの形に戻したいか」を決めます。

02

収縮を予測

P0では固定原点から一様に縮むと仮定。冷却の物理解析ではなく、答えのわかる試験モデルです。

03

差を戻す

対応する頂点同士の誤差を使い、候補座標を反対方向へ動かして再評価します。

P0 MODEL予測 = 原点 + (候補 − 原点) × (1 − 収縮率)

縮尺合わせや剛体位置合わせはせず、固定した頂点IDの対応で比較します。

02 / INTERACTIVE EXPLAINER

100 mmを、
100 mmに戻すには。

一方向だけの一様収縮を考えてみます。収縮率を変えると、補正前の寸法と理想的な補正寸法が変わります。

TARGET LENGTH

100 mm

2%は試験用の仮定。材料の実測値ではありません。

目標100.000 mm
補正なし → 収縮後98.000 mm
理想補正 → 収縮前102.041 mm
理想補正後の予測寸法100.000 mm

補正なしの端点誤差:2.000 mm

理想補正寸法 = 100 ÷ (1 − 収縮率) / バーは共通の長さ基準で表示

仕組みを説明する1Dデモです。

ブラウザー内の簡単な式で計算します。Pythonコアの実行、反復補正、3D解析、実物の予測ではありません。この100 mmの端点誤差と、下記検証の3D最大点誤差は別の指標です。

03 / IMPLEMENTATION

小さく実装し、
追跡できる結果を残す。

Python + NumPyのローカルCLI。P0の反復補正、入力・設定・評価結果の保存、読戻し検証までを実装しています。

A / COMPUTE

評価済みの最良候補

最大点誤差が最小の候補を保存。悪化すると補正率を下げます。目標形状・接続関係は変えません。

B / RECORD

計算の条件を残す

元入力、単位、設定、各反復、誤差CSV、最終メッシュを保存。NPZが計算原本です。

C / VERIFY

保存後に、もう一度照合

SHA-256、再予測、誤差、最良候補と出力の一致を確認。ハッシュは破損検出用で、署名ではありません。

入力と出力の境界

形状形式の実装と検証範囲
形式現在の対応制限・確認範囲
OBJ / STL取込対応単位指定が必須。複数対象は選択し、勝手に結合・修復しません。
3dmmeshのみ宣言単位をmmへ変換。Brep・instance・curveは非対応。Rhino側のメッシュ化ブリッジは未実装です。
STEP / STP任意CAD依存Linuxで生成ソリッドの取込・寸法照合に成功。Macの実読込は未確認。組立階層・元単位の抽出・曲面近似の収束は未完了です。
補正形状の出力NPZ / OBJ / STL最終メッシュはmm。STL読込先でもmmを指定。補正STEP・3dm・NURBS復元は未実装です。

まだ、できないこと。

熱・構造解析、反り、実材料の冷却予測、実機対応、計算再開、ソフト本体のUI/API。自己交差・水密性・薄肉化・ベッド接触・造形範囲・スライス可否も判定しません。Runの処理終了は、収束や印刷可能性の保証ではありません。

04 / EVIDENCE — 2026.10.12

確認できたことを、
数字で切り分ける。

以下は既知の試験モデルとソフトウェアの検証結果です。実際の造形物を測った値ではありません。

P0 / 3D MAX POINT ERROR

0.009201mm

100 × 2 × 10 mmの壁。仮定収縮2%、補正率0.5で8回。対応頂点間の3Dユークリッド距離の最大値。

LOCAL / CORE TESTS

49passed

STEPの実読込は1件skip。3dm mesh、単位変換、保存破損検出、仮想経路往復、実機出力拒否などを確認。

LINUX / CI

3jobs passed

コア+3dmの2ジョブ、CAD取込の1ジョブが成功。生成STEPソリッドも寸法照合済み。全OS・任意CADの保証ではありません。

検証対象:P0 / 固定頂点対応 / 保存と読戻し / 研究用経路計算上の改善 ≠ 実物の精度

05 / ROADMAP

既知の答えから、
実物の答えへ。

モデルを複雑にする前に、検証できる条件を一段ずつ増やします。後続段階は計画であり、実装済みの性能ではありません。

  1. P0

    実装・数値検証済み

    一様収縮で、補正の土台を確認

    固定目標、反復補正、停止理由、最良候補、保存と読戻し。

  2. P1

    未実装 / 計画

    温度履歴を扱う

    積層の時刻と冷却を結び、材料グレード・物性・仮定を整理する。

  3. P2

    未実装 / 計画

    壁・板の変形と反りへ

    小変形モデルを接続し、単純な形状で予測と補正を検証する。

  4. 実機

    未検証 / 装置条件の確認から

    未補正品と補正品を、測って比較

    実材料、押出校正、装置別経路、スライサー、印刷用G-codeを整備。装置の安全と実測精度を確認する。

06 / LOCAL CLI

実行するなら、
ローカルで。

ソフト本体を別途用意し、Python 3.11以上でコア依存を導入した環境の例です。このサイトからソフト本体の取得・計算・ファイル送信はできません。

出力先は存在しないフォルダを指定。verifyは保存結果を照合し、statusは状態を表示します。

EXAMPLE / P0READ → RUN → VERIFY
python examples/generate_demo.py
fgf validate examples/generated/wall_mm.obj --units mm
fgf run examples/generated/wall_mm.obj \
  --units mm --config examples/p0.json --out runs/demo
fgf verify runs/demo
fgf status runs/demo

本体のセットアップ後に実行する例。端末上のPythonとCLIが有効な環境を想定しています。

07 / QUESTIONS

よくある疑問。

このサイトで、形状を補正できますか?

できません。研究の内容を紹介するサイトで、操作できるのは説明用の1Dデモだけです。Pythonコアや形状アップロード、3D計算機能は接続していません。

2%の収縮率をPLA・ABS・PETGに使えますか?

実材料の値としては使えません。2%はP0検証の仮定値です。材料グレード・温度・造形条件・測定条件を揃えた予測精度は、まだ確認していません。

0.009201 mmは、印刷精度ですか?

いいえ。既知の収縮モデルに対し、対応する3D頂点間の最大距離を測った数値です。100 mmの1D端点誤差とも、造形物を測定した精度とも異なります。

仮想G-codeをプリンターに送れますか?

送れません。research-wallは指定寸法から独立した直線壁経路を作る研究機能で、補正メッシュのスライスではありません。virtual_machine_RESEARCH_ONLY.gcodeはEをmm³と定義した仮想方言。熱・構造予測への接続も未実装です。実機印刷用出力は明示的に拒否し、ファイル名を変えても印刷用にはなりません。

RhinoやSTEPの形状は使えますか?

3dmはmeshのみ対応し、Brep・instance・curveは非対応です。STEPは任意CAD依存が必要で、Linuxの生成ソリッドは成功、Macの実読込は未確認です。ユーザーの実ファイル、組立階層、曲面近似の収束、任意OSでの互換性は未確認です。

途中から再開できますか?

計算再開は非対応です。resumeは明示的に拒否します。設定と評価済み結果は保存しますが、途中状態を流用せず、新しいRunとして実行してください。