3Dモデルをいろいろ作ってみたい

3Dモデルをいろいろ作ろうとがんばっています。苦労した点、役に立ちそうな情報を発信していきます。

ロボット骨格にボディアーマーを装着する

ロボット骨格試作3号機をもう1台制作、ボディアーマーのパーツを作って装着してみました。

f:id:ichidaya:20191123201929j:plain

ボディアーマーの装着

骨格だけ(下図の右)と比べるとちょっとだけロボットらしさがでてきたかなという感じです。

f:id:ichidaya:20191123202153j:plain

アーマー装着後と装着前

 

ロボットの骨格を作る その3

ロボット骨格の試作3号機です。

f:id:ichidaya:20191110224840j:plain

試作3号機

今回はボールジョイントではなくて、軸受け2つを重ねた穴に円柱状のシャフトを差し込んで関節を作りました(下図参照)。

f:id:ichidaya:20191110182733j:plain

関節の構造

腰の部分はこんな感じ(首も同様)。

f:id:ichidaya:20191110212337j:plain

腰の回転部分

ボールジョイントと違って自由度は1軸だけなので肩や股の部分はジョイントを2つ使っています。部品数が増えて構造が複雑になりましたが大きさ的には試作2号機(下図右)と同じくらいに収まりました。

f:id:ichidaya:20191110211749j:plain

今回の試作3号機(左)と試作2号機(右)

工夫したのは軸や軸受けの各所に切れ目というかスリットを入れたことです。靭性が低いPLA樹脂ですがこういったスリットをいれておけた軸受けの穴に対して軸の太さが多少きつくても許容できるのではないかと考えたのです。

f:id:ichidaya:20191110212644j:plain

スリットをいれた軸受け

今回は軸受けを3D出力するさいの配置にも注意しています。FDM型の3Dプリンタの造形物は積層面に沿った水平な力に対して特に脆くなってしまいます。下図の左のような配置で出力すると、部品をはめ合わせるときにちょっと無理に押し込むと軸受けの根本でぼっきりと折れてしまいます。右のような配置にしておけばいくぶん無理に押し込んでも(力の方向と積層面が垂直なので)折れずにもってくれます。

f:id:ichidaya:20191110213926j:plain

3Dプリントするときの配置

 試作3号機では各関節の可動域が基本180度あるのでポーズつけの自由度が大幅に向上しました。また、部品をはめ合わせるときゆるゆるになるまで削らなくて多少きつい状態で壊れずに押し込むことができるので、関節を回転した位置での保持ができるようになりました(その分、関節を動かすのにかなり力をいれないと動かないということもありますが)。

f:id:ichidaya:20191110215345j:plain

試作3号機でのポーズ付け

 

ロボットの骨格を作る その2

10月1か月のほとんどの期間はロボット骨格の試作2号機に費やしました(以下は失敗作の数々)。

f:id:ichidaya:20191027214032p:plain

試作品(失敗作の数々)



以前に作ったボールジョイントはジョイントを所望の位置で保っておく力が弱くで骨格周りに部品をつけるともうポーズを保っていられない、自立もできないという問題点おおありの試作品でした。当初はとにかくポーズがとれるものが作れたということだけで成功した気分だったのですが、冷静に考えてみるといろんなデザインのロボットに発展させていくベースとしてはまだまだ不十分です。

試作1号のようなオスとメスを別々に作って後からはめ込むタイプのボールジョイントでもABS樹脂で作ればパチンとはめ込むことができるのかもしれません。ただ、PLA樹脂(個人的な好み等、種々の理由により当面ABSのフィラメントには手をださないつもり)だとABSとの比較で靭性が低い(硬くてもろい)ため、壊れないではめ込めるような余裕のある寸法で作る必要があります。結果、はめ合いが緩くなってオスとメスとで接する面での摩擦が小さい、つまり関節を回すことができてもその位置で保持できないということになります。

Thingiverseを調べると、後からはめこむのではなくて最初からオスとメスをはめ合わせた状態で3D出力しているジョイントもありました。ただ、この方法にはそれなりの精度(0.05mmと書かれていた)で出力できる3Dプリンタが必要です。わがAdventure 3の水平方向解像度は0.2mmということでちょっと難しそう。

 いっそのこと自分で作るのはやめてプラモデル改造用に市販されているボールジョイントを使おうかとも考えました。プロの人が作ったガレージキットでも可動部には市販ボールジョイントを使ってそれ以外の造形に注力している例があります。ただ、個人的経験で以前に別の工作で市販ボールジョイントを購入して使いこなせなかった(固くてはまらん!!)トラウマがあるのと、1パッケージ数百円でこちらが使いたい大きさのジョイントの数は10程度(ロボット1体分に足りるか微妙)というコスパの悪さが気になってふみきれません。

市販品を使うのは最後の手段として残しておいてもう少し自社制作でがんばってみようということで、今回はメス型を2つに分けてオス型を挟み込むかたちで接着する構造にしてみました。

f:id:ichidaya:20191027234631p:plain

今回設計したジョイントの構造

はめ合わせが緩くならないようオス型とメス型の間のクリアランスはあまりとらずに3D出力し、仮組みしながらオス型をやすりやルーターで削って良さげになったら瞬間接着剤でメス型同士を接着しています。

手足、腰の関節を作って繋いでみたのがこんな感じ。

f:id:ichidaya:20191027235419p:plain

ロボット骨格試作2号

前回より全体に大きくして 足裏の面積を増やしたこともあって、今回は自分で立つことができます。

f:id:ichidaya:20191027235701p:plain

立ちポーズ

多少のポージングも可能です。

f:id:ichidaya:20191028000046p:plain

ちょっとだけポーズをつけてみた

各関節の位置の保持については試作1号からだいぶ改善はされているものの、場所によって固かったり緩かったりというばらつきがあります。また、オスとメスの接する面積を十分にとろうと形を作ったら関節の可動域がかなり狭くなってしいました。

というわけで試行錯誤はまだまだ続きます。

Thingiverseに3Dモデルを公開しました

先日作成した宇宙船ですが、せっかくならとThingiverse

https://www.thingiverse.com/thing:3877842

に3Dモデルを公開しました。

f:id:ichidaya:20190921123048j:plain

宇宙船

こんなものでも意外とダウンロードしてくれる人もいたので、お世話になっているコミュニティへのGive backの意味もかねて、作成が一段落した3DモデルについてはOBJファイルをThingiverse公開していこうと思います。

 

と言っても人に見せられるレベルのモデルがそうあるわけでもなくとりあえずはこれまで作ってきた日本の立体地図パズルに沖縄を加えて47都道府県そろえたものを登録しました。

f:id:ichidaya:20190907221544j:plain

日本地図パズル

ファイルのサイズや数に制限があるように見えた(後から試したらそういうわけでもないらしい)ので3つに分けて登録しています。

https://www.thingiverse.com/thing:3886688

https://www.thingiverse.com/thing:3886714

https://www.thingiverse.com/thing:3886732

 

Scriptを作成してモデリング作業の効率アップ

前回記事のロフト操作だけで宇宙船を造形するというアイデアは半年くらい前から温めていたのですが、試してみるとけっこう手間がかかるためなかなか完成できないというのが実情でした。

 

ichidaya.hatenablog.jp

 

基準となる平面を選択後に長さを指定してオフセット平面を作る、その平面でスケッチを開く、中心点の指定と長軸、短軸の長さを指定して楕円を書いてスケッチを閉じる、これだけ操作して断面の楕円形が1個できあがりです。この一連の操作を何回か繰り返してロフト操作を実施してやっと1個の形状が完成です。宇宙船の胴体部分など所望のかたちにするのに断面を10個ぐらい定義しなければならず、めんどくさがり屋は作業を続ける気力が尽きてしまいます。

そこで宇宙船のモデリングの前にこういった機械的作業を簡単にするためのスクリプトを作成することにしました。Fusion 360はユーザーが自分で機能を拡張できるようAPIを提供してくれており、PythonまたはC++でプログラミングを行えます。私は試行錯誤がしやすいPythonを使うことにしました。

Shift-Sの押下でスクリプトとアドインダイアログが立ち上がり、そこから作成ボタンでスクリプトの編集や実行が可能です。

f:id:ichidaya:20190923000320p:plain

スクリプトとアドインダイアログ

作成したスクリプトBodyGeneratorMk2を起動します。現れたダイアログで左下のAddボタンをクリックすることで楕円がZ軸(画面上の青い軸)に沿って追加されそれらで作られる形状がプレビュー表示されます。ダイアログのテーブル内の数字(単位はmm)を変更することで楕円(この例では円)の大きさや位置を変更できます。気に入った形状になったらOKボタンを押して確定します。

f:id:ichidaya:20190923102130p:plain

BodyGeneratorスクリプト使用例(1)

 中心高さの値を変えていくと楕円の中心位置をずらしていくことができます。断面を並べる軸をY軸に変更すれば翼のような形状を作ることもできます。

f:id:ichidaya:20190923104445p:plain

BodyGeneratorスクリプト使用例(2)

このスクリプトを使って前述の宇宙船モデルを根気を切らすことなく作ることができました。参考までにスクリプトのソースを載せておきます。

www.dropbox.com

 ここから先はプログラミングに関する覚書です。作成したスクリプトの全体構造を示すクラス図を下に示します。仮称でmainとしているのは作成するスクリプトの本体でこの中のrun()メソッドがFusion 360から呼び出されて処理がはじまります。run()メソッド中ではCommandDefinitionとMyCommandCreateHandlerの2つのクラスのインスタンスを作成しています。CommandDefinitionは実行例の画面にでてくる入力用のダイアログボックスを表すクラスです。CommandDefinitionが保持しているXXXXInputクラスはダイアログボックス内の数値入力のフィールドやボタンに対応しています。数値が入力されたりボタンが押されたときの処理を行うイベントハンドラ(MyCommandInputChangedHadler、MyCommnadExecuteHandler)はMyCommandCreateHandlerが作成してCommandDefinitionに登録しています。

f:id:ichidaya:20190923110452p:plain

BodyGeneratorスクリプトのUIの構造

 作成される形状に相当するのはShapeクラスです。ダイアログ中のOKボタンが押下されたときに実行されるMyCommnadExecuteHandlerのnotify()メソッドの中でShapeのインスタンスが作成されます。ShapeインスタンスのbuidlShape()メソッドは以下の図にあるようなFusion 360提供のクラスを使って形状を作っています。コンストラクション平面やスケッチ、プロファイルなどマニュアルで作業を行うときに扱うオブジェクトごとにAPIが準備されています。

f:id:ichidaya:20190923135116p:plain

3D形状のクラス構造

 

楕円形のロフト操作だけで宇宙船を造形する

どうやったら造形のセンスが全くない私がかっこよいSFメカをデザインすることができるのかと悩んでいたところ、amazonでこんな本を見つけました。

https://www.amazon.co.jp/零士メーターから始めるSFメカの描き方-板橋克己/dp/4768308813

f:id:ichidaya:20190918232202j:plain

零士メーターから始めるSFメカの描き方

著者の板橋克己氏によると円や矩形などの単純な図形を組み合わせていくことで宇宙船などのSFメカを描くできるとのこと。この本には具体的な例が多数掲載されています。そうは言われても、単純な図形とはいえ二次元の世界だとパースや透視法を意識してきちんと描くのは私には困難です。しかし、三次元の世界ならFusion360のようなツールを使えば絵のセンスの無さや手先の不器用さはそれほど致命的な障壁にならないかもしれない。そう考えて、楕円と楕円同士のロフト(断面同士をつないでかたちを作る機能)だけで宇宙船を作ることに挑戦しました。

 まずはメインの胴体部分です。本当に単純な円をつないでいるだけですが、断面を絞ったり膨らませたりすることで形状にアクセントをつけることができるということで試してみました。

f:id:ichidaya:20190919230217p:plain

円をロフトでつないで作った胴体

 バルジと呼ばれるふくらみを胴体に付加することでもアクセントををつけることができます。バルジ自体は楕円形のロフトで作れる単純な形状ですがこれを円周上に配置して胴体に加えるとちょっとだけ宇宙船ぽいかたちになってきました。

f:id:ichidaya:20190919233255p:plain

バルジ(左)と胴体に付加した例(右)

バルジの大きさを変えたり、付加ではなく削る操作にすることでさらにバリエーションをつけることができます。

f:id:ichidaya:20190920215018p:plain

細かいバルジをつけた胴体

あと、松本マンガに出てくる宇宙船を観察してアクセントをつける小道具になっていると思ったのが翼(真空中を航行する宇宙船に翼はないか?)というかアンテナ的な形状(下図の左)でした。これも楕円のロフトで作った2つの形状(下図中と右)を結合することで作ることができます。

f:id:ichidaya:20190920222239p:plain

アンテナ形状の作成

このアンテナを大きさを変えて宇宙船の先端部や後部に配置しました。宇宙船の前部に小さなアンテナを複数つけると攻撃的な印象になります。

f:id:ichidaya:20190920225003p:plain

大小のアンテナを配置

ブリッジと補助推進機関っぽい部品を追加します。これらも楕円のロフトだけで作っています。

f:id:ichidaya:20190920230530p:plain

ブリッジと補助推進機関

 さらに以前に書いたスジ彫りや簡単な押出の機能を使ってもうちょっただけ細部の形状を追加します。

ichidaya.hatenablog.jp

 

できあがったモデルはこんな感じです。

f:id:ichidaya:20190920231900p:plain

完成した3Dモデル

 DAZ 3D Studioというフリーのソフトにインポートしてレンダリングしてみました。ちょっと光モノを追加しています。

f:id:ichidaya:20190921115328p:plain

Daz3D Irayでレンダリング(1)

f:id:ichidaya:20190921115417p:plain

Daz3D Irayでレンダリング(2)

 もちろんAdventure3で3Dプリントもしてみました。今回は特にパーツにわけたりせずに垂直に立てた状態で出力しています。全長80mmくらいの大きさなんですが、残念ながらこのスケールだと先端部のアンテナは細すぎて再現できませんでした。

f:id:ichidaya:20190921123048j:plain

3Dプリントした宇宙船

先端部のアンテナはもう少し太く短くしたら出力することができました。

f:id:ichidaya:20190924224559j:plain

微修正して3D プリントやりなおし

図画工作のセンスが全くなくてもこれくらいまでは作れるしまだ向上の余地はありそう。テクノロジーの進歩とはありがたいものです。

 

立体地図を作る -なんと新潟を忘れてました-

今日は地図の各ピースの裏側に都道府県名を示すラベルを貼るという地味だが必須(やっておかないと自分でもピースを組みたてるのにすごく時間がかかる)の作業を行いました。

f:id:ichidaya:20190907210022j:plain

地図ピースへのラベルの貼り付け

シール用印刷用紙だけだとすぐはがれてしまうので、貼ったあとで紫外線で固まるタイプの透明レジンを上から垂らして覆っています(下の写真、ちょっと見にくいかな)」。

f:id:ichidaya:20190907215703j:plain

ラベルを貼った上からレジンをたらす

ところが、ひととおりピースにラベルを貼り終わったのにラベルがまだ残っている...「新潟」。あれっといってピースを捜したらしばらく前から机のすみっこに忘れられていた。

f:id:ichidaya:20190907220639j:plain

机の片隅に置き忘れていた新潟県のピース

前回のBlogで「北海道と沖縄以外は完成!」といって載せていた写真を見直すとなんと新潟県が抜けている!!  新潟県民のみなさま、ごめんなさい。

f:id:ichidaya:20190907221057j:plain

新潟抜きの地図でした

あらためて、離島と沖縄を除く地図パズルの完成形を写真にとりました。

f:id:ichidaya:20190907221544j:plain

沖縄を除く日本地図