QRTAI-Lab for Windows
以前、FreeHILSプロジェクトの方向付けという記事の中で、次の4ステップを定義しました。
- Windowsに移植 (Linuxで動いているGUIをWindowsに!)
- 拡充ベースの作成 (GUIやI/Oの種類を増やせるようにする)
- 拡充の実施 (GUIやI/Oを実際に増やす)
- インストーラの作成 (Windowsアプリ、およびLinux OSのインストーラ)
これらのうち、まず第一ステップであるWindowsへの移植の一部が完了しました。移植ついでに日本語対応してあります。日本語OSであれば日本語で、それ以外のOSであれば英語で表示されます。
図1 QRTAI-Lab for Windows 実行画面
まだまだアルファバージョンです。お試しいただいて、不具合を見つけられた際にはぜひご連絡ください。なるべく善処しますので。
ライセンスはGPL2です。要するにフリーソフトですね。
ちなみに、プラットフォーム依存性はなくしたつもりです。ですから、Linux上でコンパイルして実行する事も可能です。コンパイルするには、Qt4.5以降と最新のQwtを使用して下さい。また、main.cpp内のQ_IMPORT_PLUGINを2つコメントアウトしてください。
がんばりました。
Windowsに移植するにあたり、いろいろとがんばりました。でも、記事を読んで下さる方にはあまり興味の無い話でしょうか。
どーでもいーよ ( ゚д゚)、ペッ
という方は、次の章へスキップしてください。次の章では使い方などをご説明します。
さてさて。何かのお役に立つかも分かりませんので、ざっくりとした移植手順をまとめます。
予定では、FreeHILSプロジェクトの通り、
- FreeHILSライブラリでラッピング
- マルチプラットフォームライブラリでの再実装
という手順で実施するつもりでした。
ただ、もともとのソースコードをコンパイルしたときにWarningがざっくざっくと出てくる様を見ていて、これはいかんな、と。
そこで、まず最初に次の3つの作業でもって、ソースコードのクリーニングを行う事にしました。
- インデントを私ごのみのやり方に直す → 最低限、インデントの整合性は取らないと!
- コンパイル時のWarningが無くなる様にする → 意外とバグの温床だったりします
- C++testの静的解析機能でチェックを行う → バグの原因になりそうな所を直す
C++testというツールには、ソースコードの静的解析機能があります。まずは必要最小限のルールだけを適用してチェックを行うと、出るわ出るわ・・・。とりあえず、以下の問題を中心に直す事にしました。
- クラスのメンバーをコンストラクタで初期化していない
⇒ 初期化されていない「可能性のある」変数を使うなんて、とんでもない! - 浮動小数点数を == や != で比較している
⇒ 浮動小数点数って、演算誤差によってものすごく微妙に値がズレたりします。printfしても違いが分からないくらいの誤差ですが、==で比較すると「違う!」と判定されてしまいます。fabs( a – b ) による絶対値判定がお勧めです
本当はもっといっぱい修正したのですが、本気でヤバイと感じたのはこの2種類くらいでした。
この手の問題は、すぐに不具合の原因になる事はありません。(とりあえず今動いているわけですしね。)しかし、ソースコードに修正を加えていくうちに、ある日突然バグの原因になったりします。こういう悪の芽は、早いうちに摘み取っておかねばなりません!というわけで、これらの修正が済んだ段階でちょっぴり安心しました。
そしてお次は、FreeHILSライブラリでラッピング。これは正直すごく簡単でした。RTAIのAPIに依存する部分を1つのクラスに閉じ込めるだけでしたから。
一番大変だったのはやっぱり、マルチプラットフォームライブラリでの再実装です。RTAIの機能の1部である、Net_RPCをWindowsに移植しないといけませんでした。Net_RPCの内部仕様を解析し、それをQtでエミュレートし、バグを取り・・・という作業に4作業日はかかった気がします。
この作業の様子は、それだけで2~3本の記事になりそうです。ですから、Net_RPCの解析結果とあわせて、またの機会に書くことにします。
また、Net_RPC以外にも、Linux依存の部分をマルチプラットフォーム化する必要がありました。しかし、こちらは簡単な作業で済みました。Qtがマルチプラットフォームライブラリとして良く出来ているおかげです。QtかわいいよQt。
そして最後はバグ取りですが、これが意外といっぱいあって大変でした。かなり直したつもりですが、まだまだ沢山あると思います。見つけられた方はご一報くださると嬉しいです。
まぁ、仕様書がそもそも無いわけですから、何をもってバグと呼ぶのかは曖昧ですけどね。。。仕様書は、次のフェーズでちゃんと書きます。
概要
QRTAI-Lab for Windows を使用すると、次のような環境が実現できます。
Linuxでやる事: ScicosLabによるモデリング、コード生成、コンパイル
Windowsでやる事:GUIによるモデルへの接続
これまでは、GUI側もLinuxである必要がありました。しかしこれからは、GUIはWindowsが利用できます。(もちろん、GUIをLinuxでコンパイルすれば、Linuxからも利用可能です)
利用手順
まずリアルタイムLinux等をセットアップする必要があります。セットアップ方法はこちらの記事をご参照ください。
Linux上のScicosLabもしくはMATLABを使用して、モデリングを行います。そして、コード生成&コンパイルを実施します。
そして次に、コンパイルされたモデルをLinux上で起動します。
ここまでの流れは、この記事の流れと一緒です。
いよいよGUIを使用するわけですが、ここの扱い方はxrtailabや、QRtailabと同等です。既にこれらのユーザーの方は、違和感なくお使い頂けると思います。
xrtailabを使いなれていない方のために、簡単に使用方法をまとめます。
ターゲットに接続する
リアルタイムLinux上では、すでにコンパイルされたモデルが実行されているものとします。GUIは、その実行中のモデルに接続する形で使用します。
モデルに接続するためには、qrtailab.exeを起動し、「ターゲット」>「ターゲットマネージャー」を選択します。そして、IPアドレスの部分にリアルタイムLinuxのIPアドレスを入力します。
続けて、接続をクリックすることでターゲットに接続完了です。
モデル上のデータを表示する
接続完了したら、モデル上のデータをモニターしてみましょう。ツールバー上のボタンをクリックすることで、スコープ、メーター、LEDを表示できます。
たとえば、スコープをクリックしたとすると、次のような設定画面が現れます。
「スコープマネージャー」画面にて「表示する」にチェックを入れる事で、スコープが表示されます。
ちなみに、このグラフには信号線が1本しかないように見えます。しかし、実はこれは2本の信号線が重なってしまっているのです。
これではいけません。そこで「信号線設定」タブで、2本の信号線のオフセットをずらしてやりましょう。
一本一本の信号線は「トレース」と呼ばれます。このトレースの「オフセット」をずらしてやると・・・この通り、2本の信号線が見えました。
スコープ以外にも、メーターやLEDがあります。ぜひ色々といじってみてください。
モデル上のパラメーターを変更する
次に、モデル上のパラメーターを変更してやりましょう。
ツールバー上のパラメータボタンをクリックすると、パラメーターマネージャーが現れます。
どれがどのブロックか?の対応が見づらいですねぇ・・・これは、ぜひとも修正するべきですが、とりあえずは現状のまま使いましょう。
RPARAM[1]をダブルクリックすると、ブロックパラメーターが表示されます。実は、これはスコープに表示しているサイン波のブロックです。
1番目のパラメーターが振幅なので、これを修正してみましょう。
現在、1になっているところを10として、Enterキーを押すと・・・
スコープの信号が変化しているのが、見て取れます。ハッスルしすぎて、振り切れちゃってますね!
接続設定を保存しておいて、あとで利用する
GUIを起動するたびに、いちいちIPアドレスを設定したり、スコープ等の設定をしたりするのは面倒です。ですから設定ファイルに保存しておくことにしましょう。
ツールバーの「設定保存」ボタンをクリックし、ファイル名を指定して保存します。
では、いったんGUIを閉じましょう。右上の×ボタンで閉じてしまって構いません。
では再びGUIを起動します。ツールバーの「設定読み込み」ボタンをクリックし、先ほどのファイルを指定します。
すると、自動的にターゲットに接続を行い、各GUIを表示してくれます。
いったんIPアドレスやGUIパーツの位置を決めたら、あとはこのように設定ファイルを読み込むだけで自動的に状態を再現してくれるため、とても便利です。
今年のクリスマスまでには・・・
ScicosLabも全てWindowsで済むようにし、Linuxは単なるリアルタイム実行だけにしたいです。
Windows上でScicosLabなりSimulinkなりでモデリングを行います。そこでコード生成を行うと、生成コードを自動的にLinuxマシンに転送、コンパイルします。そしてWindows上のGUIから、Linux上のリアルタイムモデルを起動しできるようにします。
こういう環境を作るのがまた面倒だったりしますから、インストーラーいっぱつでScicosLabから何から全部動くようにします。ユーザーは、ただインストーラーを実行するだけ。すぐにモデリング&リアルタイム実行する環境が整います。
ターゲット側は、Ubuntuが使えそうです。詳しくは調べていませんが、UbuntuにはRTAIのパッケージがある様子。かなりラクにインストールできそうな予感がします。
ライセンス
ベースとなった qrtailab-0.1.7はGPL2です。また、Net_RPC をWindowsで動かす部分だけは私がフルスクラッチで起こしました。これらの部分にもGPL2を適用させていただきます。
よって、全てのソースコードのライセンスはGPL2となります。
何か面白いネタないかな?
HILSとか、たいがい大企業で使用されるツールです。どうにも堅苦しいんですよね。
以前、お客様に提出するレポートにうっかりジョークを入れてしまい、「はい、ここ直してねー」と、やんわりたしなめられた事があります。(当たり前ですね!)
まぁ、しょーもないイースターエッグ仕込んで、それが原因で不具合発生!とかシャレになりませんから、当然といえば当然です。(おっと、レポートにジョークを入れた事はあっても、請負開発ソフトにイースターエッグ仕込んだ事はありませんよ!さすがに!だから安心してお仕事ください!)
その点、フリーソフトは自由にできますから、もうちょっと面白さが入れられないかなぁ・・・などと漠然と考えています。どうせ品質や機能では市販品に勝てません。せめて面白さ(?)では勝ちたいものです。
とは言え、アプリの壁紙を初音ミクにでもした日には、さすがにドン引きでしょう。職場で使えないくらいヒドイのはさすがにNGです。
とりあえず何か動物をモチーフにしたマスコットキャラを作って、その子をあちこちに登場させたり、ちょっとしたアニメーションさせたりする事を考えています。
他にも何か面白いネタないかなぁ・・・?
Many thanks to…
Holger Nahrstaedt
Lorenzo Dozio
Paolo Mantegazza
Roberto Bucher
Peter Brier
Alberto Sechi
P. Sereno
They are authors of xrtailab, and/or qrtailab. Thanks a lot for their great works!
Paolo Mantegazza is also the author of Net_RPC module (rtai_netrpc.h, and netrpc.c ), and other RTAI modules. I think he is a kind of superman!