Closed dyubicuoa closed 3 years ago
すみません。未修正でした。
git clone -b bugs/rosros2fastrtps https://github.com/Nobu19800/OpenRTM-aist
よろしくお願いします。 後、私は先生と呼ばれる立場ではないです。
ご対応いただきありがとうございました。 無事、ROS通信機能付きでOpenRTM-aistをビルドすることができました。
ただ、OpenRTM-aist ver.2.0インストール後に https://www.openrtm.org/openrtm/ja/doc/developersguide/advanced_rt_system_programming/ros_comm_use に掲載されている動作確認を行ってみたのですが、ConsoleInとConsoleOutをROSインタフェースでうまく通信することができませんでした。
homeの.bashrcにて : export LD_LIBRARY_PATH=/usr/local/lib:/opt/ros/melodic/lib : のように環境変数を指定し、source実行後、 $ ldd /usr/local/lib/openrtm-2.0/transport/ROSTransport.so にて、共有ライブラリがすべてリンクされていることを確認済み。 ROSTransport.soのロードまではうまくいっているようです。
ConsoleInおよびConsoleOut実行時の画面上においても : Profile::properties:
: のように、interface_typeでros、marshaling_typeでROSFloat32、topicでchatterがそれぞれ選択されているのを確認できています。
rtc.confにてPARANOID指定でログを取得した結果は以下のとおりです。 ERROR箇所のみ抜粋しております。 : Dec 23 00:10:15.296 ERROR: manager: ConsoleOut0 not found. : Dec 23 00:10:15.304 ERROR: ROSOutPort: Can not find message type(ROSFloat32) : Dec 23 00:10:18.493 ERROR: InPortProvier: Can not find message type(ROSFloat32) : Dec 23 00:10:18.493 ERROR: manager: ConsoleIn0 not found. : Dec 23 00:10:33.361 ERROR: OutPortConnector: Can not find Marshalizer: ROSFloat32 : Dec 23 00:10:40.293 ERROR: ec_base: The component is not responding. Dec 23 00:10:40.293 ERROR: ec_base: Unknown error: Invalid state transition. : ROSFloat32のメッセージ型およびマーシャライザが見つからない、というところが一番気になっています。
以上、現状をご報告させていただきましたが、 もし可能であれば問題箇所をご指摘いただくか、ヒントをいただくことは可能でしょうか。 さらに情報が必要であれば提供させていただきます。
また恐れいりますが以下の質問2点にもご回答いただければ幸いです。 1.念の為roscoreをローカルで起動済みですが、これは必要でしょうか。 2.ROSの通信インタフェースモジュールとシリアライズモジュールはROSTransport.soで一つにまとめられている形でしょうか。
どうぞよろしくお願いいたします。
申し訳ありません。openrtm.orgの情報が古かったみたいです。 現在はメッセージ型名、トピック名の指定方法などが変わっています。修正いたしましたのでご確認をお願いします。
また恐れいりますが以下の質問2点にもご回答いただければ幸いです。 1.念の為roscoreをローカルで起動済みですが、これは必要でしょうか。 2.ROSの通信インタフェースモジュールとシリアライズモジュールはROSTransport.soで一つにまとめられている形でしょうか。
内部的にはROSTCPの通信のため、接続のためにroscoreの起動は必要です。 ROSTransport.soをロードすると通信インターフェースモジュールと以下のデータ型、メッセージ型の変換に対応したシリアライザが利用可能になります。
これ以外のシリアライザが必要な場合は独自に実装する必要があります。
迅速にご対応いただき感謝申し上げます。 また、質問にもご回答いただきありがとうございました。
メッセージ型名の方を変更し、同様の動作確認を行いましたが、それでも以下のエラーが発生し、ROSでの通信がうまくいきません。 : Dec 24 01:07:53.222 ERROR: OutPortConnector: Can not find Marshalizer: ros:std_msgs/Float32 : OutPort側だけで、なぜかInPort側では上記エラーは発生していません。
なお、通常のCORBA_CDRによるCosoleInとConsoleOutの通信は問題ありません。 ただ、 : Dec 24 01:07:58.001 ERROR: ec_base: The component is not responding. Dec 24 01:07:58.001 ERROR: ec_base: Unknown error: Invalid state transition. : のエラーはこちらでも発生しているようです。
動作確認用のrtc.confを用いずに、openrtpでmarshaling_typeやros.topicを指定する方法も試してみましたが同様のエラーが生じてしまい、ROSの通信ができませんでした。 OutPort側の設定項目は以下の通りです。
Interface Type -> ros Subscription Type -> flush 詳細設定 dataport.marshaling_type -> ros:std_msgs/Float32 dataport.ros.topic -> chatter
また、roscoreは起動させており、ROSの環境変数であるROS_MASTER_URIはデフォルトの"http://localhost:11311"です。
こちらでも問題の切り分けを図っておりますが、もし現時点で原因の推察が可能であればご教示いただけないでしょうか。
どうぞよろしくお願いいたします。
サンプルコンポーネントでは問題が発生するようですが、何故か新規作成したRTCでは問題が発生しないようです。 GlobalFactoryの実装に根本的な問題がありそうなので時間がかかるかもしれないです。
動作をご確認いただきありがとうございました。
おかげ様で、新規作成したRTCを用いて、RTCのデータポート間、RTC_OutPort-ROS_Subscriber_Node間、ROS_Publisher_Node-RTC_InPort間それぞれでTCPROS通信の動作確認ができました。
最後に一点だけ確認させていただきたいのですが、ROSで独自に定義したメッセージ型でやりとりしたい場合は、OpenRTM-aistで独自にシリアライザを実装する必要がある、という理解でよろしいでしょうか?
以上、長々と失礼いたしました。 どうぞよろしくお願いいたします。
ROSTransportで対応しているROSのメッセージ型、OpenRTM-aistのデータ型を扱いたい場合は独自のシリアライザが必要なため、ROSの独自に定義したメッセージ型についても独自シリアライザが必要です。
GlobalFactoryの実装を見直した結果、シリアライザを登録する処理を変更する修正を加えるかもしれません。 既に作成済みのシリアライザがある場合は数行変更する必要があります。修正が反映されたら連絡いたします。
やはりシリアライザを独自に実装する必要があるのですね。 シリアライザ登録処理機構の変更についてもご連絡いただきありがとうございました。 修正が必要となるかもしれないとのこと、承知いたしました。
よろしくお願いいたします。
特に問題ないようなので閉じさせていただきます。
産総研 宮本先生、
いつもお世話になっております。 会津大学の吉野でございます。
お忙しい中、コードの修正に対応いただきありがとうございます。 また、本件について誤ってHPのフォーラムの方に投稿してしまい失礼いたしました。 本件以降、OpenRTM-aistに関する質問が生じた場合はgithubの方から問い合わせていただきます。
早速、ROS通信機能付きで再度ビルドしたところ、未だ前回と同様のエラーが生じております。 ビルド日時は12月16日(月)午前8時ごろです。
やはり、通常のビルド(ROS通信機能なし)の場合は問題ありません。
実行環境はdockerコンテナ上のUbuntu18.04で、 インストール手順は以下の通りです。
もしビルド手順について問題があればご指摘いただければ幸いです。 年末のお忙しい折、誠に恐れ入りますが、可能であればご対応の程よろしくお願い申し上げます。