ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回はpush型の通信を扱いましたが、今回はpull型で独自の通信を実装してみます。
とりあえずOutPortCorbaCdrConsumer、OutPortCorbaCdrProviderクラスを継承したクラスを適当に作成してください。
OutPortTestProvider.py
あとはrtc.confのmanager.modules.preloadにファイル名を記述して初期化関数を呼び出すようにしてください。
これで準備完了です。
前回と同じくOutPortCorbaCdrConsumer、OutPortCorbaCdrProviderクラスを継承しただけなので通常の通信と何も変わりません。
とりあえずRTC_AからRTC_Bにデータを送信するとして手順を説明します。
今回はpull型なのでRTC_B側にあるOutPortCorbaCdrConsumerのget関数内でoutportcdr.get関数を使ってデータを取得しています。outportcdrはDataPort.idlで定義されたOutPortCdrのオブジェクトリファレンスなので、これを使ってOutPortCorbaCdrProviderのget関数を呼び出しています。OutPortCorbaCdrProviderのget関数内ではバッファからデータを取り出して送信するようにしています。この時点でRTC_Bにデータは送信されています。
とりあえず前回のコードを少し拡張してpull型にも対応させたものがこれです。
rtc.confに4つもファイル名を書くのは面倒なので纏めてみました。
C++で実装する場合もまとめてビルドして、OutPort~ConsumerInit・OutPort~ProviderInit、InPort~ConsumerInit・InPort~ProviderInitを呼び出す関数を作成しておくと使いやすいかもしれないです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
とりあえずOutPortCorbaCdrConsumer、OutPortCorbaCdrProviderクラスを継承したクラスを適当に作成してください。
OutPortTestProvider.py
import OpenRTM_aist
class OutPortTestProvider(OpenRTM_aist.OutPortCorbaCdrProvider):
def __init__(self):
OpenRTM_aist.OutPortCorbaCdrProvider.__init__(self)
self.setInterfaceType("test")
def __del__(self):
OpenRTM_aist.OutPortCorbaCdrProvider.__del__(self)
if os.path.exists(self.file_path):
os.remove(self.file_path)
def OutPortTestProviderInit():
factory = OpenRTM_aist.OutPortProviderFactory.instance()
factory.addFactory("test",
OutPortTestProvider,
OpenRTM_aist.Delete)
OutPortTestConsumer.py
import OpenRTM_aist
class OutPortTestConsumer(OpenRTM_aist.OutPortCorbaCdrConsumer):
def __init__(self):
OpenRTM_aist.OutPortCorbaCdrConsumer.__init__(self)
def OutPortTestConsumerInit():
factory = OpenRTM_aist.OutPortConsumerFactory.instance()
factory.addFactory("test",
OutPortTestConsumer,
OpenRTM_aist.Delete)
あとはrtc.confのmanager.modules.preloadにファイル名を記述して初期化関数を呼び出すようにしてください。
これで準備完了です。
前回と同じくOutPortCorbaCdrConsumer、OutPortCorbaCdrProviderクラスを継承しただけなので通常の通信と何も変わりません。
とりあえずRTC_AからRTC_Bにデータを送信するとして手順を説明します。
今回はpull型なのでRTC_B側にあるOutPortCorbaCdrConsumerのget関数内でoutportcdr.get関数を使ってデータを取得しています。outportcdrはDataPort.idlで定義されたOutPortCdrのオブジェクトリファレンスなので、これを使ってOutPortCorbaCdrProviderのget関数を呼び出しています。OutPortCorbaCdrProviderのget関数内ではバッファからデータを取り出して送信するようにしています。この時点でRTC_Bにデータは送信されています。
とりあえず前回のコードを少し拡張してpull型にも対応させたものがこれです。
rtc.confに4つもファイル名を書くのは面倒なので纏めてみました。
C++で実装する場合もまとめてビルドして、OutPort~ConsumerInit・OutPort~ProviderInit、InPort~ConsumerInit・InPort~ProviderInitを呼び出す関数を作成しておくと使いやすいかもしれないです。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする