[openrtm-users 01058] Re: python 版におけるSystemEditorを使用しないコンポーネントの接続方法について

Toyotaka_Torii @ n.w.rd.honda.co.jp Toyotaka_Torii @ n.w.rd.honda.co.jp
2009年 12月 25日 (金) 18:37:35 JST


鳥井@本田技術研究所です。

安藤様

丁寧な解説をありがとうございました。

ポートの接続と、ポートに付随するインターフェイスの接続が
別であるとの由、
(ポートのインターフェイスとしては接続されていなくても)
ポートとしては接続できているという状態に、
なにか機能的に必要性があるということでしょうか?

また、現実装では一対のポート接続のみサポートの由、
了解しました。確かにデータポートに関しては、ポート対毎に
connectしたほうが混乱が少ないようにも思います。


noriaki.ando @ gmail.com wrote on 2009/12/25 11:28:47:

> 鳥居様

> 産総研 安藤です

> お世話になっております。

> > 本田技術研究所の鳥井です。
> >
> > python版で、スクリプトからコンポーネントを配線する方法について質問がご
ざい
> > ます。
> >
> > SimpleIO ディレクトリに、入力ポートと出力ポートがあるコンポーネントとし
て
> > ConsoleProxy というコンポーネントを新規に作成しました。
> >
> > さらに、ConsoleOut.pyの MyModuleInit()内で、インスタンスを
> > 追加する一文( comp2 = manager.createComponent('ConsoleOut')
> > を加え、以下の用に配線したいと思います。
> >
> >
> >                                            +-(2)-ConsoleOut0
> >                                            |
> > CosoleIn0-(1)-ConsoleProxy---+-(3)-ConsoleOut1
> >
> >
> > さて、これを入出力ポートの組毎にConnectorProfileを作成し、
> > その度に関連するポートのconnect()を呼ぶことで、配線できることは確認しま
した
> > (合計3度connect()を呼ぶことになります)。
> >
> > しかし、RTCの仕様によると、一度のconnectで、ConnectorProfileを
> > 伝播させて、全ての配線ができるように読み取れましたので、
> >
> > ポートリストに例えば、
> >
> > [pin[0], pproxy[0], pproxy[1], pout[0], pout2[0]]
> >
> > このようして、pin[0] のconnectを呼んでみたのですが、
> > 最初の一組しか配線できませんでした。
> >
> > なにか解釈を間違えているのでしょうか? どうぞご教示ください。

> おっしゃる通り、OMG RTC 仕様では、複数のポートが関連する
> 接続(Connector)を1回の呼び出しで構成できるような記述があります。

> ここで注意する必要があるのが、ポートの接続と、ポートに付属する
> インターフェースの接続とは別であるということです。
> 鳥居さんがされた後者の操作では、(1)の接続しか動作しなかったかも
> しれませんが、すべてのポートは同一のConnectorProfileを共有しており、
> 「ポート的には」接続されている状態になっています。
> 一方、OMGのRTC仕様では、「インターフェースの接続」に関しては
> 触れられておらず、実装依存ということになっております。

> 現状のデータポートでは、ポートはInPort1対OutPort1であることが
> 前提となっており、鳥居さんがされたような接続方法は申し訳ありあせんが、
> サポートされておりません。

> 基本的な考え方として、データポートはRTC間のデータストリームチャネル
> であり、1(out)対n(in)またはn(out)対1(in)を一つのコネクタで構成するのは
> いろいろと混乱を招きそうなためこういう仕様にしております。
> また、1度のconnect()呼び出しで構成できるのは1つのコネクタですので、
> 仮にdisconnect()すると、上記の(1)〜(3)すべての接続が切断されてしまい
> これもまた混乱のもとになると考えました。

> また、上記の例では、考え方にもよりますが、(1) と (2),(3) の接続には
> 関連が無さそうにも見えますので、同じ接続(Connector)として構成するのは
> 少々違和感があります。
> #(2)、(3)の接続を1回のconnect()呼び出しで構成するのは、僕としては
> #ありかなとも思いますが。。。

>
> また、インターフェースレベルで考えますと、1つのコネクタ内で、
> インターフェース同士の接続関係を指定してあげる必要があるので
> ConnectorProfileを作るのが少々面倒になります。

> 上の例で登場する4つのコンポーネントのインターフェースを
> 仮に、Provided I/Fを "o--"、Required I/F を "--<" と書けば

> [ConsoleIn]--< (r0)
> (p0) o--[ConsoleProxy]--< (r1)
> (p1) o--[ConsoleOut0]
> (p2) o--[ConsoleOut1]

> のように書くことができます。
> ここで、それぞれp0-2, r0-1 のように名前を付けておきます。

> 上の例のようの接続したい場合、それぞれインターフェースごとの
> 接続の対応関係は、
> (r0)--(p0), (r1)--(p1), (r1')--(p2)
> のようになりますが、これをConnectorProfileに与えてあげ、
> かつ各ポートでは、この記述に従ってインターフェースごとの
> 接続を構成してあげる必要があります。

> さらに、(r1)と(r1')のように、Requiredインターフェースは通常
> 複数のProvidedインターフェースにはつながりませんので、
> 上記の接続を行うにはr1を複数用意する必要があります。
> データポートでは接続毎に動的にRequiredインターフェースを
> 増やすことでこれに対処しております。

> 実は、間もなくリリースする1.0では、サービスポートに限り、
> 上記のような複雑なインターフェースの接続関係を接続時に
> 指定する方法がサポートされます。
> しかし、データポートでは上記の理由により、このような複雑な
> 指定に対応させるメリットがあまり無いように思えましたので、
> 1対1接続のみサポートする仕様のままです。

> ご理解いただけましたでしょうか?
> --
> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
> 統合知能研究グループ 主任研究員, 博士(工学)
> 〒305-8568 つくば市梅園1-1-1 中央第2
> e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
> OpenRTM-aist: http://www.openrtm.org




openrtm-users メーリングリストの案内