[openrtm-users 02912] RTC::Manager の Servant の取得について
中岡 慎一郎
s.nakaoka @ aist.go.jp
2013年 9月 19日 (木) 12:05:56 JST
産総研の中岡です。
RTC::Manager の CORBAサーバントについて、 m_mgrservantというメンバに格納
されているようですが、これが protected になっています。
これについて、例えば
RTM::ManagerServant* servant();
のような public関数を追加して、外部からサーバントを取得できるようにして
もらえないでしょうか?
なぜこれが必要かというと、Choreonoid上でシミュレーション等を行うときに、
組み込みのPythonインタプリタからPythonスクリプトを使ってManagerにアクセ
スし、コンポーネントの操作をしています。
Managerをマスターとして起動しておけばネームサーバからManagerのCORBAオブ
ジェクトを取得してアクセスできますが、マスターは別に起動している状態で
Choreonoid上でローカルなシミュレーションを行いたい場合や、Choreonoidを複
数起動してそれぞれ別のシミュレーションを行いたい場合などに、Managerをマ
スターとして起動せずにローカルにアクセスする必要が出てきます。C++からは
普通にローカルなManagerオブジェクトにアクセスすれば良いわけですが、
Pythonからアクセスしようとすると現状ではCORBAオブジェクト経由でしかでき
ないかと思います。その場合、サーバントのCORBAオブジェクトリファレンス
(getObjRef()で取得)をPythonに渡してアクセスすることになります。
m_mgrservant は protected なので RTC::Manager を継承したクラスを作ってそ
こから m_mgrservant をゲットすれば何とかなるかとも思ったのですが、これだ
と RTC::Manager::instance() が返すインスタンスの変数を初期化することが出
来ないので、いろいろと問題が出てきます。
というわけで、上記の改良について採用をご検討していただければ幸いです。
よろしくお願いします。
--
中岡 慎一郎 <s.nakaoka @ aist.go.jp>
産業技術総合研究所 知能システム研究部門
ヒューマノイド研究グループ
More information about the openrtm-users
mailing list