ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
とりあえず久々に更新します。
前々から思ってたのですけど、Python版のサンプルのスライダーRTCとか使う時に、出力される値が大きすぎるとか小さすぎるとかで他のRTCと組み合わせにくいような気がします。
上限が360とかだったっと思うのでそれに合わせて使えと言ってるのかもしれませんが、もし想定していないコンポーネントAと組み合わせようと考えると、
1.スライダーRTCのコードを書き換える
2.コンポーネントAのコードを書き換える
3.間にデータを変換するRTCを挟む
4.その他
とかあると思いますが、1,2はそもそもソースが公開されていないこともありますし、PythonならまだしもC++とかだと実行するまで時間がかかりますし、作成したRTシステムを他の人に使ってもらおうと思ったら書き換えたRTCも配布しなければならないので色々問題がありそうな気がします。
3は簡単なのですが、正直面倒くさい。オーバーヘッドもあると思いますし。
他にもありそうですが、難しそうなので今回はやめておきます。
とりあえず、今回は3のデータを変換するRTCを簡単に作成するためのプログラムを作りました。
ここからダウンロードできます。
使用するにはOpenRTM-aist-Python(1.0.0以上)が必要です。
使い方ですが、ダウンロードしたファイルを解凍したら、
rtcControl.py: データを変換するRTCを簡単に作成するためのプログラム
testComp.py:サンプルプログラム
が入っています。
とりあえず、サンプルプログラムを試してみます。
まず、OpenRTM-aist-PythonのサンプルのSeqIn.py,SeqOut.pyを実行してください。
次にtestComp.pyを実行してください。
すると、SeqInとSeqOutのデータポートの一部がtestCompを実行したときに起動したRTCに接続しています。
これでアクティブにするとSubCOntrolComponent00はSeqInのLongSeqの配列のすべての値の合計とLongの出力する値を足した値を出力していることがわかると思います。
testComp.pyを例にして使用方法を説明します。
まず、
import rtcControl
としてrtcControl.pyを読み込みます。
次にデータを変換するRTCのクラスを記述します。
基本的には通常のRTCと同じですが、少し違う部分があるのでそこを説明します。
まず、
class testComponent(rtcControl.SubCtlComp):
のようにrtcControl.SubCtlCompをオーバーライドします。
そして、
最後に、
rtcControl.CompList.append(testComponent)
のようにして作成したいRTCのクラスをrtcControl.CompListに追加して、
rtcControl.SetComp()
でRTCを起動できます。
まとめると、
1.辞書オブジェクトに接続したいデータポートのパスを記述するだけで対応するデータポートを作成、接続できるようにした。
2.rtcControl.CompListにRTCのクラスを追加すると、rtcControl.CompListに登録したRTCがまとめて起動される。
3.RTC起動に必要な記述をrtcControl.SetCompにまとめることにより、独自のプログラムを作成するときの記述を減らした。
だけなので、やや楽かな?ぐらいな感じですね。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
前々から思ってたのですけど、Python版のサンプルのスライダーRTCとか使う時に、出力される値が大きすぎるとか小さすぎるとかで他のRTCと組み合わせにくいような気がします。
上限が360とかだったっと思うのでそれに合わせて使えと言ってるのかもしれませんが、もし想定していないコンポーネントAと組み合わせようと考えると、
1.スライダーRTCのコードを書き換える
2.コンポーネントAのコードを書き換える
3.間にデータを変換するRTCを挟む
4.その他
とかあると思いますが、1,2はそもそもソースが公開されていないこともありますし、PythonならまだしもC++とかだと実行するまで時間がかかりますし、作成したRTシステムを他の人に使ってもらおうと思ったら書き換えたRTCも配布しなければならないので色々問題がありそうな気がします。
3は簡単なのですが、正直面倒くさい。オーバーヘッドもあると思いますし。
他にもありそうですが、難しそうなので今回はやめておきます。
とりあえず、今回は3のデータを変換するRTCを簡単に作成するためのプログラムを作りました。
ここからダウンロードできます。
使用するにはOpenRTM-aist-Python(1.0.0以上)が必要です。
使い方ですが、ダウンロードしたファイルを解凍したら、
rtcControl.py: データを変換するRTCを簡単に作成するためのプログラム
testComp.py:サンプルプログラム
が入っています。
とりあえず、サンプルプログラムを試してみます。
まず、OpenRTM-aist-PythonのサンプルのSeqIn.py,SeqOut.pyを実行してください。
次にtestComp.pyを実行してください。
すると、SeqInとSeqOutのデータポートの一部がtestCompを実行したときに起動したRTCに接続しています。
これでアクティブにするとSubCOntrolComponent00はSeqInのLongSeqの配列のすべての値の合計とLongの出力する値を足した値を出力していることがわかると思います。
testComp.pyを例にして使用方法を説明します。
まず、
import rtcControl
としてrtcControl.pyを読み込みます。
次にデータを変換するRTCのクラスを記述します。
基本的には通常のRTCと同じですが、少し違う部分があるのでそこを説明します。
まず、
class testComponent(rtcControl.SubCtlComp):
のようにrtcControl.SubCtlCompをオーバーライドします。
そして、
self.PortList = {"test":['/', 'localhost', 'SequenceInComponent0', 'Long'],
"test2":['/', 'localhost', 'SequenceOutComponent0', 'Long'],
"test3":['/', 'localhost', 'SequenceOutComponent0', 'LongSeq']}
のように、接続するRTCのデータポートを指定します。
この辞書オブジェクトはキーは好きな名前を付けて、値には接続するRTCのパスとデータポート名を記述します。
のように、接続するRTCのデータポートを指定します。
この辞書オブジェクトはキーは好きな名前を付けて、値には接続するRTCのパスとデータポート名を記述します。
接続するデータポートを指定すると、そのデータポートと接続するデータポートを自動的に作成して接続します。
後はself.Port["test2"]._port,self.Port["test2"]._dataからデータの読み込み、書き込みができます。
最後に、
rtcControl.CompList.append(testComponent)
のようにして作成したいRTCのクラスをrtcControl.CompListに追加して、
rtcControl.SetComp()
でRTCを起動できます。
まとめると、
1.辞書オブジェクトに接続したいデータポートのパスを記述するだけで対応するデータポートを作成、接続できるようにした。
2.rtcControl.CompListにRTCのクラスを追加すると、rtcControl.CompListに登録したRTCがまとめて起動される。
3.RTC起動に必要な記述をrtcControl.SetCompにまとめることにより、独自のプログラムを作成するときの記述を減らした。
だけなので、やや楽かな?ぐらいな感じですね。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする