間でやりとるするためのポートです。(DataPort)」と呼ぶことがあります。いろいろなプログラミング言語で記述することができます。RTコンポーネントはネットワーク上に分散させることも、同じノード上に配置することも、あるいは同じプロセス上に置くこともできます。どんな言語で記述されているか、ネットワーク的に分散しているかに関わらず、データポート間のデータの受け渡しは透過的に行われます。必要に応じて任意の数のデータポートを持たせることができます。センサーからデータを取得するコンポーネントを作るとします。指定されたトルク値に従って、モーターを駆動するコンポーネントを作成するとします。それぞれが必要になります。利用する簡単な例を見てみます。各オブジェクトはそれぞれ以下の働きをします。制御してエンコーダから現在の角度を読み取るための機能が実装されたオブジェクト。ハードウエアベンダがそうしたライブラリ等を提供していなければ、自分で実装する必要がある。用にエンコーダのデータを保持する変数。持っているものとする。オブジェクトに関連付けられている。関数を呼んで、エンコーダの現在値を読み込んでいます。メンバーに代入されます。持つモーターコンポーネントは、以下のように書けます。ハードウエア(例えばモータードライバに接続されたDAボード等)を制御してモーター制御をするためのオブジェクト。ベンダからそうしたライブラリが提供されていなければ、自分で実装する必要がある。入力された値を保持する変数。いうフィールド(構造体のメンバ)を持っているものとする。オブジェクトに関連付けられている。データが来ているかどうか確かめています。メンバーに読み込んでいます。output関数を呼び出しています。持つ制御器コンポーネントでは以下のようになるでしょう。場合とそれほど変わりませんので、詳しい説明は省略します。どの言語で書かれているか、あるいは、ネットワーク上の別のノード上にあるのかローカルにあるのか等の違いについては、RTコンポーネントフレームワークにより隠蔽されているので、このように簡単にデータの送受信を行うことができます。Java等、型のある言語に慣れている方は、サンプルプログラムの各変数がどのような型なのか気になったかもしれません。構造体で書くと、ほぼ以下のような構造体と同等のものです。};データポートの型に関しては、以下のような決まりや特徴があります。データポートにはそれぞれ特有の型がある。Language)という言語非依存のインターフェース定義言語によって定められている。定義の型が同じなら接続できる。型の異なるデータポート同士は接続できず、データの送受信は行えない。型でなければなりません。デフォルトで以下のようなデータポート型を用意しており、特に定義することなく利用することができます。フィールドが用意されています。使用する場面はないかもしれません。IDL型から各言語固有の方への対応関係をマッピングといいます。言語マッピング仕様書または「言語マッピング」の章を参照してください。いうシーケンス型と呼ばれる型が用意されています。これは簡単にいえば配列を保持できる型です。}C++ではこのように利用することができます。配列専用のホルダークラスが自動的に生成されこれを利用することができます。配列に直接マッピングされます。先ほどの例では、エンコーダーとモーターは一つでしたが、実際のロボットでは多くの自由度を扱う必要があります。その時に、各自由度ごとにポートを設けるのは、通信効率、同期の問題などから得策ではありません。そのような場合では、こうしたシーケンス型を利用することで、複数のデータを効率的に扱うことができます。独自のデータ型さらに、もっと複雑なデータ構造を扱いたい場合もあります。その場合は、自分でデータ型を定義して、データポートで利用することもできます。詳細は「データポート(応用編)」を参照してください。