プラグインが起動時に読み込まれない

こんにちは

現在,choreonoidとROSを使用しているのですが,最新版をリビルドした後から,起動時にプラグインが読み込まれなくなってしまいました.choreonoidに元から付いているプラグインは問題なく読み込まれるのですが,それ以外が読み込まれません.使用したプラグインはchoreonoid_ros_pkgです.

<catkin_ws>/devel/lib/choreonoid-1.7/以下にプラグインの実行ファイルは存在しており,起動した後に読み込むと正常に読み込まれます.
気になる点としては,何故かchoreonoid_ros_pkgの実行ファイルだけ実行権限が与えられていることくらいですが
原因が全くわからず困っています.
よろしくお願いします.

ある特定のプラグインだけが起動時に自動で読み込まれないのですね。

その際メッセージビューに何か関連しそうなメッセージはありませんでしょうか?もしあればお知らせ下さい。(それか、コンソールに何かメッセージが出ている可能性もあります。)

また、プラグインはchoreonoid_ros_pkgとのことですが、これは私の理解ではこれ自体はメタパッケージになりますが、実際のプラグインはRosBodyPluginということでよろしいでしょうか?

また、起動した後にメニューの「プラグインの読み込み」から読み込むと、読み込むことができるのですね。読み込んだ後はちゃんと機能していますでしょうか。

また、プラグインのファイル名は、 libCnoidXXXPlugin.so というフォーマットになっている必要があります。対象のプラグインのファイルはこのような名前(XXXのところは実際のプラグイン名が入る)になっていますでしょうか。

まずは以上確認できればと思いますので、よろしくお願いします。

回答ありがとうございます

プラグイン名
はい.BodyRosPluginです.ファイル名のフォーマットも間違いありません.

メッセージビュー
メッセージビューにはRosBodyPluginに関係するものは特になにも出ていませんでした.
プロジェクトファイルにRosBodyPluginの記述がある場合は読み込めなかったというメッセージが出ます.
その後,プラグインを読み込むと問題なく読み込まれます.

読み込んだ後
読み込んだ後,シミュレーションを実行すると問題なくRosTopicが吐かれます.

お知らせいただきありがとうございます。
なるほど、ファイル名には問題がないのですね。自動読み込みはこのフォーマットで検索をかけているので、なぜそこから外れてしまうのか、まだ検討がついておりません・・・。
@yosuke さん、この件で何かご存知のことありましたら、お知らせいただけますでしょうか?

あとは

最新版 をリビルドした後から,

とのことでしたが、それ以前は自動で読み込まれていたのですよね?

どうもここに記されているバージョンはTankモデルのサンプルを更新しているだけですので、この変更自体が問題ではなさそうです。gitのリビジョンをこのバージョンより巻き戻していって、どこから読み込めなくなったかが分かると一番良いのですが・・・。もしそのようなことをやる余裕がおありでしたら、お願いできると助かります。それかアップデートする前はだいたいいつごろのバージョンだったか分かれば教えていただけますでしょうか。

masterから私のブランチにマージしたのが自己干渉の追加ここのタイミングですのでそのあたりだと思います.
少なくとも自己干渉の追加の前までは自動で読み込まれていたはずです.

choreonoid_ros_pkgは確かChoreonoidが1.5だった時代に開発されたので、最新のChoreonoidで動かすには修正が必要かもしれません。fkanehiroさんのレポジトリを見ると9ヶ月前に修正が行われているようですが、追従しきれていないのかも。

プラグインが読み込まれない場合によくある原因の一つは、Choreonoidで定義された親クラス(cnoid::Pluginなど)で先行定義されているvirtual宣言されたメンバ関数をきちんと上書きしていないことです。メンバ関数が増えていたり名前が変わっていたりすると、プラグインが突然読み込まれないようになります。

コメントありがとうございます。

今回メニューからマニュアル操作でプラグインの読み込みを行うと読み込めているとのことで、APIの変更によるものではなさそうです。

ちなみにyosukeさんはChoreonoidでROSを利用されていますでしょうか?もし利用されていたら、差し支えなければどのように利用されているか教えていただけるとうれしいです。choreonoid_ros_pkgを使用されているわけではないのですよね。

マニュアル操作では読み込めているとのことで、ソースを確認したところ、マニュアル操作のときはファイル名の規約をチェックしておらず、指定したファイルは何でも読みこもうとしていました。

今回起動時に読めていないのも、何らかの理由でファイル名が規約にマッチしていない(一見あっているようでも、なぜか正規表現がマッチしない)のが原因の可能性がありそうです。

そこで起動時の読み込みに関して、命名規約をチェックしないオプションを付与しました。

メインメニューの「ファイル」-「プラグイン」以下に “Check the naming convention of plugin files” というチェックがあります。このチェックを外してからChoreonoidを一旦終了すると、それ以降起動時のプラグイン読み込みでプラグインのファイル名をチェックしなくなります。これによって、今回読み込めなくなっているプラグインが読み込めるようになるかもしれませんので、試してみていただけますでしょうか。

masterから私のブランチにマージしたのが自己干渉の追加 ここ のタイミングですのでそのあたりだと思います.
少なくとも自己干渉の追加の前までは自動で読み込まれていたはずです.

これについても確認してみたのですが、ちょっと今回の問題とは関係なさそうなのですよね・・・。

なので以前は読めていて、なぜ読めなくなったのかは、未だによく分からないところがあります。

それについても原因を解明したいところなのですが、まずは上記の対策を試して頂ければと思います。

choreonoid_ros_pkgですが、私が知っている3年前のソースから結構変わっていたので差分を理解&そもそもコンパイルができない状態なので修正する作業中です。

なにかわかりましたらこちらに書きます。

了解です、お知らせいただきありがとうございます。

ちなみにChoreonoidのROS対応については、まずChoreonoid本体はcatkin上で直接パッケージとしてビルドできるようにしています。

その上で、choreonoid_rosplugin というものを用意して、ここにROS関係のいろいろな機能を実装していければと思っています。その際にはRosBodyPluginも参考にさせていただき、同様の機能も取り込んでいきたいと思っています。

本来は現時点でそこまで出来ていなければならないのですが、開発が遅れてしまい、choreonoid_rospluginにはまだ最低限の機能しかありません。そこは大変申し訳なく思っております。

なのですが、Choreonoid本体をcatkin上でROSパッケージとしてビルドできるのは、RosBodyPluginを動くようにする際にも活用できるかと思いますので、お見知りおきいただければと思います。

それらの概要についてはWRSマニュアルの以下のページにまとめています。
http://choreonoid.org/ja/manuals/latest/wrs2018/teleoperation-ros.html

コンパイルの問題についてはpull requestを送っておきました。

ただ、デフォルト状態ではroslaunchで起動したときにプラグインが読み込まれない症状が出ています。
choreonoidが見に行くプラグインフォルダにchoreonid_pluginの共有ライブラリがコピーされていないような症状です。

ただ、これだと手動読込したらOKというのが説明できませんが、もう少し見てみます。

ありがとうございます。

すみません、今金広さんのリポジトリへのプルリクを見ていて気がついたのですが、私の方でfolkしたリポジトリでもいくつか修正をしていました。

その中に、どうもプラグインファイルのコピー先の修正もあるようです。

また、今は金広さんもメンテされていない状態だと思いますので、私のリポジトリの方に集約した方がよいかもしれません。(ただそうすると混乱が生じるかもしれませんが…。いろいろと不備がありまして申し訳ないです。)

私のケースは原因がわかりました。

原因は2つあり、

  1. catkin_make installしないとchoreonoid_pluginがコンパイル自体されない(catkin_makeだけではだめ)

  2. 上記をやってもchoreonoid_pluginで生成される共有ライブラリが、devel/libにコピーされてしまう。本来はdevel/lib/choreonoid-1.7にコピーしないと自動で読み込まれない

上記の対処(本来はcmakeを修正すべきと思いますが、とりあえず手動で)をしたところ、自動で読み込まれるようになっています。

@nakaoka
プラグインのインストール場所の問題は、これで治るっぽいですね。
なんで過去にコメントアウトされてしまったのかがよくわかりませんが。

上記のパッチですが、当てるとcatkin_make installでエラーが出る状態ですね(だからコメントアウトしてあるのかもしれません)。

パッチを当てない状態だと以下のような挙動になります。

catkin_makeだけだとコンパイルされない。

catkin_make installするとコンパイルは通常のワークフォルダで行われるものの、何故かリンクはdevel/libで行われる。

cakin_make installはjvrc_modelsでコンパイルエラーが出るので途中で止まってしまう。
以下のコマンドでスキップするようにすると、今度はchoreonoid_pluginのライブラリがdevel/lib/choreonoid-1.7にもインストールされる。

catkin_make -DCATKIN_BLACKLIST_PACKAGES="jvrc_models;choreonoid_sdfloader_plugin" install

都合2箇所にファイルができてしまうのもわかりにくい原因かもしれません。

公式の実装も見てみましたが、センサ系が画像しか実装されていないのが辛いところですね、、、。

choreonoid_ros_pkgについては私の環境ではそれなりに動いているようですが、動かないなどありましたら情報共有しますので、質問を投げてくださいませ。

yosukeさん、いろいろと調査いただきありがとうございます。

プラグインファイルが所定のディレクトリにインストールされないのは、catkinの通常のやり方でやると通常のlibディレクトリにしかインストールできなくて、自前でいろいろとやる必要があるのですよね。ただそれもcatkinの枠組みの中だといろいろとやりづらく感じました。

ChoreonoidのROS対応の公式版では、catkinの新しいバージョン(catkin tools)を使うことを前提とし、それで利用可能となった plain cmake というビルドタイプを用いることで、比較的自由にcmakeを書けるようになりました。これはpackage.xmlで

<export>
  <build_type>cmake</build_type>
</export>

と書くことで使えるようになります。

あとは公式版のchoreonoid_rospluginに機能を移植していけば、使い勝ってはだいぶよくなるのではないかと思うのですが、そちらまでなかなか手が回らない状況で、申し訳なく思っております。

choreonoid_ros_pkgについては私の環境ではそれなりに動いているようですが、動かないなどありましたら情報共有しますので、質問を投げてくださいませ。

ありがとうございます。それなりに動いているとのことで、助かります。よろしくお願いいたします。

あとはROSで必要なトピックのpublishやsubscribeをChoreonoidのコントローラから行うにあたっては、SimpleControllerを使用することもできます。その場合、SimpleController上で必要なトピックのpublishやsubscribeを自前でコーディングすることになります。C++でのトピック通信のコーディングに慣れている方であれば、そちらの方が手っ取り早いかもしれません。

このサンプルが、マニュアルの以下のページ
http://choreonoid.org/ja/manuals/latest/wrs2018/teleoperation-ros.html
でも触れている “choreonoid_ros_samples” というパッケージに含まれています。

そちらはTankモデルを対象として、シンプルコントローラでjoyトピックのsubscribeをしています。

同様のやり方で、どのようなトピックでもpublish、subscribeすることができるはずです。

返信が遅れてしまい申し訳ありません

プラグインファイルの自動生成

私の環境ではcatkin toolsを使ってビルドしています.
また,devel/lib/choreonoid-1.7/libCnoidRosBodyPlugin.soも自動生成されています.
ですので,catkin toolsを用いればプラグインの自動生成は問題なく行われているようです.
しかし,同時にdevel/lib/RosPlugin.soも自動生成されております.こちらは関係ないのでしょうか?
試しにRosPlugin.soを削除してみましたが症状は変わりませんでした.

ファイル以下のプラグインメニュー

ファイルメニューの中にプラグインの項目が見当たらないのですが,これが問題でしょうか?