Skip to content

Conversation

@Nobu19800
Copy link

Identify the Bug

manager.modules.load_pathmanager.preload.modulesmanager.modules.<lang>.load_pathslogger.pluginsで設定したモジュールを絶対パスで設定した場合、他の環境に移植する場合にパスが変わるため修正の必要がある。

Description of the Change

manager.modules.load_pathmanager.preload.modulesmanager.modules.<lang>.load_pathslogger.pluginsに以下のように環境変数を設定できるようにした。

manager.modules.load_path: ${RTM_ROOT}/ext/${RTM_VC_VERSION}/http

この例ではWindowsインストーラーでRTM_ROOTRTM_VC_VERSIONが設定されるため、他の環境でも同じモジュールをロードできる。

Verification

  • Did you succeed the build?
  • No warnings for the build?
  • Have you passed the unit tests?

n-ando
n-ando previously approved these changes Jan 24, 2022
@n-kawauchi n-kawauchi marked this pull request as ready for review August 30, 2024 09:02
Copy link

@n-kawauchi n-kawauchi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

最新masterへマージしたところコンフリクトしました。

>git merge feature/config_replace_env
Auto-merging src/lib/rtm/ModuleManager.cpp
CONFLICT (content): Merge conflict in src/lib/rtm/ModuleManager.cpp
Automatic merge failed; fix conflicts and then commit the result.

@n-kawauchi
Copy link

manager.modules.load_path の確認のため、managerのLoadableModulesのパスを表示させたところJavaのRTCのみパスが見えません。

  • rtc.confは下記にし、
manager.modules.load_path: ${RTM_ROOT}/c++/examples/rtc/,${RTM_ROOT}/python3/SimpleIO/,${RTM_ROOT}/components/java/RTMExamples/SimpleIO/
  • 以下を実行
export RTM_ROOT=/usr/share/openrtm-2.1/components
rtcd2 -d -f rtc.conf
  • OpenRTP上でmanagerのプロパティのLoadableModulesを確認したところ、C++とPythonのRTCパスは表示されるが、Java RTCのパスのみ表示されない
  • この時のログは以下の通り
Sep 12 07:35:43.086 DEBUG: manager:     - load_path: ${RTM_ROOT}/c++/examples/rtc/,${RTM_ROOT}/python3/SimpleIO/,${RTM_ROOT}/components/java/RTMExamples/SimpleIO/
Sep 12 07:35:53.919 DEBUG: ModuleManager: Module load path: /usr/share/openrtm-2.1/components/components/java/RTMExamples/SimpleIO/
Sep 12 07:35:53.919 DEBUG: ModuleManager: File list (path:/usr/share/openrtm-2.1/components/components/java/RTMExamples/SimpleIO/, ext:class):
Sep 12 07:35:53.919 DEBUG: ModuleManager: Java:
Sep 12 07:35:53.919 DEBUG: ModuleManager: Modile profile size: 0 (newly founded modules)
  • manager.modules.load_pathで環境変数を使わない場合はC++, Python, Java の全てのRTCのパスが見える
manager.modules.load_path: /usr/share/openrtm-2.1/components/c++/examples/rtc/,/usr/share/openrtm-2.1/components/python3/SimpleIO/,/usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO/
  • この時のログは以下だった
Sep 12 08:35:20.272 DEBUG: manager:     - load_path: /usr/share/openrtm-2.1/components/c++/examples/rtc/,/usr/share/openrtm-2.1/components/python3/SimpleIO/,/usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO/
Sep 12 08:35:36.086 DEBUG: ModuleManager: Module load path: /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO/
Sep 12 08:35:36.086 DEBUG: ModuleManager: File list (path:/usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO/, ext:class): /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//is_existing.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//ConsoleInImpl$Listener.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//ConnectorComp.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//ConsoleInImpl.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//ConsoleIn.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//UserManagerAction.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//is_alive_in_default_ec.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//get_component_profile_Comp.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//ConsoleOutImpl.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//ConsoleOutImpl$DataListener.class, /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO//get_act
Sep 12 08:35:36.086 DEBUG: ModuleManager: Module /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO/ConsoleIn.class already exists in cache.
Sep 12 08:35:36.086 DEBUG: ModuleManager: Module /usr/share/openrtm-2.1/components/java/RTMExamples/SimpleIO/ConsoleOut.class already exists in cache.

@n-kawauchi
Copy link

manager.modules.load_path、manager.preload.modules、manager.modules..load_paths、logger.plugins のそれぞれで環境変数を使用したパスで指定してみたところ、logger.plugins のみがエラーになります。

  • logger.plugins の確認 ・・・rtc.fluentbit_stream.confを使用
    • 確認はHOME下に /usr/share/openrtm-2.1/components/c++/examples と /usr/etc/logger/rtc.fluentbit_stream.conf をコピーしてログファイルを残せる環境で確認した
    • 環境変数を利用してパスを定義
      logger.plugins: ${RTM_LIB}/logger/FluentBit.so
    • 下記手順で実行
    $ export RTM_LIB=/usr/lib/x86_64-linux-gnu/openrtm-2.1
    $ export LD_PRELOAD=/usr/lib/fluent-bit/libfluent-bit.so
    $ ./ConsoleOutComp -f rtc.fluentbit_stream.conf
    
    • ログを確認すると環境変数が展開されずエラーになっている
    Sep 24 05:30:59.191 ERROR: ModuleManager: Module file not found: ${RTM_LIB}/logger/FluentBit.so
    Sep 24 05:30:59.191 WARNING: manager: Logstream plugin module load failed: ${RTM_LIB}/logger/FluentBit.so
    Sep 24 05:30:59.191 WARNING: manager: Logstream fluentd creation failed.
    
    • この時、printenvで確認したら、RTM_LIB=/usr/lib/x86_64-linux-gnu/openrtm-2.1 となっていました

    • 従来の絶対パスで指定した場合は問題なく起動できます
      logger.plugins: /usr/lib/x86_64-linux-gnu/openrtm-2.1/logger/FluentBit.so

    • この時のRTCログは以下の通りです。

    Sep 24 05:09:05.546 DEBUG: ModuleManager: Finding function symbol: FluentBitInit in /usr/lib/x86_64-linux-gnu/openrtm-2.1/logger/FluentBit.so
    Sep 24 05:09:05.552 INFO: manager: Logstream fluentd created.
    Sep 24 05:09:05.563 INFO: manager: Logstream fluentd added.
    

以下は動作OKだったパスの確認結果です。

  • manager.modules.load_path
    • マスターマネージャーからC++のスレーブマネージャー経由でRTCを起動する動作で確認
    • rtc.confを次のように指定
    manager.modules.load_path: ${RTM_ROOT}/c++/examples/rtc/,${RTM_ROOT}/python3/SimpleIO/,${RTM_ROOT}/java/RTMExamples/SimpleIO/
    
    • 以下を実行し、RTSEのManagerのプロパティでのLoadableModulesのコンポーネントリストを確認
    $ export RTM_ROOT=/usr/share/openrtm-2.1/components
    $ rtcd2 -d -f rtc.conf
    
  • manager.modules. [lang] .load_paths
    • rtc.confを次のように指定
    manager.modules.load_path:
    manager.modules.C++.load_paths: ${RTM_ROOT}/c++/examples/rtc/
    manager.modules.Python.load_paths: ${RTM_ROOT}/python3/SimpleIO/
    manager.modules.Java.load_paths: ${RTM_ROOT}/java/RTMExamples/SimpleIO/
    
  • manager.preload.modules
  • HTTP通信で使用する /usr/etc/http/rtc.http.conf をコピーして次のように修正して確認
manager.modules.load_path:
manager.preload.modules: ${RTM_LIB}/http/HTTPTransport.so
  • 以下を実行
$ /usr/bin/openrtmNames -f /usr/etc/rtc.names.http.conf
$ export RTM_LIB=/usr/lib/x86_64-linux-gnu/openrtm-2.1
$ /usr/share/openrtm-2.1/components/c++/examples/ConsoleOutComp -f rtc.http.conf

@Nobu19800
Copy link
Author

修正したのでこれで試してみてください。

@n-kawauchi
Copy link

修正して頂いたソースで動作確認しましたが、これまでOKだった動作がNGとなりました。

  • logger.plugins ・・・今回の修正で動作OK
  • manager.modules.load_path、manager.modules. [lang] .load_paths ・・・今回の修正でも動作OK
  • manager.preload.modules ・・・今回の修正で動作NGとなってしまった
    • rtc.http.conf で環境変数使用
      manager.modules.load_path:
      manager.preload.modules: ${RTM_LIB}/http/HTTPTransport.so
      
    • 環境変数定義はRTC実行前に確認
      $ printenv | grep RTM
      RTM_LIB=/usr/lib/x86_64-linux-gnu/openrtm-2.1
      
    • RTC実行
      $ ./ConsoleInComp -f rtc.http.conf
      omniORB: (0) 2025-09-29 14:29:29.150250: Error: Unable to create an endpoint of this description: giop:http:http:///call
      omniORB: (0) 2025-09-29 14:29:29.151544: Error: Unable to create an endpoint of this description: giop:http:http:///call
      omniORB: (? 129454131115712) 2025-09-29 14:29:49.777858: Error: the application attempted to invoke an operation on a nil pseudo-object reference.
      terminate called after throwing an instance of 'CORBA::INV_OBJREF'
      中止 (コアダンプ)
      
    • この時のRTCログ抜粋
      Sep 29 05:29:29.149 PARANOID: manager: ORB options: -ORBserverTransportRule "* http" -ORBclientTransportRule "* http" -ORBendPoint giop:http:http:///call -ORBendPointPublish all(addr)
      Sep 29 05:29:29.150 ERROR: manager: Exception: Caught unknown exception in initORB().
      Sep 29 05:29:29.150 TRACE: manager: Manager::initNaming()
      Sep 29 05:29:29.150 TRACE: manager: Register Naming Server: corba/http://localhost:2809/call
      
    • rtc.confで環境変数を使わない場合は問題なく動作する
      manager.modules.load_path: /usr/lib/x86_64-linux-gnu/openrtm-2.1/http
      manager.preload.modules: HTTPTransport.so
      
    • 正常に動いた時のRTCログは下記
      Sep 29 05:37:41.899 PARANOID: manager: ORB options: -ORBserverTransportRule "* http" -ORBclientTransportRule "* http" -ORBendPoint giop:http:http:///call -ORBendPointPublish all(addr)
      Sep 29 05:37:41.910 TRACE: manager: Manager::initNaming()
      Sep 29 05:37:41.910 TRACE: manager: Register Naming Server: corba/http://localhost:2809/call
      

@Nobu19800
Copy link
Author

再度修正したので試してください。

@n-kawauchi
Copy link

修正して頂いたソースで確認しましたが、全部OKになりません。
logger.pluginsとmanager.preload.modulesの結果OK/NGが修正の都度入れ替わっています。

  • 前々回の確認
    • logger.plugins ・・・NG
    • manager.modules.load_path、manager.modules. [lang] .load_paths ・・・OK
    • manager.preload.modules ・・・OK
  • 前回の確認
    • logger.plugins ・・・前回の修正で動作OKとなる
    • manager.modules.load_path、manager.modules. [lang] .load_paths ・・・OK
    • manager.preload.modules ・・・前回の修正で動作NGとなる
  • 今回の確認
    • logger.plugins ・・・今回の修正で動作NGとなる
      • 環境変数が展開されません。従来の絶対パスで指定した場合はOKです。
    • manager.modules.load_path、manager.modules. [lang] .load_paths ・・・OK
    • manager.preload.modules ・・・今回の修正で動作OKとなる

@Nobu19800
Copy link
Author

修正したので確認をお願いします。
@n-kawauchi

Copy link

@n-kawauchi n-kawauchi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ubuntu24.04環境で動作OKを確認できました。確認内容は以下の通りです。

  • 1)logger.plugins の確認
    • HOME下にRTCと対象confファイルをコピーして確認
    • rtc.fluentbit_stream.confを下記とする
      logger.plugins: ${RTM_LIB}/logger/FluentBit.so
      
    • 環境変数を指定してRTC実行
      $ export RTM_LIB=/usr/lib/x86_64-linux-gnu/openrtm-2.1
      $ export LD_PRELOAD=/usr/lib/fluent-bit/libfluent-bit.so
      $ ./ConsoleOutComp -f rtc.fluentbit_stream.conf
      
    • この時のRTCログで、FluentBit.soのフルパスは問題なく展開されている
      Oct 14 06:53:02.991 DEBUG: ModuleManager: Finding function symbol: FluentBitInit in /usr/lib/x86_64-linux-gnu/openrtm-2.1/logger/FluentBit.so
      Oct 14 06:53:02.999 INFO: manager: Logstream fluentd created.
      Oct 14 06:53:03.009 INFO: manager: Logstream fluentd added.
      
  • 2)manager.modules.load_path
    • マスターマネージャーからC++のスレーブマネージャー経由でRTCを起動する動作で確認
    • rtc.confを次のように指定
      manager.modules.load_path: ${RTM_ROOT}/c++/examples/rtc/,${RTM_ROOT}/python3/SimpleIO/,${RTM_ROOT}/java/RTMExamples/SimpleIO/
      
    • 以下を実行し、RTSEのManagerのプロパティでのLoadableModulesのコンポーネントリストを確認
      $ export RTM_ROOT=/usr/share/openrtm-2.1/components
      $ rtcd2 -d -f rtc.conf
      
  • 3)manager.modules. [lang] .load_paths
    • マスターマネージャーからC++のスレーブマネージャー経由でRTCを起動する動作で確認
    • rtc.confを次のように指定し、2)と同様に rtcd2 -d -f rtc.conf を実行
      manager.modules.load_path:
      manager.modules.C++.load_paths: ${RTM_ROOT}/c++/examples/rtc/
      manager.modules.Python.load_paths: ${RTM_ROOT}/python3/SimpleIO/
      manager.modules.Java.load_paths: ${RTM_ROOT}/java/RTMExamples/SimpleIO/
      
  • 4)manager.preload.modules
    • HTTP通信で使用する /usr/etc/http/rtc.http.conf をコピーして次のように修正して確認
      manager.modules.load_path:
      manager.preload.modules: ${RTM_LIB}/http/HTTPTransport.so
      
    • 以下を実行
      $ /usr/bin/openrtmNames -f /usr/etc/rtc.names.http.conf
      $ export RTM_LIB=/usr/lib/x86_64-linux-gnu/openrtm-2.1
      $ ./ConsoleOutComp -f rtc.http.conf
      
    • rtlsでRTC起動を確認
    • rtls実行に必要な環境変数を定義しているrtls_export.shを読み込んでからrtlsを実行
      $ source rtls_export.sh
      $ rtls /http://localhost:2809/call#`hostname`.host_cxt
      ConsoleOut0.rtc
      

@n-ando n-ando merged commit bee6e52 into OpenRTM:master Oct 20, 2025
3 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants