OpenRTM-aist
OpenRTM-aistは、RTミドルウエア規格に基づき開発されたロボット技術用のミドルウエアである。RTミドルウエアにかかわる規格の実装として、中心的に同規格策定を行っている独立行政法人産業技術総合研究所が主体となって開発を行っている。
RTミドルウエアでは、アクチュエータやセンサ、および知能化のためのアルゴリズムなどのロボットの技術要素を一つのコンポーネントとみなし、これをRTコンポーネント (RT-Component, RTC) と呼ぶ。RTコンポーネントは外部のRTコンポーネントと通信するためのポートを持っており、単一ないしは複数のRTコンポーネントを接続することで、ロボット技術を応用したシステムを構成することができる。したがってRTミドルウエアでは分散型アーキテクチャを採用しているといえる。
RTミドルウエアに関わる規格では、プラットフォーム独立モデル (PIM) としての規格が定められているため、CORBAや.NET Framework、EJBなどの分散技術に依存しないが、OpenRTM-aistは分散オブジェクト技術のCORBAをベースとして独自の拡張を行っており、OpenRTM-aistでの成果は再度、上位のRTミドルウエア関連規格の策定にフィードバックされる。
OpenRTM-aistの特徴は、OMGの規格で定められたRTコンポーネントに独自の拡張を行った機能を搭載しており、さらにRTコンポーネントの運用を助けるマネージャ (Manager) の機能が搭載されている。また、CORBAを採用したため複数の言語での開発が可能になり、さらに異なる言語で開発されたRTコンポーネント間の通信や状態管理が可能となった。また、厳密にいえばOpenRTM-aist本体とは異なるが、OpenRTM-aistの運用を助けるためのツール群が多数、産総研などからリリースされており、スケルトンコードの自動生成やRTコンポーネントの接続、状態遷移の監視などをグラフィカルに行うツールが揃っている。
RTコンポーネントは、OMGによって定められたRTコンポーネント規格に沿ったロボット技術を用いた機能要素を制御する要素単位をいう。OpenRTM-aistでは、外部との通信用ポートとしてデータポートとサービスポートを規定している。さらにRTコンポーネントの実行状態を管理するための実行コンテキストや、RTコンポーネントの制御パラメータを変化させるコンフィグレーションが重要な概念といえる。
データポートとは、整数型や浮動小数点型で表現されるデータの送受信が主な用途であり、同じ型を持つデータポートならば接続、通信が可能になっている。
これ以外に2012年7月現在で最新のバージョン1.1では，ExtendedDataTypeとして，ロボット固有のデータ型として，上記のプリミティブなデータの組み合わせを使ったデータ型が試験的に導入されている．
また，独自のIDLを記述すれば，独自なデータ型を定義することができる．
サービスポートとは、データポートで規定されるようなデータ通信に限らない、フレキシブルな通信が可能となっている。
サービスポートでは、CORBAの仕組みを応用して、サービスを利用するRTC側からの特定のリクエストに関して、結果を返り値として返却することが可能である。またデータの送受信を伴わない、たとえばリセットのような仕組みを提供することも可能である。
この機能を使うためには、サービスポートのインターフェースを規定するIDLを記述する必要があり、ほとんどCORBAの技術を直接応用した形での開発が可能になっている。
RTコンポーネントの規格では、RTコンポーネントはCREATED、INACTIVE、ACTIVE、およびERRORの状態を持っており、各状態への遷移や、状態遷移に伴うアクションを管理するのが実行コンテキストである。
RTミドルウエアでは、実行コンテキストを定義することで、実行時に状態管理や実行周期のカスタマイズが可能になっており、RTコンポーネントの運用範囲を広げることに成功している。
OpenRTM-aistでは，Linuxカーネルのプリエンプションを利用したリアルタイム実行コンテキストをサポートしており，実行時にリアルタイム性を持たせることが可能である．
RTコンポーネントの制御にかかわるパラメータを動的に変更する仕組みとして提案されているのがコンフィグレーションである。コンフィグレーションは、整数型や浮動小数点型の数値のみでなく、文字列型も定義することができ、外部のプロセスと通信する方法としてデータポートとは異なるインターフェースを提供している。
Windowsおよび各種Linux、macOSで動作するライブラリが公開されている。このほかにVxWorksでの実装が行われている
CORBAを用いたために複数の言語でのRTコンポーネント開発が可能となり、さらに異なる言語で開発されたRTコンポーネント間での通信が可能となっている。現在はC++言語、Python、およびJavaでの開発がおこなわれている。またErlangでの実装も非公式ではあるが発表されている
OpenRTM-aistを使った開発を支援するためのツールが複数提案されている。
OpenRTM-aistでは、RTコンポーネント開発においては、ライブラリで提供されているRTコンポーネントの規定クラスのメソッドをオーバーライドする形で開発するため、スケルトンコードの自動生成ツールが重要となっている。OpenRTM-aistではRTC Builderを提供しており、Eclipse上で必要事項を選択、および入力することで、LinuxおよびWindows (Visual Studio) で開発可能なスケルトンコードを自動的に生成することができる。
RTC BuilderではC++、Java、PythonでのRTコンポーネントのスケルトンコードの生成が可能であり、スケルトンコードやMakefileと併せて、RTコンポーネントプロファイルというXML形式のファイルを生成することができる。RTCプロファイルにはRTCのポートに関する情報や、コールバック関数に関する設定が記述されており、RTCのインターフェースに関する情報を交換する方法として用意されている。
RTミドルウエアでは、RTコンポーネントの組み合わせと状態遷移によってロボット・システムの開発を行うが、ポートの接続および監視を行うツールも、RTコンポーネント運用の重要なカギとなってくる。OpenRTM-aistでは、RT System Editorを提供している。
RT System Editorでは、ネームサーバー上のRTコンポーネントの一覧の取得、RTコンポーネント間の接続、状態遷移、コンフィグレーションの変更などをグラフィカルに行うことができる。また、Managerを使って、遠隔からRTコンポーネントの起動、停止も可能になっている。接続やコンフィグレーションの状態はRT System ProfileというXML形式のファイルに保存することができ、次回からはRT System Profileをロードすることによって、RTシステムの状態を簡単に再現することができる。
rtshellは産業技術総合研究所が開発したコンソール上でのRTコンポーネントの管理、運用ツールであり、コマンドライン上で実行することが出来る複数のコマンド群からなるツールセットである。
rtshellではRT System Editor同様に、RTCの実行、停止、状態遷移、ポートの接続のほかに、ポートの値のエコー、ポートへのデータの送信、ログの収集および再生、RT System EditorでのXMLファイルの読み込みによるRTシステムの構築などに対応しており、コマンドラインに慣れた技術者であればRTCのデバッグにも使えるツールになっている。
OpenRTM-aistにおけるManagerの機能のみを実装したプログラム。複数のRTCを読み込み、起動する機能がある。
実際には、実行形式でコンパイルされたRTCではManagerの機能を利用しており、設定ファイルであるrtc.confを編集する事でも複数のRTCを起動する事ができる。
EPLおよび産総研と個別に契約するライセンスのデュアルライセンス方式を採用している。