Download
latest Releases : 2.0.0-RELESE
| 2.1.0-RELESE | Download page |
| 2.0.1-RELESE | Download page |
Number of Projects
| RT-Component | 154.5 |
| RT-Middleware | 35 |
| Tools | 25 |
| Documentation | 2 |
Choreonoid
Motion editor/Dynamics simulator
OpenHRP3
Dynamics simulator
OpenRTP
Integrated Development Platform
AIST RTC collection
RT-Components collection by AIST
TORK
Tokyo Opensource Robotics Association
DAQ-Middleware
Middleware for DAQ (Data Aquisition) by KEK
OpenRTM-aist とは何ですか?
ひとことで言うと「ロボットシステムのための分散コンポーネントミドルウエア」です。
上の説明を聞いてもまだよくわからないのですが?
プログラムをコンポーネント単位(これをRTコンポーネントと呼ぶ)で作成する、という点が重要です。
LEGOブロックを想像するとわかりやすいかもしれません。ここのRTコンポーネントはブロックです。 ブロック単体では何も面白くありませんが、ブロックを組み合わせていろいろなものを作ることができます。 ブロック同士は共通の凹凸 (RTコンポーネントの標準インターフェース) を持っているため、簡単に接続することができます。
RTコンポーネントとは何ですか?
概念的に言えば
実装上、つまりプログラミングする際には
また、このようにして実装したクラスはコンパイルされ、実行形式 (exeやUNIX上の実行可能形式) やローダブルモジュール (dll, so, dylib形式) になります。 これらもそれぞれ
もっと具体的に教えて下さい。
たとえば、いまあなたは卒論で画像処理についての研究をしているとします。画像をカメラから取得して、画像に対して何かの処理をし、画面に表示するプログラムを作らなければなりません。プログラムは大きく分けて以下の3つの部分から構成されるでしょう。
卒論の研究テーマは「画像処理」です。つまり上の「2. 取得した画層に対して処理を行う」部分が重要で、ほかはどうでもいいわけです。 しかし、もしすべてを自分で1からプログラムをつくろうとすると、カメラのドライバの知識も必要になりますし、画面表示のためにはウインドウシステムの知識も必要でしょう。
OpenRTM-aistを使ってください。カメラから画像を取得するRTコンポーネントも画像を画面に表示するコンポーネントはすでにあります。 あとは、あなたの「2. 取得した画層に対して処理を行う」RTコンポーネントを作成するだけです。 それも、似たようなサンプルが沢山ありますのでそれを少し修正して自分のアルゴリズムを実装してください。
OpenRTM-aistは何に向いていて、何に向いていないのですか?
向いていること
向いていないこと
OpenRTM-aistの技術的概要について教えて下さい
OpenRTM-aistはRTコンポーネント(RTC)というソフトウエアの基本単位を組み合わせてシステムを作るためのフレームワークおよびミドルウエアです。
RTCフレームワーク
あなたがすでに持っているプログラムをRTCにするのは比較的簡単です。RTCフレームワークに従って、幾つかの関数にロジックを実装します。 コンポーネントには入出力のためのポートというものがあり、それらもフレームワークを利用すれば簡単に利用することができます。 具体的には、RTCBuilderと呼ばれるGUIツール、作成しようとするコンポーネントの基本情報、入出力ポートの情報などを入力するとほとんどのコードが自動で出力されます。 出力されたコードはあなたのコンポーネントのためのクラス定義が含まれます。その中のonExecute()という関数がC言語で言うところのmain関数にあたり、ここに主なコードを実装します。 ポートから入力を読み取るには、予め定義されている入力ポートのread()関数を呼び、別途定義されている入力ポート用の変数からデータを読むだけです。 ポートへデータを出力するには、これも予め定義されている出力ポート用の変数にデータを書き込み、別途定義されている出力ポートのwrite()関数を呼分だけです。 ポート同士の接続は、システムを組み立てるときにおこなわれ、RTCを実装する際には相手がネットワーク上のどこにあるか、どんな言語やOS上のコンポーネントかなどについて気にする必要はありません。ネットワーク通信、OS、言語間の透過性はOpenRTM-aistによってすべて保証されます。
ネットワーク透過性
OpenRTM-aistのネットワーク透過性は、分散オブジェクトミドルウエアの標準であるCORBA (Common Object Request Broker Architecture) により実現されています。 CORBA はネットワーク上に存在するリモートオブジェクト間の呼び出しを、ネットワーク・言語・OS間で透過的に行うことができ、ほぼすべてのOS、言語をサポートしています。 また、CORBA自体はOMG (Object Management Group) という標準化団体により標準化されている標準仕様ですが、この仕様に従ってCORBAのミドルウエアを実装・提供 (あるいは販売) している組織・会社は多数あり、これにより様々なOSや言語間のサポートが実現されています。
RTコンポーネントの機能
RTコンポーネントには主に以下の機能がありますCORBAの通信速度は遅いと聞いた事があるのですが
これはある意味において正しく、また間違いです。 ごく簡単なプロトコルを持ったネットワーク通信をsocket APIで実装した場合、CORBAの通信速度を超えることはそれほど難しくはないでしょう。 ただそれは、ネットワーク上でのネゴシエーションを含む透過性の実現、可変長メッセージのサポート、異なるエンディアンへの対応、複数の言語間での相互利用などは考慮されていないのではないでしょうか? これらの機能をサポートしようとすれば、次第にCORBAが利用している CDR (Common Data Representation) というマーシャリング手法と、GIOP (general Inter-ORB Protocol) というプロトコルに近いものになっていき、CPU使用量やパケットサイズが増大します。 また、これらを複数の言語間で整合性を保証し、かつ複数の実装間で相互運用性を保証することは大変なことです。 一からこうしたミドルウエアを実装し、バグのが少なくかつCORBAより高速なミドルウエアを実装することはおそらく難しいでしょう。 CORBAのオーバーヘッドはこうした柔軟性と相互運用性のための代償なのです。
CORBAのメモリ使用量が大きく重いと聞いたことがあるのですが
CORBAを利用する際にはCORBAのためのコアライブラリと、スタブやスケルトンと呼ばれるユーザ定義に基づくコードを同時にリンクする必要があります。 大抵の実装におけるコアライブラリは、言語によっても違いますが例えばC++であれば数MB程度のものになります。一方スタブやスケルトンは利用するインターフェース定義によって大きく異なり、複雑なインターフェース定義を利用すればするほど大きくなります。OpenRTM-aistではこれらはスタティックライブラリの状態で2MB程度のファイルサイズになります。
最近のLinuxやWindows上のアプリケーションに比べると実行時にメモリ上に占めるサイズも気になる程ではありませんが、数MB程度しかメインメモリを搭載しない機器ではCORBAを動作させることは難しいでしょう。C言語で実装された省メモリのCORBAなどもありますが、組込みの世界の常識から言えばこれでもかなり大きいサイズになります。
ただし、ロボットシステムを構築する再には、モーションコントロールや運動学計算、あるいいは画像処理、音声処理などを行う必要があり、これらを行うには通常PC程度のスペックの計算機がロボットに搭載されます。したがって、こうした環境で利用する際にはCORBAおよびOpenRTM-aistのメモリ使用量やCPU使用量などはそれほど問題にはならないでしょう。
なお、スタブやスケルトンはリモート呼び出しの際の複雑な手順や、呼び出されるオブジェクトを実現するために必要な様々な処理を隠蔽します。 これらは通常IDLコンパイラと呼ばれる一種のコードジェネレータにより自動的に生成されるため、同じ作業を手で行うよりもずっと間違いやバグが少なくなります。
なぜ今さら古臭いCORBAを使うのですか?
たしかに、CORBA 1.0の標準仕様が最初にリリースされたのは今から20年も前の1991年です。(CORBAの歴史) 仕様およびその設計に様々な問題があることも知られています。
Javaであれば、RMIやEJBなどを使えばCORBAを使うよりもずっと簡単にリモートオブジェクトやコンポーネントを利用することができます。 ただし、これらはJavaでしか利用することができません。DCOMは複数の言語をサポートしますが、Windowsでしか利用できません。
複数の言語、複数のOSをサポートするミドルウエアとしては、ZeroC Inc.のIceがあります。これはCORBAの仕様策定にも深く携わり、Advanced CORBA Programming with C++の著者のひとりでもあるMichi Henning (ZeroC Inc. CTO) が作ったミドルウエアです。 CORBAの問題点を改善し、よりシンプルに、学習しやすく、またCORBAにない幾つかの機能も追加されたミドルウエアです。 ほとんどのメジャーな (かつ最近の) 言語やOSをサポートしています。
ただし、OpenRTM-aistの開発が始まった2003年時点では、Iceの最初のバージョン (2003年リリース) がリリースされたばかりであり、CORBAの大胆となるミドルウエアは他にありませんでした。