ロボットの骨格を作る その4
プロのお仕事(MOBILE SUIT GUNDAM GFRAME07)の出来栄えに触発されてロボット骨格の試作4号機(写真左)を制作しました。以前に挑戦してあきらめていたパッチンとはめ込むタイプのボールジョイントも採用して接着剤を使わなくてもポーズをとれるようになりました。
肩部分を動かす軸を追加し動きの自由度が増しています、膝にも軸を追加し二重関節にしたので脛と腿を干渉させることなく膝を180度近くまで曲げることができます。
また胸部分のブロック(下図の黄色い枠で囲んだ部品)を取り外しできるようにしました。将来、この部分を操縦用コックピットにするとかのギミックを導入したいと思っています。
関節の数を増やしつつ全体をスリムにしたことでより自由にポーズをとることができるようになりました。
ロボットの骨格を作る 番外編 プロの仕事を鑑賞する
子供のころガムやキャラメルを買うとオマケでついてきたロボットやロケット、食玩(食品玩具)というのだそうですが、この食玩の完成度が半世紀前とは比べものにならないくらい高くなっていることを最近知りました。玩具を食品の流通経路で販売することを目的としてバンダイのような純粋な玩具メーカーも参入しているのだそうです。
ロボットの骨格にアーマーを装着して完成させるという市田屋工務店と同様のコンセプトの商品(MOBILE SUIT GUNDAM GFRAME07)もありどんなものかと購入してみました。さすがにプロが作ったものはすばらしいですね。
このパッケージに入っているのは各関節が可動する骨格で別売のアーマーを装着することでガンダムが完成します。骨格部分をとりだして弊社市田屋工務店の試作品3号と並べてみました。
体高11cm程度で3号よりずっとコンパクトでいながら関節の数が多く、取れるポーズの自由度は3号を凌駕しています。ボールジョイントと3号機で使っている軸受け型のジョイント(シャフトジョイント?)を併用していて、個々の関節の動きがスムーズでかつ位置の保持力も申し分ないです。
材質や製造設備などが異なるのでアマチュアでは真似できないという部分もあるものの、モデリングで取り込んでみたいと思ったのは以下の2点です。
1. 肩関節部分にジョイントを追加
試作3号では 肩を胸に固定してしまっていたのですがGFRAME07ではもう一つジョイントがあって肩関節自体を回転させることができるようになっています。この構造だと試作3号ではできない「大きく前へならえ」ができます。
2.膝をジョイント2個で実現
軸1つの膝の構造はシンプルでよいのですが腿と脛の部品が干渉するため実際の可動域はジョイント単体のそれよりも大幅に制限されてしまいます。GFRAME07では軸が2つある二重関節を採用し脛と腿の部分が干渉するのを避けて十分な可動域を確保しています。
というわけで次の試作では上記2点にチャレンジする予定です。
ロボット骨格にボディアーマーを装着する
ロボット骨格試作3号機をもう1台制作、ボディアーマーのパーツを作って装着してみました。
骨格だけ(下図の右)と比べるとちょっとだけロボットらしさがでてきたかなという感じです。
ロボットの骨格を作る その3
ロボット骨格の試作3号機です。
今回はボールジョイントではなくて、軸受け2つを重ねた穴に円柱状のシャフトを差し込んで関節を作りました(下図参照)。
腰の部分はこんな感じ(首も同様)。
ボールジョイントと違って自由度は1軸だけなので肩や股の部分はジョイントを2つ使っています。部品数が増えて構造が複雑になりましたが大きさ的には試作2号機(下図右)と同じくらいに収まりました。
工夫したのは軸や軸受けの各所に切れ目というかスリットを入れたことです。靭性が低いPLA樹脂ですがこういったスリットをいれておけた軸受けの穴に対して軸の太さが多少きつくても許容できるのではないかと考えたのです。
今回は軸受けを3D出力するさいの配置にも注意しています。FDM型の3Dプリンタの造形物は積層面に沿った水平な力に対して特に脆くなってしまいます。下図の左のような配置で出力すると、部品をはめ合わせるときにちょっと無理に押し込むと軸受けの根本でぼっきりと折れてしまいます。右のような配置にしておけばいくぶん無理に押し込んでも(力の方向と積層面が垂直なので)折れずにもってくれます。
試作3号機では各関節の可動域が基本180度あるのでポーズつけの自由度が大幅に向上しました。また、部品をはめ合わせるときゆるゆるになるまで削らなくて多少きつい状態で壊れずに押し込むことができるので、関節を回転した位置での保持ができるようになりました(その分、関節を動かすのにかなり力をいれないと動かないということもありますが)。
ロボットの骨格を作る その2
10月1か月のほとんどの期間はロボット骨格の試作2号機に費やしました(以下は失敗作の数々)。
以前に作ったボールジョイントはジョイントを所望の位置で保っておく力が弱くで骨格周りに部品をつけるともうポーズを保っていられない、自立もできないという問題点おおありの試作品でした。当初はとにかくポーズがとれるものが作れたということだけで成功した気分だったのですが、冷静に考えてみるといろんなデザインのロボットに発展させていくベースとしてはまだまだ不十分です。
試作1号のようなオスとメスを別々に作って後からはめ込むタイプのボールジョイントでもABS樹脂で作ればパチンとはめ込むことができるのかもしれません。ただ、PLA樹脂(個人的な好み等、種々の理由により当面ABSのフィラメントには手をださないつもり)だとABSとの比較で靭性が低い(硬くてもろい)ため、壊れないではめ込めるような余裕のある寸法で作る必要があります。結果、はめ合いが緩くなってオスとメスとで接する面での摩擦が小さい、つまり関節を回すことができてもその位置で保持できないということになります。
Thingiverseを調べると、後からはめこむのではなくて最初からオスとメスをはめ合わせた状態で3D出力しているジョイントもありました。ただ、この方法にはそれなりの精度(0.05mmと書かれていた)で出力できる3Dプリンタが必要です。わがAdventure 3の水平方向解像度は0.2mmということでちょっと難しそう。
いっそのこと自分で作るのはやめてプラモデル改造用に市販されているボールジョイントを使おうかとも考えました。プロの人が作ったガレージキットでも可動部には市販ボールジョイントを使ってそれ以外の造形に注力している例があります。ただ、個人的経験で以前に別の工作で市販ボールジョイントを購入して使いこなせなかった(固くてはまらん!!)トラウマがあるのと、1パッケージ数百円でこちらが使いたい大きさのジョイントの数は10程度(ロボット1体分に足りるか微妙)というコスパの悪さが気になってふみきれません。
市販品を使うのは最後の手段として残しておいてもう少し自社制作でがんばってみようということで、今回はメス型を2つに分けてオス型を挟み込むかたちで接着する構造にしてみました。
はめ合わせが緩くならないようオス型とメス型の間のクリアランスはあまりとらずに3D出力し、仮組みしながらオス型をやすりやルーターで削って良さげになったら瞬間接着剤でメス型同士を接着しています。
手足、腰の関節を作って繋いでみたのがこんな感じ。
前回より全体に大きくして 足裏の面積を増やしたこともあって、今回は自分で立つことができます。
多少のポージングも可能です。
各関節の位置の保持については試作1号からだいぶ改善はされているものの、場所によって固かったり緩かったりというばらつきがあります。また、オスとメスの接する面積を十分にとろうと形を作ったら関節の可動域がかなり狭くなってしいました。
というわけで試行錯誤はまだまだ続きます。
Thingiverseに3Dモデルを公開しました
先日作成した宇宙船ですが、せっかくならとThingiverse
https://www.thingiverse.com/thing:3877842
に3Dモデルを公開しました。
こんなものでも意外とダウンロードしてくれる人もいたので、お世話になっているコミュニティへのGive backの意味もかねて、作成が一段落した3DモデルについてはOBJファイルをThingiverseに公開していこうと思います。
と言っても人に見せられるレベルのモデルがそうあるわけでもなくとりあえずはこれまで作ってきた日本の立体地図パズルに沖縄を加えて47都道府県そろえたものを登録しました。
ファイルのサイズや数に制限があるように見えた(後から試したらそういうわけでもないらしい)ので3つに分けて登録しています。
https://www.thingiverse.com/thing:3886688
https://www.thingiverse.com/thing:3886714
https://www.thingiverse.com/thing:3886732
Scriptを作成してモデリング作業の効率アップ
前回記事のロフト操作だけで宇宙船を造形するというアイデアは半年くらい前から温めていたのですが、試してみるとけっこう手間がかかるためなかなか完成できないというのが実情でした。
基準となる平面を選択後に長さを指定してオフセット平面を作る、その平面でスケッチを開く、中心点の指定と長軸、短軸の長さを指定して楕円を書いてスケッチを閉じる、これだけ操作して断面の楕円形が1個できあがりです。この一連の操作を何回か繰り返してロフト操作を実施してやっと1個の形状が完成です。宇宙船の胴体部分など所望のかたちにするのに断面を10個ぐらい定義しなければならず、めんどくさがり屋は作業を続ける気力が尽きてしまいます。
そこで宇宙船のモデリングの前にこういった機械的作業を簡単にするためのスクリプトを作成することにしました。Fusion 360はユーザーが自分で機能を拡張できるようAPIを提供してくれており、PythonまたはC++でプログラミングを行えます。私は試行錯誤がしやすいPythonを使うことにしました。
Shift-Sの押下でスクリプトとアドインダイアログが立ち上がり、そこから作成ボタンでスクリプトの編集や実行が可能です。
作成したスクリプトBodyGeneratorMk2を起動します。現れたダイアログで左下のAddボタンをクリックすることで楕円がZ軸(画面上の青い軸)に沿って追加されそれらで作られる形状がプレビュー表示されます。ダイアログのテーブル内の数字(単位はmm)を変更することで楕円(この例では円)の大きさや位置を変更できます。気に入った形状になったらOKボタンを押して確定します。
中心高さの値を変えていくと楕円の中心位置をずらしていくことができます。断面を並べる軸をY軸に変更すれば翼のような形状を作ることもできます。
このスクリプトを使って前述の宇宙船モデルを根気を切らすことなく作ることができました。参考までにスクリプトのソースを載せておきます。
ここから先はプログラミングに関する覚書です。作成したスクリプトの全体構造を示すクラス図を下に示します。仮称でmainとしているのは作成するスクリプトの本体でこの中のrun()メソッドがFusion 360から呼び出されて処理がはじまります。run()メソッド中ではCommandDefinitionとMyCommandCreateHandlerの2つのクラスのインスタンスを作成しています。CommandDefinitionは実行例の画面にでてくる入力用のダイアログボックスを表すクラスです。CommandDefinitionが保持しているXXXXInputクラスはダイアログボックス内の数値入力のフィールドやボタンに対応しています。数値が入力されたりボタンが押されたときの処理を行うイベントハンドラ(MyCommandInputChangedHadler、MyCommnadExecuteHandler)はMyCommandCreateHandlerが作成してCommandDefinitionに登録しています。
作成される形状に相当するのはShapeクラスです。ダイアログ中のOKボタンが押下されたときに実行されるMyCommnadExecuteHandlerのnotify()メソッドの中でShapeのインスタンスが作成されます。ShapeインスタンスのbuidlShape()メソッドは以下の図にあるようなFusion 360提供のクラスを使って形状を作っています。コンストラクション平面やスケッチ、プロファイルなどマニュアルで作業を行うときに扱うオブジェクトごとにAPIが準備されています。