ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今回も書くことなし。
ひょっとしたら10月中旬ぐらいまで誰も投稿しないのではないかと思い始めました。
そもそも10月31日締め切りが早いですし。
今回はコンポーネントオブザーバについて書いておきます。
コンポーネントオブザーバは外部からRTCの状態を監視する際に使用します。
別に周期的に外部ツールでRTCの状態を取得する方法を取ることもできますが、コンポーネントオブザーバを使用した場合RTC側から状態が変化したときにオブザーバに通知します。
コンポーネントオブザーバに関してはほとんど情報がなく、このサイトで取り上げているぐらいしか見つかりませんでした。
とりあえずPython版のサンプルで実験してみようかと思いますが、
C:\Python26\Lib\site-packages\OpenRTM_aist\ext\sdo\observer
にサンプルがあるはずなのですがComponentObserverConsumer.pyはあるのに何故かComponentObserverProvider.pyは存在しません。皆さんの環境ではどうなっているでしょうか?
とりあえずOpenRTM-aistのサイトからダウンロードできるソースコードには含まれていますのでそれをダウンロードしてください。
そして解凍したフォルダの、
OpenRTM-aist-Python-1.1.0\OpenRTM_aist\ext\sdo\observer
OpenRTM-aist-Python-1.1.0\OpenRTM_aist\ext\sdo\observer\test
のsetup.batを実行してください。
次にCOCTestRTC.pyを実行します。
するとCOCTestRTCというRTCが起動するのでこのRTCの監視を行います。
次にtestフォルダのComponentObserverProvider.pyを起動するわけですがConsoleIn0という名前のRTCを監視するようになっているので、43行目のConsoleIn0をCOCTestRTC0に変更してください。変更後ComponentObserverProvider.pyを実行してください。
その後COCTestRTCをActiveにしてみたりDeactiveにしてみたり、あるいは数値を入力せずにエンターキーを押す等してError状態にしてみたりいろいろやってみてください。
heartbeatはRTCが生存していると周期的に送信されるようです。
次にどのように使用するかを見てみます。
まずはrtc.confを見てみます。
ComponentObserver_iのupdate_status関数で状態変化時の処理を行っています。
以下でheartbeatの通知の有無、heartbeatの周期、監視する状態の指定は以下のコードで記述しているようです。
とりあえず、どのように使用するかをまとめると、
詳しい資料が見つからないので詳しい人は教えてください。
RTCのプログラミングに関してもあまり書くことがなくなってきたなあ。
今回のサンプルプログラムを見ていてそういえば実行コンテキストのコールバックに関してまだ書いたことなかったなと思ったので明日はそれを書きます。
その次からは、
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
ひょっとしたら10月中旬ぐらいまで誰も投稿しないのではないかと思い始めました。
そもそも10月31日締め切りが早いですし。
今回はコンポーネントオブザーバについて書いておきます。
コンポーネントオブザーバは外部からRTCの状態を監視する際に使用します。
別に周期的に外部ツールでRTCの状態を取得する方法を取ることもできますが、コンポーネントオブザーバを使用した場合RTC側から状態が変化したときにオブザーバに通知します。
コンポーネントオブザーバに関してはほとんど情報がなく、このサイトで取り上げているぐらいしか見つかりませんでした。
とりあえずPython版のサンプルで実験してみようかと思いますが、
C:\Python26\Lib\site-packages\OpenRTM_aist\ext\sdo\observer
にサンプルがあるはずなのですがComponentObserverConsumer.pyはあるのに何故かComponentObserverProvider.pyは存在しません。皆さんの環境ではどうなっているでしょうか?
とりあえずOpenRTM-aistのサイトからダウンロードできるソースコードには含まれていますのでそれをダウンロードしてください。
そして解凍したフォルダの、
OpenRTM-aist-Python-1.1.0\OpenRTM_aist\ext\sdo\observer
OpenRTM-aist-Python-1.1.0\OpenRTM_aist\ext\sdo\observer\test
のsetup.batを実行してください。
次にCOCTestRTC.pyを実行します。
するとCOCTestRTCというRTCが起動するのでこのRTCの監視を行います。
次にtestフォルダのComponentObserverProvider.pyを起動するわけですがConsoleIn0という名前のRTCを監視するようになっているので、43行目のConsoleIn0をCOCTestRTC0に変更してください。変更後ComponentObserverProvider.pyを実行してください。
その後COCTestRTCをActiveにしてみたりDeactiveにしてみたり、あるいは数値を入力せずにエンターキーを押す等してError状態にしてみたりいろいろやってみてください。
heartbeatはRTCが生存していると周期的に送信されるようです。
次にどのように使用するかを見てみます。
まずはrtc.confを見てみます。
manager.modules.load_path: .
manager.modules.preload: ComponentObserverConsumer
ComponentObserverConsumer.pyをあらかじめ読み込んでおきます。
するとComponentObserverConsumer.pyのComponentObserverConsumerInitが実行されます。ComponentObserverConsumerのinit関数でself._rtobjにRTCオブジェクトを入力して、self._rtobj.addPostComponentActionListenerで状態変化のリスナを設定していると思いますがよくわかりません。
多分、ComponentObserverConsumerのupdateStatus関数で
self._observer._ptr().update_status(statuskind, msg)
とすることでComponentObserverProviderのComponentObserver_iのupdate_status関数の処理が実行されて状態を取得できるのだとは思います。
とりあえずインターフェースComponentObserverを使って状態を通知しているみたいです。
次にComponentObserverProvider.pyを見てみます。ComponentObserverConsumer.pyをあらかじめ読み込んでおきます。
するとComponentObserverConsumer.pyのComponentObserverConsumerInitが実行されます。ComponentObserverConsumerのinit関数でself._rtobjにRTCオブジェクトを入力して、self._rtobj.addPostComponentActionListenerで状態変化のリスナを設定していると思いますがよくわかりません。
多分、ComponentObserverConsumerのupdateStatus関数で
self._observer._ptr().update_status(statuskind, msg)
とすることでComponentObserverProviderのComponentObserver_iのupdate_status関数の処理が実行されて状態を取得できるのだとは思います。
とりあえずインターフェースComponentObserverを使って状態を通知しているみたいです。
ComponentObserver_iのupdate_status関数で状態変化時の処理を行っています。
以下でheartbeatの通知の有無、heartbeatの周期、監視する状態の指定は以下のコードで記述しているようです。
properties = [OpenRTM_aist.NVUtil.newNV("heartbeat.enable","YES"),
OpenRTM_aist.NVUtil.newNV("heartbeat.interval","10"),
OpenRTM_aist.NVUtil.newNV("observed_status","ALL")]
とりあえず、どのように使用するかをまとめると、
- rtc.confの変更する
- ComponentObserverProvider.pyのComponentObserver_iのように状態変化時の処理を実装する
- 必要な数だけComponentObserver_iを生成して各RTCと接続する
詳しい資料が見つからないので詳しい人は教えてください。
RTCのプログラミングに関してもあまり書くことがなくなってきたなあ。
今回のサンプルプログラムを見ていてそういえば実行コンテキストのコールバックに関してまだ書いたことなかったなと思ったので明日はそれを書きます。
その次からは、
- manager
- サービスポート
- omniORB
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする