後書き

何かの役に立つことを願って、ここでは何故HIPCを作るに至ったのかを少し振り返りたい。

HIPCの源流をさかのぼるならば、たぶん始まりは大学のロボコン活動だろう。当時私はマイコンでモーターを制御するソフトウェアなどを書いていた。始めた頃は初心者らしくちょっとコードを変更してはマイコンに書き込み直すことを繰り返していた。デバッグはシリアル通信を通してのprintfデバッグ。そしてそのうち、繰り返される書き込み作業とそれにかかる時間が無駄に思えてきて、いろいろと改善を試みた。例えば、簡単なシミュレーションを行うモックを書いて、PC上でマイコン用に書いているソフトウェアの一部をコンパイル・実行・デバッグしてしまうこと。PC上で上手く動作したからといって、実機(マイコン)でうまくいくとは限らなかったが、PC上でまともに動かないものを実機でテストしてもあまり意味が無いので、これは現在でも有効な手法だと思っている。しかしながら、やはり実機でのデバッグは重要で、ある種のログ取りは開発に付いて回った。電子回路に問題があって希に入力値がおかしくなるバグに遭遇したことがあったり、性能を出すためにパラメータをチューニングすることがあったり。こういう場合には、実機で実際にシステムを動かして記録を取るとことが重要だと私は今でも思っている。そこで、大学3年生の頃はシリアル通信を通してターミナルソフトでパラメータやログ出力の内容を変更出来る非常に簡単なメニューシステムのようなものを作って利用していた。これはそれなりに役に立ったと記憶しているが、再利用性や操作性はいまいちであった。さらに残念なことに、こういった問題を解決しようと頑張ると、本来目的とする開発対象ではないメニューシステムが肥大化し、ROMやRAM、さらには開発時間を食い始めるという問題もあった。単純に言えば、モーターが制御したいだけで、メニューを作りたかったわけではないのである。

大学卒業後も、趣味や仕事で組み込み系の開発をする一方で、組み込み以外の開発も行った。テキスト形式のデータをRubyで下処理してRで解析してみたり、OpenCVやreadlineといったライブラリを利用したちょっとしたアプリケーションを作ってみたり。こういった経験から制約の少ない環境、所謂パソコンで動くソフトウェアの開発の有利性を非常に意識するようになった。ほとんどの開発環境やプログラミング言語、ライブラリは、インストーラやパッケージ管理システムを使って数ステップで利用できるようになるから、開発対象に合ったものを選択してすぐに利用できる。数百メガバイトのメモリを使ってもリッチな言語とハードが上手く管理してくれる。乱数でも行列計算でもハッシュでも、実績のあるライブラリが使えて、自ら実装する必要が無い。組み込み開発だと、スタックが残り何十バイトで足りる足りないとか、ちょっとした要素機能でも自ら実装するか何かしらを移植するとかで、どんどんと工数が消費されていくのにである。そこで、マイコンとパソコンとを通信させることで、マイコンのプログラム規模は小さく抑えてパソコンで出来る処理はパソコンにやらせるという方向性を模索し始めた。

例えば、自動テストである。人間の代わりにパソコンがテストを行うと考えるのならば、パソコンが設定を変えて、記録を取って、合否判定すれば良いのである。パソコンのテストの管理と実行を行うソフトウェアは、好きなプログラミン言語とライブラリを使って開発すれば良い。マイコンは、基本的には人間にテストされたときと同じように、設定に従って動作して結果を返せば良い。唯一必要になるのは、人間用とは異なるパソコン用のインターフェイスである。パソコンからの設定変更を受け付け、パソコンに実行結果を返さなくてはならない。そこで、既存技術としてCORBAやD-Bus、RTミドルウェア、ROSなどを検討してみたのだが、とにかくどれも数KバイトのRAMやROMで動くようには見えなかった。それだったら、自分で作ってみようと試みた結果がHIPCとなっている。

とはいえ、HIPCは自動テストのためだけに作っているわけでもない。例えば、趣味で作った電子工作をインターネット越しに操作するといった用途も考えられる。マイコンの通信路をインターネットに公開することはsocatを使うと容易に出来る。パソコン上でsocatにTCPサーバーを立てさせ、かつマイコンの通信路と中継させれば良い。2つのsocatの間でSSLを使うこともできるようなので、趣味の範囲ならセキュリティ的にも十分そうである。そして、このsocatが中継している通信路の上でHIPCを使うのである。とりあえずネット越しにLEDをON/OFFしようとしたときに、Ethernetに対応したマイコンを用意して、組み込み用のTCP/IPスタックの使い方を理解して、というやり方よりも、socatを使った方が手っ取り早いのではないかと思う。パソコンを用意するのも楽になったもので、多くの家庭に一台はあるのではないだろうか。安いWindowsタブレットやスティック型PCもあるし、近頃の計算能力なら1台のPCで複数のsocatを実行するなどして複数のマイコンの面倒を同時に見ることも出来るだろう。確認はしていないがRaspberry Piやスマートフォンでsocat、もしくは似た機能のソフトが動くなら、それらをパソコンの代わりにしても良いだろう。

要するにsocatが素晴らしいのである。そして、パソコン上で走る素晴らしいソフトウェアはsocatだけではないと思う。そういった素晴らしいソフトウェアの力を利用して、組み込み開発が楽に出来たという事例が増えてくれればと思っている。そして、そのときにアプリケーション層のちょっとしたプロトコルが必要になって、自分で実装しなくてもにHIPCで間に合ったということがあったなら、開発者としてはとても嬉しい。

最後に、家族と開発に協力してくれた友人達に感謝を述べて、この文章の終わりとしたい。


TOPページ

Last modified: 2015/07/27 08:00:59 +09:00