Skip to content

Conversation

@Nobu19800
Copy link

Identify the Bug

データポートの各インターフェース型で接続時のパラメータのデフォルト値、制約条件、ウィジェットを指定できるため、SSMTransportについても設定する必要がある。

Description of the Change

以下のパラメータについて、デフォルト値、制約条件、ウィジェットを設定した。

  • InPort側
    "stream_name.__value__", "sensor_test",
    "stream_name.__widget__", "text",
    "stream_id.__value__", "0",
    "stream_id.__widget__", "spin",
    "stream_id.__constraint__", "0 <= x <= 10000",
  • OurPort側
    "stream_name.__value__", "sensor_test",
    "stream_name.__widget__", "text",
    "stream_id.__value__", "0",
    "stream_id.__widget__", "spin",
    "stream_id.__constraint__", "0 <= x <= 10000",
    "stream_size.__value__", "0",
    "stream_size.__widget__", "spin",
    "stream_size.__constraint__", "0 <= x <= 2147483647",
    "life_ssm_time.__value__", "5.0",
    "life_ssm_time.__widget__", "slider.0.01",
    "life_ssm_time.__constraint__", "0.00 <= x <= 1000.00",
    "cycle_ssm_time.__value__", "0.05",
    "cycle_ssm_time.__widget__", "slider.0.01",
    "cycle_ssm_time.__constraint__", "0.00 <= x <= 1000.00",

Verification

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

@Nobu19800 Nobu19800 added the enhancement New feature or request label Feb 9, 2022
@Nobu19800 Nobu19800 requested a review from n-ando February 9, 2022 03:44
@Nobu19800 Nobu19800 self-assigned this Feb 9, 2022
n-ando
n-ando previously approved these changes Feb 14, 2022
@n-kawauchi n-kawauchi marked this pull request as ready for review September 8, 2024 14:40
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/ssmtpprop
Auto-merging src/ext/transport/SSMTransport/CMakeLists.txt
CONFLICT (content): Merge conflict in src/ext/transport/SSMTransport/CMakeLists.txt
Automatic merge failed; fix conflicts and then commit the result.

@n-kawauchi
Copy link

  • libssmを静的リンクした場合のビルド不具合を解消し、最新masterへマージしてConsoleInで動作確認しましたが、コアダンプが発生します(Ubuntu24.04、22.04の両環境で確認)
    $ ./ConsoleInComp -f rtc.conf
    terminate called without an active exception
    中止 (コアダンプ)
    
  • この時のrtc.confは下記を追加して使用
    manager.modules.load_path: /usr/share/openrtm-2.1/components/c++/examples/rtc, /usr/lib/x86_64-linux-gnu/openrtm-2.1/transport
    manager.modules.preload: ConsoleOut.so, SSMTransport.so
    manager.components.precreate: ConsoleOut
    manager.components.preactivation: ConsoleIn0, ConsoleOut0
    manager.components.preconnect: ConsoleIn0.out?port=ConsoleOut0.in&inport.dataflow_type=pull&outport.dataflow_type=push&interface_type=ssm
    
  • RTCのログレベルをPARANOIDにしたが、ログにはERROR出力は無く、下記出力で止まっている
    Dec 23 05:02:26.642 TRACE: ModuleManager: fileExist(/usr/lib/x86_64-linux-gnu/openrtm-2.1/transport/SSMTransport.so)
    Dec 23 05:02:26.642 TRACE: ModuleManager: symbol(/usr/lib/x86_64-linux-gnu/openrtm-2.1/transport/SSMTransport.so, SSMTransportInit)
    Dec 23 05:02:26.642 DEBUG: ModuleManager: Finding function symbol: SSMTransportInit in /usr/lib/x86_64-linux-gnu/openrtm-2.1/transport/SSMTransport.so
    
  • 上記のログファイルを添付します
    rtc102360-thinkpad-13.log.txt
  • libssmを静的リンクさせる修正説明
    • Ubuntu24.04, 22.04用のDockerfile.packageで、ssmのビルドを追加し、オプション変更
      RUN git clone https://github.com/sitRyo/Distributed-Streaming-data-Sharing-Manager
      WORKDIR /root/Distributed-Streaming-data-Sharing-Manager
      RUN autoreconf -i -f \
       && ./configure --with-pic CFLAGS="-fPIC -w" CXXFLAGS="-fPIC -w" \
       && find . -name "Makefile" -exec sed -i 's/-Werror//g' {} + \
       && make AM_CFLAGS="-fPIC" -j$(nproc) \
       && make install
      
      • SSMTransport.soに含めるために必要な -fPIC オプションを追加
      • ./configure の引数として CFLAGS を渡したが -fPIC が有効にならなかったため、make 時にも指定している
      • sed -i 's/-Werror//g': ライブラリ側が強制している「警告をエラーにする」設定を無効化した
    • SSMTransport/CMakeLists.txtで、
      • SSMライブラリとして /usr/local/lib64/libssm.a を指定
      • ビルド環境で実在しない32bitライブラリ /usr/local/lib/libssm.a を指定するとエラーになるので外している
      • target_link_librariesで、libssm.aが依存しているライブラリの-lpthreadと-lrtを追加
      • -lpthreadと-lrtは、nmコマンドでlibssm.aの未定義シンボル(U)を調べ、AIによりそれらを分類してもらって確定したもの
        nm /usr/local/lib64/libssm.a | grep ' U ' | sort | uniq
        
    • ssm.h, libssm.h のinclude文をextern "C"で囲む
  • libssm.aのリンク正しく出来なかった時、SSMTransport/CMakeLists.txtに下記を追加して未解決シンボルをエラーにした
    target_link_options(${target} PRIVATE "-Wl,--no-undefined")
  • この時、未解決シンボルとして指摘されたものは最終的にリンクできていることを確認した
    $ nm -D /usr/lib/x86_64-linux-gnu/openrtm-2.1/transport/SSMTransport.so | grep -E "initSSM|endSSM|shm_get_address|readSSM_time|openSSM|closeSSM|createSSM|writeSSM|releaseSSM"
    000000000000f230 T closeSSM
    000000000000ed60 T createSSM
    000000000000ed30 T endSSM
    000000000000ec30 T initSSM
    000000000000f0a0 T openSSM
    000000000000f420 T readSSM_time
    000000000000f080 T releaseSSM
    000000000000e4c0 T shm_get_address
    000000000000f510 T writeSSM
    
  • 修正したDockerfile.packageを使ってdebパッケージを生成し、これにてインストールした環境でConsoleInを実行したらコアダンプを起こした

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