忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[322]  [321]  [320]  [319]  [318]  [317]  [316]  [315]  [314]  [313]  [312
×

[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コンテストは実行コンテキスト出すかも.

アイデアがあればですけど.








にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
大変勉強になりました
初学者にとって大変勉強になりました.サイト全体を通しても感心させられることばかりです.ありがとうございます.
もしお時間がございましたら,下記の相談にのっていただけますでしょうか?

TestExecutionContext の配下で,複数のコンポーネント(たとえばAとB)を動かそうと思っています.このとき,m_comps[0] と m_comps[1] にコンポーネントAとBを登録する必要があると思うのですが,その方法がわからず悩んでおります.

記事は,compA.exe と TestExecutionContext.dll を同じディレクトリにおき,compA.exe を実行することでしたが,これは書かれていた通りにうまくいきました.(感動しました).

以上,よろしくお願いします.
佐藤 2011/03/04(Fri)19:06:49 編集
>佐藤様
コメントありがとうございます.

手っ取り早い方法としては,

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
です.
Nobu URL 2011/03/04(Fri)21:55:09 編集
私はmanagerのことを勉強しなければならないようです
Nobu様

早速ありがとうございます.教えていただいた方法でうまく動かすことができました.ありがとうございます.

今,コンポーネント A->B のように接合されており,さらに,B->C->B のフィードバックがあるようなシステムのシミュレーションを試みております.それぞれのコンポーネントA, B, C の処理時間がバラバラなのですが,Nobuさんの方法が適切であると考えています.

本日は,A->B だけを考え,Bの処理がAよりも遅い場合(Aの次のデータはBの処理を待たなければならない場合)を作ってみました.教えていただいた方法で動作しました.

Nobuさんは「てっとり早く」とおっしゃっていましたが,確かに GUI 上で操作するのは今後のことを考えるとしんどいですね.多分rtcshell 関連を使うのが吉だと思っていますので勉強します.

ありがとうございました.
佐藤 2011/03/05(Sat)00:13:00 編集
>佐藤様
お役に立てて幸いです.

OpenRTM-aistのマネージャの解説ページがUPされたら良いんですけどね.

http://www.openrtm.org/openrtm/ja/content/%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3-%E5%9F%BA%E7%A4%8E%E7%B7%A8

この通りまだ執筆中のようです.

他のサイト見ても,マネージャに関しては情報が少ないような気がします.
Nobu URL 2011/03/05(Sat)00:37:35 編集
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]