[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