ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
・・・そろそろ書くネタがなくなりそう.
多分,あと3回ぐらいでこの企画も終わりです.
さすがに毎日更新はきつい.毎日更新してないけど.
とりあえず,記事の数が20を越えたのでこれで勘弁して欲しい.
それはさておき,今回はデータポート追加RTC,実行コンテキスト,データポートコールバックをPythonで作成します.
OpenRTM-aist-Python-1.0.1がひっそりと公開されてるので,まだインストールしてない人はそちらを入れた方が良いかも.
まずはデータポート追加RTCから.
サンプルはここからダウンロード出来ます.
とは言ってもC++とほぼ同じで,
データポートの追加は,
self._inIn = OpenRTM_aist.InPort("in", self._d_in)
self.registerInPort("in",self._inIn)
self._outOut = OpenRTM_aist.OutPort("out", self._d_out)
self.registerOutPort("out",self._outOut)
のような感じです.
削除は,
self.removePort(self._inIn)
self.removePort(self._outOut)
とするだけ.
若干Pythonの方が簡単です.
続いて,実行コンテキストを作成します.
サンプルはここからダウンロード出来ます.
rtc.confでDLLの替わりに,
manager.modules.preload: TestExecutionContext.py
とPythonソースファイルを読み込みます.
肝心のソースですが,特にC++と違う所はないため省略します.
続いて,データポートコールバックをPythonで実装します.
サンプルはここからダウンロード出来ます.
コネクタ・バッファのコールバックはOpenRTM-aist-Python-1.0.1のサンプルそのままなので手抜き省略します.
インポートのコールバックは,
class MyOnRead(OpenRTM_aist.OnRead):
def __init__(self):
pass
def __call__(self):
print u"read() 関数が呼ばれました。"
class MyOnReadConvert(OpenRTM_aist.OnReadConvert):
def __init__(self):
pass
def __call__(self, value):
tmp = RTC.TimedLong(RTC.Time(0,0),0)
tmp.data = 2*value.data
return tmp
・・・
self._inIn.setOnRead(MyOnRead())
self._inIn.setOnReadConvert(MyOnReadConvert())
という感じ.
__call__というメソッドが呼び出されるみたいですね.
アウトポートのコールバックは
class MyOnWrite(OpenRTM_aist.OnWrite):
def __init__(self):
pass
def __call__(self, value):
print u"write() 関数が呼ばれました。"
class MyOnWriteConvert(OpenRTM_aist.OnWriteConvert):
def __init__(self):
pass
def __call__(self, value):
tmp = RTC.TimedLong(RTC.Time(0,0),0)
tmp.data = value.data * value.data
return tmp
・・・
self._outOut.setOnWrite(MyOnWrite())
self._outOut.setOnWriteConvert(MyOnWriteConvert())
となります.
今日はこの辺にしといてやります.
次回はARTExecutionContextを使ってみます.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
多分,あと3回ぐらいでこの企画も終わりです.
さすがに毎日更新はきつい.毎日更新してないけど.
とりあえず,記事の数が20を越えたのでこれで勘弁して欲しい.
それはさておき,今回はデータポート追加RTC,実行コンテキスト,データポートコールバックをPythonで作成します.
OpenRTM-aist-Python-1.0.1がひっそりと公開されてるので,まだインストールしてない人はそちらを入れた方が良いかも.
まずはデータポート追加RTCから.
サンプルはここからダウンロード出来ます.
とは言ってもC++とほぼ同じで,
データポートの追加は,
self._inIn = OpenRTM_aist.InPort("in", self._d_in)
self.registerInPort("in",self._inIn)
self._outOut = OpenRTM_aist.OutPort("out", self._d_out)
self.registerOutPort("out",self._outOut)
のような感じです.
削除は,
self.removePort(self._inIn)
self.removePort(self._outOut)
とするだけ.
若干Pythonの方が簡単です.
続いて,実行コンテキストを作成します.
サンプルはここからダウンロード出来ます.
rtc.confでDLLの替わりに,
manager.modules.preload: TestExecutionContext.py
とPythonソースファイルを読み込みます.
肝心のソースですが,特にC++と違う所はないため省略します.
続いて,データポートコールバックをPythonで実装します.
サンプルはここからダウンロード出来ます.
コネクタ・バッファのコールバックはOpenRTM-aist-Python-1.0.1のサンプルそのままなので
インポートのコールバックは,
class MyOnRead(OpenRTM_aist.OnRead):
def __init__(self):
pass
def __call__(self):
print u"read() 関数が呼ばれました。"
class MyOnReadConvert(OpenRTM_aist.OnReadConvert):
def __init__(self):
pass
def __call__(self, value):
tmp = RTC.TimedLong(RTC.Time(0,0),0)
tmp.data = 2*value.data
return tmp
・・・
self._inIn.setOnRead(MyOnRead())
self._inIn.setOnReadConvert(MyOnReadConvert())
という感じ.
__call__というメソッドが呼び出されるみたいですね.
アウトポートのコールバックは
class MyOnWrite(OpenRTM_aist.OnWrite):
def __init__(self):
pass
def __call__(self, value):
print u"write() 関数が呼ばれました。"
class MyOnWriteConvert(OpenRTM_aist.OnWriteConvert):
def __init__(self):
pass
def __call__(self, value):
tmp = RTC.TimedLong(RTC.Time(0,0),0)
tmp.data = value.data * value.data
return tmp
・・・
self._outOut.setOnWrite(MyOnWrite())
self._outOut.setOnWriteConvert(MyOnWriteConvert())
となります.
今日はこの辺にしといてやります.
次回はARTExecutionContextを使ってみます.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする