#include <BasicDataType.idl> module RTC { struct TimedImage { Time tm; long width; long height; long depth; sequence<octet> data; }; };
rtc-template -bcxx --module-name=ConsoleIn --module-type='DataFlowComponent' --module-desc='Console input component' --module-version=1.0 --module-vendor='Noriaki Ando, AIST' --module-category=example --module-comp-type=DataFlowComponent --module-act-type=SPORADIC --module-max-inst=10 --outport=out:TimedImage --consumer-idl=TimedImage.idl
make -f Makefile.ConsoleIn
# file: rtc.conf corba.nameservers: localhost naming.formats: %n.rtc corba.args: -ORBgiopMaxMsgSize 3145728 # この行を追加 # Maxサイズを3Mに指定
export ORBgiopMaxMsgSize=3145728
モーションエディタ/シミュレータ
動力学シミュレータ
統合開発プラットフォーム
産総研が提供するRTC集
東京オープンソースロボティクス協会
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
- RTコンポーネントのインスタンス命名規則は
- 標準以外のデータ型を InPort/OutPort で使うには
- データポートで約2MB以上のデータを送りたい
- 新規 Java プロジェクトが JDK6(1.6)準拠として作成できない
- 任意のフォルダーにクラスパスを設定して Ant ビルドを行う方法は?
RTコンポーネント作成に関する FAQ をまとめました。RTコンポーネントのインスタンス命名規則は
RTコンポーネント type名は、rtc-template で --type-name オプションで指定した名前、もしくは、コンポーネントプロファイル(通常は *.cppファイルの先頭に記述) "type_name" に指定されている名前です。
番号は、同一マネージャ上で生成されたコンポーネントに対して、0、1、2、3...のような連番を振ります。
同一のコンポーネントが別プロセスで複数起動された場合には、インスタンスの番号はそれぞれ 0 から始まるので、同一の名前のコンポーネントが複数起動されたことになります。
場合によっては、ネームサービスに同一の名前として複数のコンポーネントが登録されることになり、前に登録されたものは後で登録されたもので上書きされます。
これを回避するには、
標準以外のデータ型を InPort/OutPort で使うには
これ以外のデータ型を定義し InPort/OutPort で使用したい場合は、そのデータ型を IDL で定義し、コンポーネントをコンパイルするときに同時にコンパイル・リンクする必要があります。
仮に画像を格納するため、サイズ(width, height)、デプス、イメージデータ、各メンバを持つデータ型を使用したいとします。IDL ではこのデータ型を以下のように定義します。
これを TimedImage.idl として、ファイルに保存します。
このファイルをコンポーネントを作成するディレクトリーにおきます。
次に、rtc-templateでコンポーネントを作成します。その際に、この IDL ファイルを --consumer-idl オプションに指定します。
コンポーネント内でのデータの使用方法は通常のものと同じです。
これと同じデータ型を他のコンポーネントでも使用したい場合は、この IDL ファイルだけコピーして、同様に rtc-template の --consumer-idl オプションでファイルを指定してください。
これで、このデータ型を用いてコンポーネント間で通信できるようになります。
データポートで約2MB以上のデータを送りたい
omniORBでは、giop (General Inter-ORB Protocol)で扱えるサイズはデフォルトで"2097152B(2MB)"となっています。
このサイズを超えるデータを1回に送ろうとすると、giop の制限のため正しいデータを送ることができません。
この最大サイズを変更するためには、下記の2つの方法があります。
(omniORB configuration and API) http://omniorb.sourceforge.net/omni41/omniORB/omniORB004.html
新規 Java プロジェクトが JDK6(1.6)準拠として作成できない
任意のフォルダーにクラスパスを設定して Ant ビルドを行う方法は?
環境変数 RTM_JAVA_ROOT をクラスパス設定専用に使う方法も考えられます。OpenRTM-aist (Java版)のライブラリフォルダを自由な位置に配置し、それに合わせて RTM_JAVA_ROOT 設定するという使い方もできるでしょう。ただし、この場合は、「環境変数 RTM_JAVA_ROOT をライブラリへのクラスパスの用途以外には使用していない」という保証が必要です。
そこで、何らかの事情で RTM_JAVA_ROOT が指示しているところとは別のところにクラスパスを設定したい場合、クラスパスをどのように設定したらよいのかをここで説明します。