無限と言っても多分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時間溶かす意味あった??
というか他にもっと適切なやり方がありそう・・・