ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今日3回目の更新ですが,日付は16日なので勘弁してください.
そろそろ,管理人急病※とかでサボろうかと思ってる所です.
※下痢気味とか風邪気味とかです.
それはさておき,今回はrtctreeをいぢくってみます.
OpenRTM-aistの公式HPの説明を読みながら手探りでやってみます.
・・・なんか,OpenRTM-aistの公式HPの表示がおかしいような気がしますけど,僕だけですかね?
今回は簡単なのでソースは配布しません.
まず,インストールしてない場合はPython2.6とOpenRTM-aist-Python-1.0.0とrtctreeをインストールしてください.
インストールが完了したら,Pythonのコマンドライン上で打ち込むか,またはソースファイルを作成して,
import rtctree.tree
と記述してください.
今回はOpenRTM-aist-Python-1.0.0のサンプルSeqIOを使うので,SeqIn.pyとSeqOut.pyを起ち上げておいてください.
そして,
tree = rtctree.tree.RTCTree(servers='localhost:2809')
としてRTCツリーを作成してください.
ここで,
print tree
とすると中身が分かります.
そして,
CompIn = tree.get_node(['/', 'localhost:2809','SequenceOutComponent0.rtc'])
CompOut = tree.get_node(['/', 'localhost:2809','SequenceInComponent0.rtc'])
のようにして,RTCまでのパスを指定してRTCのオブジェクトを取得してください.
ここで,
CompIn.activate_in_ec(0)
CompOut.activate_in_ec(0)
とすると,アクティブになります.
RTCのオブジェクトさえ取得できれば,あとの手順はほぼ同じです.
CompIn.deactivate_in_ec(0)
CompOut.deactivate_in_ec(0)
で非アクティブです.
exitする場合は,
CompIn.exit()
とします.
その他にも,
EC = CompIn.owned_ecs
EC[0].activate_component(CompIn.object)
のように実行コンテキストを取得してアクティブにできるみたいですね.
ポートを接続する場合は,
portIn = CompIn.get_port_by_name('Short')
portOut = CompOut.get_port_by_name('Short')
ポートのオブジェクトを名前で取得して,
portIn.connect(dest=portOut,name='Short_Short')
とすれば接続するようです.
接続を切る場合は
CompIn.disconnect_all()
として,RTC全ての接続を切るか,
Connect = portIn.connections
Connect[0].disconnect()
として,ポートの接続のリストを取得して切る方法があるようです.
本当はもうちょっとやりたいのですが,ネタ切れ防止のためこのぐらいにしといてあげます.
これでとりあえず次回まで余裕ができたので,次回はrtshellをいぢくってみます.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
そろそろ,管理人急病※とかでサボろうかと思ってる所です.
※下痢気味とか風邪気味とかです.
それはさておき,今回はrtctreeをいぢくってみます.
OpenRTM-aistの公式HPの説明を読みながら手探りでやってみます.
・・・なんか,OpenRTM-aistの公式HPの表示がおかしいような気がしますけど,僕だけですかね?
今回は簡単なのでソースは配布しません.
まず,インストールしてない場合はPython2.6とOpenRTM-aist-Python-1.0.0とrtctreeをインストールしてください.
インストールが完了したら,Pythonのコマンドライン上で打ち込むか,またはソースファイルを作成して,
import rtctree.tree
と記述してください.
今回はOpenRTM-aist-Python-1.0.0のサンプルSeqIOを使うので,SeqIn.pyとSeqOut.pyを起ち上げておいてください.
そして,
tree = rtctree.tree.RTCTree(servers='localhost:2809')
としてRTCツリーを作成してください.
ここで,
print tree
とすると中身が分かります.
そして,
CompIn = tree.get_node(['/', 'localhost:2809','SequenceOutComponent0.rtc'])
CompOut = tree.get_node(['/', 'localhost:2809','SequenceInComponent0.rtc'])
のようにして,RTCまでのパスを指定してRTCのオブジェクトを取得してください.
ここで,
CompIn.activate_in_ec(0)
CompOut.activate_in_ec(0)
とすると,アクティブになります.
RTCのオブジェクトさえ取得できれば,あとの手順はほぼ同じです.
CompIn.deactivate_in_ec(0)
CompOut.deactivate_in_ec(0)
で非アクティブです.
exitする場合は,
CompIn.exit()
とします.
その他にも,
EC = CompIn.owned_ecs
EC[0].activate_component(CompIn.object)
のように実行コンテキストを取得してアクティブにできるみたいですね.
ポートを接続する場合は,
portIn = CompIn.get_port_by_name('Short')
portOut = CompOut.get_port_by_name('Short')
ポートのオブジェクトを名前で取得して,
portIn.connect(dest=portOut,name='Short_Short')
とすれば接続するようです.
接続を切る場合は
CompIn.disconnect_all()
として,RTC全ての接続を切るか,
Connect = portIn.connections
Connect[0].disconnect()
として,ポートの接続のリストを取得して切る方法があるようです.
本当はもうちょっとやりたいのですが,ネタ切れ防止のためこのぐらいにしといてあげます.
これでとりあえず次回まで余裕ができたので,次回はrtshellをいぢくってみます.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
今日2回目の更新じゃないかって?
よく見てくださいよ.
この記事の日付は15日ですよ.
どうせ飽きると思うので書きため中です.
それはさておき,今回はExtTrigExecutionContextの外部トリガを入力するRTCを作成します.
平たく言うと,今回は完全に遊びと言うことです.
本来,何でExtTrigExecutionContextみたいな機能が必要かって言うと,OpenHRP3でシミュレータ時間で動作させるためですからね.
今回作成したRTCはここからダウンロード出来ます.
今回RTCを作成してて気づいたんですけど,アクティブになるにも外部トリガが必要みたいですね.
外部トリガを入力するのは,
void TestExtrigger2::Tick()
{
CorbaConsumer<OpenRTM::ExtTrigExecutionContextService> ec0;
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ec0.setObject(ecs[(CORBA::ULong)0]);
ec0->tick();
}
という関数を作ってやってます.
今日はここまでにしておきます.
明後日明日はrtctreeをいぢくってみます.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
よく見てくださいよ.
この記事の日付は15日ですよ.
どうせ飽きると思うので書きため中です.
それはさておき,今回はExtTrigExecutionContextの外部トリガを入力するRTCを作成します.
平たく言うと,今回は完全に遊びと言うことです.
本来,何でExtTrigExecutionContextみたいな機能が必要かって言うと,OpenHRP3でシミュレータ時間で動作させるためですからね.
今回作成したRTCはここからダウンロード出来ます.
今回RTCを作成してて気づいたんですけど,アクティブになるにも外部トリガが必要みたいですね.
外部トリガを入力するのは,
void TestExtrigger2::Tick()
{
CorbaConsumer<OpenRTM::ExtTrigExecutionContextService> ec0;
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ec0.setObject(ecs[(CORBA::ULong)0]);
ec0->tick();
}
という関数を作ってやってます.
今日はここまでにしておきます.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
バレンタインデーって,単純にチョコ食べたいときに買いづらいから,僕にはデメリットしかないOTZ.
自分が貰えないのはもはや気にならないのでどうでも良いですが.
それはさておき,今回は自分でRTCの状態を変更するRTCを作成します.
今回作成したサンプルのC++版はここ,Python版はここからダウンロード出来ます.
サンプルを起ち上げると,自動的にアクティブになります.
そして,1を入力すると非アクティブ,2を入力すると実行周期の変更ができるようになり,3を入力するとエラー状態になります.
エラー状態で1を入力するとリセットします.
最初にアクティブにしているのは,TestActiveComp.cppのMyModuleInit関数の,
RTC::RTObject_var rtobj;
rtobj = RTC::RTObject::_narrow(manager->getPOA()->servant_to_reference(comp));
RTC::ExecutionContextList_var ecs;
ecs = rtobj->get_owned_contexts();
ecs[(CORBA::ULong)0]->activate_component(rtobj);
の部分です.
TestActive.cppのonExcute関数で非アクテイブにするのも似たような感じで,
RTC::RTObject_var rtobj;
rtobj = this->getObjRef();
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ecs[(CORBA::ULong)0]->deactivate_component(rtobj);
と記述できます.
リセットするのも同じです.
RTC::RTObject_var rtobj;
rtobj = this->getObjRef();
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ecs[(CORBA::ULong)0]->reset_component(rtobj);
実行周期の変更は,
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ecs[(CORBA::ULong)0]->set_rate(rate);
と,実行コンテキストのリストを取得してから,いつぞやかの記事と同じくset_rate関数を使います.
これ書いてて気づいたんですが,上のrateをコンフィギュレーションパラメータに設定すればRTSEから実行周期が変更できますね.
今日の記事は手抜きな感が漂ってますがこのぐらいにしときます.
明日は自分で勝手にExtTrigExecutionContextの外部トリガ入力するRTCを作成します.
・・・もはや外部じゃないような感じもしますが.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
自分が貰えないのはもはや気にならないのでどうでも良いですが.
それはさておき,今回は自分でRTCの状態を変更するRTCを作成します.
今回作成したサンプルのC++版はここ,Python版はここからダウンロード出来ます.
サンプルを起ち上げると,自動的にアクティブになります.
そして,1を入力すると非アクティブ,2を入力すると実行周期の変更ができるようになり,3を入力するとエラー状態になります.
エラー状態で1を入力するとリセットします.
最初にアクティブにしているのは,TestActiveComp.cppのMyModuleInit関数の,
RTC::RTObject_var rtobj;
rtobj = RTC::RTObject::_narrow(manager->getPOA()->servant_to_reference(comp));
RTC::ExecutionContextList_var ecs;
ecs = rtobj->get_owned_contexts();
ecs[(CORBA::ULong)0]->activate_component(rtobj);
の部分です.
TestActive.cppのonExcute関数で非アクテイブにするのも似たような感じで,
RTC::RTObject_var rtobj;
rtobj = this->getObjRef();
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ecs[(CORBA::ULong)0]->deactivate_component(rtobj);
と記述できます.
リセットするのも同じです.
RTC::RTObject_var rtobj;
rtobj = this->getObjRef();
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ecs[(CORBA::ULong)0]->reset_component(rtobj);
実行周期の変更は,
RTC::ExecutionContextList_var ecs;
ecs = this->get_owned_contexts();
ecs[(CORBA::ULong)0]->set_rate(rate);
と,実行コンテキストのリストを取得してから,いつぞやかの記事と同じくset_rate関数を使います.
これ書いてて気づいたんですが,上のrateをコンフィギュレーションパラメータに設定すればRTSEから実行周期が変更できますね.
今日の記事は手抜きな感が漂ってますがこのぐらいにしときます.
明日は自分で勝手にExtTrigExecutionContextの外部トリガ入力するRTCを作成します.
・・・もはや外部じゃないような感じもしますが.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
OpenRTM-aistのHPのマニュアルが丁寧なので若干ネタ切れ気味です・
それはさておき,ここから下が今回の記事の内容です.
RTC Builderのコンフィギュレーション・パラメータにWidgetの設定があります.
設定できるのは,テキストボックス,スピンボックス,スライダー,ラジオボタンです.
スライダーを設定する場合はStepの項目に最小ステップ数を入力してから作成する必要があります.
別にOpenRTM-aist-1.0.0にサンプルがついてるのでいらないとは思いますけど,今回も簡単に作ってみました.
今回はC++とPythonで作成しました.
C++版はここ,Python版はここからダウンロードしてください.
実際にRTCを起動して,RTSEのConfiguration Viewを見てみると,
上からラジオボタン,スライダー,スピンボックス,テキストボックスが表示されます.
ラジオボタンとかスライダーとかの設定は(RTCの名前).confというファイルの中で設定してます.
今回作成したRTCのrtc.confを見てみると,
TEST.ConfigTest.config_file: ConfigTest.conf
となっており,コンポーネントの設定ファイルにConfigTest.confを指定しているのがわかります.
しかし、ConfigTest.confには何も書いてないと思います。
RTCBの古いバージョンだとConfigTest.confに記述されるようです。
新しいバージョンではConfigTest..cppに直接書いてるみたいですが、どちらでも良いと思います。
ConfigTest.confでは,
conf.__widget__.spinInt: spin
で,widgetの種類を指定し.
conf._default.spinInt: 0 <= x <= 5
で制約条件を指定しています.
なお、ConfigTest..cppに書く場合は
"conf.__widget__.spinInt", "spin"
となるはずです。
Sliderの場合は,
conf.__widget__.sliderDouble: slider.40
のように最小ステップ数も指定します.
今回はこのぐらいにしときます.
次回は自分で勝手にアクティブになるRTCを作成します.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
それはさておき,ここから下が今回の記事の内容です.
RTC Builderのコンフィギュレーション・パラメータにWidgetの設定があります.
設定できるのは,テキストボックス,スピンボックス,スライダー,ラジオボタンです.
スライダーを設定する場合はStepの項目に最小ステップ数を入力してから作成する必要があります.
別にOpenRTM-aist-1.0.0にサンプルがついてるのでいらないとは思いますけど,今回も簡単に作ってみました.
今回はC++とPythonで作成しました.
C++版はここ,Python版はここからダウンロードしてください.
実際にRTCを起動して,RTSEのConfiguration Viewを見てみると,
上からラジオボタン,スライダー,スピンボックス,テキストボックスが表示されます.
ラジオボタンとかスライダーとかの設定は(RTCの名前).confというファイルの中で設定してます.
今回作成したRTCのrtc.confを見てみると,
TEST.ConfigTest.config_file: ConfigTest.conf
となっており,コンポーネントの設定ファイルにConfigTest.confを指定しているのがわかります.
しかし、ConfigTest.confには何も書いてないと思います。
RTCBの古いバージョンだとConfigTest.confに記述されるようです。
新しいバージョンではConfigTest..cppに直接書いてるみたいですが、どちらでも良いと思います。
ConfigTest.confでは,
conf.__widget__.spinInt: spin
で,widgetの種類を指定し.
conf._default.spinInt: 0 <= x <= 5
で制約条件を指定しています.
なお、ConfigTest..cppに書く場合は
"conf.__widget__.spinInt", "spin"
となるはずです。
Sliderの場合は,
conf.__widget__.sliderDouble: slider.40
のように最小ステップ数も指定します.
今回はこのぐらいにしときます.
次回は自分で勝手にアクティブになるRTCを作成します.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
なんだかんだでこの企画も4回目です.
ちなみに僕は「地道」という言葉が大嫌いです.
僕の座右の銘は「運で努力を踏みにじる」です.
それはさておき,この記事の本題に入ります.
今回はデータポートの動的な生成,削除をやります.
今回のサンプルはここからダウンロードできます.
inportを作成する関数としては,
void registerInPort(const char* name,PortBase& port);
void registerPort(PortBase& port);
bool addPort(PortBase& port);
bool addOutPort(const char* name, OutPortBase& outport);
があり,outportを作成する関数としては,
void registerOutPort(const char* name,PortBase& port);
void registerPort(PortBase& port);
bool addPort(PortBase& port);
bool addOutPort(const char* name, OutPortBase& outport);
があるようです.
・・・ただ,registerPortとaddPortを使うとポートプロパティにunknownとか出てくるので他を使った方が良いかも.
インポートを削除する関数は,
bool removePort(PortBase& port);
bool removeInPort(InPortBase& port);
void deletePort(PortBase& port);
があり,アウトポートを削除する関数は,
bool removePort(PortBase& port);
bool removeOutPort(OutPortBase& port);
void deletePort(PortBase& port);
があるようです.
削除する前に,
m_inIn->disconnect_all();
m_outOut->disconnect_all();
として接続を切断してください.
今回作成したサンプルはアクティブにしたときにインポート,アウトポートが作成され,非アクティブにしたときに削除するようになってます.
ポートの生成,削除をするRTCは去年のRTMコンテストにもありましたね[1][2].
次回はRTCBuilderの機能を見ていこうかと思います.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
ちなみに僕は「地道」という言葉が大嫌いです.
僕の座右の銘は「運で努力を踏みにじる」です.
それはさておき,この記事の本題に入ります.
今回はデータポートの動的な生成,削除をやります.
今回のサンプルはここからダウンロードできます.
inportを作成する関数としては,
void registerInPort(const char* name,PortBase& port);
void registerPort(PortBase& port);
bool addPort(PortBase& port);
bool addOutPort(const char* name, OutPortBase& outport);
があり,outportを作成する関数としては,
void registerOutPort(const char* name,PortBase& port);
void registerPort(PortBase& port);
bool addPort(PortBase& port);
bool addOutPort(const char* name, OutPortBase& outport);
があるようです.
・・・ただ,registerPortとaddPortを使うとポートプロパティにunknownとか出てくるので他を使った方が良いかも.
インポートを削除する関数は,
bool removePort(PortBase& port);
bool removeInPort(InPortBase& port);
void deletePort(PortBase& port);
があり,アウトポートを削除する関数は,
bool removePort(PortBase& port);
bool removeOutPort(OutPortBase& port);
void deletePort(PortBase& port);
があるようです.
削除する前に,
m_inIn->disconnect_all();
m_outOut->disconnect_all();
として接続を切断してください.
今回作成したサンプルはアクティブにしたときにインポート,アウトポートが作成され,非アクティブにしたときに削除するようになってます.
ポートの生成,削除をするRTCは去年のRTMコンテストにもありましたね[1][2].
次回はRTCBuilderの機能を見ていこうかと思います.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・