RTCBuilder でサービスポートを持つ RTC を生成した場合、Eclipse のビルドで以下のような「***POA を型に解決できません」エラーが表示されます。
原因: idl コンパイルは、サービスポートで使用する idlファイルから javaファイル(スタブソース、スケルトンソース、各種ユーティリティソース)を生成します。 idl コンパイルが実行される前にビルドが実行されると、ビルドに必要なこれらのソースファイル(javaファイル)が見つからずエラーになります。
対処方法: Eclipse のパッケージエクスプローラから「build_JavaRTCTest.xml」を右クリックして [実行] > [antビルド] 実行してください。 これにより、idl コンパイルが実行され、javaファイルが生成されます。 「build_JavaRTCTest.xml」実行後に、[F5] キーなどでプロジェクトを更新すると、エラー表示が消えます。# file: rtc.conf corba.nameservers: localhost naming.formats: %n.rtc corba.args: -ORBgiopMaxMsgSize 3145728 ※この行を追加 (Maxサイズを3Mに指定)
export ORBgiopMaxMsgSize=3145728
このほか、Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合、PCとの接続に使用するどちらかのネットワークのみを使うように設定することで解決するケースもあります。
エンドポイントを設定するため、rtc.conf に使用する方の IPアドレスを以下のように設定します。
corba.endpoints: 192.168.11.20
ただし、Vista 以降の Windows では、C:\Program Files 以下のファイルは簡単には編集ができなくなっています。c:\tmp など適当なディレクトリーに ConsoleIn.exe と rtc.conf をコピー(あるいは新たに作成)するなどして、対処してください。
corba.endpoints: 192.168.11.21
通常 OpenRTM-aist では rtm/idl/BasicDataType.idl で定義されている
TimedShort、TimedLong、TimedUShort、TimedULong、TimedFloat、TimedDouble、TimedChar
TimedBooleanTimedOctet、TimedString、TimedShortSeq、TimedLongSeq、TimedUShortSeq
TimedULongSeq、TimedFloatSeq、TimedDoubleSeq、TimedCharSeq、TimedBooleanSeq
TimedOctetSeq、TimedStringSeq
の20種類のデータ型を InPort および OutPort のデータ型として使用することができます。
これ以外のデータ型を定義し InPort / OutPort で使用したい場合は、そのデータ型を IDL で定義し、コンポーネントをコンパイルするときに同時にコンパイル・リンクする必要があります。
仮に画像を格納するため、サイズ(width, height)、デプス、イメージデータ、各メンバを持つデータ型を使用したいとします。IDL ではこのデータ型を以下のように定義します。
#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
新規プロジェクトで Java プロジェクトを作成しようとすると、次のようなダイアログが表示されて、JDK準拠が選択できないことがあります。
RTCBuilder を利用し、Java で RTコンポーネント作成するプロジェクトでは、このダイアログにおいて指定する JRE(Java実行環境)を JDK 内に含まれている JRE とする必要があります。このままでは JDK内の JRE を選択できないため設定を変更します。
1. 下図のように JRE フレーム内の「JREを構成...」リンクをクリックします。(あるいは、一旦このダイアログをキャンセルして Eclipse のメニューバーの[ウィンドウ] > [設定] > 「設定」ダイアログの左のツリー部分から「Java」の下の「インストール済みのJRE」を選択します。)
2. [追加] ボタンをクリックします。
3.「標準VM」 を選択して [次へ] ボタンをクリックします。
4. [ディレクトリー] ボタンをクリックして、JDK6 までのパスを選択します。(参考:通常、JDK6 のパスはC:\Program Files\Java\jdk1.6.0_XX)
5. JDK までのパスの参照に成功すると、「JRE の追加」ダイアログが下図のようになりますので、[完了] ボタンをクリックしてダイアログを閉じます。
6.「インストール済みの JRE」ダイアログに戻ってくるので(JDK が追加された状態で)、下図のようにアクティブとする JRE にチェックを入れ、[OK] ボタンをクリックします。
7.「新規 Java プロジェクト」のダイアログで JDK が選択できるようになります。
2.「ユーザーエントリ」を一度選択し、その後「外部 JAR の追加」ボタンをクリックする。
3.「JAR の選択」ダイアログが現れたら、目的の JAR ライブラリまでのパスを指定する。結果、下図のように追加した JAR ライブラリが Ant の設定ダイアログに表示される。
重要な留意点
環境変数 RTM_JAVA_ROOT は必ず設定しなければなりません(ただし、ダミーでも可)。クラスパスを任意に指定することで、たとえ RTM_JAVA_ROOT の設定が不要となったとしても、その設定削除をしたり、設定そのものをしなかったりするとビルド時にエラーとなります。また、RTM_JAVA_ROOT が指し示すパスの先には(空でもいいので)必ず「jar」という名前のフォルダーが実在していなければなりません。
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 のバージョン要件