haraisao / RtORB

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

OpenRTM-aist-C(RtORB)でのBasicDataType.idlのデータ定義型の使用について #8

Open moritaritsuko opened 9 years ago

moritaritsuko commented 9 years ago

(#6 で記載したのですが、内容が異なるかと思い、新たにIssueを発行させて頂きました。)

lib\rtm\idl\BasicDataType.idlで定義されているデータ型(たとえば、TimedString)を利用して、 OpenRTM-aist-Python等で作成されたRTコンポーネントとOpen-RTM-aist-Cで作成した RTコンポーネントを接続したい場合、どう対応すればよいのでしょうか。 (OpenRTM-aist-1.0.0(C++)で作成のRTCとの接続OKとのことですが。)

OpenRTM-aist-C(RtORB)で、データポートのデータ型に、「TimedString」を定義して  <~.h>    RTC_OutPort m_outPort;    TimedString m_outData;  <~.c>   private->m_outPort = RTC_OutPort_create(obj->m_rtobjRef, "out", "TimedString"); コンパイルすると、下記のエラーとなりました。  SampleIN0.h:16:3: エラー: 不明な型名 ‘TimedString’ です

haraisao commented 9 years ago

#6でも述べましたが、

RTC_OutPort_create(obj->m_rtobjRef, "out", "TimedString");

の3番目の引数のデータ型を文字列からTypeCode型に変更しました。そのため、現在は、

RTC_OutPort_create(obj->m_rtobjRef, "out", RTC_TimedString);

とすれば、問題ないと思います。

moritaritsuko commented 9 years ago

回答ありがとうございます。

3番目の引数のデータ型を文字列からTypeCode型に変更しました。そのため、現在は、 RTC_OutPort_create(obj->m_rtobjRef, "out", RTC_TimedString); とすれば、問題ないと思います。

指示頂いた通り、ポート生成時のデータ型指定を「"TimedString"」→「RTC_TimedString」に変更して みましたが、コンパイルエラーとなりました。  SampleIN0.c: 関数 ‘Rtc_onInitialize’ 内:  SampleIN0.c:87:67: エラー: expected expression before ‘RTC_TimedString’  make: *\ [SampleIN0.o] エラー 1

修正頂いたソースをみると、ポート生成時のデータ型指定が、「RTC_TimedLong」ではなく、 「TC_RTC_TimedLong」となっていたため、同様に、「TC_RTC_TimedString」とすると コンパイルは通りました。

ですが、OpenRTM-aist/OpenRTM-aist-Pythonで作成したRTコンポーネントと、 OpenRTM-aist-Cで作成したRTコンポーネントを起動し、RT System Editorでポート接続しようと しましたが、接続できませんでした。 (接続に関するポップアップ画面が表示されず、禁止マークとなった。)

RT System EditorのプロパティViewで確認すると、 OpenRTM-aist/OpenRTM-aist-Pythonで作成したRTコンポーネントのポート名は、「IDL:RTC/TimedString:1.0」、 OpenRTM-aist-Cで作成したRTコンポーネントのポート名は、「TimedString」でした。 名前が異なるため、ポート接続できないのでしょうか。

haraisao commented 9 years ago

修正に関しては、失礼いたしました。TC_RTC_TimedString でOKです。 また、ポートの接続の件ですが、これは、Python版の方がrepository_IDを見せるようになったせいです。 また、SystemEditorも型チェックを厳しくしましたので、ポートの型があっていないと判断しているのだと思います。

これは、バージョン違いのOpenRTMでも発生していた問題で、OpenRTM-aist-C側で対処する必要があるのだと思います。