[openrtm-users 01304] OpenRTM-aist-Python-1.0.0の_narrow処理について

4 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 4日 9時間 前
登録日: 2009-06-23 14:31
[openrtm-users 01304] OpenRTM-aist-Python-1.0.0の_narrow処理について

セックの池添です。
# 連投、申し訳ありません。

私はOpenRTM.NETというRTミドルウェア実装を開発しているのですが、
OpenRTM-aist-Python-1.0.0-RELEASEとのデータポートの連携に
おいて問題が発生しております。

OpenRTM-aist-Python-1.0.0-RELEASEのOutPortと、OpenRTM.NETのInPort
を接続しデータを送信すると、接続が切れてしまいます。
InPortCorbaCdrConsumer.pyのputメソッドの実装は下記のようになって
いるのですが、self._ptr()を_narrowしていないため、self._ptr().put()
の呼び出しに失敗してしまいます。

def put(self, data):
self._rtcout.RTC_PARANOID("put()")

try:
if self._ptr():
return self.convertReturnCode(self._ptr().put(data))
return self.CONNECTION_LOST
except:
self._rtcout.RTC_ERROR(sys.exc_info()[0])
return self.CONNECTION_LOST

return self.UNKNOWN_ERROR

これを下記のように _narrow するように変更すれば、OpenRTM.NETとの
連携が可能になります。
(この変更を加えても、C++版、Python版との連携に問題はありません)

def put(self, data):
self._rtcout.RTC_PARANOID("put()")

try:
if self._ptr():
ptr = self._ptr()
inportcdr = ptr._narrow(OpenRTM__POA.InPortCdr)
return self.convertReturnCode(inportcdr.put(data))
return self.CONNECTION_LOST
except:
self._rtcout.RTC_ERROR(sys.exc_info()[0])
return self.CONNECTION_LOST

return self.UNKNOWN_ERROR

CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
呼び出しても問題ないものなのでしょうか?
OpenRTM.NETの実装の方に問題があるのかもしれませんので、
ご見解をお聞かせください。

ちなみに、C++版では_narrow、 Java版ではcastTypeをして型を定めているので、
Python版のような問題は発生しません。

よろしくお願いいたします。

以上

未定義
root
オフライン
Last seen: 4日 9時間 前
登録日: 2009-06-23 14:31
[openrtm-users 01305] OpenRTM-aist-Python-1.0.0の_narrow処理について

株式会社セック 池添様

お世話になっております。
栗原です。

ご連絡頂き、誠に有難うございます。

> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
> 呼び出しても問題ないものなのでしょうか?
いえ、基本的には_narrowする必要がございます。
ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。

以下URLの「Narrowing object references」を参照下さい。
http://ports.gnu-darwin.org/devel/py-omniorb/work/omniORBpy-3.1/doc/omniORBpy.pdf

ただし、今回の場合は、単純に_narrowし忘れでして、たまたまC++,
Java,Python間では問題になっていなかっただけの事ですので、
_narrowするように修正致します。

修正しましたら、再度ご連絡させて頂きます。

ご迷惑をお掛け致しまして申し訳ございません。
宜しくお願い致します。

On Thu, 17 Jun 2010 11:30:32 +0900
池添明宏 wrote:

> セックの池添です。
> # 連投、申し訳ありません。
>
> 私はOpenRTM.NETというRTミドルウェア実装を開発しているのですが、
> OpenRTM-aist-Python-1.0.0-RELEASEとのデータポートの連携に
> おいて問題が発生しております。
>
> OpenRTM-aist-Python-1.0.0-RELEASEのOutPortと、OpenRTM.NETのInPort
> を接続しデータを送信すると、接続が切れてしまいます。
> InPortCorbaCdrConsumer.pyのputメソッドの実装は下記のようになって
> いるのですが、self._ptr()を_narrowしていないため、self._ptr().put()
> の呼び出しに失敗してしまいます。
>
> def put(self, data):
> self._rtcout.RTC_PARANOID("put()")
>
> try:
> if self._ptr():
> return self.convertReturnCode(self._ptr().put(data))
> return self.CONNECTION_LOST
> except:
> self._rtcout.RTC_ERROR(sys.exc_info()[0])
> return self.CONNECTION_LOST
>
> return self.UNKNOWN_ERROR
>
>
> これを下記のように _narrow するように変更すれば、OpenRTM.NETとの
> 連携が可能になります。
> (この変更を加えても、C++版、Python版との連携に問題はありません)
>
> def put(self, data):
> self._rtcout.RTC_PARANOID("put()")
>
> try:
> if self._ptr():
> ptr = self._ptr()
> inportcdr = ptr._narrow(OpenRTM__POA.InPortCdr)
> return self.convertReturnCode(inportcdr.put(data))
> return self.CONNECTION_LOST
> except:
> self._rtcout.RTC_ERROR(sys.exc_info()[0])
> return self.CONNECTION_LOST
>
> return self.UNKNOWN_ERROR
>
>
> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
> 呼び出しても問題ないものなのでしょうか?
> OpenRTM.NETの実装の方に問題があるのかもしれませんので、
> ご見解をお聞かせください。
>
> ちなみに、C++版では_narrow、 Java版ではcastTypeをして型を定めているので、
> Python版のような問題は発生しません。
>
> よろしくお願いいたします。
>
> 以上
>

root
オフライン
Last seen: 4日 9時間 前
登録日: 2009-06-23 14:31
[openrtm-users 01306] OpenRTM-aist-Python-1.0.0の_narrow処理について

栗原様

セックの池添です。
お世話になっております。

早速のご回答、ありがとうございます。

> ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
> 場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。
>
> 以下URLの「Narrowing object references」を参照下さい。

なるほど、repository idの持たせ方によって呼び出しの可否が
変わることがあるのですね。
確かにOpenRTM.NET側でオブジェクトを格納するときに、
repository idが異なるものになっておりました。

> 修正しましたら、再度ご連絡させて頂きます。

お手数をおかけしますが、よろしくお願いいたします。

以上

(2010/06/17 13:45), kurihara shinji wrote:
> 株式会社セック 池添様
>
> お世話になっております。
> 栗原です。
>
> ご連絡頂き、誠に有難うございます。
>
>> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
>> 呼び出しても問題ないものなのでしょうか?
> いえ、基本的には_narrowする必要がございます。
> ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
> 場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。
>
> 以下URLの「Narrowing object references」を参照下さい。
> http://ports.gnu-darwin.org/devel/py-omniorb/work/omniORBpy-3.1/doc/omniORBpy.pdf
>
> ただし、今回の場合は、単純に_narrowし忘れでして、たまたまC++,
> Java,Python間では問題になっていなかっただけの事ですので、
> _narrowするように修正致します。
>
> 修正しましたら、再度ご連絡させて頂きます。
>
>
> ご迷惑をお掛け致しまして申し訳ございません。
> 宜しくお願い致します。
>
>
>
> On Thu, 17 Jun 2010 11:30:32 +0900
> 池添明宏 wrote:
>
>> セックの池添です。
>> # 連投、申し訳ありません。
>>
>> 私はOpenRTM.NETというRTミドルウェア実装を開発しているのですが、
>> OpenRTM-aist-Python-1.0.0-RELEASEとのデータポートの連携に
>> おいて問題が発生しております。
>>
>> OpenRTM-aist-Python-1.0.0-RELEASEのOutPortと、OpenRTM.NETのInPort
>> を接続しデータを送信すると、接続が切れてしまいます。
>> InPortCorbaCdrConsumer.pyのputメソッドの実装は下記のようになって
>> いるのですが、self._ptr()を_narrowしていないため、self._ptr().put()
>> の呼び出しに失敗してしまいます。
>>
>> def put(self, data):
>> self._rtcout.RTC_PARANOID("put()")
>>
>> try:
>> if self._ptr():
>> return self.convertReturnCode(self._ptr().put(data))
>> return self.CONNECTION_LOST
>> except:
>> self._rtcout.RTC_ERROR(sys.exc_info()[0])
>> return self.CONNECTION_LOST
>>
>> return self.UNKNOWN_ERROR
>>
>>
>> これを下記のように _narrow するように変更すれば、OpenRTM.NETとの
>> 連携が可能になります。
>> (この変更を加えても、C++版、Python版との連携に問題はありません)
>>
>> def put(self, data):
>> self._rtcout.RTC_PARANOID("put()")
>>
>> try:
>> if self._ptr():
>> ptr = self._ptr()
>> inportcdr = ptr._narrow(OpenRTM__POA.InPortCdr)
>> return self.convertReturnCode(inportcdr.put(data))
>> return self.CONNECTION_LOST
>> except:
>> self._rtcout.RTC_ERROR(sys.exc_info()[0])
>> return self.CONNECTION_LOST
>>
>> return self.UNKNOWN_ERROR
>>
>>
>> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
>> 呼び出しても問題ないものなのでしょうか?
>> OpenRTM.NETの実装の方に問題があるのかもしれませんので、
>> ご見解をお聞かせください。
>>
>> ちなみに、C++版では_narrow、 Java版ではcastTypeをして型を定めているので、
>> Python版のような問題は発生しません。
>>
>> よろしくお願いいたします。
>>
>> 以上
>>

root
オフライン
Last seen: 4日 9時間 前
登録日: 2009-06-23 14:31
[openrtm-users 01325] OpenRTM-aist-Python-1.0.0の_narrow処理について

株式会社セック 池添様

お世話になっております。
栗原です。

ご指摘頂きました内容を修正させて頂きました。

修正内容は、
・InPortCorbaCdrConsumer.py :
put(self,data)メソッドでのOpenRTM.InPortCdrへの_narrow処理の追加

・OutPortCorbaCdrConsumer.py :
get(self,data)メソッドでのOpenRTM.OutPortCdrへの_narrow処理の追加
となっております。

最新のコードは、下記のSubversionリポジトリにコミット致しました。
(リビジョン366)

http://openrtp.jp/openrtm/svn/OpenRTM-aist-Python/branches/RELENG_1_0/OpenRTM-aist-Python

他に不具合などお気づきの点がございましたら、ご連絡頂けますと幸いです。

以上、宜しくお願い致します。

On Thu, 17 Jun 2010 14:09:13 +0900
池添明宏 wrote:

> 栗原様
>
> セックの池添です。
> お世話になっております。
>
> 早速のご回答、ありがとうございます。
>
>
> > ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
> > 場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。
> >
> > 以下URLの「Narrowing object references」を参照下さい。
>
> なるほど、repository idの持たせ方によって呼び出しの可否が
> 変わることがあるのですね。
> 確かにOpenRTM.NET側でオブジェクトを格納するときに、
> repository idが異なるものになっておりました。
>
>
> > 修正しましたら、再度ご連絡させて頂きます。
>
> お手数をおかけしますが、よろしくお願いいたします。
>
> 以上
>
>
>
> (2010/06/17 13:45), kurihara shinji wrote:
> > 株式会社セック 池添様
> >
> > お世話になっております。
> > 栗原です。
> >
> > ご連絡頂き、誠に有難うございます。
> >
> >> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
> >> 呼び出しても問題ないものなのでしょうか?
> > いえ、基本的には_narrowする必要がございます。
> > ただ、IORをstring_to_object()にてCORBAオブジェクトへ変換した
> > 場合は、_narrowしなくてもCORBA呼び出しが可能な場合もあるようです。
> >
> > 以下URLの「Narrowing object references」を参照下さい。
> > http://ports.gnu-darwin.org/devel/py-omniorb/work/omniORBpy-3.1/doc/omniORBpy.pdf
> >
> > ただし、今回の場合は、単純に_narrowし忘れでして、たまたまC++,
> > Java,Python間では問題になっていなかっただけの事ですので、
> > _narrowするように修正致します。
> >
> > 修正しましたら、再度ご連絡させて頂きます。
> >
> >
> > ご迷惑をお掛け致しまして申し訳ございません。
> > 宜しくお願い致します。
> >
> >
> >
> > On Thu, 17 Jun 2010 11:30:32 +0900
> > 池添明宏 wrote:
> >
> >> セックの池添です。
> >> # 連投、申し訳ありません。
> >>
> >> 私はOpenRTM.NETというRTミドルウェア実装を開発しているのですが、
> >> OpenRTM-aist-Python-1.0.0-RELEASEとのデータポートの連携に
> >> おいて問題が発生しております。
> >>
> >> OpenRTM-aist-Python-1.0.0-RELEASEのOutPortと、OpenRTM.NETのInPort
> >> を接続しデータを送信すると、接続が切れてしまいます。
> >> InPortCorbaCdrConsumer.pyのputメソッドの実装は下記のようになって
> >> いるのですが、self._ptr()を_narrowしていないため、self._ptr().put()
> >> の呼び出しに失敗してしまいます。
> >>
> >> def put(self, data):
> >> self._rtcout.RTC_PARANOID("put()")
> >>
> >> try:
> >> if self._ptr():
> >> return self.convertReturnCode(self._ptr().put(data))
> >> return self.CONNECTION_LOST
> >> except:
> >> self._rtcout.RTC_ERROR(sys.exc_info()[0])
> >> return self.CONNECTION_LOST
> >>
> >> return self.UNKNOWN_ERROR
> >>
> >>
> >> これを下記のように _narrow するように変更すれば、OpenRTM.NETとの
> >> 連携が可能になります。
> >> (この変更を加えても、C++版、Python版との連携に問題はありません)
> >>
> >> def put(self, data):
> >> self._rtcout.RTC_PARANOID("put()")
> >>
> >> try:
> >> if self._ptr():
> >> ptr = self._ptr()
> >> inportcdr = ptr._narrow(OpenRTM__POA.InPortCdr)
> >> return self.convertReturnCode(inportcdr.put(data))
> >> return self.CONNECTION_LOST
> >> except:
> >> self._rtcout.RTC_ERROR(sys.exc_info()[0])
> >> return self.CONNECTION_LOST
> >>
> >> return self.UNKNOWN_ERROR
> >>
> >>
> >> CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
> >> 呼び出しても問題ないものなのでしょうか?
> >> OpenRTM.NETの実装の方に問題があるのかもしれませんので、
> >> ご見解をお聞かせください。
> >>
> >> ちなみに、C++版では_narrow、 Java版ではcastTypeをして型を定めているので、
> >> Python版のような問題は発生しません。
> >>
> >> よろしくお願いいたします。
> >>
> >> 以上
> >>

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2209
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク