[openrtm-users 00556] ネームサーバの登録名の取得方法

5 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 2日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00556] ネームサーバの登録名の取得方法

中央大学の小島と申します。

コンポーネントの名前の取得方法について、2つ質問がございます。

1. 自分自身のサーバへの登録名について

RTC::RTObject_implの関数に、getInstanceName()とあり、こちらでインスタンス名は取得できるのですが、
実際にコルバのネームサービスの登録される名前の取得方法はありますか?

登録される際には、rtc.confの設定が反映された形で登録されると思うのですが、
この設定が反映された名前はRTC::RTObject_implの関数などから取得することは可能でしょうか?

※ネームサーバに登録した情報の表示や、利用を考えています。

2. 他のプログラムから、ネームサーバに登録されているコンポーネントのリストの取得方法について

ネットなどを参考に書いてみたのですが、一部うまく取得できませんでした。

rtc.conf に設定で、hogehoge/%n.rtc
というようにインスタンス化し、ネームサーバに登録すると、
hogehoge という、contextは取得できるのですが、
インスタンス化されたreferenceまでは、うまく取得することができませんでした。

コルバについては、疎いので、BindingListの使い方でももっといい方法があるのかもしれませんが
一応、自分なりに書いたコードを添付いたしますので、教えていただければ幸いです。

未定義
root
オフライン
Last seen: 2日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00557] ネームサーバの登録名の取得方法

静岡大 清水です。

> RTC::RTObject_implの関数に、getInstanceName()とあり、
こちらでインスタンス名は取得できるのですが、
> 実際にコルバのネームサービスの登録される名前の取得方法
はありますか?

RTC::RTObject_impl::getNamingNames()で取得できたように
記憶しています。

> rtc.conf に設定で、hogehoge/%n.rtc
> というようにインスタンス化し、ネームサーバに登録すると

> hogehoge という、contextは取得できるのですが、
> インスタンス化されたreferenceまでは、うまく取得するこ
とができませんでした。

私は実際にはやったことはありませんが、
RTC::CorbaNamingの実装あたりが
参考になるのではないかと思います。
ところで、referenceが取得できないというのは、
resolveができないという意味なのでしょうか?

清水

root
オフライン
Last seen: 2日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00558] ネームサーバの登録名の取得方法

静岡大 清水 様

ご教授ありがとうございます。

> RTC::RTObject_impl::getNamingNames()で取得できたように
> 記憶しています。

この関数だったのですね。ネーミングネームというのをネーミングサーバ名の取得かと
思っていたために、ためしておりませんでした。試したところ無事動作を確認することが出来ました。
ありがとうございます。

>> hogehoge という、contextは取得できるのですが、
>> インスタンス化されたreferenceまでは、うまく取得するこ
> とができませんでした。
>
> 私は実際にはやったことはありませんが、
> RTC::CorbaNamingの実装あたりが
> 参考になるのではないかと思います。

ざっとみて、listという関数がそうなのかなと思いましたが、
context自体にもリストを取得する機能があるため、
そちらを利用してみました。

ただ、もう少しソースコードをじっくり読んでみようと思います。

> ところで、referenceが取得できないというのは、
> resolveができないという意味なのでしょうか?

言い方が紛らわしくて、申し訳ございません。

RTC-linkのような表示方法ができないということを、書こうとしていました。
hogehoge/RTcomponet.rtc
というようにネームサーバに登録がされている場合、ディレクトリのようなアイコン(context)の取得は可能(hogehoge)だが、
RTComponent.rtcの部分(reference)がうまく取得できず、という意味でした。
reference,contextの概念については、サンプルソースを読んで解釈をしていたので、違っているかもしれません。

説明力不足で、うまく説明できていなかったようなので、例をまじえて書かせていただくと、
取得できた部分を表示するサンプル(前回の添付ファイル)では、実行した時に
hogehoge/RTComponent.rtc
もしくは
hogehoge
RTComponent.rtc
というように表示したいものが、
hogehoge
という部分しか取得できない現象が起こってしまったことをいっていました。
(resolveするためのネーミングサーバに登録されているコンポーネント名
の取得ができないというのが実状です)

null文字の関係で、RTC::CorbaNamingクラスで分解させないといけないのか、
表示方法が間違えていることが原因だとは思うのですが、
うまく動作してくれなかったために、お聞きすることにしました。

root
オフライン
Last seen: 2日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00559] ネームサーバの登録名の取得方法

静岡大 清水です。

> > RTC::CorbaNamingの実装あたりが
> > 参考になるのではないかと思います。
>
> ざっとみて、listという関数がそうなのかなと思いましたが

> context自体にもリストを取得する機能があるため、
> そちらを利用してみました。

RTC::CorbaNaming::destroyRecursive()が
参考になるかと思います。
階層化されたcontextを再帰的に辿るためには、
BindingIterator::next_n()ではなく、
resolveしてcontextを新たに取得し、
それに対して再度list()をする必要があるようです。

清水

root
オフライン
Last seen: 2日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00565] ネームサーバの登録名の取得方法

静岡大 清水様

中央大学の小島です。

> 階層化されたcontextを再帰的に辿るためには、
> BindingIterator::next_n()ではなく、
> resolveしてcontextを新たに取得し、
> それに対して再度list()をする必要があるようです。

なるほど。納得いたしました。
contextの下にあるものを取得するにはリストを再取得する必要があったのですね。
これですべて解決できそうです。

ご親切な、ご教授ありがとうございました。
非常に勉強になりました。ありがとうございます。

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2195
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク