[openrtm-users 01210] rtc_handle for OpenrtM-aist-1.0.0

19 posts / 0 new
Last post
root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01210] rtc_handle for OpenrtM-aist-1.0.0

皆様,

末廣@電通大です.
OpenRTM-aist-Python-1.0.0がリリースされたので,
rtcやrtc_handleの0.4.2からの移植を始めました.

rtcについては個人的に愛用していたread側のOnWriteコールバックが
なくなったことを除けば,大きな変更なしに移れそうだという感触です.

rtc_handleの方は少し困った状況になっています.
皆様のお知恵を拝借できればと思って状況を説明します.
松坂さん,栗原さんに作成して頂いたものをベースにしたとりあえずのものは
に置いてあります.

コンポーネントのactivate/deactivate/reset,
コンポーネント同士の接続/切り離し,
コンポーネントのconfigurationサービスの利用
などは使えることを確認しています.

困っている点は,
(1)ポート名に,コンポーネント名がくっついてくる.
 0.4.2では,ポート名はポート名だけだったのですが,
 1.0.0ではなぜか,コンポーネント名.ポート名の形式になっています.
 一見親切なのですが,コンポーネントを取り替えても動くプログラムを
 作ろうとすると,かえって処理が複雑になってしまいます.
 これはもとに戻す予定はないのでしょうか.
(2)'dataport.corba_cdr.inport_ref'にwriteしてもデータが送られない?
 ちゃんとconnectしたrtcからはデータが届いているのですが,
 rtc_handleからwriteしてもだめに見えます.
 PORT_OKはかえってくるのですが使い方が違うのでしょうか?
(3)'dataport.corba_cdr.outport_ref'がない.
 outportの側はobject referenceすら取得できません.

これらについて何かご存知でしたら教えて頂けると助かります.
まだサービスポートについては調べていませんが,
どうなるか少し心配しています.

ポートへのアクセスを全面的に設計し直す必要があるのでしょうか.

以上,よろしくお願いします.

Undefined
root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01211] rtc_handle for OpenrtM-aist-1.0.0

末廣様

産総研のジェフです。

rtc_handleを1.0にあわせることをお疲れさまです。確かに0.4.2から詳しいとこ
ろはよく変わりました。

1)rtctreeの場合、APIの中にポート名からコンポーネント名を消します。参照
はこのファイルの214行目です。

http://github.com/gbiggs/rtctree/blob/3395f0f6c0bd21329bf11ee20c85d5fb8b50fba2/rtctree/ports.py

例えば、rtcshellはポートを使う時、rtcshellのコードはより綺麗になります。

2)接続されてないポートにデータを書けないようです。そのために、rtcshell
でdummy connectionを作ってデータを書きます。参照はこのファイルの79行目
です。

http://github.com/gbiggs/rtcshell/blob/6ee7c982edc3e82282f5dee48ba6c87a4d7cab74/rtcshell/rtinject.py

こうなった理由はポートとトランスポートをもっと分かれたようにするためにだ
と思います。

ところで、rtcshellをshellだけじゃなくて、Pythonからも呼べます。例えば、

shellの場合:
$ rtinject ConsoleOut0.rtc:in 'RTC.TimedLong(RTC.Time(0, 0), 5)'

Pythonの場合:
rtcshell.rtinject.main(argv=['ConsoleOut0.rtc:in',
'RTC.TimedLong(RTC.Time(0, 0), 5)'])

3)この問題について思ったことはないんですが、rtctreeの場合、できます。
ちょっと複雑ですけど。コネクションから取りたい場合はrtctreeがAPIの中でコ
ネクションのポートを探して、コネクションのオブジェクトに入れます。ポート
の場合は既にCORBAオブジェクトがあるので、そのCORBAオブジェクトから取れます。

以上、よろしくお願いいたします。

On 17/05/10 19:47, ts wrote:
> 皆様,
>
> 末廣@電通大です.
> OpenRTM-aist-Python-1.0.0がリリースされたので,
> rtcやrtc_handleの0.4.2からの移植を始めました.
>
> rtcについては個人的に愛用していたread側のOnWriteコールバックが
> なくなったことを除けば,大きな変更なしに移れそうだという感触です.
>
> rtc_handleの方は少し困った状況になっています.
> 皆様のお知恵を拝借できればと思って状況を説明します.
> 松坂さん,栗原さんに作成して頂いたものをベースにしたとりあえずのものは
> に置いてあります.
>
> コンポーネントのactivate/deactivate/reset,
> コンポーネント同士の接続/切り離し,
> コンポーネントのconfigurationサービスの利用
> などは使えることを確認しています.
>
> 困っている点は,
> (1)ポート名に,コンポーネント名がくっついてくる.
>  0.4.2では,ポート名はポート名だけだったのですが,
>  1.0.0ではなぜか,コンポーネント名.ポート名の形式になっています.
>  一見親切なのですが,コンポーネントを取り替えても動くプログラムを
>  作ろうとすると,かえって処理が複雑になってしまいます.
>  これはもとに戻す予定はないのでしょうか.
> (2)'dataport.corba_cdr.inport_ref'にwriteしてもデータが送られない?
>  ちゃんとconnectしたrtcからはデータが届いているのですが,
>  rtc_handleからwriteしてもだめに見えます.
>  PORT_OKはかえってくるのですが使い方が違うのでしょうか?
> (3)'dataport.corba_cdr.outport_ref'がない.
>  outportの側はobject referenceすら取得できません.
>
> これらについて何かご存知でしたら教えて頂けると助かります.
> まだサービスポートについては調べていませんが,
> どうなるか少し心配しています.
>
> ポートへのアクセスを全面的に設計し直す必要があるのでしょうか.
>
> 以上,よろしくお願いします.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01212] rtc_handle for OpenrtM-aist-1.0.0

ジェフ様,

末廣です.
rtctreeはきれいに書かれていますね.
非常に参考になります.
ありがとうございます.

(10/05/17 20:31), Geoffrey Biggs wrote:
> 1)rtctreeの場合、APIの中にポート名からコンポーネント名を消します。参照
> はこのファイルの214行目です。

消して使った方が便利ですよね.
それなのになぜコンポーネント名を付け足したのでしょうか?
その方が便利というユースケースがあるのでしょうか.
そこが知りたいところです.と書いたけどこれがそれ?

> 例えば、rtcshellはポートを使う時、rtcshellのコードはより綺麗になります。

> 2)接続されてないポートにデータを書けないようです。そのために、rtcshell
> でdummy connectionを作ってデータを書きます。参照はこのファイルの79行目
> です。

dummy connectionで良いならあまり手間なくできそうですね.
正式にDataPortを作る必要があるのかなと心配していました.

> 3)この問題について思ったことはないんですが、rtctreeの場合、できます。
> ちょっと複雑ですけど。コネクションから取りたい場合はrtctreeがAPIの中でコ
> ネクションのポートを探して、コネクションのオブジェクトに入れます。ポート
> の場合は既にCORBAオブジェクトがあるので、そのCORBAオブジェクトから取れます。

ダミーでコネクションを作って情報を得ているのですが,
それが失敗しているのかな.connectorの作り方が違うのかな.
rtctreeを参考に手直ししてみます.

ありがとうございました.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01213] rtc_handle for OpenrtM-aist-1.0.0

末廣先生

安藤です

2010年5月17日22:42 ts :
> ジェフ様,
>
> 末廣です.
> rtctreeはきれいに書かれていますね.
> 非常に参考になります.
> ありがとうございます.
>
> (10/05/17 20:31), Geoffrey Biggs wrote:
>> 1)rtctreeの場合、APIの中にポート名からコンポーネント名を消します。参照
>> はこのファイルの214行目です。
>
> 消して使った方が便利ですよね.
> それなのになぜコンポーネント名を付け足したのでしょうか?
> その方が便利というユースケースがあるのでしょうか.
> そこが知りたいところです.と書いたけどこれがそれ?

ポート名にコンポーネント名を追加したのは、複合コンポーネントを
作成する際に、ポートの公開・非公開を設定するために、
ポート名ができるだけ一意になるようにしたかったためそのようにしました。

#コンポーネント名をつけても、同一の名前のRTCが2つ複合コンポーネント
#内に存在する場合には、これでも十分ではないのですが。。。

rtc_handleで扱う際には、コンポーネント名を削ってもかまわないと思うのですが
複合コンポーネントを扱いたい場合に、ポート名が簡単に衝突して、やはり
困るのではないでしょうか?

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01214] rtc_handle for OpenrtM-aist-1.0.0

安藤様,

末廣です.

(10/05/17 23:38), Ando Noriaki wrote:

> ポート名にコンポーネント名を追加したのは、複合コンポーネントを
> 作成する際に、ポートの公開・非公開を設定するために、
> ポート名ができるだけ一意になるようにしたかったためそのようにしました。
>
> #コンポーネント名をつけても、同一の名前のRTCが2つ複合コンポーネント
> #内に存在する場合には、これでも十分ではないのですが。。。
>
> rtc_handleで扱う際には、コンポーネント名を削ってもかまわないと思うのですが
> 複合コンポーネントを扱いたい場合に、ポート名が簡単に衝突して、やはり
> 困るのではないでしょうか?

私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
実装の問題と考えていました.
すなわち,1つのコンポーネントの中で名前の衝突はないということです.
したがって複合コンポーネントを作る際に外から見たら一意になるように
名前を付け替えるというように考えていました.

同じカテゴリーのコンポーネントのポートは同じ名前でアクセスできる方が
便利ではないでしょうか.

ご検討よろしくお願いします.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01215] rtc_handle for OpenrtM-aist-1.0.0

安藤です

ご意見ありがとうございます。

> 末廣です.
>
> (10/05/17 23:38), Ando Noriaki wrote:
>
>> ポート名にコンポーネント名を追加したのは、複合コンポーネントを
>> 作成する際に、ポートの公開・非公開を設定するために、
>> ポート名ができるだけ一意になるようにしたかったためそのようにしました。
>>
>> #コンポーネント名をつけても、同一の名前のRTCが2つ複合コンポーネント
>> #内に存在する場合には、これでも十分ではないのですが。。。
>>
>> rtc_handleで扱う際には、コンポーネント名を削ってもかまわないと思うのですが
>> 複合コンポーネントを扱いたい場合に、ポート名が簡単に衝突して、やはり
>> 困るのではないでしょうか?
>
> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
> 実装の問題と考えていました.
> すなわち,1つのコンポーネントの中で名前の衝突はないということです.

すみません。実装の問題というのはどういう意味なのか教えていただけ
ますでしょうか?

> したがって複合コンポーネントを作る際に外から見たら一意になるように
> 名前を付け替えるというように考えていました.

それも一つの案としてありかと思いますが、現状、標準インターフェース
の定義上、外部からポートの名前を動的に変更する方法がないので、
コンポーネント名を付加する方法をとりました。

細かい話ですが、ポートのプロファイルは2つの方法で取得できます。
1) RTObject::get_component_profile() から ComponentProfile::port_profiles
2) PortService::get_port_profile() から PortProfile

1) は、複合コンポーネントの場合、port_profileを書き換えて返すことができるので
末廣さんがおっしゃるようにポート名を動的に変更可能です。

2) は、最もオーバーヘッドの少ない方法で実装するなら、子RTCのポートを
そのまま親の複合RTCが参照のみ保持して、自分のポートのように
扱うことになると思いますが、その場合はポートは元々のRTCがつけた
名前を返すのみで、親の複合RTCからは一切触れません。

> 同じカテゴリーのコンポーネントのポートは同じ名前でアクセスできる方が
> 便利ではないでしょうか.

これについては、検討事項とさせてください。
この変更は、ミドルウエア、ツールなど広範囲に影響があるので、
少なくともver.1.1以降になります。

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01216] rtc_handle for OpenrtM-aist-1.0.0

安藤様,

末廣です.

(10/05/18 1:33), Ando Noriaki wrote:

>> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
>> 実装の問題と考えていました.
>> すなわち,1つのコンポーネントの中で名前の衝突はないということです.
>
> すみません。実装の問題というのはどういう意味なのか教えていただけ
> ますでしょうか?

ポート名が現状のように,コンポート名.ポート名と名付けられる
としても,複合コンポーネントの各ポートの名称は,
複合コンポーネント名.ポート名となるべきではないかということです.

内部コンポーネント名.ポート名では,複合コンポーネントの
内部構造が変わるたびにポート名が変わってしまいますよね.
困りませんか?

また今の仕様だと,コンポート名というのがコンポーネントの
インスタンス名になっているのでインスタンスごとにポート名が
違うというのもやりにくくはないですか?
こちらに関しては,プログラム的にはインスタンス名を削る
だけですむのでまだよいのですが.

ご検討よろしくお願いします.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01218] rtc_handle for OpenrtM-aist-1.0.0

末廣様

安藤です

> (10/05/18 1:33), Ando Noriaki wrote:
>
>>> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
>>> 実装の問題と考えていました.
>>> すなわち,1つのコンポーネントの中で名前の衝突はないということです.
>>
>> すみません。実装の問題というのはどういう意味なのか教えていただけ
>> ますでしょうか?
>
> ポート名が現状のように,コンポート名.ポート名と名付けられる
> としても,複合コンポーネントの各ポートの名称は,
> 複合コンポーネント名.ポート名となるべきではないかということです.
>
> 内部コンポーネント名.ポート名では,複合コンポーネントの
> 内部構造が変わるたびにポート名が変わってしまいますよね.
> 困りませんか?

現在の仕様では、
・ポート名は<もともとのownerRTC>.<ポート名>
・ポート名は複合化されても変わらない(変更できない)
・複合コンポーネントの親は、ポートのリファレンスを保持するだけで
 実際の管理はもともとの親が行う

となっていますので、上記の問題は起こりません。
ただし、複合コンポーネントのポートが子コンポーネント名.ポート名
となるのは、少々すっきりしないのもわかります。
一方で、複合コンポーネントをどんなに階層化しても、
もともとそのポートが何のどういうポートであるか、名前から
ある程度分かるという利点もあります。

> また今の仕様だと,コンポート名というのがコンポーネントの
> インスタンス名になっているのでインスタンスごとにポート名が
> 違うというのもやりにくくはないですか?
> こちらに関しては,プログラム的にはインスタンス名を削る
> だけですむのでまだよいのですが.

確かに、この仕様のために、実装が若干ややこしくなっているのは
否めません。ただし、複合コンポーネントで、ポート名がぶつかるケース
に対処するうまい方法が思いつきませんでした。

rtc_handleで仮に複合コンポーネントの作成、分解や、ポートの
公開、非公開を制御するAPIを提供するとしたら、末廣さんなら
どのようにしますか?

前提として、以下の制約および可能性があります。

・ポート名は基本的には外部からは変更できない(内部からはできる)
PortProfile は2つの方法で取得される
1) RTObject::get_component_profile() から ComponentProfile::port_profiles
2) PortService::get_port_profile() から PortProfile
前者は複合RTCの親ですり替えることは可能だが、後者は難しいので
・ポートのownerも基本的には外部から変更できない(変更されることはない)
・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
formal/08-04-04 p.65
Semantics
Ports owned by an RTC are distinguished by their names.
Therefore, this name should be unique within the target RTC.
 とある。

これらの前提を考えると、現在の実装のようにポート名を最初から
できるだけ一意になるように付ける、というのが実装的にもシンプルで
ベターな選択であると私は考えています。

上記の制約の上で、ポート名を純粋にポート名だけとして、
かつ複合コンポーネント等にもうまく対処できる方法を思いついた方が
いらっしゃいましたら、教えていただけないでしょうか?

#最終手段としてOMGでRTFを立ち上げて仕様を変えてしまう
#というのもありかもしれませんが。。。。

ジェフさん

> 安藤様
>
> ジェフです。
>
> rtctreeにとって、ポートはいつもコンポーネントかコネクタから取ります。コ
> ンポーネントの場合、もうどのコンポーネントからか分かるから問題ありませ
> ん。コネクタの場合、rtctreeは自動的にポートのownerを探して、その情報もも
> らいます。

了解です。ツールの方でうまく対処していただければと思います。
Pythonなら正規表現も簡単に使えますし。。。。

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01219] rtc_handle for OpenrtM-aist-1.0.0

安藤様,

末廣です.

たとえば,現在値と目標値を受けて制御を行うコンポーネントを
考えましょう.そのコンポーネントの入力ポートを,
th_cur, th_refとか呼びたいわけです.

それぞれの入力に平滑化のフィルタを入れるために,
inとoutをもつフィルタコンポーネントを使って
複合コンポーネント化したとします.

するとそのポート名は,
comp0.inとcomp1.inになるのだと思うのですが
そのどちらがth_curでどちらがth_refなのでしょうか?
その情報はどこに保持されているのでしょうか?

ちゃんとth_cur, th_refという名前をつけましょうというのが,
以下のOMG仕様の意図していることだと思うのですが違いますか?

> ・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
> formal/08-04-04 p.65
> Semantics
> Ports owned by an RTC are distinguished by their names.
> Therefore, this name should be unique within the target RTC.
>  とある。

名前で区別できる(機能も含めて)というのは,そういうことなのでは?

実装上の制約はあるのかもしれませんが,この辺は重要な議論だと思います.

ご検討よろしくお願いします.

(10/05/18 9:37), Ando Noriaki wrote:
> 末廣様
>
> 安藤です
>
>> (10/05/18 1:33), Ando Noriaki wrote:
>>
>>>> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
>>>> 実装の問題と考えていました.
>>>> すなわち,1つのコンポーネントの中で名前の衝突はないということです.
>>>
>>> すみません。実装の問題というのはどういう意味なのか教えていただけ
>>> ますでしょうか?
>>
>> ポート名が現状のように,コンポート名.ポート名と名付けられる
>> としても,複合コンポーネントの各ポートの名称は,
>> 複合コンポーネント名.ポート名となるべきではないかということです.
>>
>> 内部コンポーネント名.ポート名では,複合コンポーネントの
>> 内部構造が変わるたびにポート名が変わってしまいますよね.
>> 困りませんか?
>
> 現在の仕様では、
> ・ポート名は<もともとのownerRTC>.<ポート名>
> ・ポート名は複合化されても変わらない(変更できない)
> ・複合コンポーネントの親は、ポートのリファレンスを保持するだけで
>  実際の管理はもともとの親が行う
>
> となっていますので、上記の問題は起こりません。
> ただし、複合コンポーネントのポートが子コンポーネント名.ポート名
> となるのは、少々すっきりしないのもわかります。
> 一方で、複合コンポーネントをどんなに階層化しても、
> もともとそのポートが何のどういうポートであるか、名前から
> ある程度分かるという利点もあります。
>
>> また今の仕様だと,コンポート名というのがコンポーネントの
>> インスタンス名になっているのでインスタンスごとにポート名が
>> 違うというのもやりにくくはないですか?
>> こちらに関しては,プログラム的にはインスタンス名を削る
>> だけですむのでまだよいのですが.
>
> 確かに、この仕様のために、実装が若干ややこしくなっているのは
> 否めません。ただし、複合コンポーネントで、ポート名がぶつかるケース
> に対処するうまい方法が思いつきませんでした。
>
> rtc_handleで仮に複合コンポーネントの作成、分解や、ポートの
> 公開、非公開を制御するAPIを提供するとしたら、末廣さんなら
> どのようにしますか?
>
> 前提として、以下の制約および可能性があります。
>
> ・ポート名は基本的には外部からは変更できない(内部からはできる)
> PortProfile は2つの方法で取得される
> 1) RTObject::get_component_profile() から ComponentProfile::port_profiles
> 2) PortService::get_port_profile() から PortProfile
> 前者は複合RTCの親ですり替えることは可能だが、後者は難しいので
> ・ポートのownerも基本的には外部から変更できない(変更されることはない)
> ・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
> formal/08-04-04 p.65
> Semantics
> Ports owned by an RTC are distinguished by their names.
> Therefore, this name should be unique within the target RTC.
>  とある。
>
> これらの前提を考えると、現在の実装のようにポート名を最初から
> できるだけ一意になるように付ける、というのが実装的にもシンプルで
> ベターな選択であると私は考えています。
>
> 上記の制約の上で、ポート名を純粋にポート名だけとして、
> かつ複合コンポーネント等にもうまく対処できる方法を思いついた方が
> いらっしゃいましたら、教えていただけないでしょうか?
>
> #最終手段としてOMGでRTFを立ち上げて仕様を変えてしまう
> #というのもありかもしれませんが。。。。
>
> ジェフさん
>
>> 安藤様
>>
>> ジェフです。
>>
>> rtctreeにとって、ポートはいつもコンポーネントかコネクタから取ります。コ
>> ンポーネントの場合、もうどのコンポーネントからか分かるから問題ありませ
>> ん。コネクタの場合、rtctreeは自動的にポートのownerを探して、その情報もも
>> らいます。
>
> 了解です。ツールの方でうまく対処していただければと思います。
> Pythonなら正規表現も簡単に使えますし。。。。
>
>

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01227] rtc_handle for OpenrtM-aist-1.0.0

安藤様,皆様,

末廣です.
前の例では,ポート名がユニークであっても
今の形ではポートをちゃんと使える形で区別できない
という例を挙げました.

今回は逆に無駄にユニークであるために不便な例を挙げます.
「無駄に」というのは,本来コンポーネント内でユニークであれば
良いのに,複数のコンポーネントにまたがってユニークにしよう
としている点です.

私は,ロボットアームの制御プログラムをRTC化していますが,
そこでは,ロボットアームRTCがvelという名前の関節角速度
指令値を受け取るポートを持っていれば入れ替えて使うことが
できるようになっています.
それがXXX.velとなるとそれを操作するプログラムが非常に
書きにくくなります.

もちろんXXX.を削るプログラムが書けないわけではないのですが
おかしくありませんか?
個々のRTCはそれぞれの名前空間を持つべきです.
それに対して,ツール側ででXXX.velとしてアクセスするような
シンタックスシュガーをサポートするのは構いませんが
RTC内部での名前はvelのままであるのが普通ではないでしょうか.

仕様を作成したご本人を前にしてなんなのですが,,,
Semantics
(1) Ports owned by an RTC are distinguished by their names.
(2) Therefore, this name should be unique within the target RTC.

(1)を満たすために(2)でなくてはいけないと言っているのに,
今のやり方は(2)は満たしているが(1)を満たしていないという
抜け殻状態になっていませんか?

ご検討よろしくお願いします.

(10/05/18 12:38), ts wrote:
> 安藤様,
>
> 末廣です.
>
> たとえば,現在値と目標値を受けて制御を行うコンポーネントを
> 考えましょう.そのコンポーネントの入力ポートを,
> th_cur, th_refとか呼びたいわけです.
>
> それぞれの入力に平滑化のフィルタを入れるために,
> inとoutをもつフィルタコンポーネントを使って
> 複合コンポーネント化したとします.
>
> するとそのポート名は,
> comp0.inとcomp1.inになるのだと思うのですが
> そのどちらがth_curでどちらがth_refなのでしょうか?
> その情報はどこに保持されているのでしょうか?
>
> ちゃんとth_cur, th_refという名前をつけましょうというのが,
> 以下のOMG仕様の意図していることだと思うのですが違いますか?
>
>> ・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
>> formal/08-04-04 p.65
>> Semantics
>> Ports owned by an RTC are distinguished by their names.
>> Therefore, this name should be unique within the target RTC.
>>  とある。
>
> 名前で区別できる(機能も含めて)というのは,そういうことなのでは?
>
> 実装上の制約はあるのかもしれませんが,この辺は重要な議論だと思います.
>
> ご検討よろしくお願いします.
>
>
> (10/05/18 9:37), Ando Noriaki wrote:
>> 末廣様
>>
>> 安藤です
>>
>>> (10/05/18 1:33), Ando Noriaki wrote:
>>>
>>>>> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
>>>>> 実装の問題と考えていました.
>>>>> すなわち,1つのコンポーネントの中で名前の衝突はないということです.
>>>>
>>>> すみません。実装の問題というのはどういう意味なのか教えていただけ
>>>> ますでしょうか?
>>>
>>> ポート名が現状のように,コンポート名.ポート名と名付けられる
>>> としても,複合コンポーネントの各ポートの名称は,
>>> 複合コンポーネント名.ポート名となるべきではないかということです.
>>>
>>> 内部コンポーネント名.ポート名では,複合コンポーネントの
>>> 内部構造が変わるたびにポート名が変わってしまいますよね.
>>> 困りませんか?
>>
>> 現在の仕様では、
>> ・ポート名は<もともとのownerRTC>.<ポート名>
>> ・ポート名は複合化されても変わらない(変更できない)
>> ・複合コンポーネントの親は、ポートのリファレンスを保持するだけで
>>  実際の管理はもともとの親が行う
>>
>> となっていますので、上記の問題は起こりません。
>> ただし、複合コンポーネントのポートが子コンポーネント名.ポート名
>> となるのは、少々すっきりしないのもわかります。
>> 一方で、複合コンポーネントをどんなに階層化しても、
>> もともとそのポートが何のどういうポートであるか、名前から
>> ある程度分かるという利点もあります。
>>
>>> また今の仕様だと,コンポート名というのがコンポーネントの
>>> インスタンス名になっているのでインスタンスごとにポート名が
>>> 違うというのもやりにくくはないですか?
>>> こちらに関しては,プログラム的にはインスタンス名を削る
>>> だけですむのでまだよいのですが.
>>
>> 確かに、この仕様のために、実装が若干ややこしくなっているのは
>> 否めません。ただし、複合コンポーネントで、ポート名がぶつかるケース
>> に対処するうまい方法が思いつきませんでした。
>>
>> rtc_handleで仮に複合コンポーネントの作成、分解や、ポートの
>> 公開、非公開を制御するAPIを提供するとしたら、末廣さんなら
>> どのようにしますか?
>>
>> 前提として、以下の制約および可能性があります。
>>
>> ・ポート名は基本的には外部からは変更できない(内部からはできる)
>> PortProfile は2つの方法で取得される
>> 1) RTObject::get_component_profile() から ComponentProfile::port_profiles
>> 2) PortService::get_port_profile() から PortProfile
>> 前者は複合RTCの親ですり替えることは可能だが、後者は難しいので
>> ・ポートのownerも基本的には外部から変更できない(変更されることはない)
>> ・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
>> formal/08-04-04 p.65
>> Semantics
>> Ports owned by an RTC are distinguished by their names.
>> Therefore, this name should be unique within the target RTC.
>>  とある。
>>
>> これらの前提を考えると、現在の実装のようにポート名を最初から
>> できるだけ一意になるように付ける、というのが実装的にもシンプルで
>> ベターな選択であると私は考えています。
>>
>> 上記の制約の上で、ポート名を純粋にポート名だけとして、
>> かつ複合コンポーネント等にもうまく対処できる方法を思いついた方が
>> いらっしゃいましたら、教えていただけないでしょうか?
>>
>> #最終手段としてOMGでRTFを立ち上げて仕様を変えてしまう
>> #というのもありかもしれませんが。。。。
>>
>> ジェフさん
>>
>>> 安藤様
>>>
>>> ジェフです。
>>>
>>> rtctreeにとって、ポートはいつもコンポーネントかコネクタから取ります。コ
>>> ンポーネントの場合、もうどのコンポーネントからか分かるから問題ありませ
>>> ん。コネクタの場合、rtctreeは自動的にポートのownerを探して、その情報もも
>>> らいます。
>>
>> 了解です。ツールの方でうまく対処していただければと思います。
>> Pythonなら正規表現も簡単に使えますし。。。。
>>
>>
>
>

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01228] Port Name ( rtc_handle for OpenrtM-aist-

安藤様,皆様,

末廣です.

この問題は,複合コンポーネントのポートを
元のコンポーネントのポートを並べるだけで
すませたいということから来ているということ
で了解しました.

(10/05/18 9:37), Ando Noriaki wrote:

> rtc_handleで仮に複合コンポーネントの作成、分解や、ポートの
> 公開、非公開を制御するAPIを提供するとしたら、末廣さんなら
> どのようにしますか?

rtc_handleは,コンポーネントを使う側なので
そこは考えていませんでした.
使う側としては,複合コンポーネントだろうと普通の
コンポーネントだろうと区別なく「外部仕様」に従って
ポートにアクセスできるようにします.

> 上記の制約の上で、ポート名を純粋にポート名だけとして、
> かつ複合コンポーネント等にもうまく対処できる方法を思いついた方が
> いらっしゃいましたら、教えていただけないでしょうか?

うまい方法かどうかは分かりませんが,
私なら mapped port を作って,ポート名と
オリジナルのポートへのポインタを持たせます.

いかがでしょうか?

ご検討よろしくお願いします.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01230] Port Name ( rtc_handle for OpenrtM-aist

末廣先生、皆さま

安藤です

お返事ありがとうございます。

> 安藤様,皆様,
>
> 末廣です.
>
> この問題は,複合コンポーネントのポートを
> 元のコンポーネントのポートを並べるだけで
> すませたいということから来ているということ
> で了解しました.
>
> (10/05/18 9:37), Ando Noriaki wrote:
>
>> rtc_handleで仮に複合コンポーネントの作成、分解や、ポートの
>> 公開、非公開を制御するAPIを提供するとしたら、末廣さんなら
>> どのようにしますか?
>
> rtc_handleは,コンポーネントを使う側なので
> そこは考えていませんでした.
> 使う側としては,複合コンポーネントだろうと普通の
> コンポーネントだろうと区別なく「外部仕様」に従って
> ポートにアクセスできるようにします.

現在1.0で提供している複合コンポーネントは、最終形ではないのですが、
今後作成する何種類かの複合コンポーネントは、これをベースにしていこうと考えています。

で、現在の複合コンポーネントですが、基本的にはSDOのOrganization
を利用する形で実装されています。したがって、複合コンポーネントの
Organizationに対してaddすると子RTCを追加できるようになっています。
その際、子の元のECはstopさせ、親のECをアタッチするといったことを
内部的に行っています。
#この仕様自体は、複合RTCの種類によって変わってくると思いますが。

ただし、SDOのOrganizationにはポートをハンドリングするオペレーション
はありませんので、子のどのポートを外部に見せるかは、親のConfiguration
で操作するようになっています。

>> 上記の制約の上で、ポート名を純粋にポート名だけとして、
>> かつ複合コンポーネント等にもうまく対処できる方法を思いついた方が
>> いらっしゃいましたら、教えていただけないでしょうか?
>
> うまい方法かどうかは分かりませんが,
> 私なら mapped port を作って,ポート名と
> オリジナルのポートへのポインタを持たせます.
>
> いかがでしょうか?

静的な複合コンポーネントなら、その方法であれば
特別な処理を全部複合コンポーネントにまとめられるのでいいですね。

ただし、その方法でも、外部からポート名を変更することができない
という制約を回避できないのではないでしょうか?
インターフェースを拡張するのであれば可能ですが。

以前、セックの大和田さんからご質問のあった件でも、
あとからポート名を変更したいという要望がありましたので、
何かいい方法がないか考えてみたいと思います。
いちばん簡単なのは、隠しconfigurationパラメータで
変更する方法ですかね。

どちらにしろ、ポート名はver.1.1ではポート名からインスタンス名を
削除する方向で考えたいと思います。

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01217] rtc_handle for OpenrtM-aist-1.0.0

安藤様

ジェフです。

rtctreeにとって、ポートはいつもコンポーネントかコネクタから取ります。コ
ンポーネントの場合、もうどのコンポーネントからか分かるから問題ありませ
ん。コネクタの場合、rtctreeは自動的にポートのownerを探して、その情報もも
らいます。

On 17/05/10 23:38, Ando Noriaki wrote:
> rtc_handleで扱う際には、コンポーネント名を削ってもかまわないと思うのですが
> 複合コンポーネントを扱いたい場合に、ポート名が簡単に衝突して、やはり
> 困るのではないでしょうか?

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01229] rtc_handle for OpenrtM-aist-1.0.0

ジェフ様,皆様,

末廣です.

>> (2)'dataport.corba_cdr.inport_ref'にwriteしてもデータが送られない?
(10/05/17 20:31), Geoffrey Biggs wrote:
> 2)接続されてないポートにデータを書けないようです。そのために、rtcshell
> でdummy connectionを作ってデータを書きます。参照はこのファイルの79行目
> です。

ありがとうございます.
もともとRtcInportに持たせておいたdummy connectorを接続することで
データが送れることを確認しました.

>> (3)'dataport.corba_cdr.outport_ref'がない.
>>  outportの側はobject referenceすら取得できません.
> 3)この問題について思ったことはないんですが、rtctreeの場合、できます。
> ちょっと複雑ですけど。コネクションから取りたい場合はrtctreeがAPIの中でコ
> ネクションのポートを探して、コネクションのオブジェクトに入れます。ポート
> の場合は既にCORBAオブジェクトがあるので、そのCORBAオブジェクトから取れます。

こちらは,そもそもoutport側のreadさせてくれるオブジェクトが
なくなっているように見えます.(以前は簡易pullができたのに,,,)

つまり,inportを作ってサブスクライブしないとデータを送ってくれない.
ジェフさんも,rtprintではrtcを作って接続していますよね.

rtc_handleでは中断していたPipeオブジェクトを完成させなくては
いけないということかな.少しトライしてみます.

rtctree, rtcshellはいろいろと参考になります.
ありがとうございます.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01231] rtc_handle for OpenrtM-aist-1.0.0

安藤です

2010年5月20日18:41 ts :
> ジェフ様,皆様,
>
> 末廣です.
>
>>> (2)'dataport.corba_cdr.inport_ref'にwriteしてもデータが送られない?
> (10/05/17 20:31), Geoffrey Biggs wrote:
>> 2)接続されてないポートにデータを書けないようです。そのために、rtcshell
>> でdummy connectionを作ってデータを書きます。参照はこのファイルの79行目
>> です。
>
> ありがとうございます.
> もともとRtcInportに持たせておいたdummy connectorを接続することで
> データが送れることを確認しました.
>
>>> (3)'dataport.corba_cdr.outport_ref'がない.
>>> outportの側はobject referenceすら取得できません.
>> 3)この問題について思ったことはないんですが、rtctreeの場合、できます。
>> ちょっと複雑ですけど。コネクションから取りたい場合はrtctreeがAPIの中でコ
>> ネクションのポートを探して、コネクションのオブジェクトに入れます。ポート
>> の場合は既にCORBAオブジェクトがあるので、そのCORBAオブジェクトから取れます。
>
> こちらは,そもそもoutport側のreadさせてくれるオブジェクトが
> なくなっているように見えます.(以前は簡易pullができたのに,,,)
>
> つまり,inportを作ってサブスクライブしないとデータを送ってくれない.
> ジェフさんも,rtprintではrtcを作って接続していますよね.

1.0でもPull型通信はサポートしています。
dataflow type をPullにして接続すると、OutPortCdrオブジェクトの
リファレンスを取得することができます。

ちなみに1.0では、色々と理由がありまして、接続の際にdata flowtype に応じて
InPortCdr または OutPortCdr オブジェクトを動的に生成するようにしています。

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01235] rtc_handle for OpenrtM-aist-1.0.0

安藤様,皆様,

末廣です.

情報ありがとうございます.
無事,InPortへの書き込み,OutPortからの
読み出しができるようになりました.

にあります.開発中ですがよろしければお使いください.

OutPortからのreadは,バッファが空のときNoneが戻ります.
Noneでない場合はTimed dataなので xxx.dataとしてデータ部を
取り出して使って下さい.

(10/05/20 19:00), Ando Noriaki wrote:
>
> 1.0でもPull型通信はサポートしています。
> dataflow type をPullにして接続すると、OutPortCdrオブジェクトの
> リファレンスを取得することができます。

0.4.2でのデフォールトを'push'にしてあったので
そのままでconnectorを作っていたからだめだったのですね.

> ちなみに1.0では、色々と理由がありまして、接続の際にdata flowtype に応じて
> InPortCdr または OutPortCdr オブジェクトを動的に生成するようにしています。

接続のときのpropertiesの指定方法を,まだ良く理解していないので
rtc_handleを使いながら調整して行く予定です.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01236] rtc_handle for OpenrtM-aist-1.0.0

末廣様

ジェフです。

propertiesについて、ただヒントですが、rtcshellのrtcon及びrtctreeの
port.pyのconnect()を見たら、手伝えるでしょうかな。

On 21/05/10 17:32, ts wrote:
> 接続のときのpropertiesの指定方法を,まだ良く理解していないので
> rtc_handleを使いながら調整して行く予定です.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01237] rtc_handle for OpenrtM-aist-1.0.0

末廣です.

ジェフさん,ありがとうございます.
その部分はrtc_handleもほぼ同じことを
やっているのでだいたい分かります.

よく分からないのは,どんなpropertyがあるのか,
どう使うのか,どうなるのか,などです.
今はOutPortBase.pyを見ながらいろいろ試して見ているところです.

たとえば,buffer.read.empty_policyをlastにするとどうなるのか,
思ったようにならないけど何がいけないのか,といったことです.

バッファサイズは,'dataport.buffer.length':'1'という形で,
「1」を文字列で与えれば指定できることが分かりました.

'dataport.buffer.type':'nullbuffer'はまだ使えないのですよね.

そういう情報はどこに蓄えられている,
もしくは蓄えていったら良いのでしょうか?

(10/05/21 17:41), Geoffrey Biggs wrote:
> 末廣様
>
> ジェフです。
>
> propertiesについて、ただヒントですが、rtcshellのrtcon及びrtctreeの
> port.pyのconnect()を見たら、手伝えるでしょうかな。
>
>
>
> On 21/05/10 17:32, ts wrote:
>> 接続のときのpropertiesの指定方法を,まだ良く理解していないので
>> rtc_handleを使いながら調整して行く予定です.

root
Offline
Last seen: 1 day 10 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01238] rtc_handle for OpenrtM-aist-1.0.0

末廣先生

安藤です

2010年5月21日19:04 ts :
> 末廣です.
>
> ジェフさん,ありがとうございます.
> その部分はrtc_handleもほぼ同じことを
> やっているのでだいたい分かります.
>
> よく分からないのは,どんなpropertyがあるのか,
> どう使うのか,どうなるのか,などです.
> 今はOutPortBase.pyを見ながらいろいろ試して見ているところです.

データポートに与えることができるプロパティに関しては、
最新ソースのdoxygenドキュメントをご覧ください。
http://www.openrtp.jp/openrtm/svn/OpenRTM-aist/branches/RELENG_1_0/OpenRTM-aist/src/lib/rtm/OutPortBase.h

#ちなみに、throughput については、現段階では外部から使用する方法がありません。
#ドキュメントだけです。

> たとえば,buffer.read.empty_policyをlastにするとどうなるのか,
> 思ったようにならないけど何がいけないのか,といったことです.
>
> バッファサイズは,'dataport.buffer.length':'1'という形で,
> 「1」を文字列で与えれば指定できることが分かりました.
>
> 'dataport.buffer.type':'nullbuffer'はまだ使えないのですよね.

Bufferについては、この初期化関数で与えているもののみ
デフォルトで利用できます。
http://www.openrtp.jp/openrtm/svn/OpenRTM-aist/branches/RELENG_1_0/OpenRTM-aist/src/lib/rtm/FactoryInit.cpp

必要であれば、soをロードして追加することもできます。

> そういう情報はどこに蓄えられている,
> もしくは蓄えていったら良いのでしょうか?

現在、外部から書き込みもできるようなWebページを
新たなレンタルサーバ上に準備中です。
今しばらくお待ちください。

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK