[openrtm-users 02554] Re: 外部トリガ実行コンテキストを用いた場合のManager終了処理
金広文男
f-kanehiro @ aist.go.jp
2012年 5月 31日 (木) 13:33:43 JST
金広です。
activate_component()などでtick()を送ると、onActivated()を
実行するスレッドとonExecute()を実行するスレッドが別に
なってしまうのではないでしょうか。
レアなケースではあると思いますが、これらが同じスレッドで
呼ばれることを前提としたコンポーネントを作ったりすることが
あるので(具体的にはOpenGLの初期化をonActivated()で
行って、onExecute()で描画を行うようなコンポーネント)、
そのような場合に問題が生じる気がします。
activate_component()等が同期的だと今回の相談のような
問題が生じるのですが、一方で非同期だとサービスポートを
利用する場合にはACTIVE状態に遷移するのを待つ必要が
あったりするのでなかなか悩ましいところですね。
2012/5/31 Ando Noriaki <n-ando @ aist.go.jp>:
> 金広さん
>
> 安藤です
>
> ご意見ありがとうございます。
>
> ふと思ったのですが、外部トリガ型のECが
> deactivate_component などで、自分で内部的にtick()を送ると、
> なにか問題になりそうなことはありますか?
>
> 対称性を保つため、activate_component/reset_component
> ないでもtick()を呼んだらどうかなとも考えてみたのですが、
> OpenHRP3のような用途では、とりあえずそれで回避できるのでは
> 無いかと考えました。
>
> このECの問題を整理すると、
>
> 1. 一般的なにおいて、activate_component/deactivate_component
> が同期的であべきであるか否か。この問題は、onActivated/onDeactivated
> のような関数に時間のかかる処理が実装された場合に顕在化する。
> a) 同期的
> b) 非同期的
> ※ これについては、前回のメールのように、オプションで解決済み。ただし1.2以降
>
> 2. OpenHRPECやExtTrigECのような外部トリガ型ECにおいて、
> activate/deactivateの状態遷移は、外部トリガによって行われるべきか否か?
> この問題は、onActivated/onDactivatedに実装される処理の時間に関係なく、
> トリガをかける側とかけられる側のライフサイクルの不整合によって顕在化する。
> a) 外部トリガのみ
> b) 外部トリガと内トリガ両方
> c) 内部トリガのみ (これはちょっとなさそう)
>
> のように、2つに分けられるのではないかと思います。
>
> OpenHRP3に限って言えば、後者の問題ではないかと思います。
> もう少し考えてみたいと思います。
>
> あと、リリースサイクルについても早めにしたいと思って、
> リリースも含めたCI環境を構築中です。
>
>
>
> 2012年5月31日 11:12 金広文男 <f-kanehiro @ aist.go.jp>:
>> 金広です。
>>
>> 2012/5/30 Ando Noriaki <n-ando @ aist.go.jp>:
>>> 安藤です
>>> 方法としては、いくつかあると思いますが、どれがいいでしょうか?>皆さん
>>>
>>> 1. 1.1.0ではとりあえずECを非同期に戻す
>>> 新ECは1.2まで待つ。 -> 1.1.1で対応可
>>>
>>> 2. もう一つ非同期遷移のECをローダブルモジュールとして作成して
>>> 追加パッケージとしてリリースする。->1.1.0で対応可
>>>
>>> 3. もう一つ非同期遷移のECを作成してデフォルトで利用可能な
>>> ECとしてlibRTCに内蔵してしまう。->1.1.1で対応可
>>>
>>> 4. trunkのECを1.1ブランチにマージできるかどうか検討して
>>> できそうだったらやる。(でも、インターフェースが変わってるので
>>> 多分難しいでしょう。)->1.1.1で対応可
>>>
>>> OpenHRP3の中で利用するEC名の設定が簡単に変えられるのなら、
>>> 2. だとすぐ対応できるので、いいかと思いますが、そうでない場合、
>>> 1. か 3. でしょうか。。。
>>
>> ECの名称はrtc.confに書いているだけですので、変えるのは簡単
>> なのですが、1.0用と1.1用の両方を用意する必要が生じるので
>> ちょっと厄介です。
>> そこでOpenHRPでは以下のようにしようかと考えています。
>>
>> 1. ECのrateを非常に大きな値にしておき、タイムアウトにかかる
>> 時間を短縮する。(シミュレーション中はrateの値ではなく、
>> シミュレーションの時間刻みに基づいてtick()を送る)
>> 2. deactivate_component()がタイムアウトした後でtick()を送って
>> 状態遷移を起こさせる
>>
>> 以上はとりあえずの対応なので、次バージョンのリリースを
>> 早めにお願いします。
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>
>
>
> --
> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
> 統合知能研究グループ 主任研究員, 博士(工学)
> 〒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
>
> Noriaki Ando, Ph.D.
> Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
> AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
> e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
> OpenRTM-aist: http://www.openrtm.org
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
More information about the openrtm-users
mailing list