FreeHILSプロジェクトの方向付け
今回は、これまで得た情報を元に今後の方向付けを行います。これから半年とか1年とかかけて、何をしていく事になるのか?をご理解いただけるかと思います。
まずは、これまで書いた記事を読み返しました。そして、要望っぽいものを拾い集めました。
すると、要望としては次の3つに集約される事が分かりました。
- GUIベースで簡単にインストールしたい
- GUIベースで簡単に使用したい
- I/Oボードを色々使いたい
すごく当たり前ですね。そして、その実現のためにやるべき事を列挙し、それらを縮約していくと、次の4ステップになりました。
- Windowsに移植 (Linuxで動いているGUIをWindowsに!)
- 拡充ベースの作成 (GUIやI/Oの種類を増やせるようにする)
- 拡充の実施 (GUIやI/Oを実際に増やす)
- インストーラの作成 (Windowsアプリ、およびLinux OSのインストーラ)
これから、これらの詳細についてご説明します。
Windowsに移植
Windowsに移植とは、RTAI-LabのGUIを、LinuxからWindowsに移植する作業の事を言っています。移植した結果、次のような形にしたいのです。
現在は、GUIも、HILS用モデルも、ともにLinuxでしか動きません。一番の理由は、両方とも「RTAI」というリアルタイムAPIにべったり依存しているためです。
2つのLinux間は、RTAIの機能の1つである NetRPC というもので通信しています。これは、UDPベースの通信機能です。
さて、これをいきなりドーンとWindowsに移植して、うごくまで頑張って四苦八苦するべきでしょうか?もちろん、それもアリだと思います。しかし、今回のプロジェクトは私1人でやる趣味プロジェクトです。ですから、そんなに工数を使えるわけではありません。一方、納期が決まっているわけでもありません。やはりここは、多少遠回りをしてでも、安全確実な道を行きましょう。
そこで私が立てた作戦はこうです。
ステップ1:FreeHILSライブラリでラッピング
まずは、Linux上で作業をしましょう。RTAIのAPIをすべてラッピングしてしまうような、FreeHILSライブラリを作成します。といっても、FreeHILSからRTAIを呼び出すだけの、単なるラッパーとします。単なるラッパーですから、まずトラブルが発生することもなく、動いてくれるはずです。
ステップ2:マルチプラットフォームライブラリでの再実装
FreeHILSライブラリを、RTAI依存から脱却させます。そのために、RTAIの動作を解析して、同様の動作を行うようなライブラリを実装します。ただし、リアルタイム性能はありません。GUI側にはリアルタイム性能は必要ないのです。
このとき、マルチプラットフォームライブラリを使用します。これは、Linuxで書いてもWindowsで書いてもだいたい同じように動く!というとても便利なクラスライブラリです。個人的に Qt というライブラリが気に入っているので、これを使いましょう。これで、RTAI依存、およびOS依存はほとんど無くなったはずです。
ステップ3:Windowsへの移植
ステップ2で作ったものを、Windows上でコンパイルしてみます。マルチプラットフォームライブラリに依存しているだけですから、大きなトラブルなく完了するはずです。
たぶん、このステップ1~3が、今回のプロジェクトの1番大きな山になるはずです。なにしろ、RTAIの機能を解析して、それをOS非依存ライブラリにしてしまおう!というのですから。
この山を越えれば、RTAIに関する十分すぎるほどの情報が集まっているはずです。そうなれば、後の工程はとても楽な物になるでしょう。
拡充ベースの作成 (GUIやI/Oの種類を増やせるようにする)
とりあえずWindowsへの移植が成功したところで、まがりなりともHILSとして使えるはずです。もしもこの段階で成果を公表したとしたら、こんな声が聞こえてくるでしょう。
「FreeHILSっていいね。タダだからね!ところで、ねぇ、このI/Oボード PCI-9999 を使いたいんだけど、ドライバー書いてくれない?あとさ、かっこいいスライダーGUIが欲しいんだけど、作ってくれない?あぁ、もちろんタテ型とヨコ型の両方とも必要だからね!」
HILSの適用先は本当に多種多様で、GUIにせよ、I/Oボードにせよ、欲を言えばキリがありません。オープンソースなんだから、みんな勝手に自分でやればいいのに!と言いたいところですが、たぶん誰もやらないでしょう。
原因は2つ考えられます。
- 自分でやりたいのは山々なんだけど、覚えないといけない事が多すぎる!
- 自分でやりたいのは山々なんだけど、覚えるべき事を説明したドキュメントが無い!
まぁだいたいこんな所でしょう。
ドキュメントが無い!というのは、書くしかないですね。ドキュメントを書くのは嫌いじゃありません。頑張って書くとしましょう。
問題は、覚えないといけない事が多すぎる!これです。これは、ソフトウェアの設計がどうにもマズくて、いろんなモジュールの抽象化がうまくいっていない、という場合もあります。あるいは、やれる事が多いせいで、どうにも避けようが無い場合もあります。
やれる事が多いせいで、というのはたとえば、SimulinkのS-Functionです。S-Functionを書こうと、マニュアルのページ数を見てみると・・・570ページ!? これでは、気軽にS-Functionを書こうという気にはなれませんよね。(そうだ、そのうち簡単に書けるS-Function講座をやりましょう。難しい事をするのでなければ、S-Functionなんてブログの記事1回分で説明できてしまいます。)
できれば、マニュアル数ページだけで説明できる。それだけ読めば、GUIを追加したり、I/Oボードのドライバーを書く方法が分かる。こうなるように、なるべく複雑さを床下配線に押し込める必要があります。そのためには、多分それなりに再設計を行う必要があるはずです。この工程をうまくやってのける事が出来れば、これから先、GUIを作ったりI/Oボードドライバーを書いたりするのが楽になるはずです。自分のためにも、ここは十分に気合をいれてかかる事にしましょう。
拡充の実施 (GUIやI/Oを実際に増やす)
ここまで来たら、あとは手を動かすのみです。思いついたGUIやらI/Oボードドライバーやらを、ポンポンと追加していきましょう。
ちなみに、今ねらっているI/Oボードは次の通りです。
- DIOボード: PCI-2747A (21,000円+税)
- カウンタボード: LPC-632104 (34,800円+税)
- AIOボード: PCI-3523A (46,500円+税)
- CANボード: PCI-485220 (59,800円+税)
これに、必要なケーブルだのを追加していくと、20万くらいになります。ちなみに、インターフェース社は「早割り」と言って、納期に余裕をもたせて発注すると割引をしてくれます。どれだけ安くなるか分かりませんが、ちょっと期待しています。
インストーラの作成 (Windowsアプリ、およびLinux OSのインストーラ)
Windowsアプリのインストーラは簡単です。
- Scicos
- Scicos向けのRTAI-Labライブラリ
- Simulink向けのRTAI-Labライブラリ
- HILS用のGUI
これらをオールインワンにしたインストーラを作ります。そうすれば、これを実行するだけで全て必要な環境がそろう事になります。
大変なのは、Linuxです。Linuxの場合はOSを配布する事になるので、インストーラでちょちょいのちょい、という訳にはいきません。
- CD-RからブートできるLive CD
- HDDへインストールできるインストールCD
この2つを作りたいのですが、何をどうやったらいいのかサッパリ分かりません。ただし、世の中にこれだけLinuxディストリビューションがあるのですから、そんなに難しいはずはありません。いずれちゃんと調べておく事にします。
まとめ
繰り返しになりますが、やるべき事は次の4つです。
- Windowsに移植 (Linuxで動いているGUIをWindowsに!)
- 拡充ベースの作成 (GUIやI/Oの種類を増やせるようにする)
- 拡充の実施 (GUIやI/Oを実際に増やす)
- インストーラの作成 (Windowsアプリ、およびLinux OSのインストーラ)
「Windowsに移植」というところが、たぶん1番難しくて、そして1番重要なステップになりそうです。これからがんばらねば・・・!
次回
RTAI-LabのGUIアプリは、RTAIに依存しています。そこで、まずはRTAIの使い方について調べます。それと同時に、RTAI-LabのGUIアプリを解析して、その仕組みを調べます。