shimoe
September 16, 2018, 10:53am
1
こんにちは
現在,choreonoidとROSを使用しているのですが,最新版 をリビルドした後から,起動時にプラグインが読み込まれなくなってしまいました.choreonoidに元から付いているプラグインは問題なく読み込まれるのですが,それ以外が読み込まれません.使用したプラグインはchoreonoid_ros_pkg です.
<catkin_ws>/devel/lib/choreonoid-1.7/
以下にプラグインの実行ファイルは存在しており,起動した後に読み込むと正常に読み込まれます.
気になる点としては,何故かchoreonoid_ros_pkg
の実行ファイルだけ実行権限が与えられていることくらいですが
原因が全くわからず困っています.
よろしくお願いします.
nakaoka
September 18, 2018, 4:34am
2
ある特定のプラグインだけが起動時に自動で読み込まれないのですね。
その際メッセージビューに何か関連しそうなメッセージはありませんでしょうか?もしあればお知らせ下さい。(それか、コンソールに何かメッセージが出ている可能性もあります。)
また、プラグインはchoreonoid_ros_pkgとのことですが、これは私の理解ではこれ自体はメタパッケージになりますが、実際のプラグインはRosBodyPluginということでよろしいでしょうか?
また、起動した後にメニューの「プラグインの読み込み」から読み込むと、読み込むことができるのですね。読み込んだ後はちゃんと機能していますでしょうか。
また、プラグインのファイル名は、 libCnoidXXXPlugin.so というフォーマットになっている必要があります。対象のプラグインのファイルはこのような名前(XXXのところは実際のプラグイン名が入る)になっていますでしょうか。
まずは以上確認できればと思いますので、よろしくお願いします。
nakaoka
September 18, 2018, 4:46am
4
お知らせいただきありがとうございます。
なるほど、ファイル名には問題がないのですね。自動読み込みはこのフォーマットで検索をかけているので、なぜそこから外れてしまうのか、まだ検討がついておりません・・・。
@yosuke さん、この件で何かご存知のことありましたら、お知らせいただけますでしょうか?
nakaoka
September 18, 2018, 4:50am
5
あとは
最新版 をリビルドした後から,
とのことでしたが、それ以前は自動で読み込まれていたのですよね?
どうもここに記されているバージョンはTankモデルのサンプルを更新しているだけですので、この変更自体が問題ではなさそうです。gitのリビジョンをこのバージョンより巻き戻していって、どこから読み込めなくなったかが分かると一番良いのですが・・・。もしそのようなことをやる余裕がおありでしたら、お願いできると助かります。それかアップデートする前はだいたいいつごろのバージョンだったか分かれば教えていただけますでしょうか。
shimoe
September 18, 2018, 4:55am
6
masterから私のブランチにマージしたのが自己干渉の追加 とここ のタイミングですのでそのあたりだと思います.
少なくとも自己干渉の追加の前までは自動で読み込まれていたはずです.
yosuke
September 18, 2018, 5:16am
7
choreonoid_ros_pkg は確かChoreonoidが1.5だった時代に開発されたので、最新のChoreonoidで動かすには修正が必要かもしれません。fkanehiroさんのレポジトリを見ると9ヶ月前に修正が行われているようですが、追従しきれていないのかも。
プラグインが読み込まれない場合によくある原因の一つは、Choreonoidで定義された親クラス(cnoid::Pluginなど)で先行定義されているvirtual宣言されたメンバ関数をきちんと上書きしていないことです。メンバ関数が増えていたり名前が変わっていたりすると、プラグインが突然読み込まれないようになります。
nakaoka
September 19, 2018, 3:49am
8
コメントありがとうございます。
今回メニューからマニュアル操作でプラグインの読み込みを行うと読み込めているとのことで、APIの変更によるものではなさそうです。
ちなみにyosukeさんはChoreonoidでROSを利用されていますでしょうか?もし利用されていたら、差し支えなければどのように利用されているか教えていただけるとうれしいです。choreonoid_ros_pkgを使用されているわけではないのですよね。
nakaoka
September 19, 2018, 3:55am
9
マニュアル操作では読み込めているとのことで、ソースを確認したところ、マニュアル操作のときはファイル名の規約をチェックしておらず、指定したファイルは何でも読みこもうとしていました。
今回起動時に読めていないのも、何らかの理由でファイル名が規約にマッチしていない(一見あっているようでも、なぜか正規表現がマッチしない)のが原因の可能性がありそうです。
そこで起動時の読み込みに関して、命名規約をチェックしないオプションを付与しました。
committed 03:45AM - 19 Sep 18 UTC
メインメニューの「ファイル」-「プラグイン」以下に “Check the naming convention of plugin files” というチェックがあります。このチェックを外してからChoreonoidを一旦終了すると、それ以降起動時のプラグイン読み込みでプラグインのファイル名をチェックしなくなります。これによって、今回読み込めなくなっているプラグインが読み込めるようになるかもしれませんので、試してみていただけますでしょうか。
masterから私のブランチにマージしたのが自己干渉の追加 とここ のタイミングですのでそのあたりだと思います.
少なくとも自己干渉の追加の前までは自動で読み込まれていたはずです.
これについても確認してみたのですが、ちょっと今回の問題とは関係なさそうなのですよね・・・。
なので以前は読めていて、なぜ読めなくなったのかは、未だによく分からないところがあります。
それについても原因を解明したいところなのですが、まずは上記の対策を試して頂ければと思います。
yosuke
September 20, 2018, 1:35am
10
choreonoid_ros_pkgですが、私が知っている3年前のソースから結構変わっていたので差分を理解&そもそもコンパイルができない状態なので修正する作業中です。
なにかわかりましたらこちらに書きます。
nakaoka
September 20, 2018, 2:32am
11
了解です、お知らせいただきありがとうございます。
ちなみに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
yosuke
September 21, 2018, 1:45am
12
コンパイルの問題についてはpull requestを送っておきました。
fkanehiro:master
← yosuke:master
opened 12:12AM - 21 Sep 18 UTC
コンパイルエラーが出る状態だったのを修正しました。
ただ、デフォルト状態ではroslaunchで起動したときにプラグインが読み込まれない症状が出ています。
choreonoidが見に行くプラグインフォルダにchoreonid_pluginの共有ライブラリがコピーされていないような症状です。
ただ、これだと手動読込したらOKというのが説明できませんが、もう少し見てみます。
nakaoka
September 21, 2018, 2:05am
13
ありがとうございます。
すみません、今金広さんのリポジトリへのプルリクを見ていて気がついたのですが、私の方でfolkしたリポジトリでもいくつか修正をしていました。
その中に、どうもプラグインファイルのコピー先の修正もあるようです。
また、今は金広さんもメンテされていない状態だと思いますので、私のリポジトリの方に集約した方がよいかもしれません。(ただそうすると混乱が生じるかもしれませんが…。いろいろと不備がありまして申し訳ないです。)
yosuke
September 21, 2018, 2:21am
14
私のケースは原因がわかりました。
原因は2つあり、
catkin_make installしないとchoreonoid_pluginがコンパイル自体されない(catkin_makeだけではだめ)
上記をやってもchoreonoid_pluginで生成される共有ライブラリが、devel/libにコピーされてしまう。本来はdevel/lib/choreonoid-1.7にコピーしないと自動で読み込まれない
上記の対処(本来はcmakeを修正すべきと思いますが、とりあえず手動で)をしたところ、自動で読み込まれるようになっています。
yosuke
September 21, 2018, 4:51am
15
@nakaoka
プラグインのインストール場所の問題は、これで治るっぽいですね。
なんで過去にコメントアウトされてしまったのかがよくわかりませんが。
committed 03:44AM - 15 Jul 17 UTC
yosuke
September 21, 2018, 6:09am
16
上記のパッチですが、当てると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箇所にファイルができてしまうのもわかりにくい原因かもしれません。
yosuke
September 21, 2018, 7:05am
17
公式の実装も見てみましたが、センサ系が画像しか実装されていないのが辛いところですね、、、。
choreonoid_ros_pkgについては私の環境ではそれなりに動いているようですが、動かないなどありましたら情報共有しますので、質問を投げてくださいませ。
nakaoka
September 22, 2018, 2:24am
18
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については私の環境ではそれなりに動いているようですが、動かないなどありましたら情報共有しますので、質問を投げてくださいませ。
ありがとうございます。それなりに動いているとのことで、助かります。よろしくお願いいたします。
nakaoka
September 22, 2018, 2:30am
19
あとは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することができるはずです。
shimoe
September 25, 2018, 3:05am
20
返信が遅れてしまい申し訳ありません
プラグインファイルの自動生成
私の環境ではcatkin toolsを使ってビルドしています.
また,devel/lib/choreonoid-1.7/libCnoidRosBodyPlugin.so
も自動生成されています.
ですので,catkin toolsを用いればプラグインの自動生成は問題なく行われているようです.
しかし,同時にdevel/lib/RosPlugin.so
も自動生成されております.こちらは関係ないのでしょうか?
試しにRosPlugin.so
を削除してみましたが症状は変わりませんでした.
ファイル以下のプラグインメニュー
ファイルメニューの中にプラグインの項目が見当たらないのですが,これが問題でしょうか?