FAQ about RTC creation


サービスポートを持つ RTC を Eclipse でビルドするとエラーが表示される

RTCBuilder でサービスポートを持つ RTC を生成した場合、Eclipse のビルドで以下のような「***POA を型に解決できません」エラーが表示されます。

Error_POA.png

原因: idl コンパイルは、サービスポートで使用する idlファイルから javaファイル(スタブソース、スケルトンソース、各種ユーティリティソース)を生成します。 idl コンパイルが実行される前にビルドが実行されると、ビルドに必要なこれらのソースファイル(javaファイル)が見つからずエラーになります。

対処方法: Eclipse のパッケージエクスプローラから「build_JavaRTCTest.xml」を右クリックして [実行] > [antビルド] 実行してください。 これにより、idl コンパイルが実行され、javaファイルが生成されます。 「build_JavaRTCTest.xml」実行後に、[F5] キーなどでプロジェクトを更新すると、エラー表示が消えます。


RTC がシステムエディタ上に表示されない

ネットワークの切り替え時に発生する現象で、NameService と RTC を再起動することで表示されるようになります。


データポートで約2MB以上のデータを送りたい

画像データなどをデータポートで送る際、1回に送られるデータサイズ約2MBを超える場合には注意が必要です。
omniORBでは、giop (General Inter-ORB Protocol)で扱えるサイズはデフォルトで"2097152B(2MB)"となっています。 このサイズを超えるデータを1回で送ろうとすると、giop の制限のため正しいデータを送ることができません。

この最大サイズを変更するためには、下記の2つの方法があります。

  • rtc.conf にて最大サイズを指定する場合
     # file: rtc.conf
     corba.nameservers: localhost
     naming.formats: %n.rtc
     corba.args: -ORBgiopMaxMsgSize 3145728 ※この行を追加 (Maxサイズを3Mに指定)

  • 環境変数にて指定する場合
      export ORBgiopMaxMsgSize=3145728
    ※ giopMaxMsgSize を指定する場合、server、client 共に (対になるコンポーネント) 設定する必要があります。
    (omniORB configuration and API)
    http://omniorb.sourceforge.net/omni41/omniORB/omniORB004.html


Raspberry Pi との接続時に、IPアドレスが割り当てられない

Raspberry Pi を再起動してください。


Raspberry Pi 上のデータポートと PC上のデータポートを接続すると接続エラーになる

Raspberry Pi が起動する前に PC側の NameService を立ち上げていたためと思われます。再度、NameService を立ち上げ直してください。


Raspberry Pi に接続した場合に RTC と通信できなくなる

ウイルス対策ソフトの影響の可能性があります。WiFi 設定を WPA2 に変更してください。


Raspberry Pi 側のサービスに ConsoleOut が表示されない

ネームサーバの問題
ネームサーバのエンドポイントアドレスが不正な場合このような現象が起きます。rtm-naming で再度ネームサーバを起動しなおすと解決する場合があります。

このほか、Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合、PCとの接続に使用するどちらかのネットワークのみを使うように設定することで解決するケースもあります。

コンポーネントの問題
コンポーネントが読み込んだ設定ファイル(rtc.conf)に localhost 以外のネームサーバが登録されている場合が考えられます。corba.nameservers: localhost と記述するなど localhost のネームサーバにコンポーネントを登録するよう設定してください。
また、Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合、PCとの接続に使用するどちらかのネットワークのみを使うように設定することで解決するケースもあります。


PCにネットワークインターフェースが2つ以上ある場合、RTSystemEditor で接続できない、反応しなくなるなどの問題がある

PC側のコンポーネントの問題
PCにネットワークインターフェースが2つ以上ある場合、Raspberry Pi で使用しない側のインターフェースアドレスがコンポーネントの参照として利用されている場合このような現象が起こります。

エンドポイントを設定するため、rtc.conf に使用する方の IPアドレスを以下のように設定します。

 corba.endpoints: 192.168.11.20

ただし、Vista 以降の Windows では、C:\Program Files 以下のファイルは簡単には編集ができなくなっています。c:\tmp など適当なディレクトリーに ConsoleIn.exe と rtc.conf をコピー(あるいは新たに作成)するなどして、対処してください。

Raspberry Pi側のコンポーネントの問題
Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合で、それぞれが別のネットワークにつながっている場合、上述のPCと同様の問題が起こります。エンドポイントを設定するため、rtc.conf に以下のように記載します。
 corba.endpoints: 192.168.11.21



Naming rules for RT-Component instances

The default rule used to name RT-Component isntances is: [RT-Component type name] + [index (0,1,2,3,...)]

The type name is specified in the component profile (usually specified in the component's source file). The index is used for components instantiated using the same type in the same manager.

If components are instantiated using the same type but separate managers, they may use the same instance name on the name server. The most recent component that registers will overwrite any previous registrations. You can avoid this by:
  • Start the components in the same process.
  • Specify a name format that doesn't collide by editing naming.formats in the rtc.conf files.


How can I use non-standard data types for InPort/OutPort.

Usually, in OpenRTM-aist usable data types are defined in rtm/idl/BasicDataType.ild:

TimedShort、TimedLong、TimedUShort、TimedULong、TimedFloat、TimedDouble、TimedChar
TimedBooleanTimedOctet、TimedString、TimedShortSeq、TimedLongSeq、TimedUShortSeq
TimedULongSeq、TimedFloatSeq、TimedDoubleSeq、TimedCharSeq、TimedBooleanSeq
TimedOctetSeq、TimedStringSeq

You can use the above 20 data types for the data type for InPort/OutPort.

If you want to use the other data types for InPort/OutPort, you need to define it in IDL file and need to compile and link it when you comile the components.

Let's assume we want use a data type to store images, which has size (width, height), depth, and image data as members (note that OpenRTM-aist supplies a CameraImage data type). Define the following data type in your IDL:
 #include <BasicDataType.idl>
 module RTC
 {
   struct TimedImage
   {
     Time tm;
     long width;
     long height;
     long depth;
     sequence<octet> data;
   };
 };
The Time type is a type for timestamps that is defined in OpenRTM-aist. You may not need to include it but it is typically a good idea. Save this to a file named TimedImage.idl.

Put this file in the directory where the component source is located. Next, generate the component with rtc-template. At that time, specify this IDL file to --consumer-idl option.
 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

In this example, we use the TimedImage type defined in TimedImage.idl as the data type of OutPort. Let's compile the generated code.
 make -f Makefile.ConsoleIn
As a result, TimedImage.idl is compiled by the IDL compiler and linked to the component. The usage of the data in the component is the same as usual. If you want use the same data type as this one in another component, please copy this IDL file and specify the file to consumer-idl option of rtc-template in a similar way. Now you can connect components using this data type.

新規 Java プロジェクトが JDK6(1.6)準拠として作成できない

新規プロジェクトで Java プロジェクトを作成しようとすると、次のようなダイアログが表示されて、JDK準拠が選択できないことがあります。
RTCBuilder を利用し、Java で RTコンポーネント作成するプロジェクトでは、このダイアログにおいて指定する JRE(Java実行環境)を JDK 内に含まれている JRE とする必要があります。このままでは JDK内の JRE を選択できないため設定を変更します。

1. 下図のように JRE フレーム内の「JREを構成...」リンクをクリックします。(あるいは、一旦このダイアログをキャンセルして Eclipse のメニューバーの[ウィンドウ] > [設定] > 「設定」ダイアログの左のツリー部分から「Java」の下の「インストール済みのJRE」を選択します。)

new_project_name_ja.png
新規Javaプロジェクトのダイアログ(JDKの選択がない場合)


2. [追加] ボタンをクリックします。

new_JRE_setting_ja.png
インストール済みのJREのダイアログ(JDKの表示はまだない)


3.「標準VM」 を選択して [次へ] ボタンをクリックします。

new_JRE_VM_setting_ja.png
JREの型の選択のダイアログ


4. [ディレクトリー] ボタンをクリックして、JDK6 までのパスを選択します。(参考:通常、JDK6 のパスはC:\Program Files\Java\jdk1.6.0_XX)

add_JRE_ja.png
JRE の追加ダイアログ


select_JDK_ja.png
JDK6 までのパスを選択し、「JRE の追加」ダイアログに JDK を参照させる


5. JDK までのパスの参照に成功すると、「JRE の追加」ダイアログが下図のようになりますので、[完了] ボタンをクリックしてダイアログを閉じます。

load_JDK_ja.png
JDK6 のパス参照に成功


6.「インストール済みの JRE」ダイアログに戻ってくるので(JDK が追加された状態で)、下図のようにアクティブとする JRE にチェックを入れ、[OK] ボタンをクリックします。

set_active_JDK_ja.png
「インストール済みの JRE」ダイアログに JDK が追加されているので、アクティブチェックを JDK に変更


7.「新規 Java プロジェクト」のダイアログで JDK が選択できるようになります。

SelectJDKasJRE_ja.png
「JRE」としてJDK内の JRE で構成するように指定する



任意のフォルダーにクラスパスを設定して Ant ビルドを行う方法は?

環境変数 RTM_JAVA_ROOT に OpenRTM-aist (Java版)ライブラリ「OpenRTM-aist-X.X.X.jar」(X.X.Xはバージョンです。)が存在するフォルダー「jar」へのベースパス(親フォルダまでのパス)を設定し、それをクラスパスの設定に用いることで、OpenRTM-aist (Java版)は RTCBuilder でのコード生成と Ant でのビルド実行の連携を築いています。したがって、RTM_JAVA_ROOT は OpenRTM-aist (Java版) のライブラリフォルダーへのパス(ベースパス)を必ず保持していなければならないわけです。ところが、RTM_JAVA_ROOT は本来、OpenRTM-aist (Java版) のインストール場所を指すものなので、結果 OpenRTM-aist (Java版) のライブラリと他のコンポーネント(ドキュメント・サンプル・ユーティリティツール類)は常にそのフォルダー構造を保っていなければなりません。

環境変数 RTM_JAVA_ROOT をクラスパス設定専用に使う方法も考えられます。OpenRTM-aist (Java版)のライブラリフォルダーを自由な位置に配置し、それに合わせて RTM_JAVA_ROOT 設定するという使い方もできるでしょう。ただし、この場合は、「環境変数 RTM_JAVA_ROOTをライブラリへのクラスパスの用途以外には使用していない」という保証が必要です。

そこで、何らかの事情で RTM_JAVA_ROOT が指示しているところとは別のところにクラスパスを設定したい場合、クラスパスをどのように設定したらよいのかをここで説明します。

  • Eclipse の Ant 設定ダイアログを呼び出す
    Eclipse の通常左のビュー「パッケージ・エクスプローラー」から build_<CompName>.xml を右クリックして、[実行] > [Antビルド...] を選択する。

    Call_Ant_Setting_ja.png
    Ant設定ダイアログを呼び出す

  • クラスパスの設定
    1. Ant の設定ダイアログが表示されるので、「クラスパス」タブを選択する。

    Ant_Setting_Classpath_ja.png
    「クラスパス」タグを選択する


2.「ユーザーエントリ」を一度選択し、その後「外部 JAR の追加」ボタンをクリックする。

Ant_External_Jar_ja.png
外部JARの追加


3.「JAR の選択」ダイアログが現れたら、目的の JAR ライブラリまでのパスを指定する。結果、下図のように追加した JAR ライブラリが Ant の設定ダイアログに表示される。

Ant_Add_Jar_ja.png
追加された JAR


重要な留意点
環境変数 RTM_JAVA_ROOT は必ず設定しなければなりません(ただし、ダミーでも可)。クラスパスを任意に指定することで、たとえ RTM_JAVA_ROOT の設定が不要となったとしても、その設定削除をしたり、設定そのものをしなかったりするとビルド時にエラーとなります。また、RTM_JAVA_ROOT が指し示すパスの先には(空でもいいので)必ず「jar」という名前のフォルダーが実在していなければなりません。


Java で Ant を使ってコマンドラインからビルドするときに例外が表示される

Java で Ant を実行すると以下のような例外が表示される場合があります。

 >ant -f build_ModuleName.xml
 Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/to
 ols/ant/launch/Launcher : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

原因:Java のバージョンが古い可能性があります。
Java と Ant のバージョン要件は以下のリンクを参照してください。必要に応じてアップデートを実行してください。

Java と Ant のバージョン要件

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

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