Error message

  • Warning: file_put_contents(temporary://fileTRUH9v): failed to open stream: "DrupalTemporaryStreamWrapper::stream_open" call failed in file_unmanaged_save_data() (line 2024 of /var/www/html/openrtm/includes/file.inc).
  • The file could not be created.
  • Warning: file_put_contents(temporary://fileI1Epkv): failed to open stream: "DrupalTemporaryStreamWrapper::stream_open" call failed in file_unmanaged_save_data() (line 2024 of /var/www/html/openrtm/includes/file.inc).
  • The file could not be created.

[openrtm-users 00086] アプリケーションからの入出力ポートのアクセス

3 posts / 0 new
Last post
root
Offline
Last seen: 6 days 18 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00086] アプリケーションからの入出力ポートのアクセス

いつも御世話になります。宇田@NECシステムテクノロジーです

アプリケーションからコンポーネントの入出力ポートにアクセスする方法
についてお伺いします。

通常、入出力ポートに対するアクセスは入力ポートならm_InPort.read()、
出力ポートならm_OutPort.write()のようにread/writeメソッドを使って
行なわれるかと思いますが、この場合に例えばC++のアプリケーションか
ら外部のコンポーネントを利用しようとすると、その外部コンポーネント
との仲介役を果たすコンポーネントをアプリケーションが生成・所有する
必要が生じるかと思います。

┌──────────┐
│ アプリケーション │
└──────────┘
↑ │
┌───│──│───┐ ┌──────────┐
│┌──│──│──┐│ │┌────────┐│
││ │ │ ││ ││ ││
in ││ │ ↓ ││ out in ││ ││ out
○─┤──→┘ └──→├─○─→○─┤│ │├─○
↑ ││read() write()││ ││ ││ │
│ ││ ││ ││ ││ │
│ │└────────┘│ │└────────┘│ │
│ └──────────┘ └──────────┘ │
│ 仲介コンポーネント 外部コンポーネント │
│ ↓
└←───────────────────────────────┘

入出力ポートのインターフェースには、read/writeの逆相であるput/get
も用意されているようですが、アプリケーションがput/getを使って直接
入出力ポートにアクセスするのは、RTミドルウェアの設計思想上問題ない
のでしょうか?

それともコンポーネント以外のもの(アプリケーション)が入出力データ
フローに直接割込むという意味で、あまり推奨はされないのでしょうか?

  ┌──────────┐
  │ アプリケーション │
  └──────────┘
│ ↑
put() │ │ get()
┌←────┘ └────←┐
│ │
│ ┌──────────┐ │
│ │┌────────┐│ │
↓ ││ ││ │
in ││ ││ out
○─┤│ │├─○
││ ││
││ ││
│└────────┘│
└──────────┘
外部コンポーネント

Undefined
root
Offline
Last seen: 6 days 18 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00087] アプリケーションからの入出力ポートのアクセス

宇田様

安藤です

いつもお世話になっております。

> いつも御世話になります。宇田@NECシステムテクノロジーです
>
> アプリケーションからコンポーネントの入出力ポートにアクセスする方法
> についてお伺いします。
> 入出力ポートのインターフェースには、read/writeの逆相であるput/get
> も用意されているようですが、アプリケーションがput/getを使って直接
> 入出力ポートにアクセスするのは、RTミドルウェアの設計思想上問題ない
> のでしょうか?

アプリケーションに単体のInPort/OutPortを持たせてコンポーネントと
通信するのが設計的にはきれいだとは思いますが、現在の実装では、
直接put/getを呼ぶしかいい方法はありませんね。
当面は、そのようにしておいていただければと存じます。

逆に、こうしたほうがいい等アドバイスなどありましたら、
お教えいただければ幸いです。

root
Offline
Last seen: 6 days 18 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00089] アプリケーションからの入出力ポートのアクセス

いつも御世話になります。宇田@NECシステムテクノロジーです

ご回答ありがとうございます。では、当面はput/getも許されるという
前提で検討したいと思います。

私見では、可変長のInPort/OutPortの配列を持ち、アプリケーションと
の仲介を行なうコンポーネントクラスがあると便利かと思います。

この時には、おそらくコンポーネント内部のスレッドは使わず、アプリ
ケーションがInPort/OutPort配列への参照を直接取得してread/writeを
行った方が(スレッド間の情報の受け渡しが不要になるので)使い易い
と考えます(内部スレッドを使わないことによる弊害がないことが前提
ではありますが)。

┌──────────┐
│ アプリケーション │
└──────────┘
↑ │
│ ↓
InPortList OutPortList
│ │
│┌──────┐│
┌────┐ ○─┤┌────┐├─○ ┌────┐
○─┤ ├─○─→○─┤│\ /│├─○─→○─┤ ├─○
│ │ ○─┤│ × │├─○ │ │
○─┤ ├─○─→○─┤│/ \│├─○─→○─┤ ├─○
└────┘ ○─┤└────┘├─○ └────┘
外部コンポーネント : └──────┘ : 外部コンポーネント
アプリケーション
仲介用コンポーネント

> 宇田様
>
> 安藤です
>
> いつもお世話になっております。
>
> > いつも御世話になります。宇田@NECシステムテクノロジーです
> >
> > アプリケーションからコンポーネントの入出力ポートにアクセスする方法
> > についてお伺いします。
> > 入出力ポートのインターフェースには、read/writeの逆相であるput/get
> > も用意されているようですが、アプリケーションがput/getを使って直接
> > 入出力ポートにアクセスするのは、RTミドルウェアの設計思想上問題ない
> > のでしょうか?
>
> アプリケーションに単体のInPort/OutPortを持たせてコンポーネントと
> 通信するのが設計的にはきれいだとは思いますが、現在の実装では、
> 直接put/getを呼ぶしかいい方法はありませんね。
> 当面は、そのようにしておいていただければと存じます。
>
> 逆に、こうしたほうがいい等アドバイスなどありましたら、
> お教えいただければ幸いです。
>

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