ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

これを聞けばドローンを作れるという発表をYAPCに応募しています #yapcasia

トークはこちら

yapcasia.org

以下は長いので、めんどくさいなら上の詳細のところを見てRTアーンドはてブアーンドいいねお願いします。

何故応募したか

僕にはとにかくハードウェアの話とWeb開発の話を交えて誰かとしたいという思いがあって、そんなわけで去年は以下の様な発表をしたわけであります。

yapcasia.org

この発表は何をやったかというと、「こんだけお手軽になってこんだけ楽しくなっているから君たちも来いよ! カモーン!」みたいな呼びかけです。 概要と触りだけみたいな感じなんですけれど。

じゃあ他に何を話すんだよというわけなんですけれど、まだこれは入り口しか見せてないわけです。入り口さえ見せれば、それだけで入ってくる人もいるでしょう。実際にそういう方を見ましたし、非常に僕はそれで満足なわけです。 でもやっぱり、入口に入った後の話を僕はそう言えばしてないなあと思って、そう思った時に自分に出来る最高のハードウェアの話はなにかといったら、一時期仕事で作っていたドローンの話なわけです。

で、何故ドローンの話をするかというと、やはり人間たるもの目的がないとなかなか一歩が踏み出せないわけで、Arduinoを手に入れたところでそいつだけで出来る事はLEDをチカチカさせることぐらいなわけですね。 目的がないと何も出来ないのはPerlを始めとしたプログラミング言語と一緒なわけで、つまりそこは道具なわけです。道具だけ紹介してじゃあやろっかーっていう人もいるにはいるんですけれど、飛び込んでこいよと言った手前、「じゃあ何が出来るんじゃ」と言われた時に聞いてほしい話がありました。

クアッドコプター

詳細にも書いてあるんですけれど、クアッドコプターっていう機械は僕はもうほれぼれしてまして、動くところは、なんとモーター4つのみっていうシンプルさです。 モーター4つさえあれば前進/後退/旋回/上昇/下降、航空機におけるすべての動きが可能です。これが普通の飛行機だとモーター1つにエルロンとラダーといった可動部分が必要です。 一般的なヘリコプターであればモーターは最低でも1つで済みますが、メインローターのトルクを殺すためのテイルローターテイルローターの可変ピッチプロペラ化もしくはモーターを別に搭載する、または逆回転するローターを追加して二重反転プロペラの形態にする必要があります。また、前進や後退を行うにはスワッシュプレートというこれまた僕がほれぼれしている機構が存在するんですけれど、それをメインローターに組み込まなければなりません。スワッシュプレートの話はたぶんYAPCでも(通れば)すると思うんですけれど、このように従来の航空機というのはめちゃくちゃ複雑な機械なわけです。あ、オートジャイロっていうこれまらやっべーのもありますけれど!!!

それがクアッドコプターだとモーター4つ!!! マジか!!!!

そのかわりにクアッドコプターはただモーター4つ回すだけだと 飛ばない です。飛ぶことひとつをとっても複雑なフィードバック制御が支配しているわけです。でも機械からプログラミングでどうにかなる世界に入ってしまえばこっちのもんじゃあないですか???? で、僕はそれを書こうとしたんですけれどマー大変で、結局諦めたんですよね。もちろんArduinoベースのフライトコンピュータなんてものもあるんですけれど、いろいろな技術的障壁だとかそういうのもありました。 あ、そうそう電波の話も! この話はあたり前ですがフル合法で行くので、それに必須の電波の話をします。いやー電気磁気の話はすごく面白いですよ!!!! なので既存の飛んでいるクアッドコプターを乗っ取ってどうにかこうにかするという方向に走って、「乗っ取り技術」というのを知ったわけです。乗っとるって言うと聞こえが悪いですけれど、既存にあるものを利用して新しいものを作るってCPANモジュールを組み合わせてプログラムを作るのと似ているなって思いました。今はほんとうに便利で、ちゃんと汎用的にちゃんとモジュール化されているものもあれば、少しお下品ですが乗っ取ってモンキーパッチをするように利用するのもこれまた面白いなと思い、今回のトークをしようかなと思ったわけでございます。

優れた機械機構は優れたコードを見た時のように美しいものです。クアッドコプターもそれに類するものだと思っています。

というわけでクアッドコプターを題材に選びました。

機械とPerl

Perlっていうのはこれこの前人から聞いたんですけれど、コンピュータの都合がそこそこむき出しになった言語です。中身はどうなっているのかよくわからないギアボックスを買ってきて組み込むというよりは、自分で歯車から組んでいく様な感覚です。 それでいて感動があります。(何重もの意味の)コンテキストがあります。 そんな僕の大好きなPerlで機械を制御する話をしようと思います。 機械とは物理空間と直接つながっているインターフェイスであり、全てが並列処理、全てがリアルタイムです。 実はこれらをPerlで扱うには少し工夫が必要です。fork、AnyEvent、とまあいろいろキーワードはあるんですけれど、仕組みや何故それを使うのかというものを紐解きながら話していきますし、時には外部のツールや言語、もしくはマイコンやIC、FPGAに逃すなどして協調動作させるような話もしたいと思います。

と思ったらワードサラダ的になってきたのでここらでやめておきます。取捨選択はします。

というわけでまとめ

本音としては機械と電気まじでヤバイすごい美しいみたいな話をするんですけれど、クアッドコプターはその中でもマイホットワードでそれを、普段みんなが使っているPerlで作ってみるよ、ネットで買える部品でね、みたいな感じです。 というわけで落ちてもまあどこかではやるとは思いますが、話したいので応援よろしくお願いします。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ yapcasia.org