[openrtm-users 01595] Re: 開発時の情報源

Ando Noriaki n-ando @ aist.go.jp
2011年 2月 24日 (木) 06:42:52 JST


産総研 安藤です

中級以上の人が必要とする情報については、あまりマニュアルが
整っていないので申し訳ないのですが、デベロッパーズガイドの中級編、
応用編も整備していきますのでしばらくお待ちください。

そのほかの情報としては、

・ペーパー
#実験的な内容についてはペーパーで先ずに発表しています。
#ただし、その内容がOpenRTM-aistに取り込まれているとは限りませんが。。。
#実験コードを書いて、データをとってしばらく放置、ということも多々あります。

・クラスリファレンス
#コードを書く際には、C++で書いたものをJavaやPythonに移植する関係上
#一応他の人にも内部の挙動が分かるようなドキュメントを書くようにはしています
#が、すべてをくまなく自然言語で記述するというのは難しいですね。。。

・OMG RTC(またはSDO)の仕様書
#RTCの挙動の大元はOMGの標準で決められているので、実装もそれに
#則っているはずです。もし、違っていたらご指摘ください。
http://www.omg.org/spec/RTC/1.0/
http://www.omg.org/spec/SDO/1.1/

・ソース
#これで得られない情報については、やはりソースをみるしかないですね。
#ただ、publicの関数でも、あえてマニュアルなどに記述していない関数などは
#単に実装上publicになっていて、ユーザは触らない方がいい、とか、
#experimentalな実装なのであまり触ってほしくないとか、そういう事情もあるかもしれません。


> みなさま
>
> 電気通信大学大学院・佐藤と申します.
> お世話になっております.
>
> 皆様はどのような情報源(web,本など)から,開発に必要な情報を得ているのかを教えていただけ
> ませんでしょうか.
>
> 私がやりたいことは,動画像処理をモジュール化して多段接続し,全体をシミュレーションすること
> です.リアルタイム性は求めていません.これまでは,モノシリックな画像処理プログラムを c や
> c++ で書いてきましたが,OpenRTM のようなプログラムの開発は初めてです.
> # CORBA の存在は, OpenRTM を勉強している最中に先週知った程度の知識レベルです.
>
> まずは自分でいろいろ試してみたく,
> http://www.openrtm.org/openrtm/ja/content/%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88
> や,そのほか検索してヒットした web ページを見て勉強していました.「全部入り」やわかりやす
> いサンプル,ウェブページ情報も初学者にとっては大変助かりました.
>
> また,大学図書館に「長瀬他:はじめてのコンポーネント指向ロボットアプリケーション開発,毎日
> コミュニケーションズ」がありましたので,これを読みながら手を動かしている最中です.
> # 残念ながら絶版のようです.
>
>
> しかし,具体的な開発をしようとした場合(私にとってですが)分からないことも多々あります.ま
> ず,目的を達成するためには ExtTrigExecutionContext が必要だと気付くのに,一昼夜かかりまし
> た(私の調べ方が悪いのだとおもいますが.ただ,見つけた時は小躍りしました.)
> 次に,svc() と tick() の違いがわかりませんでした.そこで,ExtTrigExecutionContext::tick()
> は具体的に何を実行するのかを調べるために,ソースコードを見てみました.
> ----
>  /*!
>   * @if jp
>   * @brief 処理を1ステップ進める
>   * @else
>   * @brief Move forward one step of ExecutionContext
>   * @endif
>   */
>  void ExtTrigExecutionContext::tick()
>    throw (CORBA::SystemException)
>
>    RTC_TRACE(("tick()"));
>    m_worker._mutex.lock();
>    m_worker._called = true;
>    m_worker._cond.signal();
>    m_worker._mutex.unlock();
>    return;
>  }
> ---
> RTC_TRACE はマクロであり,ログ出力をしているのだと思います.
> どうやら m_worker がキーワードなのだと思いましたので,ヘッダを見ると Worker は構造体
> で,Mutex _mutex,Condition _cond, bool _called のメンバを持っています.
>
> _mutex.lock() はどうやら排他処理をしているらしいことがわかりました.
> _called = true は tick() が呼ばれたことを示すフラグかと推測しました.
> _cond.signal() は pthread_cond_signal(&m_cond) を呼び出し,m_cond は coil::pthread_cond_t
> m_cond; は構造体....

ちなみに、これは条件変数の典型的な使い方なので、スレッド関係の本とか
みてもらった方がいいと思います。

たとえば、2つのスレッドがあって、それぞれ以下のようなものだとします。

スレッド1:ある変数が(仮に)trueになるまで待ち、trueになったら処理を開始
      場合によっては処理後にまた待ちに入る
スレッド2:ある変数をtrueに変更してスレッド1の実行を再開(シグナルを送る)させるスレッド

このとき、単純にbool変数を用意してスレッド1をループさせて変数を見張ると、
1.ループ周期が早いと、スレッド2からのシグナルをすぐに受けっとって処理を
再開できるが、CPU時間を消費しすぎる。
2.ループ周期が遅いと、CPU時間の消費を抑えられるかもしれないが、
スレッド2から来たシグナル受け取ってすぐに処理を再開できる

といった解決方法があると思います。

条件変数は、これを解決するもので、スレッド1を待ち状態にして、
スレッド2からそれを起こすことができます。条件変数の使用自体は
書き方にパターンがあって、分かればそれほど難しくありません。

詳しくは、pthreadやJavaのスレッド関係の本、Webなどを見てみてください。

> と調べていくうちに「こ,これは無理だ・・・」と思った次第です.しかし,検索した web ページ
> を見ていると,みなさんどんどんプログラムを書かれているので,「もしかしたら他に情報源がある
> のではないだろうか?」と子供じみた考えに至っています.
> (例えば http://rbintelligence.blog.shinobi.jp/)

この、Nobuさんのページの記事に、RTM関連の情報が載っている
リンク集の記事が出ていましたね。
http://rbintelligence.blog.shinobi.jp/Date/20110223/

Web上の情報に関しては、ほぼこれで網羅されているのではないでしょうか?
ありがとうございます。>Nobuさん


-- 
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    統合知能研究グループ 主任研究員, 博士(工学)
    〒305-8568 つくば市梅園1-1-1 中央第2
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org



openrtm-users メーリングリストの案内