ROS2 foxyをMac OS Xで動かす

投稿者: | 2020年6月9日

ROS2 foxyがリリースされました。LTSですね!

基本的には公式wikiのとおりにインストールすればいいのですが、ハマりポイントをメモしておきます。

Python 3.8まわり

Ubuntu 20.04の都合なのか、Python 3.8をシステムのデフォルトにする必要があります。
Homebrewのデフォルトは現在のところ3.7なので、公式wiki記載の通り、以下コマンドで対応する必要があります。

brew unlink python 
brew link --force python@3.8

ここで注意しないといけないのは、DashingやEloquentをインストールしていた場合、以前pipでインストールしたパッケージはPython 3.7に紐ついています。
私の環境では、モジュールを一度アンインストールしないとうまく動作しませんでした。(colconがPython 3.7を参照したり、numpyのバージョンエラーが出たりしました)

# Python 3.7でインストールしたモジュール一覧を作成し、全て削除
python3 -m pip freeze > list.txt
python3 -m pip uninstall -y -r list.txt

# ROS2で必要なモジュールのインストール
python3 -m pip install pygraphviz pydot
python3 -m pip install lxml
python3 -m pip install catkin_pkg empy ifcfg lark-parser lxml netifaces numpy pyparsing pyyaml setuptools argcomplete

# colconを使えるように
python3 -m pip install colcon-common-extensions

尚、pyenv-virtualenvでROS2 foxy環境を作ろうと思ったのですが、提供されているバイナリパッケージは/usr/local/bin/pythonに依存しているらしく動作しませんでした。
ソースビルドすればうまくいくかもしれませんが…面倒

brew pin

ROS2のバイナリパッケージはHomebrewでインストールしたパッケージのバージョンに依存してしまっています。
brew upgradeしたときに勝手にバージョンアップしないように設定します。

brew pin asio tinyxml2
brew pin tinyxml eigen pcre poco
brew pin openssl
brew pin qt freetype assimp
brew pin console_bridge
brew pin log4cxx spdlog
brew pin cunit
brew pin sip pyqt5
brew pin cmake

既にバージョンの不整合が起こってしまっている場合、古いパッケージをインストールするように頑張る必要があります。

Homebrew Coreを2020/6/5日時点に戻してインストール、brew pinした後にbrew update、といった手順が良さそうです。

export HOMEBREW_NO_AUTO_UPDATE=1

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
git checkout 77f3f9cda89c72548cc9c25d8b4b12168c426b0f

過去記事に記載している様に、パッケージを一つづつ確認して、git logを見ながらほしいバージョンをインストールすることも可能ですが、かなり面倒です。

Mac OS Xでbrew upgradeしたらROS2が動かなくなった話

 

以下、筆者がインストールした各パッケージのバージョンを記載しておきます。 ※2020年6月9日時点
今後Patch Releaseで新たなバイナリが配布された場合、unpin→upgrade→pinの作業が必要になるかもしれません。

asio 1.16.1
tinyxml2 8.0.0
tinyxml 2.6.2
eigen 3.3.7
pcre 8.44
poco 1.10.1
openssl@1.0.2t 1.0.2t
qt 5.14.2
freetype 2.10.1
assimp 5.0.1
console_bridge 1.0.0
log4cxx 0.10.0_1
spdlog 1.6.1
cunit 2.1-3
cmake 3.17.3

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です