0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FreeCADで構造最適化

Last updated at Posted at 2025-03-02

構造最適化

ちょっとした経緯からTopology Optimizationが面白そうだったので、FreeCADで試してみました
当初自分の勉強用に始めたので、前半と後半で少し形状が異なるかもしれません。
ご容赦ください。

ゆがみはほぼ変わらず、体積をおおよそ半部とする形状を出力することができました

モデル Z方向最大変位 体積
最適化前 -12.57㎛ 11534
最適化後 -17.49㎛ 5816

最適化する前の形状を作成する

今回は、棚を支える三角形部分の形状最適化をすることにします。
以下は出来上がった形状をBlenderでレンダリングしたイメージ図です。

image.png

BESOスクリプトのダウンロード

FreeCADには標準ではToplogy最適化の機能はありません。調べたところ、以下のBESOスクリプトを用いるとできるようです。インストールは特にないのですが、FreeCADのアドオンディレクトリに展開してもよいと思います。

形状作成

まずは削る前の形状を設計します。この辺りはFreeCADの基本なのでかなりはしょります。

スケッチから、XZ平面を選択します。実際のところどの平面でも特に問題ないはずです。

image.png

5㎝の直角三角形を作成します。

image.png

Padで2㎝の厚みを出します。

image.png

FEM開始

ワークベンチをFEMへ切り替えます。
開くと、デフォルトのSolverだけがセットされています。

image.png

素材設定

”A”のマークをクリックすると解析コンテナーが追加されます。

image.png

次にこの形状を構成する素材を設定します。
鉄とプラスチックでは当然強さや変形の仕方が違いますからね。

”A”のマークの隣の黄色い球をクリックします。
image.png

追加されたMaterialSolidをダブルクリックして設定を開きます。
image.png

FEM材料が表示されるので、情報の▽をクリックして、適当な素材を選びます。
ここでは3Dプリンタでも用いられるABSを選びます。
image.png

固定境界条件

今回棚の支えを設計すると想像すると、一面は壁に固定され、上面から荷重がかかりますね。
ここでは壁に固定する面の設定を行います。

これを固定境界上限の設定と呼ぶらしいです。
画面上部に鍵のマークがついたアイコンをクリックします。

image.png

タスクに設定が表示されるので、「追加」ボタンをクリックしてから固定する面を選択します。

image.png

選択した面に赤マークが出ることを確認してOKをクリック。

image.png

荷重負荷

後は荷物が上面に置かれたら、面全体に荷重がかかると想定します。
理想的にはたわみなどがなければそうなるはずですよね。

アイコンで荷重負荷をクリックします。面に赤い矢印のアイコンです。
image.png

固定境界条件と同じように、圧力がかかる面を選択してOKをクリック。
私の環境では矢印の方向が面への方向ではなく逆方向だったので、設定にある「逆方向」にチェックをいれいました。
10㎏のものを2つの足で支えると想定し、荷重は49.00Nとしました。
image.png

Mesh

FEMメッシュを生成します。
まずはBodyを選択します。
image.png

すると、FEMメッシュ作成のボタンが有効化されるので、今回はNが付いているNetGenをもちいてFEMMeshを生成します。
image.png

例によってパラメータがタスクに表示されます。
デフォルトでは分割が大きすぎるので、最大サイズを2㎜とします。

image.png

OKをクリックすると、AnalysisのしたにFEMMeshNetgenが追加されます。
これくらいのおおざっぱさでも1.9万のNodeが構成されたようです。体積が11534。

image.png

ソルバー計算の実行

モデルのなかから、「SolverCcxTools」を選択する。Sに実行の矢印が付いたアイコン。
image.png

Solverの実行アイコンが有効になるので、クリックする。
image.png

するとAnalysisのしたに3つくらい項目が増える。

image.png

結果確認

CCX‗Resultをダブルクリックする。

画面上のこうもくで、
「変位Z」を選択。
変位のチェックボックスをクリックしてスライドバーを意味版右までもっていくとゆがみが分かるように表示される。
*どれくらい歪むかの値は、上記にこの例では最大12.57㎛とあるので非常に小さい。
image.png

image.png

#構造最適化

ここまでが準備でここからが本番。

Inpファイルの書き出し

「SolverCczxTools」をダブルクリックするとInpファイルの書き出しが可能となる。
念のため、日本語を含まないパスを設定して、「.Inpファイルの書き出し」をクリック。途中計算が大量に出力されるので、専用のフォルダを作成し、書き出しを行う方が良いです。

image.png

BESOマクロ実行

メニューのマクロからさらにその下にある「マクロ」を選択する。

マクロの実行画面がひょうじされるので、「ユーザーマクロの保存先」に、BESOを展開したフォルダを設定する。
image.png

一覧の中から「beso_fc_gui.py」を選択し、実行をクリックする。
image.png

左上の「Select analysis file」ボタンをクリックして、先ほど書き出した.Inpを選択。

image.png

「Mass goal ratio」を0.5として、目標を50%の質量とします。
image.png

あとはデカい「Generate conf. file and run optimization」ボタンをクリックします。
反応がなくわかりにくいですが、しばらくするとグラフが出ます。
重なって出たりするので、よく見ておきましょう…
image.png

表示されたグラフが更新されるのと、(表示していれば)ログも更新されます。
image.png

ある程度まで行くと変化がなくなりますが、止まるまで待ちます。
image.png

止まったら、グラフおよびマクロのウィンドウは×で閉じても構いません。

最適化結果確認

さて、BESOで作られた形状はどのような形でしょう。

形状確認

マクロが終了すると、フォルダに大量のファイルが作成され終了します。
ループごとに削減された形状、残った形状などの情報がのこされます。例えば、file020_state1.inpはループ20回目の残っている形状になります。

停止したフォルダの時系列で以後の_state1.inpをFreeCADへD&Dします。

image.png

再度変形を確認する。

SolverCcxToolsを選択し、Solver計算の実行を実行します。
結果がこちら。

image.png

モデル Z方向最大変位 体積
最適化前 -12.57㎛ 11534
最適化後 -17.49㎛ 5816
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?