OpenRTM / OpenRTM-aist

OpenRTM-aist: RT-Middleware and OMG RTC implementation in C++ implemented by AIST
https://openrtm.org/
Other
19 stars 12 forks source link

1.2.0においてサービスポートへの複数接続に失敗する #425

Closed y-masutani closed 5 years ago

y-masutani commented 5 years ago

1.2.0の環境で,あるRTCのサービスポートへ異なるRTCから接続しようとすると,2本目の接続時にエラーになります.RTSEでは「接続に失敗しました」というエラーパネルが現れます.rtshellのrtconコマンドでは,「rtcon: Failed to make connection: Precondition not met」と表示されます.1.1.2の環境では,同じRTCの組み合わせで問題なく使えていました.

Windows 10にOpenRTM-aist-1.2.0-RELEASE_x86_64.msiをインストールして使っています. 確認をお願いいたします.

Nobu19800 commented 5 years ago

色々試してみたのですが問題を再現できていません。 状況がよく分からないのですが、どういうRTCをいくつ存在しているのでしょうか? また2本目の接続というのは、例えばサービスポートA、B、Cがあって、サービスポートAとBが接続しているところにAとCを接続しようとした、という認識であっていますでしょうか?

y-masutani commented 5 years ago

一つのprovidedなポートに,二つのrequiredなポートを接続しようとしています.

具体的には,菅佑樹様が作成されたコンポーネントMapServerのmapServerポート(provided)に,NavigationManagerのmapServerポート(required)とLocalization_MRPTのmapServerポート(required)を接続しようとしています.順番に関係なく,2本目を接続する際にエラーになります.

https://github.com/sugarsweetrobotics/MapServer https://github.com/sugarsweetrobotics/NavigationManager https://github.com/sugarsweetrobotics/Localization_MRPT

ただし,そのままではMRPTの新しいバージョンやOpenRTM-aist-1.2.0で使えないのでフォークして多少手を入れています.

https://github.com/MasutaniLab/MapServer/tree/for-OpenRTM-aist-1.2.0 https://github.com/MasutaniLab/NavigationManager/tree/for-OpenRTM-aist-1.2.0 https://github.com/MasutaniLab/Localization_MRPT

Nobu19800 commented 5 years ago

詳細について教えていただいてありがとうございます。 Java版のバグのようです。原因については調査します。

Nobu19800 commented 5 years ago

以下のように修正しました。ご迷惑をおかけして申し訳ありません。

y-masutani commented 5 years ago

Windowsのインストーラで導入したjarファイルを入れ替えれるような形で提供していただけないでしょうか.よろしくお願いいたします.

以下のように修正しました。ご迷惑をおかけして申し訳ありません。

* [OpenRTM/OpenRTM-aist-Java#31](https://github.com/OpenRTM/OpenRTM-aist-Java/pull/31)
y-masutani commented 5 years ago

jarファイルを自前で作るにはどうすればいいですか? https://github.com/OpenRTM/OpenRTM-aist-Java/archive/v1.2.0.zip をダウンロードして展開し,buildRTC.batを実行するだけではダメでした.

BUILD FAILED
略\OpenRTM-aist-Java-1.2.0\jp.go.aist.rtm.RTC\build.xml:125: taskdef class net.charabia.jsmooth
gen.ant.JSmoothGen cannot be found
 using the classloader AntClassLoader[]
n-kawauchi commented 5 years ago

申し訳ございません。Windows環境でのビルド設定はメンテナンス不十分でした。 Linux環境であれば下記手順でビルドして頂けます。(Ubuntu16.04で確認)

git clone https://github.com/OpenRTM/OpenRTM-aist-Java.git
cd OpenRTM-aist-Java/
git checkout svn/RELENG_1_2
./buildRTC.sh

これで、jp.go.aist.rtm.RTC/jar下に生成されます。 よろしくお願いします。

y-masutani commented 5 years ago

アドバイスありがとうございます.Ubuntuでjarファイルを作ることができました.OpenRTM-aist-1.2.0.jarをWindowsへコピーすればOKでしょうか?

n-kawauchi commented 5 years ago

はい、Windows環境へコピーして使用できます。 よろしくお願いいたします。

y-masutani commented 5 years ago

UbuntuでビルドしたOpenRTM-aist-1.2.0.jarをWindowsのC:\Program Files\OpenRTM-aist\1.2.0\jar\OpenRTM-aist-1.2.0.jarへコピーし,JavaのRTCのMapServerとNavigationManagerをビルドし直し,同じことを試しましたが,改善しません.ログを表示させながら試しているのですが,以下のように表示されます.

1本目required側

May 24 22:24:44.708 INFO: mapServer: interface matched with old descriptor: port.RTC::OGMapServer.mapServer

1本目provided側 表示なし

2本目required側

May 25 07:26:16.236 mapServer ERROR    : connectNext() in notify_connect() failed.
May 25 07:26:16.236 CorbaPort ERROR    : subscribeInterfaces() failed.
May 25 07:26:16.252 mapServer ERROR    : subscribeInterfaces() in notify_connect() failed.
May 25 07:26:16.252 mapServer ERROR    : Connection failed. cleanup.```

2本目provided側

May 25 07:26:16.267 mapServer ERROR    : Invalid connector id: 1e4b9aa2-ec3b-4264-8a74-1b477937541f

順番を逆にしてもid等は異なりますが同様です.

解決に向けてどのようにしていけばいいでしょうか?

Nobu19800 commented 5 years ago

OpenRTM-aist-1.2.0.jarがコピーされていれば問題は解決されているはずです。 念のためにこちらでMapServer、NavigationManager、Localization_MRPTのサービスポートを接続して動作確認したのですが、問題は発生しませんでした。 未だに解決しない原因としては、OpenRTM-aist-1.2.0.jarがコピーできていないか、RTC実行時に何故か別のOpenRTM-aist-1.2.0.jarがクラスパスに設定されているという事が考えられますが、そうでないのであれば見当もつきません。

y-masutani commented 5 years ago

上手くできました.敗因は,古いjarファイルをOpenRTM-aist-1.2.0.jar.SAVEDという名前で同じディレクトリに残していたことでした.このため,起動用のバッチファイルの

for /F %%A in ('dir "%JAR_BASE%OpenRTM*" /B') do (set FILE1=%%A)

に捕捉され...という次第です. お騒がせしました.問題が解決でき助かりました. ありがとうございました.