はじめに
ROSConJPや関西ROS勉強会で行われたROS2講習会においてTAをやったり、研究室の後輩にROS2を教えたりしていました。
似たようなところでつまづく人が多かったので、今回はよくあった質問をまとめてみました。
基本的には、ROS2講習会までの範囲で起こりうる内容になっています。
#よくある質問
サンプルを動かしたら、たくさんHello worldが飛んできます。バグですか?
講習会で、備え付けのサンプルである
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener
を動かした際に起こります。明らかに自分のpublishしたHello worldではないものが飛んでくる時があります。
ROS2では同一ネットワーク間に存在するとデータのやりとりをしてしまうので、識別するためのIDを設定するとよいです。
~/.bashrcの一番下に
export ROS_DOMAIN_ID=1225
(1~65532で被らなそうな値)
を追加してあげましょう。
###colcon: command not found
sudo apt install python3-colcon-common-extensions
なぜかバイナリでROS2をインストールしてもcolconはついてこないんですよね...
###colcon buildが通らない
間違えた場所にCMakeLists.txtやpackages.xmlを作り、一回colcon buildして「あっ失敗した!」となった後に正しい場所に置き直してませんか?
一度colcon buildを行うと、パッケージの場所がキャッシュに残り、違う場所に置き直した時に前と違いますよと怒られる仕様になっています。
解決策:colcon buildの実行オプションでキャッシュを削除する
colcon build --cmake-clean-cache
たまにある質問
###パソコンのスペックが低すぎてビルドが途中で落ちる
ROS2のビルドは、デフォルトでは4並列で行うようになっており、低スペックPCやラズパイだとうまく行かないことがあります。
解決策:colcon buildの実行オプションで並列実行数を1にする
colcon build --parallel-workers 1
###macOSで動かない...
実は、macOSでサポートされている(動作検証が行われている)のは、Sierra(10.12)だけです。(参考:https://index.ros.org/doc/ros2/Installation/Dashing/OSX-Install-Binary/#system-requirements )
最新のCatalinaが10.15であることを考えるとだいぶ古いです。新しいバージョンでも動くのですが、ライブラリが新しすぎてエラーが起きる場合があります。
エラーの中に
Library not loaded: /usr/local/opt/(ライブラリ名)
がある場合がそれです。
Mojave(10.14)はよく使われていて、ros2のissueに上がっていることも多いですが、取り上げられていない場合エラーメッセージから検討をつけるしかないです。
解決策:該当ライブラリのダウングレード
ダウングレードの参考:https://blog.spiralray.net/archives/978
Dashingなど古いdistroで起こりやすいらしいので、新しいEloquentを使うのもいいかもしれません。
#その他一回だけあった質問
colcon testってどうかけばいいの?
各パッケージにCTestとpytestを書けばいいらしいです。テスト大事ですね(戒め)
windowsでROS2使えるんでしょ?
使えるらしいですが、Ubuntuで普通に動かすよりもはるかにハマりポイントが多いらしいです。
zshって使えるの?
使えます。ROS2インストールフォルダにsetup.zshがあるのでそちらを読み込んでください。
一つのPCにDashingやCrystalなどの複数のバージョンを入れて動かせる?
多分推奨はされませんが、ある程度動かせることは確認しています。
Ubuntu16.04で動かせますか?
Crystalまでは動かせます。ただDashingは動かないと思います。(公式でもサポートされていません)
私がやった時はpython3.5じゃ古すぎると言われて動きませんでした。
#まとめ
colcon build -h
でオプションを一通り確認しておくといいかもしれません。
--continue-on-error(失敗したパッケージがあっても全体のビルドが止まらない)、--packages-select(特定のパッケージだけビルドする)など色々な状況に対応できるようになっています。
ROS2はLinuxでもmacOSでもwindowsでも動くよ!とは言われていますが、今の所最低限動かすだけでも、Linux > macOS >> (超えられない壁) >> windowsという感じです。
macOSのHomebrewバージョン依存の問題は把握しづらいので、自分でなんとかできる中級者向けです。
windowsはパッケージ管理ソフトがなく手順がややこしい上、人口が少なすぎて問題共有の機会すら少ないのが難しさに拍車をかけている状況です。
#参考
同一ネットワーク内で複数人がROS2を使用する場合 https://qiita.com/NeK/items/6163d5a307665a3c9c1c
ROS2ではじめよう 次世代ロボットプログラミング