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