[openrtm-users 01141] RT-Preempt kernel 用 EC

1 つの投稿 / 0 new
root
オフライン
Last seen: 18時間 46秒 前
登録日: 2009-06-23 14:31
[openrtm-users 01141] RT-Preempt kernel 用 EC

OpenRTM MLの皆さま

産総研 安藤です

通常のLinux kernelでリアルタイム実行を実現するためのパッチ (RT-Preempt patch)
を利用した実行コンテキストを作成してみましたので公開します。
すでに、fuRoの清水さんや、静岡大の清水さんなども作成されているものと
ほぼ同じものだと思います。問題がなさそうであれば本体に取り込みます。

Ubuntuではすでにパッチの当たったkernelもパッケージとして
用意されているようですので、簡単に導入できて便利ですね。
こちらでは、Ubuntu8.04 に以下のカーネルを入れてテストしてみました。

$ dpkg -l | grep rt |grep kernel
ii linux-image-2.6.24-27-rt 2.6.24-27.65
Linux kernel image for version
2.6.24 on Ing

1 ms周期のループの1000回の計測結果は以下のような感じです。
(PCはPenM 2.0GHz + 2GB memoryのキューブタイプのPC)

max: 1.036 [ms]
min: 0.998 [ms]
mean: 1.00021 [ms]
stddev: 0.00380806 [ms]

必要に応じて rtc.conf で幾つかオプションを指定することができます。
・優先度 (1-99)
・スケジューリングポリシ (rr or fifo)
・ウエイト時間の調整 ([ns])

添付のソースには、時間計測用のサンプルコンポーネントも同梱されています。
OpenRTM-aistがインストールされた環境で

$ tar xvzf RTPreemptEC.tgz_
$ cd RTPreemptEC
$ make
$ cd RTSample
$ make
$ su
# ./RTSampleComp -f rtc.conf1

のように、コンパイルしてからrootになって実行してください。
RTSEでActivateすると、1000回ごとの計測結果を表示します。

以下、注意事項です。
・rootでしか実行できません
・logger.log_level は DEBUG以下にしてください
・logger.enable: NO でも logger.log_level: PARANOID だと
 デッドラインが守れなくなることがあります。

実装上の問題点や、バグ等ありましたらお知らせください。

以下、ソースのdoxygenドキュメントのコピーです。

* @class RTPreemptEC
* @brief RTPreemptEC クラス
*
* RT-Preempt kernel を利用した、リアルタイム実行コンテキストクラス。
* この実行コンテキストは、RT-Preempt Patch を適用した Linux kernel、
* 又は、これが組み込まれた Linux kernel によるリアルタイムスケジュー
* リング機能を利用した実行コンテキストである。
*
* この実行コンテキストを利用するには、rtc.conf に下記のように記述する。
*
*
* exec_cxt.periodic.type: RTPreemptEC
* exec_cxt.periodic.rate: 1000
* exec_cxt.priority: 50
* manager.modules.load_path:
* manager.modules.preload: RTPreemptEC.so
*
*
* さらに、実行時には root 権限が必要となるので、root としてコンポー
* ネントを実行する必要がある。
*
* このECに特有なオプションは以下のとおりである。
*
* - exec_cxt.periodic.priority: (default: 49)
* - exec_cxt.periodic.rtpreempt.priority: (default: 49)
* スレッドの実行優先度 1 (最低) から 99 (最高)
* Linux sched_setscheduler(2) を参照のこと。
*
* - exec_cxt.periodic.rtpreempt.sched_policy: (default: fifo)
* スケジューリングのポリシ。
* rr: ラウンドロビン, fifo: FIFO 型 (default: fifo)
* Linux sched_setscheduler(2) を参照のこと。
*
* - exec_cxt.periodic.rtpreempt.wait_offset: (default: -10000)
* ウェイト時間のオフセット。[ns] 単位で指定する。
* 1周期あたり数十 us 程度の定常的な遅れが発生する場合があるので、
* この値を調整することで、より正確な周期で実行させることができる。
*
* 注意事項: このECを比較的速い周期 (数十ms以上) で実行させる場合は、
* ログレベルを DEBUG よりも下 (logger.log_level: NORMAL 等) に設定し
* て実行する必要がある。また、logger.enable: NO に設定されていても、
* logger.log_level: PARANOID に設定されている場合には、onExecute()
* の実行に時間がかかり、デッドラインを守れなくなる可能性があるので注
* 意が必要である。

未定義

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2160
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク