FreeHILSプロジェクトの方向付け

今回は、これまで得た情報を元に今後の方向付けを行います。これから半年とか1年とかかけて、何をしていく事になるのか?をご理解いただけるかと思います。

freehils06_00

まずは、これまで書いた記事を読み返しました。そして、要望っぽいものを拾い集めました。

すると、要望としては次の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に移植する作業の事を言っています。移植した結果、次のような形にしたいのです。

freehils06_01

現在は、GUIも、HILS用モデルも、ともにLinuxでしか動きません。一番の理由は、両方とも「RTAI」というリアルタイムAPIにべったり依存しているためです。

freehils06_022つのLinux間は、RTAIの機能の1つである NetRPC というもので通信しています。これは、UDPベースの通信機能です。

さて、これをいきなりドーンとWindowsに移植して、うごくまで頑張って四苦八苦するべきでしょうか?もちろん、それもアリだと思います。しかし、今回のプロジェクトは私1人でやる趣味プロジェクトです。ですから、そんなに工数を使えるわけではありません。一方、納期が決まっているわけでもありません。やはりここは、多少遠回りをしてでも、安全確実な道を行きましょう。

そこで私が立てた作戦はこうです。

ステップ1:FreeHILSライブラリでラッピング

freehils06_03

まずは、Linux上で作業をしましょう。RTAIのAPIをすべてラッピングしてしまうような、FreeHILSライブラリを作成します。といっても、FreeHILSからRTAIを呼び出すだけの、単なるラッパーとします。単なるラッパーですから、まずトラブルが発生することもなく、動いてくれるはずです。

ステップ2:マルチプラットフォームライブラリでの再実装

freehils06_04

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アプリを解析して、その仕組みを調べます。