ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[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
OpenOffice Calc、Drawを操作するためのRTCのマニュアルを作成しました。
あと、Ogre3Dによるモデル表示RTCのマニュアルも作成しました。
まだ適当に書いてあるところがあるので気が向いたら修正したいと思います。
ここから下は雑談です。
ここ最近で実行順序設定可能な実行コンテキスト、Calcを操作するRTC、Drawを操作するRTC、3Dモデル表示RTCを作成しましたが個人的な評価としては、
3Dモデル表示RTC = 実行コンテキスト >> Draw > Calc
という感じだったのですが実際は、
Calc >>>> 実行コンテキスト > Draw = 3Dモデル表示RTC
という評価みたいですね。
というよりCalcを操作するRTCで評価されたのは何故か最初に作った実験用の動画で、
いざ実用的なものを作ってみたら特に反応がないというのが不思議です。
発想は良かったけど、できたものが駄目だったってことですかね。
それとも、CalcよりExcelを使ってる人の方が圧倒的に多いだろうからそっちで開発すべきだったのでしょうか?
ただ、Excelを操作するRTCは実験だけで飽きたから作る気ないんですよね。
暇な人がいたら誰か作ってください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
あと、Ogre3Dによるモデル表示RTCのマニュアルも作成しました。
まだ適当に書いてあるところがあるので気が向いたら修正したいと思います。
ここから下は雑談です。
ここ最近で実行順序設定可能な実行コンテキスト、Calcを操作するRTC、Drawを操作するRTC、3Dモデル表示RTCを作成しましたが個人的な評価としては、
3Dモデル表示RTC = 実行コンテキスト >> Draw > Calc
という感じだったのですが実際は、
Calc >>>> 実行コンテキスト > Draw = 3Dモデル表示RTC
という評価みたいですね。
というよりCalcを操作するRTCで評価されたのは何故か最初に作った実験用の動画で、
いざ実用的なものを作ってみたら特に反応がないというのが不思議です。
発想は良かったけど、できたものが駄目だったってことですかね。
それとも、CalcよりExcelを使ってる人の方が圧倒的に多いだろうからそっちで開発すべきだったのでしょうか?
ただ、Excelを操作するRTCは実験だけで飽きたから作る気ないんですよね。
暇な人がいたら誰か作ってください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
右下のカウンターを見てもらえば分かる通り2万アクセスを超えたので、記念に以下のソフトウェアを配布します。
以前、ロボットのモデルを作成するソフトを作っていましたがOpenGLをそのまま使っていたので見た目が微妙だった印象があります。
そこで、Ogre3D、CEGUI、OpenRTM-aistを使ったモデル表示ソフトを作りました。
以下の機能があります。
これによりゲームのコントローラーやkinect等のRTCによるモデルの操作が容易にできるようになると思いますし、またロボット実機と連動させたり音声による操作等も既存のRTCの組み合わせでできるようになるのではないかと考えてます。
ひょっとしたらですけど、簡単なオンラインゲームも作れるかもしれません。
オンラインマニュアルのリンクからダウンロードできます。
RTCを作成する方法ですが、RTCBuilderでPythonのRTCを作成します。
そして、MyModuleInitを
以前、ロボットのモデルを作成するソフトを作っていましたがOpenGLをそのまま使っていたので見た目が微妙だった印象があります。
そこで、Ogre3D、CEGUI、OpenRTM-aistを使ったモデル表示ソフトを作りました。
以下の機能があります。
- GUIによる操作
- 3Dモデル表示
- パーティクル表示
- アニメーション設定
- 物理シミュレーション
- サウンド再生
- GUI作成
- 文字表示
- 画面分割
- RTコンポーネントによる操作
これによりゲームのコントローラーやkinect等のRTCによるモデルの操作が容易にできるようになると思いますし、またロボット実機と連動させたり音声による操作等も既存のRTCの組み合わせでできるようになるのではないかと考えてます。
ひょっとしたらですけど、簡単なオンラインゲームも作れるかもしれません。
オンラインマニュアルのリンクからダウンロードできます。
RTCを作成する方法ですが、RTCBuilderでPythonのRTCを作成します。
そして、MyModuleInitを
def MyModuleInit(manager):
manager._factory.unregisterObject("test")
testInit(manager)
return manager.createComponent("test")
と変更します。
test、testInitは作成したコンポーネントのものに変更してください。
あとはRTCのクラスに必要に応じて以下の関数を追加してください。
RTCのアクティビティでモデル等の生成ができない不具合があります。
移動はできます。
このソフトにより作成したゲームの動画です。ネタ要素が強いのでニコニコ動画にアップロードしておきました。ただし、このゲームは付属していません。
もっと詳細なマニュアルを作りたいとは思っています。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
と変更します。
test、testInitは作成したコンポーネントのものに変更してください。
あとはRTCのクラスに必要に応じて以下の関数を追加してください。
- def mouseMoved(self, mx, my, mdx, mdy):マウスが移動したときに呼び出される
- def mousePressed(self, b):マウスのボタンを押したときに呼び出される
- def mouseReleased(self, b):マウスのボタンを離したときに呼び出される
- def ogre_init(self):ファイルを読み込んだときに呼び出される
- def ogre_loop(self):描画のタイミングで呼び出される
- def Simloop(self):物理シミュレーションの各ステップで呼び出される
- def Contacthandler(self, b1, b2):物理シミュレーションで物体が衝突したときに呼び出される。
RTCのアクティビティでモデル等の生成ができない不具合があります。
移動はできます。
このソフトにより作成したゲームの動画です。ネタ要素が強いのでニコニコ動画にアップロードしておきました。ただし、このゲームは付属していません。
もっと詳細なマニュアルを作りたいとは思っています。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
前回はOpenoffice Calcを操作するRTCを作りましたので今回はDrawを操作するRTCを作ってみました。
今できるのは図形の操作だけです。
図形の位置、角度を以下のデータ型で操作できます。
これを作ったら面白いのではないかと想像してのですが、実際作ってみると微妙でした。
ダウンロードはオンラインマニュアルのリンクからできます。
図形の位置、角度を以下のデータ型で操作できます。
- TimedDoubleSeq
- TimedLongSeq
- TimedFloatSeq
- TimedIntSeq
- TimedShortSeq
- TimedUDoubleSeq
- TimedULongSeq
- TimedUFloatSeq
- TimedUIntSeq
- TimedUShortSeq
- TimedPoint2D
- TimedVector2D
- TimedPose2D
- TimedGeometry2D
これを作ったら面白いのではないかと想像してのですが、実際作ってみると微妙でした。
ダウンロードはオンラインマニュアルのリンクからできます。
まずOpenOfficeをインストールしてください。
あと必要なのはpython-2.6、OpenRTM-aist-Python-1.1.0-RC1、rtctree-3.1.0です。
OOoDrawControlRTC.oxtをダブルクリックして拡張機能をインストールします。
OOoDrawRTC.pyをC:\Users\ユーザー名\AppData\Roaming\OpenOffice.org\3\user\Scripts\python
OOoDrawControlRTC.oxtをダブルクリックして拡張機能をインストールします。
OOoDrawRTC.pyをC:\Users\ユーザー名\AppData\Roaming\OpenOffice.org\3\user\Scripts\python
rtc.confをC:\Program Files\OpenOffice.org 3\program
にそれぞれコピーしてください。
あとはOOoDrawRTC.odgを開いて動画のように操作してください。
ここから下は雑談です。
これまでCalc、Drawを操作するRTCを作成しました。
残るはBase、Impress、Math、WriterがありますがBaseぐらいしかRTCで操作して面白そうなのはないですね。プレゼンテーションのRTCは既にいくつかありますからね。
Mathを操作するRTCとか全く想像がつきません。
今後はマニュアルを作ることと、プログラムが汚いので整理することをしたいとは思います。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
にそれぞれコピーしてください。
あとはOOoDrawRTC.odgを開いて動画のように操作してください。
ここから下は雑談です。
これまでCalc、Drawを操作するRTCを作成しました。
残るはBase、Impress、Math、WriterがありますがBaseぐらいしかRTCで操作して面白そうなのはないですね。プレゼンテーションのRTCは既にいくつかありますからね。
Mathを操作するRTCとか全く想像がつきません。
今後はマニュアルを作ることと、プログラムが汚いので整理することをしたいとは思います。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
よくわからないけど、ExcelとかOpenOfficeを操作するRTCの動画が好評だったようなので少し機能を付け加えてみました。
付け加えた機能は以下の通りです。
一応、どのデータポートと接続してどのセルを使うかなどの設定を保存できるようにはしました。
ただ、
このようにデータを書き込むためのシートを作成しているので少し不細工かもしれないです。
いい方法があれば教えてください。
オンラインマニュアルのリンクからダウンロードできます。
まずOpenOfficeをインストールしてください。
多分libreofficeでもいけるとは思いますけど試してないのでよくわかりません。
あと必要なのはpython-2.6、OpenRTM-aist-Python-1.1.0-RC1、rtctree-3.1.0です。
そして、OOoCalcControlRTC.oxtをダブルクリックして拡張機能をインストールします。
あとは、
OOoCalcRTC.pyをC:\Users\ユーザー名\AppData\Roaming\OpenOffice.org\3\user\Scripts\python
rtc.confをC:\Program Files\OpenOffice.org 3\program
にコピーしてください。
あとは、OOoCalcRTC.odsを起動して動画のように操作してください。
ここから下は個人的な感想です。
自分としては実行順序を設定できる実行コンテキストに自信があって、ExcelとかOpenOfficeを操作するRTCは微妙だったのですけど何故かこっちのほうが好評みたいですね。
てっきりExcelを操作するRTCは誰か作っていると思ってたのですが。
OpenOfficeを操作するRTCに力を入れているのでExcelを操作するRTCは作らないかもしれません。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
付け加えた機能は以下の通りです。
- GUIでデータポートの選択ができるようにした
- 扱えるデータ型を増やした
- データポートを自動接続するようにした
- 設定の保存ができるようになった
一応、どのデータポートと接続してどのセルを使うかなどの設定を保存できるようにはしました。
ただ、
このようにデータを書き込むためのシートを作成しているので少し不細工かもしれないです。
いい方法があれば教えてください。
オンラインマニュアルのリンクからダウンロードできます。
まずOpenOfficeをインストールしてください。
多分libreofficeでもいけるとは思いますけど試してないのでよくわかりません。
あと必要なのはpython-2.6、OpenRTM-aist-Python-1.1.0-RC1、rtctree-3.1.0です。
そして、OOoCalcControlRTC.oxtをダブルクリックして拡張機能をインストールします。
あとは、
OOoCalcRTC.pyをC:\Users\ユーザー名\AppData\Roaming\OpenOffice.org\3\user\Scripts\python
rtc.confをC:\Program Files\OpenOffice.org 3\program
にコピーしてください。
あとは、OOoCalcRTC.odsを起動して動画のように操作してください。
ここから下は個人的な感想です。
自分としては実行順序を設定できる実行コンテキストに自信があって、ExcelとかOpenOfficeを操作するRTCは微妙だったのですけど何故かこっちのほうが好評みたいですね。
てっきりExcelを操作するRTCは誰か作っていると思ってたのですが。
OpenOfficeを操作するRTCに力を入れているのでExcelを操作するRTCは作らないかもしれません。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・