ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
OpenRTM-aist検定なるものがあるらしいですが,正解以外の選択肢を一度も聞いたことがないような気がするのは一体・・・・
マニアックすぎるだろ.
それはさておき,今回は実行コンテキストを作成します.
サンプルはここから.
サンプルの使用方法を説明します.
まず,解凍したフォルダのrtc.confとReleaseかDebugフォルダのTestExecutionContext.dllをRTCの実行ディレクトリにコピーします.
この時に選ぶRTCは何でもかまいません.
ただし,ReleaseでビルドしたRTCはReleaseフォルダ,DebugでビルドしたRTCはDebugフォルダのDLLを使ってください.
ちなみに,rtc.confの中身では,
exec_cxt.periodic.type: TestExecutionContext
manager.modules.load_path: ./
manager.modules.abs_path_allowed: no
manager.modules.preload: TestExecutionContext.dll
のようにコンテキストのタイプの設定とTestExecutionContext.dllのロードをするようにしています.
プログラムのソースを見てみます.
int TestExecutionContext::svc(void)
{
static int i = 0;
do{
i++;
std::cout << i << std::endl;
std::for_each(m_comps.begin(), m_comps.end(), invoke_worker());
}
while (m_running);
return 0;
}
今回のサンプルでは実行した回数を表示します.
あとはコンストラクタ,デストラクタしかないです.
あと,TestExecutionContextInitという関数を記述してます.
managerがTestExecutionContext.dllを読み込むと~Initという関数を探すようです.
~の部分はDLLの名前でしょうか?
ログを見た感じそうだと思ったんですが,よくわかりません.
あと,~Init関数の先頭にDLL_EXPORTを記述してください.
今回作成したサンプルは単純ですが,ExtTrigExecutionContextやArtExecutionContextもこれとほとんど同じであることがソースを読めばわかると思います.
次回は今回作成したサンプルをいぢくっていきたいと思います.
もしかしたら,RTMコンテストは実行コンテキスト出すかも.
アイデアがあればですけど.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
マニアックすぎるだろ.
それはさておき,今回は実行コンテキストを作成します.
サンプルはここから.
サンプルの使用方法を説明します.
まず,解凍したフォルダのrtc.confとReleaseかDebugフォルダのTestExecutionContext.dllをRTCの実行ディレクトリにコピーします.
この時に選ぶRTCは何でもかまいません.
ただし,ReleaseでビルドしたRTCはReleaseフォルダ,DebugでビルドしたRTCはDebugフォルダのDLLを使ってください.
ちなみに,rtc.confの中身では,
exec_cxt.periodic.type: TestExecutionContext
manager.modules.load_path: ./
manager.modules.abs_path_allowed: no
manager.modules.preload: TestExecutionContext.dll
のようにコンテキストのタイプの設定とTestExecutionContext.dllのロードをするようにしています.
プログラムのソースを見てみます.
int TestExecutionContext::svc(void)
{
static int i = 0;
do{
i++;
std::cout << i << std::endl;
std::for_each(m_comps.begin(), m_comps.end(), invoke_worker());
}
while (m_running);
return 0;
}
今回のサンプルでは実行した回数を表示します.
あとはコンストラクタ,デストラクタしかないです.
あと,TestExecutionContextInitという関数を記述してます.
managerがTestExecutionContext.dllを読み込むと~Initという関数を探すようです.
~の部分はDLLの名前でしょうか?
ログを見た感じそうだと思ったんですが,よくわかりません.
あと,~Init関数の先頭にDLL_EXPORTを記述してください.
今回作成したサンプルは単純ですが,ExtTrigExecutionContextやArtExecutionContextもこれとほとんど同じであることがソースを読めばわかると思います.
次回は今回作成したサンプルをいぢくっていきたいと思います.
もしかしたら,RTMコンテストは実行コンテキスト出すかも.
アイデアがあればですけど.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする
大変勉強になりました
初学者にとって大変勉強になりました.サイト全体を通しても感心させられることばかりです.ありがとうございます.
もしお時間がございましたら,下記の相談にのっていただけますでしょうか?
TestExecutionContext の配下で,複数のコンポーネント(たとえばAとB)を動かそうと思っています.このとき,m_comps[0] と m_comps[1] にコンポーネントAとBを登録する必要があると思うのですが,その方法がわからず悩んでおります.
記事は,compA.exe と TestExecutionContext.dll を同じディレクトリにおき,compA.exe を実行することでしたが,これは書かれていた通りにうまくいきました.(感動しました).
以上,よろしくお願いします.
もしお時間がございましたら,下記の相談にのっていただけますでしょうか?
TestExecutionContext の配下で,複数のコンポーネント(たとえばAとB)を動かそうと思っています.このとき,m_comps[0] と m_comps[1] にコンポーネントAとBを登録する必要があると思うのですが,その方法がわからず悩んでおります.
記事は,compA.exe と TestExecutionContext.dll を同じディレクトリにおき,compA.exe を実行することでしたが,これは書かれていた通りにうまくいきました.(感動しました).
以上,よろしくお願いします.
>佐藤様
コメントありがとうございます.
手っ取り早い方法としては,
1)コンポーネントAのrtc.confで,
a)TestExecutionContextを指定
b)manager.is_master: YES と記述
して起ち上げます.
2)コンポーネントBを起ち上げる.
(実行コンテキストは何でもかまわない)
3)RT System Editer上でA,Bにより複合コンポーネントを作成する.この際,
a)ManagerにコンポーネントAを起動したときに同時にRTSEに表示されたmanager.mgrを選択する
b)TypeにPeriodicECSharedを選択する
これで2つのRTCが1つのTestExecutionContextで駆動します.
この際AとBは同期直列実行されるため
(A→B)→(A→B)→(A→B)・・・
のような順番で処理することになると思います.
ちなみに複合コンポーネントの作成方法はhttp://www.openrtm.org/openrtm/ja/content/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%EF%BC%88%E8%A4%87%E5%90%88%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E7%B7%A8%EF%BC%89
です.
手っ取り早い方法としては,
1)コンポーネントAのrtc.confで,
a)TestExecutionContextを指定
b)manager.is_master: YES と記述
して起ち上げます.
2)コンポーネントBを起ち上げる.
(実行コンテキストは何でもかまわない)
3)RT System Editer上でA,Bにより複合コンポーネントを作成する.この際,
a)ManagerにコンポーネントAを起動したときに同時にRTSEに表示されたmanager.mgrを選択する
b)TypeにPeriodicECSharedを選択する
これで2つのRTCが1つのTestExecutionContextで駆動します.
この際AとBは同期直列実行されるため
(A→B)→(A→B)→(A→B)・・・
のような順番で処理することになると思います.
ちなみに複合コンポーネントの作成方法はhttp://www.openrtm.org/openrtm/ja/content/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%EF%BC%88%E8%A4%87%E5%90%88%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E7%B7%A8%EF%BC%89
です.
私はmanagerのことを勉強しなければならないようです
Nobu様
早速ありがとうございます.教えていただいた方法でうまく動かすことができました.ありがとうございます.
今,コンポーネント A->B のように接合されており,さらに,B->C->B のフィードバックがあるようなシステムのシミュレーションを試みております.それぞれのコンポーネントA, B, C の処理時間がバラバラなのですが,Nobuさんの方法が適切であると考えています.
本日は,A->B だけを考え,Bの処理がAよりも遅い場合(Aの次のデータはBの処理を待たなければならない場合)を作ってみました.教えていただいた方法で動作しました.
Nobuさんは「てっとり早く」とおっしゃっていましたが,確かに GUI 上で操作するのは今後のことを考えるとしんどいですね.多分rtcshell 関連を使うのが吉だと思っていますので勉強します.
ありがとうございました.
早速ありがとうございます.教えていただいた方法でうまく動かすことができました.ありがとうございます.
今,コンポーネント A->B のように接合されており,さらに,B->C->B のフィードバックがあるようなシステムのシミュレーションを試みております.それぞれのコンポーネントA, B, C の処理時間がバラバラなのですが,Nobuさんの方法が適切であると考えています.
本日は,A->B だけを考え,Bの処理がAよりも遅い場合(Aの次のデータはBの処理を待たなければならない場合)を作ってみました.教えていただいた方法で動作しました.
Nobuさんは「てっとり早く」とおっしゃっていましたが,確かに GUI 上で操作するのは今後のことを考えるとしんどいですね.多分rtcshell 関連を使うのが吉だと思っていますので勉強します.
ありがとうございました.