[choreonoid-users-ja 00257] Re: ControllerItem内で一時停止/再開を認識するには

中岡 慎一郎 s.nakaoka @ aist.go.jp
2017年 9月 23日 (土) 11:51:49 JST


伊藤様

産総研の中岡です。
遅くなってしまいすみません、一時停止状態の変化を検知するためのシグナルを以下のコミットで追加しました。
57d0d799a3ffd5c1aa8de8b515357f9e9469bf98

先のメールにあるように、SimulatorItemに

SignalProxy<void()> sigSimulationPaused();
SignalProxy<void()> sigSimulationResumed();

という2つのシグナルを追加しました。

また、先のメールでは、

> シグナルの接続先関数はメインスレッドで呼ばれることになりますが、そこから適当な同期処理をしてコントローラ側に通知するということになるかと思います。

と書いたのですが、今回の実装ではシミュレーションスレッドから呼ばれるようにしました。
というのも、伊藤さんのご要望ではコントローラ側で状態変化を知りたいとのことでしたので、一時停止の解除時には、その後最初にコントローラの関数(controlとか)が呼ばれる前に確実にコールバック関数が呼ばれたほうが都合がよいのではないかと思いまして。

メインスレッドから呼ばれるようにすることも可能ですので、今後そのような要望があれば、そちらにも対応できるようにするかもしれません。

On 09/01/17 17:20, 伊藤 宣博 wrote:
> 中岡様
> 
> このような特殊な事例に対応していただけるとのこと、
> 感謝申し上げます。
> ソースのアップデータを待ちまして、対応を行って
> いきたいと思います。
> 
> ありがとうございました。
> 
> On 2017/09/01 17:09, 中岡 慎一郎 wrote:
>> 伊藤様
>>
>> なるほど、少し特殊なシミュレーションをされているのですね。
>> 了解です。
>>
>> ちなみにシミュレーションの開始、終了に関しては、SimulatorItemに
>>
>> SignalProxy<void()> sigSimulationStarted();
>> SignalProxy<void()> sigSimulationFinished();
>>
>> というシグナルが用意されているのですが、停止態の変化についてはシグナルを定義していなかったことに気が付きました。
>>
>> SignalProxy<void()> sigSimulationPaused();
>> SignalProxy<void()> sigSimulationResumed();
>>
>> みたいなシグナルを作って、これによって停止状態の変化を検知することは可能かと思います。
>>
>> シグナルの接続先関数はメインスレッドで呼ばれることになりますが、そこから適当な同期処理をしてコントローラ側に通知するということになるかと思います。
>>
>> これについて、追加を検討したいと思います。


-- 
中岡 慎一郎 <s.nakaoka @ aist.go.jp>
産業技術総合研究所 知能システム研究部門
ヒューマノイド研究グループ



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