[openrtm-users 03493] Re: OpenRTM-1.2.2でCORBA経由でRTCを生成する手順

宮本信彦 n-miyamoto @ aist.go.jp
2021年 1月 27日 (水) 16:44:43 JST


金広様

宮本です。

> load_module()がスレーブマネージャには伝わらないようなのですが、伝える方法は
> ありますでしょうか?

現状、マスターマネージャから伝える方法はないため、以下のようにget_slave_managers()でスレーブマネージャを取得して実行するしか方法はないです。

https://openrtm.org/openrtm/ja/doc/developersguide/advanced_rt_system_programming/mastermanager_slavemanager#toc25


> 上記のトラブルが今も起こるかと思い、load_pathに/usr/libを指定して
> ConsoleInのインスタンスを作らせようとすると、create_component()が
> 返ってこない、という結果になりました。


create_component()では指定のload_pathに存在するモジュールを全て調べてロード可能なモジュールの一覧を取得してからRTCを起動しています。
ロード可能なモジュールを取得する方法ですが、指定の拡張子のファイル(.dll、もしくは.so)に対してrtcprofというコマンドを実行してRTCのプロファイルを取得しています。
例えば、ConsoleIn.dllに対してrtcprofを実行すると以下のようになります。


C:\Program Files\OpenRTM-aist\1.2.2\Components\C++\Examples\vc14>rtcprof ConsoleIn.dll

implementation_id: ConsoleIn
type_name: ConsoleIn
description: Console input component
version: 1.0
vendor: Noriaki Ando, AIST
category: example
activity_type: DataFlowComponent
max_instance: 10
language: C++
lang_type: compile


上記のようにRTCの情報が出力されるため、これを取得しています。RTCではないファイルに対して実行すると当然プロファイルは取得できないためロード可能なモジュールには追加されません。
このコマンドを指定の拡張子のファイル全てに実行するため、.dllや.soのファイルが大量に存在するパスを指定するとcreate_component()やget_loadable_modules()が長時間返ってこないことがあります。
一応、ロードできないモジュールを次にcreate_component()やget_loadable_modules()を実行したときに調べないようになっているため一度実行すると動作は早くなるはずですが、load_pathにはRTCの.dll、.soだけが存在するパスを指定したほうがいいと思います。


From: openrtm-users <openrtm-users-bounces @ openrtm.org> On Behalf Of 金広文男
Sent: Tuesday, January 26, 2021 7:51 PM
To: OpenRTM-aist mailing-list for generic users <openrtm-users @ openrtm.org>
Subject: [openrtm-users 03492] Re: OpenRTM-1.2.2でCORBA経由でRTCを生成する手順

宮本様、

ご回答ありがとうございます。
教えて頂いた方法でコンポーネントを生成できることを確認しました。

load_module()がスレーブマネージャには伝わらないようなのですが、伝える方法は
ありますでしょうか?
伝えなくてもスレーブが探してくれるようですが、間違ったload_pathを指定したり、
パスが合っていてもロードしたときに見つからないシンボルがあったりすると、
自動的に探しにいってかえってトラブルの原因になったような記憶がありまして。

上記のトラブルが今も起こるかと思い、load_pathに/usr/libを指定して
ConsoleInのインスタンスを作らせようとすると、create_component()が
返ってこない、という結果になりました。
ご確認頂けないでしょうか。

差出人: openrtm-users <openrtm-users-bounces @ openrtm.org<mailto:openrtm-users-bounces @ openrtm.org>>
日付: 火曜日, 2021年1月26日 18:46
宛先: OpenRTM-aist mailing-list for generic users <openrtm-users @ openrtm.org<mailto:openrtm-users @ openrtm.org>>
件名: [openrtm-users 03491] Re: OpenRTM-1.2.2でCORBA経由でRTCを生成する手順
金広様

産総研の宮本です。

OpenRTM-aist-1.2.2ではマスターマネージャ上でRTCを起動することはできません。
1.1.2以前からマスターマネージャでは直接RTCを起動せずにスレーブマネージャ上で起動するのが正しい動作だったのですが、マスターマネージャ上でも起動できるようになっていたので正しい動作になるように修正しました。
1.2.2でcreate_component()でRTCを起動するためにはマスターマネージャとスレーブマネージャが1つは起動する必要があります。
マスターマネージャでRTCを起動する方法はないため1.1.2と同じ動作にはならないのですが、スレーブマネージャをマスターマネージャと同じポート番号2810で起動してcreate_component()を呼べば無理やりですが似たような動作にはなります。
そうする場合、rtc.confに以下のように記述してrtcdを実行します。あまりお勧めはしません。

manager.modules.load_path: {モジュールのパス}
corba.endpoints: :2810
manager.shutdown_auto:NO

create_component()の使用方法については以下のページに記載いたしましたので、参考にしていただければと思います。

https://openrtm.org/openrtm/ja/doc/developersguide/advanced_rt_system_programming/mastermanager_slavemanager


> これに限らず、1.1系と1.2系の違い、移行の方法等をまとめたものがありましたら教えて
> 頂けると助かります。

1.2.2の新機能の概要については以下のページに書いてありますが、移行の方法についてまとめたものは作成しておりません。

https://openrtm.github.io/openrtm12.html

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

From: openrtm-users <openrtm-users-bounces @ openrtm.org<mailto:openrtm-users-bounces @ openrtm.org>> On Behalf Of 金広文男
Sent: Monday, January 25, 2021 12:45 PM
To: openrtm-users @ openrtm.org<mailto:openrtm-users @ openrtm.org>
Subject: [openrtm-users 03490] OpenRTM-1.2.2でCORBA経由でRTCを生成する手順

金広@産総研です。

これまでOpenRTM-1.1.2を使っていたのでOpenRTM-1.2.2に移行できるかを確認しています。
rtcdを立ち上げて、CORBA経由でコンポーネントファクトリをロードしたり、コンポーネントを
生成したり、という使い方をこれまでして来たのですが、rtcdの挙動が異なるようなので教えて
下さい。

1.1.2の場合はload_module()、create_component()を呼び出すとmaster manager上にそのまま
RTCが作られるのですが、1.2.2の場合、create_component()を呼び出すと、内部で
createComponentByManagerName()が呼び出され、managerの名前としてmanager_%pが
使われるのですが、これが見つからないためslave managerを起動してしまうようです。
1.1.2と同じ挙動にさせる方法はありますでしょうか?

ログレベルをPARANOIDとした時のrtcdのログを添付します。

これに限らず、1.1系と1.2系の違い、移行の方法等をまとめたものがありましたら教えて
頂けると助かります。

-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20210127/7b7dc671/attachment-0001.htm>


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