RTAI入門(1) 何が出来るか?その1

「リアルタイム検査システムを作りたい。なるべく安く。しかも、短期間で。」

そんな案件を取ってきたとしましょう。

ここで言うリアルタイムとは、時間にすごく厳しいという意味です。たとえば、本当に生きのいいカブトムシだけを出荷するために、秒速5cm以上で走るカブトムシだけを選り分ける。こういう時に、リアルタイム検査システムでキッチリ秒速5cm以上かどうかを調べる必要があります。秒速4.999cmのカブトムシは残念ながらアウトです。こういう判定は、時間にルーズなシステムでは不可能です。

さて、景気のせいか、最近お客さんからの要求は厳しいものがあります。開発費はかけたくない。リピート費も抑えたい。

しかし厳しいとはいえ、こちらもプロです。何か実現方法を考えないといけません。まずリアルタイムシステムという事なので、リアルタイムOSを選定しましょう。費用的な面から、有償リアルタイムOSは除外ですね。使うならLinuxのリアルタイム派生が良さそうです。有名所では、RTAI、PREEMPT_RT、RT-Linuxなどなど。

まずやるべき事は、これらの比較です。

  • 今回の案件で必要な機能が、すべて備わっているか?
  • 技術的なサポートが得られそうか?情報源は豊富か?

比較の結果、コレを使おう!という事が決まったら、今度は実現方法の調査が待っています。

  • 今回の案件で必要な機能を、具体的にどう実現したらいいのか?

この調査だけでも、かなりの時間がかかります。お客さんは早く早く!と言いますし、なかなか大変ですよね。

そこで今回からしばらく、RTAI入門という記事を書きます。今回のシリーズで分かるのは・・・

  • RTAIには、どんな機能があるの?
  • それらの機能は、具体的にどう使うの?

の2点です。これで、RTAIに関する調査時間が、ほんのちょっぴり短縮されるでしょう。

ちなみに、わたしがRTAIを選択したのは、RTAI-Labというツールが使えるからです。RTAIは、複数のPC間にまたがってリアルタイムタスクを走らせることが出来ます。そして、その機能によってRTAI-Labが作られています。この機能は、RTAIの特色と言えるでしょう。

さて今回は、「どんな機能があるの?」の部分をザックリと眺めましょう。

RTAI機能概観

なるべく短時間でRTAIの事を知るには、次の読み方がオススメです。

まず、「とってきた案件」に必要そうな機能は、なんとなくイメージされているでしょうか。そのイメージを元に、この章を見て、「これが関係あるのかな?」と目星を付けてください。

次に、来週以降の記事を読んで、関係ありそうな章だけをつまみ読みして下さい。基本的に独立していますから、どこから読んでもOKです。

howto_rtai_01_00

RTAIの機能は「リアルタイム化」と「IPC」に大別される

リアルタイム化

リアルタイムシステムでは、まず間違いなく「定期的な処理」が入ります。1ms(千分の1秒)毎にカブトムシの位置を測定したり、といった感じです。

「1ms毎に何か処理をする、なんて簡単だよね?リアルタイムOSなんか要らないかも?」

そんな風に考えると痛い目に会います。1ms毎に処理をしなさい!と言われた時、リアルタイムOSと非リアルタイムOSではこう違います。

リアルタイムOS君「1ms毎にと言われたら、絶対に1ms毎にやるよ!なにか別の仕事してても、1ms毎にぜったい中断して、約束の処理をするよ!」

非リアルタイムOS君「1msか。まぁやっとくよ。でも、ボクも色々いそがしくってさ。別の仕事が入ったらそっち優先するかもね。だいじょうぶ、帳尻だけあわせておくから!」

こんな感じです。1ms毎に処理をしろと言われたら、絶対に1ms毎にやる。これがリアルタイムOSのうれしさです。まちがっても、10msサボったあとで、帳尻だけあわせるように10回連続で仕事をする、なんて事はありません。

(くわしくは、以前の記事「HILSの動作原理」の、一番最後の章をどうぞ。)

タスクのリアルタイム化:RTAIの機能で、Linuxのユーザープロセスをリアルタイム化できます。

タイマーによるトリガー:リアルタイム化したプロセスを、定期的にトリガーできます。

ハードウェア割り込み:RTAIの機能で、I/Oボードからのハードウェア割り込みを扱う事もできます。

IPC

リアルタイム化したプロセスは、それぞれ孤独に走り続ける事もできますが、時に協調動作したい事もあります。その時に必要なのがIPC ( Inter Process Communication )です(※1)。

メッセージ:リアルタイムタスク間で、数バイトのデータをやりとり出来ます。

メールボックス:リアルタイムタスク間で、いわゆるFIFOのような形のデータ授受が出来ます。

Net_RPC:UDP通信を使用して、複数のPC間でメッセージやメールボックスのやり取りが出来ます。

共有メモリ:リアルタイムタスク用にメモリを確保します。これをタスク間やプロセス間で共有する事も出来ます。

FIFO:メールボックスとほぼ同じです。メールボックスはあくまでリアルタイムタスク間でのやりとりですが、FIFOはリアルタイムタスクと、非リアルタイムタスクの間であってもやりとりできます。

セマフォ:いわゆるセマフォです。

(※1)正確にはInter Task Communicationとでも呼ぶべきなんでしょうが、細かい事は気にしない!

次回

次回は、「リアルタイム化」に関する機能説明を書きます。