Closed pazeshun closed 6 years ago
なるほど. #555 で治った気がします.
https://github.com/jsk-ros-pkg/jsk_robot/issues/823 にあるように,msg/srv がないパッケージは将来的(jadeから)debでも,manifest.l が作られなくなるので,必要なメッセージの (load-ros-{package,msg,srv})
に置き換えておくことをおすすめします.これらは,それが依存するファイルも読み込んでくれるはずなので,以下のようにbaxter-interface.l のなかで使われているメッセージのものに変えておけばいいとおもいます.
-(ros::load-ros-manifest "baxtereus")
+(ros::load-ros-package "baxter_core_msgs")
@k-okada 横から失礼します。参考までに質問があります。
msg/srv がないパッケージは将来的(jadeから)debでも,manifest.l が作られなくなるので,必要なメッセージの (load-ros-{package,msg,srv}) に置き換えておくことをおすすめします.
これはros::load-ros-manifest
が使えなくなることを意味しているでしょうか?
その場合、ros::load-manifest
をros::load-ros-package
にエイリアスするような感じにはできなさそうでしょうか?
いや使えます.そもそもmanifest.l はrospack depends したものをすべて並べて,load-ros-packagesをしていますが, msg.l でもそこで使うmsgをroseus-add-msgs しているので,そもそもmanifest.lは必要なかったですね,ということになっていますが, jade/kineticでもmsgがあれば,manifest.l はあるので,load-ros-manifestはそのままにしておきます.
msg/srvがあるパッケージをload-ros-manifest しているコードはそのままで動きますが, msg/srvがないと動かなくなるので,そこは変更しておいてください.というこで,どうせ変更するなら,load-ros-packageにしておいたほうがいいですね.ということでした.
-- ◉ Kei Okada
2018年1月6日 18:27 Furushchev notifications@github.com:
@k-okada https://github.com/k-okada 横から失礼します。参考までに質問があります。
msg/srv がないパッケージは将来的(jadeから)debでも,manifest.l が作られなくなるので,必要なメッセージの (load-ros-{package,msg,srv}) に置き換えておくことをおすすめします.
これはros::load-ros-manifestが使えなくなることを意味しているでしょうか? その場合、ros::load-manifestをros::load-ros-packageにエイリアスするような感じにはできなさそうでしょうか?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jsk-ros-pkg/jsk_roseus/issues/554#issuecomment-355735003, or mute the thread https://github.com/notifications/unsubscribe-auth/AAeG3Ep4vLlkLx66qrLgjLZ1hN5ploMTks5tHzxvgaJpZM4RVM8Z .
@k-okada なるほど、理解しました。ありがとうございます。
@k-okada
私の理解が正しければ、多くのプログラムがjadeから動かなくなっている気がするのですが、気のせいでしょうか。
例えば、jsk_robotをgit cloneしてきて、その中でgrep -r "ros::load-ros-manifest"
とすると、以下のように出てきます。
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_image_transport/roi-reconfigure-call.l:(ros::load-ros-manifest "dynamic_reconfigure")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_image_transport/roi-reconfigure-call.l:(ros::load-ros-manifest "geometry_msgs")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_image_transport/roi-reconfigure-call.l:(ros::load-ros-manifest "jsk_topic_tools")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_move_base/check-movebase-feedback.l:(ros::load-ros-manifest "pr2eus")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_lifelog/pr2-tweet-log.l:(ros::load-ros-manifest "jsk_demo_common")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_lifelog/visualization/visualize_objectdetection.l:(ros::load-ros-manifest "posedetection_msgs")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_lifelog/visualization/visualize_objectdetection.l:(ros::load-ros-manifest "geometry_msgs")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_rocon/cameraman_sample/pr1012_tracker_with_hand.l:(ros::load-ros-manifest "geometry_msgs")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_rocon/cameraman_sample/pr1012_tracker_with_base.l:(ros::load-ros-manifest "geometry_msgs")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_rocon/look_sample/pr1012_pose_publisher.l:(ros::load-ros-manifest "geometry_msgs")
jsk_pr2_robot/jsk_pr2_startup/jsk_pr2_rocon/look_sample/pr1012_pose_subscriber.l:(ros::load-ros-manifest "geometry_msgs")
jsk_naoqi_robot/jsk_pepper_startup/sample/sample.l:(ros::load-ros-manifest "jsk_pepper_startup")
jsk_naoqi_robot/jsk_pepper_startup/nodes/tweet.l:(ros::load-ros-manifest "roseus")
jsk_naoqi_robot/jsk_pepper_startup/nodes/joy-client.l:(ros::load-ros-manifest "peppereus")
jsk_naoqi_robot/naoeus/euslisp/test_nao_controller.l:(ros::load-ros-manifest "roseus")
jsk_naoqi_robot/naoeus/euslisp/test_nao_controller.l:(ros::load-ros-manifest "actionlib")
jsk_naoqi_robot/naoeus/euslisp/test_nao_walker.l:(ros::load-ros-manifest "roseus")
jsk_naoqi_robot/naoeus/euslisp/nao-interface.l:(ros::load-ros-manifest "naoeus")
jsk_naoqi_robot/naoeus/euslisp/nao_mirror.l:(ros::load-ros-manifest "naoeus")
jsk_naoqi_robot/naoqieus/naoqi-interface.l:(ros::load-ros-manifest "naoqieus")
jsk_naoqi_robot/jsk_201504_miraikan/euslisp/mirai-demo-20150413.l:(ros::load-ros-manifest "peppereus")
jsk_baxter_robot/baxtereus/baxter-interface.l:(ros::load-ros-manifest "baxtereus")
jsk_baxter_robot/baxtereus/test/test-baxter-moveit.l:(ros::load-ros-manifest "baxtereus")
jsk_robot_common/jsk_robot_startup/util/initialpose_publisher.l:(ros::load-ros-manifest "geometry_msgs")
jsk_robot_common/jsk_robot_startup/util/initialpose_publisher.l:(ros::load-ros-manifest "topic_tools")
jsk_robot_common/jsk_robot_startup/lifelog/tweet_client.l:(ros::load-ros-manifest "roseus")
jsk_robot_common/jsk_robot_startup/lifelog/tweet_client.l:(ros::load-ros-manifest "topic_tools")
jsk_robot_common/jsk_robot_startup/lifelog/time-signal.l:(ros::load-ros-manifest "roseus")
jsk_robot_common/jsk_robot_startup/lifelog/tweet_client_warning.l:(ros::load-ros-manifest "diagnostic_msgs")
jsk_robot_common/jsk_robot_startup/lifelog/speaking-program-is-started-or-terminated.l:(ros::load-ros-manifest "roseus")
jsk_robot_common/jsk_robot_startup/lifelog/active_user.l:(ros::load-ros-manifest "roseus")
jsk_robot_common/jsk_robot_startup/lifelog/active_user.l:(ros::load-ros-manifest "pr2_mechanism_controllers")
jsk_robot_common/jsk_robot_startup/lifelog/active_user.l:(ros::load-ros-manifest "sensor_msgs")
jsk_robot_common/jsk_robot_startup/lifelog/active_user.l:(ros::load-ros-manifest "diagnostic_msgs")
jsk_robot_common/jsk_robot_startup/lifelog/tweet.l:(ros::load-ros-manifest "roseus")
jsk_robot_common/jsk_robot_startup/lifelog/test/test-logger.l:(ros::load-ros-manifest "geometry_msgs")
jsk_robot_common/jsk_robot_startup/lifelog/test/test-logger.l:(ros::load-ros-manifest "pr2_controllers_msgs")
jsk_robot_common/jsk_robot_startup/lifelog/test/test-logger.l:(ros::load-ros-manifest "posedetection_msgs")
jsk_robot_common/roseus_remote/euslisp/remote-roseus-client.l:(ros::load-ros-manifest "roseus_remote")
jsk_robot_common/roseus_remote/euslisp/remote-roseus-server.l:(ros::load-ros-manifest "roseus_remote")
jsk_fetch_robot/fetcheus/fetch-interface.l:(ros::load-ros-manifest "fetcheus")
これを眺めてみると、msg/srvがないpr2eus, jsk_pepper_startup, peppereus, naoeus, naoqieus, baxtereus, fetcheusをload-ros-manifestしているものは、全て動かなくなる恐れがあると思いました。
個人的な理解だと、全て依存関係をpackage.xml
に書いておいて自身のpackageのmanifest.l
のみを読む方式になっていると考えていました。
https://github.com/jsk-ros-pkg/jsk_robot/pull/871 はそういう意図でした。
pythonのように使うものは全て文頭でloadするということですか?
msg/srvがないpr2eus, jsk_pepper_startup, peppereus, naoeus, naoqieus, baxtereus, fetcheusをload-ros-manifestしているものは、全て動かなくなる
全ては動かないくなるのではなくて,https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_robot_common/jsk_robot_startup/lifelog/tweet_client.l#L3
(ros::load-ros-manifest "roseus")
(ros::load-ros-manifest "topic_tools")
みたいにたまたま必要なパッケージをloadしていれば問題ないはずです. が,実際には問題ありそうですね.https://github.com/jsk-ros-pkg/jsk_robot/issues/823#issuecomment-324808685 のケースも実際にはダメそう.
ということで, https://github.com/jsk-ros-pkg/jsk_roseus/pull/555/commits/5ec2e6e7609fcd586a3edb7c06716aed0cd983b0 を作ってみました.ただこれは, https://github.com/jsk-ros-pkg/jsk_roseus/pull/555/commits/87de0da7842afea20598a18d48bbd982ec5c0916 に依存していて,このコードはだいぶ怪しいですね.うまくlibpythonがロードできない時がある気がします.
個人的な理解だと、全て依存関係をpackage.xmlに書いておいて自身のpackageのmanifest.lのみを読む方式になっていると考えていました。
現状はそうなんですが,jade/kinetic からroseusメッセージがデフォルトでコンパイルされてdebに入るようになっているのですが,このコンパイルされるのはmsg/srvがあるパッケージなので
pythonのように使うものは全て文頭でloadするということですか?
という方式にせざるをえないですね,という話です.
-- ◉ Kei Okada
2018年1月7日 20:34 Kei Okada notifications@github.com:
msg/srvがないpr2eus, jsk_pepper_startup, peppereus, naoeus, naoqieus, baxtereus, fetcheusをload-ros-manifestしているものは、全て動かなくなる
全ては動かないくなるのではなくて,https://github.com/jsk-ros-pkg/jsk_ robot/blob/master/jsk_robot_common/jsk_robot_startup/ lifelog/tweet_client.l#L3
(ros::load-ros-manifest "roseus") (ros::load-ros-manifest "topic_tools")
みたいにたまたま必要なパッケージをloadしていれば問題ないはずです. が,実際には問題ありそうですね.jsk-ros-pkg/jsk_robot#823 (comment) https://github.com/jsk-ros-pkg/jsk_robot/issues/823#issuecomment-324808685 のケースも実際にはダメそう.
ということで, 5ec2e6e https://github.com/jsk-ros-pkg/jsk_roseus/commit/5ec2e6e7609fcd586a3edb7c06716aed0cd983b0 を作ってみました.ただこれは, 87de0da https://github.com/jsk-ros-pkg/jsk_roseus/commit/87de0da7842afea20598a18d48bbd982ec5c0916 に依存していて,このコードはだいぶ怪しいですね.うまくlibpythonがロードできない時がある気がします.
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/jsk-ros-pkg/jsk_roseus/issues/554#issuecomment-355816050, or mute the thread https://github.com/notifications/unsubscribe-auth/AAeG3E_gRTg2zTvnPA_p4iSFQrWZekE6ks5tIKusgaJpZM4RVM8Z .
なるほど そうなるとbaxterで使ってるものやAPC系を変更しないとダメですね
すでにaptで入れてあるパッケージをソースからビルドして使おうとした際、
(ros::load-ros-manifest "package_name")
で読み込まれるパッケージ群が、aptで入れてあるバージョンが依存しているものになり、新しく必要になったパッケージがloadされませんでした。 調べて見ると、WORKSPACE_PATH/devel/share/roseus/ros
以下に該当パッケージのmanifest.lが無いことに気づきました。 依存関係が更新されるような変更があった場合、その変更をreleaseまでソースから使おうとした際に問題になると思うのですが、どうでしょうか。以下、再現方法です。 baxtereusが以下のようにインストール済みのものとします。
この状態で、
となり、baxter_core_msgsがloadされません。
ros::load-ros-manifest
でロードされている/opt/ros/indigo/share/roseus/ros/baxtereus/manifest.l
を見ると、となり、baxter_core_msgsがありません。
sudo apt-get purge ros-indigo-baxtereus
をした後、もう一度catkin build
すると、~/test_ws/devel/share/roseus/ros/baxtereus/manifest.l
が生成されます。中身をみると、となっており、baxter_core_msgsが入っています。この状態なら、
となり、正常にloadされました。 これは、https://github.com/jsk-ros-pkg/jsk_robot/pull/779 で追加された依存関係がまだreleaseされていないので、https://github.com/jsk-ros-pkg/jsk_robot/pull/871 のように
ros::load-ros-manifest
だけしかないと、apt側の依存関係が足りないmanifest.lがloadされてしまうのだと思います。