日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果を公開中!  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから  

2014年1月14日火曜日

Aruduinoはじめました。


ここ1週間ほど、Aruduinoを触っています。
あーついにCGあきらめたのかとかいわれそうですが、そうではありません。
CGに必要なプログラミングの勉強へのモチベーション維持のための導入です。
(半分趣味ですがw)

始めてコンピュータに興味を持ったのはロボットを作りたいと小学生のときに思った時です。
小学3-4年製のころだったと思うのですが学校の図書館でコンピュータのしくみが書かれた本で
磁気コアメモリの説明を読んだ記憶があります。
当時はちんぷんかんぷんでしたがw

その後、高校生になりFM-7などを手に入れ写経などしてましたが、ずーっと外部ハードをコントロールする機会はなく、いつしかその夢も、マンガや映画を含む様々な仮想世界のメディアにかかわる中で、いつしか心の片隅に埋もれていってしまいました。

いや一度だけときめいたことがありました。

当時購入していたOh!FMというコンピューター雑誌の中で、ロボットアームの自作記事があり、これがやりたい!と思ったのですが、まぁやっている内容が高度すぎるのと金もないので自分には無理と早々にあきらめました。
今思い出すと、忘れていたようでずっとロボットをやってみたかったんだろうなと思いますw


さて、Arduinoの存在自体は以前から知っていましたが、昨年、入門用キットのInsectBot Miniを発見、いろいろ遊べそうだし、安いし、よさげだなと思って購入しました。

これは切手サイズのArduino Leonardo互換機「Beetle」を使います。


この簡単なロボットを作るための全部品、Beetle、サーボ、センサ、その他がついたキットで約$29と格安。
このBeetleだけに限って言えば1個あたり$7という安さです。



<なぜArduinoか?>

将来的に子供がコンピュータを学習するときにArduinoを使った電子工作からやらせようと思っていました。
子供のプログラミング教育というとグラフィックスが多用されたアニメーションを使ったり、Wordやエクセルを勉強したりとかそういうことが多いんですが、それって何か違うんじゃない?といつも疑問を持っていました。

といって自分はプログラミングの知識がそれほどあるわけでもないので、何が間違っているかもはっきりとは言えない。

ひとつだけ言えるのは「仮想現実」


モニターで起きていることはすべて「仮想現実」なんですよね。
現在の子供は自分の親の世代と比較すると、かなり現実から離れた世界にいる。
それがいいか悪いかは別として、現実のことを充分に理解する前から仮想現実だけですごすってのは、何か1ステップとばしているような気がします。
人と実際に話をすることで人の感情や考えがわかり、 海に飛び込むことで水の冷たさや浮遊感の楽しさを実感する。
 写真で見た海がたのしそう、CGゲームの海の揺れがおもしろい。
そういったこととは異なる「実感」があるからこそ、本当に人に役に立つ事を考えられるようになるのではないかということです。

 そして、実感を伴ってコンピュータの操作を学ぶには、やはり現実世界の様々なものとかかわりあうフィジカルな部分が重要。
現時点で、それが簡単にできて事例も多い物がArduino。
教育関連の資料も充実してます。


もちろんArduinoのボードだけでプログラミングが出来るわけでないので別途コンピューターは必要になりますが、基本RaspberryPiのようなものでいいかなと思ってます。

さて子供が勉強を始めたとき、何か問題にぶつかったら最初に頼る者は親です。
子供は、ささっと解決しないと、興味を失いかねません。
さらに 特定のカリキュラムをこなしているのではなければその道も親が作ってやる必要があります。
少なくとも、特定のカリキュラムに参加するのであれば それが子供にあったものなのかどうかそれを判断する目がなくてはいけません。

そういったことができるようになるには、自分のペースだと2年ぐらいかかりそうなので、今からでもやっておかないと子供が始めるときに間に合わないなと思ったのがArduinoを今始めた理由の一つです。


もう一つの理由は自分のプログラミングの勉強に活かすこと。

自分はプログラミングの勉強をしていても、すぐに飽きてしまう事が多いんですよね。
細かな事をじっくりと考えて、解決までみちびくという根気が続かないことが多く、けっこう深刻な問題です。

CG仲間には怒られそうですが、そもそも画面に絵を描いてもあまり感動がないんですよね。
誤解を招きますがすばらしい映像を作る人はもちろん居ます、ここで言っているのは自分が作っているものですw

やっぱり現実の物に変化をもたらすもののほうが興味が続く。

仮想現実よりも現実!

そういった理由などがありArduinoをさわってみることにしました。




<<InsectBot Mini>>
このキットは非常に簡単でハンダ付けも含めて1時間もあれば作る事が出来てしまいます。
キット自体は9-10歳ぐらいの子供なら一人でもできるかもしれません。
キットの箱には6歳以上と書かれていますが6歳ではさすがに無理だと思いました。
しかし一番問題だったのは、Arduinoのプログラミングの部分でした。
説明書には、このキットを動かすための最低限の事しか書かれておらず、
ArduinoIDEの使い方などは書かれていません。
入門者向けのキットとは言っても、学習のための懇切丁寧なマニュアルではないのです。

まぁよく考えてみれば当たり前なのですが、Arduino入門ではなくてロボット作成のハード面での入門キットということですね。
Aruduino含めての入門キットで、丁寧な説明書がついていると勝手に期待していました。

付属のArduino「Beetle」はピンの形状も違い一般的なWebでみつかる事例でつかわれているArduinoとは大きく違います。
ある程度なれたら理解はできるんでしょうが、まったく触ったことがない初心者ではそのギャップをうめながら理解するのは難しすぎます。

これは駄目だと思い急遽、ArduinoUNOをRadioShackから買ってきました。

InsectBotは少し動いただけですが、動きも気に入らないし、パーツとしてつかわれる日が来るまでこのまま眠ることになるでしょうw


<<ArduinoUNO >>
 
今のところ、やってみたのはLチカとブザーならしたぐらいで、なにも複雑なことはやってません。
LチカってのはLEDをチカチカ点滅させることです。
Arduinoを始めて使う人はだいたいみんなやることです。


でも、楽しいです。
仮想世界でちまちまやっているのとは違って簡単なことでも、がっつり反応がかえってくるのでおもしろいです。



<<プログラミングの勉強にどのように役に立ったか?>>
まだ一週間ほどしか触ってないので、たいしたことは言えませんが以下のような事を感じています。


1)Processingと相互に使う事で理解が深まる。
ArduinoIDEはハードのコントロールのための独自の関数を多用しますが、基本的にはProcessingと同じ言語です、そのため導入もスムースで、ArduinoIDEだけを使っているからといってProcessingの使い方を忘れることはありません。(CG的処理は忘れることはあるかも知れませんが)

実際にはArduinoの傍らでProcessingを立ち上げて計算結果の確認に使っています。
それによりArduinoとProcessingの違いをいつも意識することになり、混乱はほとんどありません。
Arduinoを触っている内にProcessingのスキルも向上し、その延長でプロシージャルなCGスキルも向上させたいと思っています。
 (注:「ArduinoとProcessingは似ているようで違う。混乱する」という方もいます。
自分の場合は、その違いを意識することで、「混乱しないようにしているので問題がない」 と言った方が正確です。)

  

2)一つの事柄を解決までもっていくモチベーションが違うCGのスクリプトってちゃんとした事をやろうとすると、結構複雑なのでやることが多く、道も長くてくじけやすいですが、Arduinoは目的をしぼりやすい上に、その目的で満足できやすい。

CGで入門用の簡単なスクリプト作っても、自分はまだこんなことしかできないんだなぁというふうに、なかなか達成感がえられなかったのですが、Arduinoだと簡単なことでもある程度の達成感がある。

やっていることがまだ単純だってのもあるんですが、やはり「現実世界」に関わっていけるってのは大きです。  
同じようなプログラム(スクリプト)作っても、Mayaの画面の中でランバートシェーダーのスフィア動かしても感動は薄い。
どれだシミュレーションやったところで現実世界の髪の毛一本うごかせない。
でもLEDだと点滅しているだけで、非常に明確で心理的インパクトがある。
サーボモータ動かせば、こんなことやあんなんことと想像力も広がります。
やはり現実のもつパワーはでかいなと思います。
ArduinoはC/C++のスキルも生かせるようです、それらの言語を勉強しようという意欲はますます高まりました。

  

3)プログラムをシンプルにするという考え
 Melスクリプトをやっているときは処理を軽くするとかあまり考えてなかったんですが、最近いろいろな人と話をしたり、書籍「プログラムはこうして作られる」 を読んだりしている中で、「処理を軽くする」と言うのはプログラミングにおいて非常に重要な位置を占めることだなということを理解しはじめました。

Arduinoはメモリ制限もあり、あまり巨大なプログラムは使えません。
またハードの反応速度なども考慮したプログラムが必要な事もあり、効率化に関してよい勉強になるのではないかと思いました。
「プログラムはこうして・・・」はゲーム業界の方が書いていると言うこともあり、非常にハードを意識するプログラミングの説明がされています。
そういう意味では、Arduinoも近い考え方があり、実際書籍に書いてあったとおりの考え方がつかわれていたりしました。
そのためこの本の内容がぐっと身近に感じられました。
この本は本当、良書です。



4)オブジェクト指向

Processing/Aruduinoではオブジェクト指向のプログラミングも出来るようです。
参考:http://yoppa.org/proga10/1190.html
(注: Aruduinoでも使えると思うのですが未確認、もちろんC++を使えば出来ます)
C++を勉強するころには、その経験は生きてくると期待。



<<これから>>
まずは単純な1つのものを動作させるところから、これはLEDの点滅とかサーボモータを動かすとかそういうことですね。
 LEDの点滅一つとってもいろいろなやり方が、見せ方があります。

ある程度馴れたら複数のものを同時に動かす。
これはLEDグリッドとかLEDキューブとか。センサーによる自動制御とか。
こういうことをやるときにオブジェクト指向なプログラミングは役に立つんじゃないかなと思っています。

次のステップとしてはAruduinoをProcessingと連携させていきたいと考えています。
これはどういうことかというと、たとえば温度センサーでProcessingのグラフィックスの色を変化させるとか、Processingで作ったGUIからLEDの調光をするとか。
現実世界との連携ができるようになります。

将来的にはLeapMotionとか、Kinectのようなシステムとの連携(たぶんそうなるとPCを介在してArduinoをコントロールするような感じになるんですかね)、ロボットの作成なども、できたらうれしいですね。

でも、そういった複雑なことができなくても、たのしそうな電子工作はたくさんあります。
「自由な発想」 そういう部分をリハビリするのににも役立ちそうです。

あれ?プログラミングの勉強から離れていってる?
否定はしませんがw複雑なことを本格的にやろうと思えば(たぶん)CやC++が必要になってきます。
まぁそういった勉強を避けてもArduinoは使えるんでしょうけど、自分はCやC++を勉強するための動機付けとして積極的に使っていきたいと思っています。