構造最適化
ちょっとした経緯からTopology Optimizationが面白そうだったので、FreeCADで試してみました
当初自分の勉強用に始めたので、前半と後半で少し形状が異なるかもしれません。
ご容赦ください。
ゆがみはほぼ変わらず、体積をおおよそ半部とする形状を出力することができました
モデル | Z方向最大変位 | 体積 |
---|---|---|
最適化前 | -12.57㎛ | 11534 |
最適化後 | -17.49㎛ | 5816 |
最適化する前の形状を作成する
今回は、棚を支える三角形部分の形状最適化をすることにします。
以下は出来上がった形状をBlenderでレンダリングしたイメージ図です。
BESOスクリプトのダウンロード
FreeCADには標準ではToplogy最適化の機能はありません。調べたところ、以下のBESOスクリプトを用いるとできるようです。インストールは特にないのですが、FreeCADのアドオンディレクトリに展開してもよいと思います。
形状作成
まずは削る前の形状を設計します。この辺りはFreeCADの基本なのでかなりはしょります。
スケッチから、XZ平面を選択します。実際のところどの平面でも特に問題ないはずです。
5㎝の直角三角形を作成します。
Padで2㎝の厚みを出します。
FEM開始
ワークベンチをFEMへ切り替えます。
開くと、デフォルトのSolverだけがセットされています。
素材設定
”A”のマークをクリックすると解析コンテナーが追加されます。
次にこの形状を構成する素材を設定します。
鉄とプラスチックでは当然強さや変形の仕方が違いますからね。
追加されたMaterialSolidをダブルクリックして設定を開きます。
FEM材料が表示されるので、情報の▽をクリックして、適当な素材を選びます。
ここでは3Dプリンタでも用いられるABSを選びます。
固定境界条件
今回棚の支えを設計すると想像すると、一面は壁に固定され、上面から荷重がかかりますね。
ここでは壁に固定する面の設定を行います。
これを固定境界上限の設定と呼ぶらしいです。
画面上部に鍵のマークがついたアイコンをクリックします。
タスクに設定が表示されるので、「追加」ボタンをクリックしてから固定する面を選択します。
選択した面に赤マークが出ることを確認してOKをクリック。
荷重負荷
後は荷物が上面に置かれたら、面全体に荷重がかかると想定します。
理想的にはたわみなどがなければそうなるはずですよね。
アイコンで荷重負荷をクリックします。面に赤い矢印のアイコンです。
固定境界条件と同じように、圧力がかかる面を選択してOKをクリック。
私の環境では矢印の方向が面への方向ではなく逆方向だったので、設定にある「逆方向」にチェックをいれいました。
10㎏のものを2つの足で支えると想定し、荷重は49.00Nとしました。
Mesh
すると、FEMメッシュ作成のボタンが有効化されるので、今回はNが付いているNetGenをもちいてFEMMeshを生成します。
例によってパラメータがタスクに表示されます。
デフォルトでは分割が大きすぎるので、最大サイズを2㎜とします。
OKをクリックすると、AnalysisのしたにFEMMeshNetgenが追加されます。
これくらいのおおざっぱさでも1.9万のNodeが構成されたようです。体積が11534。
ソルバー計算の実行
モデルのなかから、「SolverCcxTools」を選択する。Sに実行の矢印が付いたアイコン。
するとAnalysisのしたに3つくらい項目が増える。
結果確認
CCX‗Resultをダブルクリックする。
画面上のこうもくで、
「変位Z」を選択。
変位のチェックボックスをクリックしてスライドバーを意味版右までもっていくとゆがみが分かるように表示される。
*どれくらい歪むかの値は、上記にこの例では最大12.57㎛とあるので非常に小さい。
#構造最適化
ここまでが準備でここからが本番。
Inpファイルの書き出し
「SolverCczxTools」をダブルクリックするとInpファイルの書き出しが可能となる。
念のため、日本語を含まないパスを設定して、「.Inpファイルの書き出し」をクリック。途中計算が大量に出力されるので、専用のフォルダを作成し、書き出しを行う方が良いです。
BESOマクロ実行
メニューのマクロからさらにその下にある「マクロ」を選択する。
マクロの実行画面がひょうじされるので、「ユーザーマクロの保存先」に、BESOを展開したフォルダを設定する。
一覧の中から「beso_fc_gui.py」を選択し、実行をクリックする。
左上の「Select analysis file」ボタンをクリックして、先ほど書き出した.Inpを選択。
「Mass goal ratio」を0.5として、目標を50%の質量とします。
あとはデカい「Generate conf. file and run optimization」ボタンをクリックします。
反応がなくわかりにくいですが、しばらくするとグラフが出ます。
重なって出たりするので、よく見ておきましょう…
表示されたグラフが更新されるのと、(表示していれば)ログも更新されます。
ある程度まで行くと変化がなくなりますが、止まるまで待ちます。
止まったら、グラフおよびマクロのウィンドウは×で閉じても構いません。
最適化結果確認
さて、BESOで作られた形状はどのような形でしょう。
形状確認
マクロが終了すると、フォルダに大量のファイルが作成され終了します。
ループごとに削減された形状、残った形状などの情報がのこされます。例えば、file020_state1.inpはループ20回目の残っている形状になります。
停止したフォルダの時系列で以後の_state1.inpをFreeCADへD&Dします。
再度変形を確認する。
SolverCcxToolsを選択し、Solver計算の実行を実行します。
結果がこちら。
モデル | Z方向最大変位 | 体積 |
---|---|---|
最適化前 | -12.57㎛ | 11534 |
最適化後 | -17.49㎛ | 5816 |