OSX 10.15 Catalina に ROS2 Foxy Fitzroyをインストールしてサンプルプログラムのビルドまで行います。 ROS2 Foxy FitzroyはmacOS Mojave (10.14)までの対応となっていますが、Catalinaでも動作させることができます。
ROS2 セットアップ
基本手順
ROS2のビルド済みバイナリを用いるセットアップをまず行います。 以下のサイトの手順通りで問題ありませんでした。 https://index.ros.org/doc/ros2/Installation/Foxy/macOS-Install-Binary/
ビルドすると起こる問題の対処
Qt5について
Qt用のcmake fileが見つからない以下のエラーが出ます。
--- stderr: turtlesim
CMake Error at CMakeLists.txt:15 (find_package):
By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt5", but
CMake did not find one.
Could not find a package configuration file provided by "Qt5" with any of
the following names:
Qt5Config.cmake
qt5-config.cmake
Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
to a directory containing one of the above files. If "Qt5" provides a
separate development package or SDK, be sure it has been installed.
---
~/.bash_profile
に以下を追記してcmakeにQtの場所を明示すれば問題なくなります。
echo "export Qt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5" >> ~/.bash_profile
source ~/.bash_profile
openSSL について
ROSの通信の暗号化に使われるファイルが見つからないエラーが出ます。
--- stderr: turtlesim
ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libturtlesim__rosidl_typesupport_fastrtps_cpp.dylib] Error 1
make[1]: *** [CMakeFiles/turtlesim__rosidl_typesupport_fastrtps_cpp.dir/all] Error 2
make: *** [all] Error 2
make: INTERNAL: Exiting with 5 jobserver tokens available; should be 4!
---
そこで、brewでinstallしたopenSSLから静的リンクを貼ってやって見つかるようにします。
まず既存のファイルが壊れてしまわないように念の為バックアップを作ります。 そのためには “System Integrity Protection” の解除が必要です。 ROS2のinstall手順で必要なのですでにやっているはずですが、やっていない場合は https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html の手順に従って解除します。
次にroot directoryをreadonlyでない状態でマウントします。
これをやっておかないと Read-only file system
と言われます。
sudo mount -r -w /
以下の2ファイルをバックアップしておきます
sudo mv /usr/lib/libssl.dylib /usr/lib/libssl.dylib.bak
sudo mv /usr/lib/libcrypto.dylib /usr/lib/libcrypto.dylib.bak
次にhome brewでinstallしたopenSSLのdlibから静的リンクを張ります。 home brewでinstallしたdlibファイル一覧を確認します。
$ brew list openssl | grep lib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libcrypto.a
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/pkgconfig/openssl.pc
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/pkgconfig/libssl.pc
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/pkgconfig/libcrypto.pc
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libssl.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libssl.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libcrypto.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libssl.a
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/engines-1.1/padlock.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/engines-1.1/capi.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libcrypto.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/share/man/man3/ERR_get_next_error_library.3ssl
/usr/local/Cellar/openssl@1.1/1.1.1g/share/man/man3/ERR_lib_error_string.3ssl
/usr/local/Cellar/openssl@1.1/1.1.1g/share/man/man3/SSL_library_init.3ssl
/usr/local/Cellar/openssl@1.1/1.1.1g/share/doc/openssl/html/man3/SSL_library_init.html
/usr/local/Cellar/openssl@1.1/1.1.1g/share/doc/openssl/html/man3/ERR_lib_error_string.html
/usr/local/Cellar/openssl@1.1/1.1.1g/share/doc/openssl/html/man3/ERR_get_next_error_library.html
以下の2つのファイルを使う必要があります。
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libssl.1.1.dylib
/usr/local/Cellar/openssl@1.1/1.1.1g/lib/libcrypto.1.1.dylib
静的リンクを張ります。
sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1g/lib/libssl.1.1.dylib /usr/lib/libssl.dylib
sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1g/lib/libcrypto.1.1.dylib /usr/lib/libcrypto.dylib
サンプルのビルド
https://index.ros.org/doc/ros2/Tutorials/Workspace/Creating-A-Workspace/ の手順のとおりにサンプルプロジェクトがビルドできるか確認します。 colconが必要ですので入れます。
python3 -m pip install colcon-common-extensions
ビルドします。
mkdir -p ~/ros2_example_ws/src
cd ~/ros2_example_ws/src
git clone https://github.com/ros/ros_tutorials.git -b foxy-devel
cd ..
colcon build
ビルドが成功しました。
$ colcon build
Starting >>> turtlesim
[Processing: turtlesim]
[Processing: turtlesim]
Finished <<< turtlesim [1min 30s]
Summary: 1 package finished [1min 30s]
別の端末を開いてビルドしたturtle_simを実行すると動作します。
. install/local_setup.bash
ros2 run turtlesim turtlesim_node