[openrtm-users 00587] 一つのコンポーネントから複数のインスタンスを生成する方法について

3 posts / 0 new
Last post
root
Offline
Last seen: 2 hours 35 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00587] 一つのコンポーネントから複数のインスタンスを生成する方法について

はじめまして、筑波大学の渡部と申します。よろしくお願いします。
最近OpenRTMを使い始め、C++も素人同然なので試行錯誤しています。

rtc-templateを使用してRTコンポーネントを作成する際に、
「module-max-inst」という項目があったので適当な数値をいれコンポーネント
を作成し、
RTC-Link上で動かしてみたのですが、一つのコンポーネントから複数のインスタ
ンスを生成することができません。
(というか複数インスタンスの生成方法がわかりません。)

そこで質問なのですが、
1.一つのコンポーネントから複数のインスタンスを生成するには
  RTC-Link上でなにか特別な操作を行う必要があるのでしょうか。
  それとも、「module-max-inst」に数値を入れただけでは駄目で、
  コンポーネントのプログラムに手を加えないといけないのでしょうか。
2.私のイメージでは、例えば「module-max-inst=5」としてCompAを作成した場合、
  ネームサービスビューからシステムエディタにCompAを5回ドラッグ&ドロッ
プすることで
  CompA0、CompA1、…、CompA4がシステムエディタ上に生成されるというイ
メージを持っていたのですが、
  そもそもこの考えが間違っているのでしょうか。

Undefined
root
Offline
Last seen: 2 hours 35 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00588] 一つのコンポーネントから複数のインスタンスを生成する方法について

渡部様

産総研 安藤と申します

> はじめまして、筑波大学の渡部と申します。よろしくお願いします。
> 最近OpenRTMを使い始め、C++も素人同然なので試行錯誤しています。
>
> rtc-templateを使用してRTコンポーネントを作成する際に、
> 「module-max-inst」という項目があったので適当な数値をいれコンポーネント
> を作成し、
> RTC-Link上で動かしてみたのですが、一つのコンポーネントから複数のインスタ
> ンスを生成することができません。
> (というか複数インスタンスの生成方法がわかりません。)

module-max-inst という項目は、生成できる最大のインスタンス数という意味で、
残念ながら、このオプションで生成するインスタンス数を指定することはできません。
さらに、申し訳ないのですがOpeNRTM-aistの0.4系ではこのオプションは無視するように
なっていて、インスタンスはいくらでも生成出来てしまいます。

> そこで質問なのですが、
> 1.一つのコンポーネントから複数のインスタンスを生成するには
> RTC-Link上でなにか特別な操作を行う必要があるのでしょうか。
> それとも、「module-max-inst」に数値を入れただけでは駄目で、
> コンポーネントのプログラムに手を加えないといけないのでしょうか。
> 2.私のイメージでは、例えば「module-max-inst=5」としてCompAを作成した場合、
> ネームサービスビューからシステムエディタにCompAを5回ドラッグ&ドロッ
> プすることで
> CompA0、CompA1、…、CompA4がシステムエディタ上に生成されるというイ
> メージを持っていたのですが、
> そもそもこの考えが間違っているのでしょうか。

まず、ネームサービスビューに表示されているものは、クラスではなく
コンポーネントのインスタンスですので、DnDを複数回しても
インスタンスは増えません。また、同一のシステムエディタ上には
同じインスタンスを複数表示させることはできません。
将来的には、おっしゃるようにRtcLinkから動的にインスタンスを
生成できるようにはしたいと思っています。

さて、コンポーネントのインスタンスを複数生成する方法ですが、
0.4.2以降復活したrtcdというコマンドと、
rtc.confのオプションを指定することで実現できます。

[0.4.2のリリースノート]
http://www.is.aist.go.jp/rt/OpenRTM-aist/html/E38380E382A6E383B3E383ADE383BCE383892FC2B2B.html#l0daadc5

まず、コンポーネントをビルドすると、*Comp[.exe] という実行ファイルとともに、
.so (Linux) または.dll (Windows) といった共有ライブラリも生成されると思います。
この共有ライブラリを適当なディレクトリに置き、以下のようなrtc.confを作成します。
以下、Linux(FedoraやUbuntu)に産総研配布のパッケージでOpenRTMを
入れたものとして、サンプルのConsoleInコンポーネントを3つ起動する例を示します。

> mkdir sample
> cd sample
> cp /usr/share/OpenRTM-aist/examples/rtcs/ConsoleIn.so.0.0.0 ConsoleIn.so
# exampleのパッケージをインストールすると、上記の場所に
# サンプルのsoファイルがインストールされているはず。
# 実体は、.so.0.0.0 なので、.soとしてコピー(名前が長いので。。。)
> ls
ConsoleIn.so
> vi rtc.conf 以下のようなファイルを作成

corba.nameservers: localhost
naming.formats: %n.rtc
# Windows では.DLL、Linuxでは.so
# manager.modules.preload: ConsoleIn.dll, ConsoleOut.dll
manager.modules.preload: ConsoleIn.so
manager.components.precreate: ConsoleIn, ConsoleIn, ConsoleIn

> ls
ConsoleIn.so* rtc.conf
> rtcd
RtcLinkで確認するとConsoleIn0、ConsoleIn1, ConsoleIn2
が生成されている。

manager.modules.preload オプションで、ロードしたいコンポーネントの
共有ライブラリを指定します。
さらに、manager.components.precreate で生成したいコンポーネント
の型名を指定します。オプションは順に処理されるので、
上の例では、ConsoleIn が3つ生成されます。
(100個ConsoleInと書けば100個生成されます。→添付の写真)
このほかにも、ライブラリのロードに関するオプションはいくつかあるので、
詳細はソースコードに含まれる、etc/rtc.conf.sample をご覧ください。

RTコンポーネントの起動の仕方としてはこちらが本来の使い方の
つもりだったのですが、作ったコンポーネントを手軽に起動して
試すために*Compという実行ファイルもおまけで生成する
ようになっています。

root
Offline
Last seen: 2 hours 35 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00589] 一つのコンポーネントから複数のインスタンスを生成する方法について

産総研 安藤様

渡部です。

ご回答ありがとうございます。
参考にさせていただきます。

Ando Noriaki さんは書きました:
> 渡部様
>
> 産総研 安藤と申します
>
>
>> はじめまして、筑波大学の渡部と申します。よろしくお願いします。
>> 最近OpenRTMを使い始め、C++も素人同然なので試行錯誤しています。
>>
>> rtc-templateを使用してRTコンポーネントを作成する際に、
>> 「module-max-inst」という項目があったので適当な数値をいれコンポーネント
>> を作成し、
>> RTC-Link上で動かしてみたのですが、一つのコンポーネントから複数のインスタ
>> ンスを生成することができません。
>> (というか複数インスタンスの生成方法がわかりません。)
>>
>
> module-max-inst という項目は、生成できる最大のインスタンス数という意味で、
> 残念ながら、このオプションで生成するインスタンス数を指定することはできません。
> さらに、申し訳ないのですがOpeNRTM-aistの0.4系ではこのオプションは無視するように
> なっていて、インスタンスはいくらでも生成出来てしまいます。
>
>
>> そこで質問なのですが、
>> 1.一つのコンポーネントから複数のインスタンスを生成するには
>> RTC-Link上でなにか特別な操作を行う必要があるのでしょうか。
>> それとも、「module-max-inst」に数値を入れただけでは駄目で、
>> コンポーネントのプログラムに手を加えないといけないのでしょうか。
>> 2.私のイメージでは、例えば「module-max-inst=5」としてCompAを作成した場合、
>> ネームサービスビューからシステムエディタにCompAを5回ドラッグ&ドロッ
>> プすることで
>> CompA0、CompA1、…、CompA4がシステムエディタ上に生成されるというイ
>> メージを持っていたのですが、
>> そもそもこの考えが間違っているのでしょうか。
>>
>
> まず、ネームサービスビューに表示されているものは、クラスではなく
> コンポーネントのインスタンスですので、DnDを複数回しても
> インスタンスは増えません。また、同一のシステムエディタ上には
> 同じインスタンスを複数表示させることはできません。
> 将来的には、おっしゃるようにRtcLinkから動的にインスタンスを
> 生成できるようにはしたいと思っています。
>
> さて、コンポーネントのインスタンスを複数生成する方法ですが、
> 0.4.2以降復活したrtcdというコマンドと、
> rtc.confのオプションを指定することで実現できます。
>
> [0.4.2のリリースノート]
> http://www.is.aist.go.jp/rt/OpenRTM-aist/html/E38380E382A6E383B3E383ADE383BCE383892FC2B2B.html#l0daadc5
>
> まず、コンポーネントをビルドすると、*Comp[.exe] という実行ファイルとともに、
> .so (Linux) または.dll (Windows) といった共有ライブラリも生成されると思います。
> この共有ライブラリを適当なディレクトリに置き、以下のようなrtc.confを作成します。
> 以下、Linux(FedoraやUbuntu)に産総研配布のパッケージでOpenRTMを
> 入れたものとして、サンプルのConsoleInコンポーネントを3つ起動する例を示します。
>
>
>> mkdir sample
>> cd sample
>> cp /usr/share/OpenRTM-aist/examples/rtcs/ConsoleIn.so.0.0.0 ConsoleIn.so
>>
> # exampleのパッケージをインストールすると、上記の場所に
> # サンプルのsoファイルがインストールされているはず。
> # 実体は、.so.0.0.0 なので、.soとしてコピー(名前が長いので。。。)
>
>> ls
>>
> ConsoleIn.so
>
>> vi rtc.conf 以下のようなファイルを作成
>>
>
> corba.nameservers: localhost
> naming.formats: %n.rtc
> # Windows では.DLL、Linuxでは.so
> # manager.modules.preload: ConsoleIn.dll, ConsoleOut.dll
> manager.modules.preload: ConsoleIn.so
> manager.components.precreate: ConsoleIn, ConsoleIn, ConsoleIn
>
>
>> ls
>>
> ConsoleIn.so* rtc.conf
>
>> rtcd
>>
> RtcLinkで確認するとConsoleIn0、ConsoleIn1, ConsoleIn2
> が生成されている。
>
>
> manager.modules.preload オプションで、ロードしたいコンポーネントの
> 共有ライブラリを指定します。
> さらに、manager.components.precreate で生成したいコンポーネント
> の型名を指定します。オプションは順に処理されるので、
> 上の例では、ConsoleIn が3つ生成されます。
> (100個ConsoleInと書けば100個生成されます。→添付の写真)
> このほかにも、ライブラリのロードに関するオプションはいくつかあるので、
> 詳細はソースコードに含まれる、etc/rtc.conf.sample をご覧ください。
>
> RTコンポーネントの起動の仕方としてはこちらが本来の使い方の
> つもりだったのですが、作ったコンポーネントを手軽に起動して
> 試すために*Compという実行ファイルもおまけで生成する
> ようになっています。
>
>
> ------------------------------------------------------------------------
>

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