LoginSignup
2
2

More than 3 years have passed since last update.

ROS2 Dashing で python のパッケージを作ったら package not foundで無限にハマった

Last updated at Posted at 2019-10-23

無限と言っても多分4,5時間くらいなんですが

環境

  • Mac Mojave
  • Ubuntu 18.04 on Virtualbox

ハマった問題

1: mac上でROS2のパッケージをpythonで実装した

cd <ros2_ws>/src
ros2 pkg create package_python

2: ROS2はpython使う場合とC++使う場合でややパッケージ作成手順が異なるので、以下のサイトなどを参考に必要なファイルを作る
How to create & test a Publisher in ROS2 (Python)

3: ビルドして実行、うまく動くことを確認する

$ cd <ros2_ws>
$ colcon build
$ source install/setup.bash && source install/local_setup.bash
$ ros2 run package_python node_python  #worked

4: コードをGitHubにpushし、ラズパイやVirtualbox上のUbuntu18からclone

5: 普通にビルド・実行


$ colcon build
$ source install/setup.bash && source install/local_setup.bash
$ ros2 run package_python node_python

Package 'package_python' not found

は?

github側の設定やコードのミスかと思い、先ほどのサイト(How to create & test a Publisher in ROS2 (Python))を参考にして、というかコードに関しては丸々コピペしてビルド
もちろんビルド時エラーなし

Package 'ros2_pub_py' not found

は??

ちなみに実行ファイルは正しい場所にありました


$ ls install/ros2_pub_py/lib/ros2_pub_py/
sos_publisher

え〜〜〜・・・・・

上にある実行ファイルを直接指定すればなんの問題もなく動くんですが、なんかやだ・・・・

解決策(?)

解決策として、予めC++のパッケージをビルドして、フォルダの中身をpythonのものに置き換えるというものが有効でした。
つまり、まず普通にパッケージを作り、初期状態のままビルドします。

$ ros2 pkg create package_python
$ cd <ros2_ws>
$ colcon build
$ source install/setup.bash

ビルド後にコマンドからパッケージが確かに追加されていることを確認します

$ ros2 pkg list | grep package_python

パッケージが存在した場合、最後にパッケージフォルダの内容をpythonのものと置き換えます。
gitから撮ってきたやつを写してもいいですし、新しく作ってもよいです。

# 例えば~/package_python にpython実装したノードがあるとします
$ cd <ros2_ws>/src/
$ rm -r package_python
$ mv ~/pakcage_python ./

で、あとは再度ビルドして実行します


$ cd <ros2_ws>
$ colcon build
$ source install/setup.bash
$ ros2 run package_python node_python #worked!!

以上です

結論

一応macとUbuntu両方において有効なやり方みたいです
これ5時間溶かす意味あった??

というか他にもっと適切なやり方がありそう・・・

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2