[openrtm-staff:609] Re: OpenRTM trunkバージョンでのシミュレーション用実行コンテキスト

Ando Noriaki n-ando @ aist.go.jp
2016年 11月 1日 (火) 02:16:12 JST


宮本様

安藤です

複数のRTCがアタッチされたECがうまくactivationできない問題で、

http://redmine.openrtm.org/issues/3697

のように修正して、一応こちらでもサンプルでチェックしましたが、念のため
今やっているテストも通るかどうかもチェックをお願いいたします。



2016年7月11日 12:40 宮本信彦 <n-miyamoto @ aist.go.jp>:

> ヒューマノイド研究グループ 金広様
>
>
>
>
>
> ロボットソフトウェアプラットフォーム研究チームの宮本と申します。
>
>
>
>
>
> 実行コンテキストで複数のコンポーネントを実行する際にactivateする順序によって一部のコンポーネントがACTIVE_STATE
> に遷移しない問題ですが、原因を特定できたのでご報告いたします。
>
>
>
>
>
> まず実行コンテキストにアタッチしたコンポーネントはExecutionContextWorkerクラスのm_compsという配列に追加されるのですが、
> ExecutionContextインターフェースのadd_componentで実行コンテキストにコンポーネントを追加しようとても即座には
> m_compsにコンポーネントは追加されません。
>
> この時点では別の配列に格納しておいて、updateComponentListという関数が呼び出された時点でm_compsに追加されます。
>
>
>
> コンポーネントの処理実行中にコンポーネントの追加をしないようにするために、このようになっています。
>
>
>
>
>
>
>
> > rtc1,rtc2,rtc3という順序でactivateすれば問題ないのですが、rtc3,rtc2,rtc1と
>
> > いう順序でactivateすると、rtc3とrtc2はACTIVE_STATEに遷移しません。
>
>
>
>
>
> updateComponentList関数はinvokeWorkerDoという関数で呼び出されていて、invokeWorkerDo関数は
> PeriodicExecutionContextのsvc関数で呼び出されています。
>
>
>
> ただ全てのコンポーネントがINACTIVE_STATEの場合、以下の箇所で処理が止められてしまいinvokeWorkerDo関数が実行されず
> updateComponentList関数も実行されません。
>
>
>
>
>
>
>
> int PeriodicExecutionContext::svc(void)
>
> {
>
>               (省略)
>
>
>
>           Guard guard(m_workerthread.mutex_);
>
>           while (!m_workerthread.running_)
>
>             {
>
>               m_workerthread.cond_.wait();
>
>     //ここで止められているため下のinvokeWorkerDo関数は実行されず、updateComponentList関数も実行されない
>
>     //既にアタッチしたコンポーネントをアクティブにするとsignal関数が呼び出されて下の処理が実行される
>
>             }
>
>         }
>
>
>
>         coil::TimeValue t0(coil::gettimeofday());
>
>         ExecutionContextBase::invokeWorkerDo();
>
>         ExecutionContextBase::invokeWorkerPostDo();
>
>         coil::TimeValue t1(coil::gettimeofday());
>
>
>
>
>
>
>
>
>
> 既にアタッチしてあるコンポーネントをactivateした場合、invokeWorkerDo関数が呼び出されてupdateComponentList
> 関数も呼び出されるのでコンポーネントが追加されます。
>
>
>
> rtc1をrtc2、rtc3より先にactivateした場合にはm_compsにrtc2、rtc3が追加されているのでACTIVE_STATE
> に遷移しますが、rtc2、rtc3を先にactivateした場合はこの時点でm_compsにrtc2、rtc3
> が追加されておらずコンポーネントを見つけられずに失敗します。
>
>
>
>
>
>
>
> 全てのコンポーネントがINACTIVE_STATEの時にコンポーネントを追加しても問題はないので、今後修正する予定です。
>
>
>
>
>
>
>
> よろしくお願いします。
>
>
>
>
>
>
>
> --------------------------------------------------
>
> 宮本 信彦 n-miyamoto @ aist.go.jp
>
> 産業技術総合研究所 ロボットイノベーション研究センター
>
> ロボットソフトウェアプラットフォーム研究チーム
>
> テクニカルスタッフ
>
>
>
> *From:* openrtm-staff-bounces @ openrtm.org [mailto:openrtm-staff-bounces@
> openrtm.org] *On Behalf Of *Ando Noriaki
> *Sent:* Tuesday, July 5, 2016 9:53 AM
> *To:* 金広文男 <f-kanehiro @ aist.go.jp>
> *Cc:* openrtm-staff <openrtm-staff @ openrtm.org>
> *Subject:* [openrtm-staff:538] Re: OpenRTM trunkバージョンでのシミュレーション用実行コンテキスト
>
>
>
> 金広様
>
>
>
> 安藤です
>
>
>
> それはおかしいですね。もしかするとバグかもしれません。
>
> こちらでも調べてみます。
>
>
>
> 宮本さま
>
>
>
> 講習会のところすみません。
>
> このようなケースをテストするためのサンプルコンポーネントを
>
> 作成してもらえないでしょうか?
>
> example の下に3つくらいのコンポーネントを作成して、
>
> 様々な順序で同一コンテキストにアタッチ、activate/deactivate
>
> して挙動を確認できるようなものをお願いいたします。
>
>
>
>
>
>
>
>
>
> 2016年7月4日 18:05 金広文男 <f-kanehiro @ aist.go.jp>:
>
> 安藤様、
>
> 金広です。
>
> ありがとうございます。
> 動くようになってきました。
>
> ただまだ問題があります。
> rtc1,rtc2,rtc3と3つのコンポーネントを作って、rtc1の実行コンテキストを使って
> rtc2,rtc3も直列実行するように設定すると、
> https://github.com/fkanehiro/hrpsys-base/blob/master/python/rtm.py#L454
>
> rtc1,rtc2,rtc3という順序でactivateすれば問題ないのですが、rtc3,rtc2,rtc1と
> いう順序でactivateすると、rtc3とrtc2はACTIVE_STATEに遷移しません。
> この辺りも何か作法に変更あったのでしょうか。
>
> 2016/06/29 18:22 に、"安藤慶昭" <n-ando @ aist.go.jp> を書き込みました:
>
>
> 金広様
>
>
> 安藤です
>
>
> trunkでは1.2に向けてECの構造がだいぶ変わっております。
> 詳しいECの実装方法に関しては、こちらにドキュメントがあります。
>
>
> http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/src/lib/rtm/
> ExecutionContextBase.h
>
>
>
> おそらくOpenHRPECと似たような構造だと思いますので、trunkのOpenHRPECを
> 見ていただければ参考になるのではないかと思います。
>
>
> よろしくお願いいたします。
>
>
>
>
>
> 2016年6月29日 18:00 金広文男 <f-kanehiro @ aist.go.jp>:
>
> 安藤様、
>
> 金広です。
>
> Choreonoidを用いたシミュレーションの際に、シミュレーション世界の時計に同期して
> RTCを駆動する際には、外部トリガ付きコンテキストを使い、シミュレーションのメイン
> ループからtick()を呼び出してRTCを駆動していました。
> 1.1.2ではこれが機能していますが、trunkバージョンではRTCが駆動されなくなって
> しまいました。
> trunkバージョンで同様のことを行うに当たって何か変更すべきことがあるのでしょうか?
>
> これまで使ってきた実行コンテキストは↓になります。
> https://github.com/s-nakaoka/choreonoid/blob/master/src/OpenRTMPlugin/
> ChoreonoidExecutionContext.cpp
>
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> openrtm-staff mailing list
> openrtm-staff @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-staff
>
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://www.openrtm.org/pipermail/openrtm-staff/attachments/20161101/85515b4d/attachment.html>


More information about the openrtm-staff mailing list