OpenRTM-aist
データフロー型でpush型を選択したときに変更できる設定パラメータで、送信側RTコンポーネントがOutPortに書き込んだ際に、受信側にデータが実際に送信されるタイミングを調整することができる。
サブスクリプション型がflushである場合は、RTコンポーネントがOutPortにデータを書き込んだ際に直ちにデータが送信される。マーシャリングと送信は書き込みを実行したスレッドが引き受けるため、周期処理中にデータを書き込んだ場合は、送信の遅延も同じスレッドが負担することになる。
一方、サブスクリプション型にnewを選択した場合は、OutPortにデータを書き込んだ際にデータはOutPort内のバッファに書き込まれ、直ちに処理が返る。このとき、書き込みと同時に別のスレッドを立ち上げて、新しいスレッド内で送信を行う。
サブスクリプション型にperiodicを選択した場合は、newと同様にOutPort内のバッファにデータが書き込まれるが、書き込みとは別のスレッドが周期的にバッファを監視しており、バッファに書き込みがあった場合はそのスレッドがデータを送信する。periodicを選択した場合は、バッファ監視の周期を設定する必要がある。
これによってOpenRTM-aistのRTコンポーネントは、ハードウェアの初期化や終了、周期処理をRTコンポーネントのアクションとして実装し、ツールから任意のタイミング・周期で呼び出すことができる。
また、実行コンテキストは実行時のRTコンポーネントに動的に登録・解除することができ、また複数のRTコンポーネントを同一の周期実行コンテキストに登録することで、周期実行タイミングを同期させて動かすなど、フレキシブルなシステムを実行時に構築・設定することができる。
さらに、実行コンテキストは基底クラスを継承することでカスタマイズすることができ、後述するマネージャに実行時にロードさせることで、いろいろな実行コンテキストを使うことができる。例えば、OpenHRP3などのシミュレータのシミュレーション時間と同期して実行する実行コンテキストを使えば、実機でも動作するRTコンポーネントを、コンパイル時ではなく実行時にシミュレーションに組み込んで処理を行わせることができる。また、OpenRTM-aistでは,Linuxカーネルのプリエンプションを利用したリアルタイム実行コンテキストをサポートしており,実行時にリアルタイム性を持たせることが可能である。
OpenRTM-aistの特徴は、Object Management Group(OMG)の規格で定められたRTコンポーネントに独自の拡張を行った機能を搭載しており、さらにRTコンポーネントの運用を助けるマネージャ (Manager) の機能が搭載されている。また、CORBAを採用したため複数の言語での開発が可能になり、さらに異なる言語で開発されたRTコンポーネント間の通信や状態管理が可能となった。また、厳密にいえばOpenRTM-aist本体とは異なるが、OpenRTM-aistの運用を助けるためのツール群が多数、産総研などからリリースされており、スケルトンコードの自動生成やRTコンポーネントの接続、状態遷移の監視などをグラフィカルに行うツールが揃っている。