OpenRTM-aistのOutPort.hのバグの影響を受けます

rtshellによる運用の件を保留にして,Choreonoidの「RTシステム」の機能を使ってBodyRTCとChoreonoid外のRTCを接続して試しています.

ところが,シミュレーション開始後にChorenoidが何もメッセージを出さずに落ちます.画像などの大きめのデータを扱う際によく落ちますが,そのデータサイズやタイミングにはっきりした再現性がありません.

以前に似たような経験をしたことを思い出し,調べてみたところ,Ubuntu 16.04にインストールされた /usr/include/openrtm-1.1/rtm/OutPort.h にバグが残ったままでした.そのバグについては,2017年2月にopenrtm-users MLで相談し,産総研の宮本様から解決策を教わっています.その内容を引用します.

FlipComp.exeが停止する件ですが、OpenRTM-aist 1.1.2のC++版に実装されているPortProfileからデータ値を取得する機能の不具合が原因だと思います。

OutPort.hの以下の部分でpropertiesにデータを格納するタイミングにRTシステムエディタ等でPortProfileを取得すると問題が発生することがあります。


virtual bool write(DataType& value)
{
     RTC_TRACE(("DataType write()"));

     if (m_onWrite != NULL)
     {
          (*m_onWrite)(value);
          RTC_TRACE(("OnWrite called"));
     }
     m_profile.properties[m_propValueIndex].value <<= value;



お手数ですが、OutPort.hを添付のファイルに置き換えてもらえますでしょうか。

OutPort.hはC:\Program Files\OpenRTM-aist\1.1.2\rtmにがあります。

この時以来うちで使っているOutPort.hを以下に置きます.

これに差し替えて,Chorenoidをビルドしなおしたところ異常終了する問題はなくなりました.

現在,OpenRTM-aistの仮設サイトで配布されている内容を改めて確認しましたが,その内容も同じでした.
https://github.com/n-ando/xenial_package

情報ありがとうございます。なるほど、OpenRTM側にバグがあって、まだ修正されていないのですね。確かに時々落ちてしまうことがあって、調査しなければとは思っていました。この問題によるものだとしたら、対処方法が分かって有り難く思います。

これについては、私の方でOpenRTMの配布を変更することはできないので、Choreonoidのマニュアルで補足を入れようと思います。
本件お知らせいただき誠にありがとうございました。

また、OpenRTM開発チームにおかれましては、なるべく早くOpenRTM配布への取り込みをしていただくようお願いします。

ちなみに質問なのですが、OpenRTMについてビルド済みのdebパッケージでインストールした上で、そこのOutPort.hを入れ替えて、ChoreonoidをビルドすればOKということですよね。

ただ、OpenRTM本体のビルドはこの修正版になっていなくて大丈夫なのかと思いました。升谷先生のところでそれでも動いているのでしたら、あまり気にしないようにします。

度々すみません、

現在,OpenRTM-aistの仮設サイトで配布されている内容を改めて確認しましたが,その内容も同じでした.

「同じでした」というのは、「修正がされていない」という意味ですよね?

はいその通りです。debパッケージの中のOutPort.hを取り出して確認しました。

OutPort.hはコンポーネントのビルドの際に必要になります。バグが入ったままのものでビルドすると、特に画像のように大きなデータを出力するコンポーネントでは頻繁に異常終了し使い物になりません。RTC単体ではなく、 RTシステムエディタ等でPortProfileを取得するときに問題が起こるようですが。

こちらに答えていませんでした。実際に影響があるのは、BodyRTCやBodyIoRTCなどのRTコンポーネントだけだと思いますが、全体をcleanしてからビルドし直して確認しました。

質問への回答ありがとうございます。
Choreonoidのマニュアルに補足を加えておきました。
http://choreonoid.org/ja/manuals/latest/openrtm/install.html#id5

1 Like