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

Shunji Satoh shun @ is.uec.ac.jp
2011年 2月 24日 (木) 20:02:31 JST


安藤さま,みなさま

電通大院・佐藤です.
お忙しい中にもかかわらず,大変有益な情報・ご提案,誠にありがとうございます.

近いうちに,私のような知識レベル程度の人間が何につまづき,どうやって解決していったのかをま
とめた webページでも作成できたらと思います.

> デベロッパーズガイドの中級編、
> 応用編も整備していきますのでしばらくお待ちください。

とても期待しています.それまでについていけるようにしたいです.

> ・ペーパー

いくつかペーパーを斜め読みしましたが,記載されているサンプルコードだけでは,理解できない場
合もありました.論文なので仕方ありませんが.


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

おそらく,専門の方にとっては必要十分なのだと予測しています.が,私のような専門外の人間にも
対応させる必要は「ない」と,私自身思っています.例えば,安藤さんには下で「pthread 関係の勉
強をするように」と教えていただきましたが,この suggestion で理解を加速できそうです.
まさに知りたかった情報の一部です.(要は,何が前提知識なのかわからないということです)

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

まだ RTC の section5.3 の斜め読みしかしていませんがとても参考になります.section 5.3 あた
りは私にとってとても参考になりました(脚注も興味深いです).

> ・ソース

C++ が元になっていると教えてくださったので,まずは C++ のソースを読んでみます.Python コー
ドは全体を書いてくださっているので,C++ のソースと並べて読むとよくわかる場合があります.

いずれにせよ,有益な情報,誠にありがとうございます.

以上です.



> 
> 
>> みなさま
>>
>> 電気通信大学大学院・佐藤と申します.
>> お世話になっております.
>>
>> 皆様はどのような情報源(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さん
> 
> 




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