haraisao / RtORB

Light-weight CORBA implementation with C-Language.
Other
2 stars 1 forks source link

OpenRTM-aist-C(RtORB)のRTCをRT System Editorでリストア時エラー #3

Open moritaritsuko opened 9 years ago

moritaritsuko commented 9 years ago

RT System Editorで保存したxmlファイルをロードすると、「Failed to restore.」となります。 RT System Editorでは、OpenRTM-aist-C(RtORB)で作成したRTCには対応されていないのでしょうか。

環境  Windows7(64bit)上のVMware(Ubuntu12.04) 手順  1.ネームサーバを起動 ($cd CosName、$sh NameService.sh)  2.サンプルコンポーネントを起動   ($cd example/SimpleIO、$sh ConsoleOutComp.sh、$sh ConsoleInComp.sh)   ⇒ RT System Editorで、localhostに起動されていることを確認  3.RT System Editorで、サンプルコンポーネントを接続後、Save/Save Asで、状態を保存   (Sample_SimpleIO.xml)  4.3.で保存したファイルを指定して、「Open and Restore」を実行   ⇒「Failed to restore.」となる    詳細には、下記が表示されました。    Failed to restore RTC configuration:[ConsoleIn0 : 127.0.0.1/ConsoleIn0.rtc]    Failed to restore RTC configuration:[ConsoleOut0 : 127.0.0.1/ConsoleOut0.rtc]   ⇒[OK]ボタン押下で、サンプルコンポーネントは表示されますが、接続されていません。    ネームサーバ、サンプルコンポーネントのコンソール画面には、特に何もエラー表示されていません。

haraisao commented 9 years ago

RT System Editor のプロファイルですが、現在のところOpenRTM-aist-Cの方での動作確認を行っておりません。基本的には、CORBAの通信のみですので対応可能かと思いますが、OpenRTM-aist-Cの方の実装を見直さなければいけないかと思っております。ちなみにrtshellを使った場合にはどのようになるでしょうか? 一度試していただけないでしょうか。よろしくお願いいたします。

moritaritsuko commented 9 years ago

rtshellを使った結果、下記手順で確認したところ、エラーとなりました。  1.サンプルコンポーネントを起動 ($cd example/SimpleIO、$sh ConsoleInComp.sh)  2.rtlsコマンドを実行 ($rtls localhost)   ⇒サンプルコンポーネントが一覧に表示される    ConsoleIn0.rtc  3.rtcatコマンドを実行 ($rtcat /localhost:2809/ConsoleIn0.rtc)   ⇒下記のエラーが出力され、サンプルコンポーネントは、Segmentation faultとなる    rtcat: CORBA.COMM_FAILURE(omniORB.COMM_FAILURE_WaitingForReply, CORBA.COMPLETED_MAYBE)  4.rtconコマンドを実行 ($rtcon /localhost:2809/ConsoleIn0.rtc:out /localhost:2809/ConsoleOut0.rtc:in)   ⇒下記のエラーが出力され、コンポーネント間は接続されない    rtcon: Incompatible connection properties.  5.rtresurrectコマンドを実行 ($rtresurrect Sample_SampleIO.xml)   ⇒下記のエラーが出力される    rtresurrect: Failed to make connection: Precondition not met

moritaritsuko commented 9 years ago

RT System Editorで、下記手順で、コネクタを削除しようとすると、Eclipseがハングアップした状態となりました。  1.サンプルコンポーネントを起動   ($cd excample/SimpleIO、$sh ConsoleOutCom.sh、$sh ConsoleInCom.sh)  2.サンプルコンポーネント間を接続  3.コネクタを選択し、右メニューから「Delete」(または、[Delete]キー押下)を選択   ⇒Eclipseがグレー表示となり、操作できない状態となる

haraisao commented 9 years ago

ご連絡ありがとうございます。この問題は、おそらくRtORBのコンパイル時にPThreadを使っていないようになっているためだと思います。Makefileを変更すればよいはずですが、後ほど確認してみます。

このような現象が起こる原因ですが、RtORBは、基本的にシングルスレッドで動作するように実装していたためで、外部のオブジェクトにリクエストを出して、返事を待っている最中にそのオブジェクトから別のリクエストが自分に返ってきた時に、両者がデッドロック状態になってしまうためです。上位の実装をうまく組めば回避できるのですが、現状では、OpenRTM-aistのC++版に準拠して実装していたため、コネクタの削除の部分だけ一部問題fが出る場合があります。

コネクタの生成順を逆にすると動く場合もあることはわかっているのですが…。

回避方法としては、Pthreadを使いコンパイルを行うしかないと思います。

moritaritsuko commented 9 years ago

libRtORB.so(OpenRTM-aist-C-1.0.0\lib\orb)のMakefileに、pthread.oが利用されるように、 下記を追加してコンパイルしなおしてみましたが、状況は変わりませんでした。 (コネクタの削除で、Eclipseがハングアップ)  CFLAG_THREAD = "YES"

また、下記の件に関しては、上記とは、別の原因があるのでしょうか。  ・プロファイル(xmlファイル)のロードでエラー  ・各種、rtshellコマンドを利用した場合のエラー