MakerGoの作り方
2016/05/20
  • このエントリーをはてなブックマークに追加

はじめに


こんにちは。カブクの元キッチン清掃担当のあんどうです。

「カブクのエンジニアが普段何をしているのか」をみなさんに緩くお伝えするためのデベロッパーブログだったにも関わらず、気が付くと第3回を過ぎて未だにカブクの業務に関係することを何一つ紹介していないという体たらく。ここらでそろそろ軌道を修正し、業務に関係する内容をお届けしたいと思っています。

MakerGoについて


まずはこちらの動画をご覧ください。


我々は人工知能をカブクのビジョンである「ものづくりの民主化」の実現に欠かせない要素技術と捉え、昨年度末からその活用について研究を進めてきました。上記の動画で紹介しているMakerGo(※1)はその最初の成果となります。当研究についてはさまざまな事情(※2)から現在は凍結中ですが、ここで示された知能を持つ製造機器の可能性は日本の製造業の今後を占う上でも重要なものであると感じています。

そこで本エントリではまず初めにMakerGoを実現するために必要となる技術要素を紹介し、その後で実際にどのようにMakerGoを実現したかについて説明します。

システム概要


3Dプリンタ
対局者と碁盤を兼ねます
ウェブカメラ
盤面の状況をAIに伝えます
対局時計
手番の交代をAIに伝えます
AI
ウェブカメラと対局時計から状況を認識し、決定された手を3Dデータとして3Dプリンタに送信します
上記のようなシステムがあれば、次の手順で3Dプリンタと人間が対局できます。

  1. 事前に手番を決定し、対局者が先手であれば白フィラメントを、後手であれば黒フィラメントを3Dプリンタに取り付けます。(※3)
  2. 対局者は手番が終わると対局時計のボタンを押下します。
  3. AIは対局者の手番前の画像と手番後の画像を減算合成し、ぼかした後二値化して対局者の手を認識します。
  4. AIは次の手を決定します。
  5. AIは次の手を3Dデータとして3Dプリンタに送信します。
  6. 3Dプリンタは受け取ったデータに従って次の手を製造します。
  7. 2.に戻ります。

技術要素


上記の手順で特に重要なのはステップ4とステップ5ですが、今回のエントリでは弊社の通常業務により近いステップ5の3Dプリンタへのデータの送信方法について説明します。ステップ4については今回説明しませんが、いろいろとよい書籍がありますのでそちらを参照してください(※4)。

Gコード


GコードはNC工作機器用の制御命令群で、今回使用している3Dプリンタ、MakerBotではReprap社が定義した拡張命令を含む様々な命令が利用できます。まずは以下の碁石作成用のGコードをみてください。この内容を参考にして、Gコードについて簡単に説明します。

M136 (enable build)
M73 P0
G162 X Y F2000(home XY axes maximum)
G161 Z F900(home Z axis minimum)
G92 X0 Y0 Z-5 A0 B0 (set Z to -5)
...
G1 X-112.000 Y-73.000 Z0.000 F1500 A-1.30000; Retract
G1 X-112.000 Y-73.000 Z0.000 F3000; Retract
G1 X-112.000 Y-73.000 Z0.300 F1380; Travel Move
M73 P0; Update Progress
G1 X-12.467 Y-8.533 Z0.300 F9000; Travel Move
G1 X-12.467 Y-8.533 Z0.300 F1500 A0.00000; Restart
G1 X1.609 Y-8.533 Z0.300 F600 A4.61363; Infill
M73 P1; Update Progress
G1 X1.609 Y-4.962 Z0.300 F600 A5.78417; Infill
G1 X-13.391 Y-4.962 Z0.300 F600 A10.70041; Infill
...
G1 X-8.383 Y-11.882 Z0.770 F1500 A165.68804; Restart
G1 X-8.978 Y-11.437 Z0.770 F5400 A165.71401; Support
G1 X-10.578 Y-9.977 Z0.770 F5400 A165.78972; Support
G1 X-11.584 Y-8.783 Z0.770 F5400 A165.84430; Support
...

なおこのGコードに従うとエクストルーダーはビルドプレートに対して次の黒線で示された軌跡を描くように移動します。




Gコードの命令は一行につきひとつで、各行が次のような構造になっています。また ; 以降はコメントです。

  • GまたはM(Gがエクストルーダーの移動、Mがその他の補助機能)
  • 命令コード
  • 引数

例えば

G1 X-112.000 Y-73.000 Z0.000 F3000; Retract

はフィード率3000mm/min(F3000)で座標(-112.000, -73.000, 0.000)まで(X-112.000 Y-73.000 Z0.000)ヘッドを移動(G1)という意味になり、

M73 P0

はビルド進捗状況を0%に(p0)設定する(M73)という意味になります。単純な命令を使用して意外と簡単に3Dプリンタを制御できることが分かっていただけたのではないでしょうか。MakerBotで利用できるGコードの一覧については以下のリンクを参照してください。

http://reprap.org/wiki/G-code/ja

ところで、上のコードの ; 以降にInfillやSupportというコメントがあることに気付いた人がいるかもしれません。これはそのコメントのある行がインフィル(内部構造)やサポート材(オーバーハングの補助材)を製造するためのものであることを示しています。Gコードは単純に製造機器の動きを指定するものであるため、製造に必要となる補助的な構造も明示的に指定する必要があることに注意してください。

Octoprint


さてここまでの説明で碁石を作成するためのGコードを生成できるようになりました。後はこのコードを使用してAIによって決定された位置に3Dプリンタで碁石を製造するだけです。それにはOctoprintというウェブアプリケーションが利用できます。



Octoprintは3Dプリンタに接続したRaspberry Pi上で動かすことで、ウェブインターフェースを通じて3Dプリンタが制御できるアプリケーションです。このOctoprintではREST APIも利用でき、今回の場合は次のAPIを利用することでネットワーク越しに碁石の製造を指示することができます。

  1. ファイルアップロードAPI
  2. コマンド送信API

つまりAIが一手打つごとに1番目のAPIで製造位置を設定したGコードをアップロードし、2番目のAPIでそのGコードを3Dプリンタに送信することで碁石の製造が開始されます。

MakerGoの作り方(現実)


さて、先のシステム概要、技術要素で説明した内容は分かりやすく言えば「MakerGoの作り方(理想)」でした。ここでは現実について紹介します。



  1. 黒石の3Dモデルを作る
  2. 白石がビルドプレートの上下動でずれないように両面テープで貼る
  3. それっぽくビルドプレートを上げたり下げたりする

はい。動画は今回説明した内容とは一切関係なく完全にフェイクです。すいませんでした。

まとめ


株式会社カブクではMakerGoを実現できるエンジニアを募集しています。