Electronics

2014.06.17

Cylon.js ─ ロボットやロケットをJavaScriptで作る

Text by kanai


Ron EvansとAdrian Zankichは、Maker Faire Bay Area 2014のMake: エレクトロニクスステージでCylon.jsの紹介を行った。

マイクロコントローラーでLEDを点滅させるために、詳しいマイクロコントローラーの知識と1週間の時間が必要だった、なんていう時代があった。しかし、Arduinoの登場で状況は変わった。でも、たとえArduinoを使ったとしても、思いのままに身の回りの物をハックできるわけではない。とくにネットワーク関連は難しい。以前から、ネットワークはArduinoの弱点とされてきたほどだ。

たしかに、Arduinoや、その後に登場したRaspberry Piによって、たとえばロボットのような工作はうんと楽になった。それというのも、それらのデバイスの周囲に発生した巨大なコミュニティに負うところが大きい。そうしたコミュニティが、この世界をArduinoとRaspberry Piの独壇場にしているのだ。何か問題が起きれば、コミュニティにはすでに同じ問題を体験している人がいて、解決の助言をしてくれる。

Credit
Cylon.jsでコントロールされるSphero(写真:Matthew Bergman

ウェブ開発者の場合は、node.js だ。知らない人のために説明しておくと、node.jsはJavaScriptのサーバーサイドのソリューションで、ノンブロッキングI/Oを使ったイベント駆動型のJavaScriptプラットフォームだ。最近、にわかに人気を呼び、ウェブコミュニティではマインドシェアが高まっている。その人気に加えて、TesselやEspruinoといったJavaScriptをネイティブで話すボードが登場して、第三のコミュニティができつつある。

この第三のコミュニティは、マイクロコントローラーやエレクトロニクスや、ロボットを作るといったことを、我々が以前からしてきたのとはまったく違う方向から見ているようだ。それには明確な理由がある。高級言語とウェブの世界を生きてきた彼らは、まずソフトウェアスタックを作り、どちらかと言えばネットワークは次になる。そうした彼らのやり方が、node.jsのために書かれた、ロボティクスやフィジカルコンピューティングや「モノのインターネット」などのためのJavaScriptのフレームワーク、Cylon.jsなどへと発展してきたのだ。

私は、今年の初めにThingsConで彼らと出会った。そこで彼らは、SpherosArduino、そしてジェスチャーコントローラのLeap Motionを使ってワークショップを開いていた。JavaScriptを使えば簡単にハードウェアがハックできるということを実演していたのだ。なので、数週間前に彼らがMaker Faire Bay AreaのMake: エレクトロニクスステージでプレゼンを行っているのを見たとき、Cylon.jsの開発者であるRon Evansに、Cylon.jsについて、そしてその将来について腰を据えてじっくり話を聞くチャンスだと思った。

Cylon.jsについて教えてください。

Cylon.jsは、ロボティクスや「モノのインターネット」のためのオープンソースのJavaScriptフレームワークです。19のハードウェアに対応し、ソフトウェアプラットフォーム、それに複数のプラットフォームを同時に使えます。我々の目標は、デバイス用のソフトウエアをウェブ開発と同じぐらい簡単にできるようにすることです。

なぜ、JavaScriptなの?

JavaScriptはもっともよく使われているプログラミング言語のひとつだからです。それに、node.jsの上に構築したおかげで、さまざまなデバイスとの間でリアルタイムI/Oとストリーミングによるコミュニケーションができます。

JavaScript、特にNode.jsのコミュニティはハードウェアに強い関心があるみたいだけど、それはなぜだと思いますか?

2つ理由があると思います。ひとつは、JSコミュニティは、新しい技術を試したい開拓者精神の塊だということ。もうひとつは、私の友人で、JSConfと新しくできたRobotsConfの代表を務めるChris Williamsの影響があると思います。彼はJSコミュニティにハードウェアハッキングを紹介した張本人なんです。

昔からハードウェアに近いところにいたMakerたちがJavaScriptフレームワークに興味を持つと考えるのはなぜ?

JSはどこにでも使われているので、JSに埋め込まれたさまざまなデバイスのプログラミングがうんと簡単にできるからです。Beaglebone BlackやRaspberry Piもそうです。JSのような高級言語を使うことで、プログラムに費やす時間を短縮して、実際にモノを作る時間を多く取れるようになります。

対応しているプラットフォームは、UI要素と既存のハードウェアとソフトウェアとボードの混合のようですが、どのように関連してくるのですか?

私たちはこれを「フルスタックロボティクス」と呼んでいます。いくつかのソフトウエアのデザインパターンを採り入れ、異なるレイヤーを継ぎ目なく統合しました。ウェブ開発者が異なるデータベースエンジンを切り替えて使うときと同じように、異なるデバイスに接続できて、プラットフォームの切り替えも、最小限のコードの変更で行えるようになっています。Test-Driven Roboticsにも対応しているので、実際のハードウェアにコードを書く前に、自動テストを書くことができます。

ArduinoやDigisparkのようにJavasScriptを話さないデバイスには、Cylon.jsはどう対応するのですか?

Cylon.jsは、シリアルやTCP/UDPなど、デバイスとのさまざまなコミュニケーションに対応しています。Arduinoの場合は、Firmataプロトコルを使って通信します。Digisparkとは、天才Jenna Foxが開発したLittlewireというプロトコルを使って通信します。これは、Digiparkのような小さなマイクロコントローラーでも走らせることができます。

このフレームワークの宣伝に、たくさんワークショップを開いていますが、どのようなことをしているのですか? なぜワークショップを行うのですか?

ロボットのハッキングを行うワークショップには大きな反響がありました。世界中のカンファレンス会場で行っています。

Cylon.js Workshop at ThingsCon in Berlin
Cylon.jsのワークショップ。ベルリンのThingsConにて。

Cylon.js Workshop at ThingsCon in Berlin
Cylon.jsのワークショップ。ベルリンのThingsConにて。

すでに作っている人から、ハードウェアのプログラムはやったことがないという人まで、かなり熱中して、喜んでくれています。アート性や創造性も盛り込んでいます。たとえば、最近やったワークショップでは、アイスクリームの棒と導電性フォイルを使ってSpheroロボットを操作するウェアラブルコントローラーを作りました。

Cylon.jsは今後どうなるでしょう?

とてもアクティブなコミュニティが育っているのを感じています。JSConfでは、Cylon.jsとArduinoとRaspberry Piを使って、ペットボトルロケット、NodeRocketsを作り、打ち上げた人たちがいます。Cylon.jsで、遠隔データ収集やパラシュートを開くなどのすべてのことを行っています。Cylon.jsが宇宙優位性を誇示できたことは、言うまでもありません。

NodeRockets (credit Matthew Bergman)
NodeRockets(写真:Matthew Bergman

NodeRockets (credit Matthew Bergman)
NodeRockets(写真:Matthew Bergman

私たちは、より多くのハードウェアに対応できるよう対応の幅を広げています。その中には発売前の製品もあるため詳しくはお話できませんが、数カ月以内にもっと対応が広がります。私たちの会社は、「ハードウェアメーカーをもっとよく見せるためのソフトウェア企業」です。なので、オープンソースに貢献しながら、同時に企業にも貢献しているのです。

使い慣れた言語でハードウェアがハックできるようになれば、ウェブ開発者によるハードウェアハックがもっと多く見られるようになるだろう。

– Alasdair Allan

原文