OpenPoolインタビュー vol.1: takashyx氏

–これから「OpenPool連続インタビュー企画」として、OpenPoolに携わったメンバーを順番にフィーチャーして、OpenPoolの苦労話や感動秘話、あんな話やこんな話も、赤裸々に語ってもらいたいと思います。記念すべき第一回は、IwashiエフェクトやOpenPoolCoreライブラリを作った中心的エンジニア、takashyxさんです。
takashyxさん、よろしくお願いします。

よろしくお願いします。最近、エンジニア界隈の方々にOpenPoolの印象をお聞きすることが多いのですが、「かっこいいウェブページやSXSWへの出展など、活動にリア充感が漂っていて近寄りづらい」「どんな人達が参加しているのか、顔が見えなくて怖い」といった意見を頂いてしまいました。こりゃいかん、このままでは新たなエンジニア参加の機会を失ってしまう!と思い、OpenPoolというプロジェクトの実態や、各メンバーが普段何を考えて活動しているのかをインタビュー形式でお伝えすることにしました。我々がどのような集団で、どんな雰囲気の中活動しているのか、何となく感じ取っていただけたらと思います。

takashyx
▲初期OpenPoolとtakashyxさん。詳しくはhttp://takashyx.com

–普段は何をしているのですか?
某ハードウェア関連企業でソフトウェアエンジニアをやっています。
現在のPCやタブレット、スマートフォンには、様々な便利な機能があります。UXの作りこみが全盛の今、ユーザーの体験を本当に便利にするためには、様々なセンサーが必要になってきます。たとえば、画面の向きを取得するための回転センサーや、明るさを自動調節するためのアンビエントセンサー、電話中に顔を近づけた時画面をOFFにするための近接センサーなど、色々なセンサーが利便性向上のために搭載されています。こういったセンサーから得た信号は、マザーボード内のバスやBIOS、ドライバーなど、複雑なルートを経由して、最終的にはOSやソフトウェアまで送り届けられています。このセンサーの信号から、UIや機能自体の挙動など、実際のユーザー体験までに関わってくる一連の設計開発が仕事です。紙の上の設計だけではなく、コードも書きます。

–バックグラウンドをおしえてください。
学生時代は信号処理と制御を専門にしていました。大学で学んだことを個人プロジェクトで活かしたいと思い、カメラでルービックキューブを認識し解くロボットや、ギター・ベース用のエフェクター、Twitterボットを作ったりしました。(編注:詳しくは http://takashyx.com へ。)
画像処理の知識がルービックキューブロボに、音声処理や回路学の知識がエフェクター作りに役立っています。Twitterボットは、学生時代の友人らと冗談で言っていた様々なアイデアを元に作りました。
OpenPoolも、そうやって仲間との会話から生まれたプロジェクトの一つです。基本的には“身の回りの人を喜ばせたい”と思って何かを作り出すことが多いので、周囲のトレンドに対応した活動が多いかもしれません。
cube▲takashyx氏が学生時代に有志と作ったルービック・キューブを自動で解くロボット


–OpenPoolではどんなシステムを作ったのですか?

最初は、魚が泳ぎまわるアルゴリズムを作りました。OpenPoolという名前を聞いた時、プールなら魚を泳がしてみようと思ったのがきっかけです。まず始めに、魚一匹一匹が自律的に動きつつ、魚群を形成するアルゴリズムを作ってみました。次に、ビリヤードボールを認識し、その動きに合わせてエフェクトを変化させる事も、Kinectを使用すれば安価に作れるのでは?という仮説を立てました。そして、それを実際に検証するために、通勤時間や昼休みの空き時間を利用してプロトタイプを作成しました。その後は、いろんな人達の協力を得ながら、公開していける形に整えていった、という感じです。ただ、私は普段C++がメインの言語なので、JavaでのProcessingライブラリをきちんとした形に落としこんでいくにあたっては、加藤君が大活躍してくれました。
–詳細は加藤さんのインタビューを乞うご期待ですね。

言語はJavaを選びました。クロスプラットフォームであるということが理由の一つではありましたが、主には、一時期メディアアート界隈で流行ったProcessingをプラットフォームとして使うためです。人口の多いProcessingを使うことで、さまざまなジャンルの人(特にアート系の人など)が参加しやすくなると考えています。また、kinectを使用しているのも、再現性の高い環境を使うことによって参加のハードルを少しでも下げることが目的です。(大企業のプロダクトなので、いざ公開した時にバズワード的にメディアに取り上げられやすい、というのもありましたが。(笑)
これらの取り組みは、OpenPoolの基本概念である“積極的なコラボレーションの場を作る”という思想に基づいています。より多くの人を、このプロジェクトに巻き込んで行くのが最大の目的です。

–そのなかで一番難しかった課題と、それを克服した方法は?
ハードウェア的制約として、Kinect1台あたりUSBホストコントローラを1つ専有してしまうこと、Kinectの精度やノイズに個体差があること等が浮上しました。ソフトウェア的にも、SimpleOpenNIにバグらしきものがあり、バッドノウハウを駆使して解決する必要がありました。また、ライブラリとして形を作っていく中で、構造上メモリリークの問題が発生するなど、いろいろと課題はありました。
中でもKinectが1台だとビリヤード台全体をカバーできないという問題は判断が難しく、解決まで曲折しました。単純に高いところにKinectをつければいいかとも思ったのですが、そうすると相対的に玉が小さくなりすぎてノイズに埋もれ、検出できなくなってしまいます。色々と案を考えた結果、最終的に、kinectを2台使うことに決めました。しかし今度は、kinect同士の干渉が発生しノイズが出るという問題に直面しました。(このノイズは、画面上だと泉が湧いているように見えるため、チームの中では「泉問題」と呼んでいます。)現在は、清水さんのハードウェア的アプローチが功を奏し、解決まで後一歩というところです。
ただ、最近発表された次のXbox用のkinectでは、視野角が広がり、TOF方式に変わってノイズも減ることが予想されるので、一台で間に合うようになるかもしれません。笑
–詳細は清水さんのインタビューへ続く!

しかし、何と言っても一番難しかったのは、やはりチームでものを作っていくうえで、個々のモチベーションとタスクに整合性をつけて担当を分けていくことかもしれません。ボランティアベースのプロジェクトなので、誰かが思いついて、やりたい!と思ってくれたことを、本人がある程度オーナーシップを持って自由にできないと、モチベーションが下がってしまいます。しかし、既存の機能や、OpenPool全体の方向性とうまく融合させていくことも大事です。なるべくそれらの「いいとこ取り」ができるように、裏でコソコソと環境づくりや根回しをしていくのが大変でした。(笑)

–今後OpenPoolで取り組んでみたいテーマをあげるとしたら、何ですか?
まず、今のボールの検出方法をもう少しマジメなやり方に変えたい。笑 もうコードはオープンになっているので、バレちゃいましたが、結構雑です。もう少し丁寧にしたいですね。画像処理やってた人間としては、恥ずかしいかぎりです…。できれば、オートキャリブレーションを実装して、各種設定を簡単な操作でセットできるようにしたいと思っています。これについては、ビリヤード台の枠や平面、穴の位置の検出を実装すれば可能ではないかと考えています。小田さんと協力して実装方法を検討中です。

それから、タブレット等のデバイスから設定をしたり操作できるようにしたいですね。現在は、ビリヤード台上に直接設定画面を出していますが、操作もしにくいし、あまりいい方法とはいえません。あとは、WEBと連携してプレイ時間数を記録するなど、エフェクト利用を可視化するプラットフォームを作りたいですね。細部や見せ方はもっと考えないといけませんが、そういった「人との交流・繋がりの可視化」は、このプロジェクトの思想的に重要な機能だと考えています。

ハードウェア的には、ビリヤードボールの色を見分けたいという大きな目標があります。カラフルなエフェクトが常時投影されている環境において、kinectのRGBカメラでは、玉の色を認識するのはほぼ不可能です。もちろん色々と策は考えているのですが、なかなか難しいです。
どの問題も、俺、それ解けるかも!という人を募集中です。(笑)

–これからどんな人にJoinしてもらい、一緒にやれたらいいなと思いますか? メッセージも兼ねて最後にお願いします!
我々がこの活動で最も大切にしているのは「できた!」「動いた!」という“感動の共有”なので、このプロジェクトの本質である、「ものづくりのコラボレーション」を心から楽しめる人、そして、周りの皆が喜んでくれる物を作るために、自分の手を動かして物事を進められる職人肌の人が向いていると思います。ニコニコ動画の作ってみたやニコニコ技術部の、リアル版みたいなイメージです。
現在のOpenPoolメンバーも、ふらっと気楽に集まって、各自の持つ知識、アイデア、得意なことを提供し合って活動しています。ボールの衝突に効果音をつけるシステムはジェバンニ様が、も、ボールがポケットしたことを検出するシステムは小笠原くんが、ふらっと来て、システムを見て「こんなのどう?こうすればできるんじゃない?」「よしやってみよう」という感じで、気がついたら、いつのまにか機能とメンバーが増えてました。(笑)
最終的には、芸大生を中心とするチームの皆さんまで巻き込んで、コラボレーションした成果をSxSW(編注:SxSWとは世界最大級の音楽&フィルム&テックイベントです。有名な所ではTwitterがSxSWをきっかけに人気を得たと言われています。詳しくはこちら)に持っていけたので、コラボレーションの実現という大きな目標に対して、大きな手応えを感じることができました。

なので、これから参加してくれる人も、まずは実際に現場に様子を見に来たり、オープンになったコードを見てください。そして「ここ、こうすればもっとよく出来るんじゃない?」と思ったら、あなたのOpenPoolの活動はすでに始まっています。さらなる活動を楽しみたいのであれば、facebookやwebのフォーム、MLから声をかけてください。githubにissueを開いたり、pull requestを送って下さい。あなたが必要とすれば、メンバーは色々な形で手伝ってくれるでしょう。
ハードでも、ソフトでも、企画運営でも、皆様の参加をお待ちしております。ちなみに、現状では社会人エンジニアのメンバー比率が高く、どうしてもいろんな意味で作業の効率が上がらないので、比較的時間に自由のきく学生エンジニアの方に参加して頂けると、とても助かります。(笑)

— ありがとうございました!
こんなステキなOpenPoolに、あなたもJoinしませんか?
興味の有る方はこちらまで!