[openrtm-users 02913] Re: RTC::Manager の Servant の取得について
Shin'ichiro Nakaoka
s.nakaoka @ aist.go.jp
2013年 9月 19日 (木) 14:00:30 JST
産総研の中岡です。
本件ですが、Managerを継承したクラスにstatic_castしてm_mgrservantを無理や
りゲットするという以下のようなコーディングでとりあえず出来るようになりま
した。
class ManagerEx : public RTC::Manager
{
public:
RTM::ManagerServant* servant() {
return m_mgrservant;
}
};
ManagerEx* manager =
static_cast<ManagerEx*>(RTC::Manager::init(argc, argv)));
RTM::Manager_ptr servantRef = manager->servant()->getObjRef();
if(CORBA::is_nil(servantRef)){
manager->servant()->createINSManager();
}
ただこれだと行儀がよくないので、先ほどの件についてもし問題なければ次期
バージョンで取り込んで頂けるとうれしいです。
よろしくお願いします。
(09/19/13 12:05), 中岡 慎一郎 wrote:
>
> 産総研の中岡です。
>
> 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() が返すインスタンスの変数を初期化することが出
> 来ないので、いろいろと問題が出てきます。
>
> というわけで、上記の改良について採用をご検討していただければ幸いです。
> よろしくお願いします。
>
--
Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>
More information about the openrtm-users
mailing list