macOS 源码编译
我们目前支持 macOS Mojave (10.14)。 Rolling Ridley 发行版会随着新平台的可用而不时更改目标平台。 大多数用户会希望使用稳定的 ROS 发行版。
安装前提条件
Section titled “安装前提条件”构建 ROS 2 需要安装以下内容:
-
Xcode
-
如果尚未安装,请安装 Xcode。
-
注意:11.3.1 之后的 Xcode 版本无法在 macOS Mojave 上安装,因此你需要手动安装旧版本,参见 https://stackoverflow.com/a/61046761
-
此外,如果尚未安装 Command Line Tools,请安装:
Terminal window xcode-select --installsudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
注意:
如果手动安装了 Xcode.app,则需要接受 Xcode.app 许可证。 你可以通过打开 Xcode.app 或运行以下命令来完成:
Terminal window sudo xcodebuild -license -
-
brew (需要用它来安装更多依赖;你可能已经有了):
-
按照 http://brew.sh/ 上的安装说明进行操作。
-
可选:运行以下命令检查
brew是否认可你的系统配置:Terminal window brew doctor修复它报告的任何问题。
-
-
使用
brew安装更多依赖:Terminal window $ brew install asio assimp bison bullet cmake console_bridge cppcheck \cunit eigen freetype graphviz opencv openssl orocos-kdl pcre poco \pyqt@5 python qt@5 sip spdlog tinyxml2 -
设置一些环境变量:
Terminal window ~ Add the openssl dir for DDS-Security~ if you are using BASH, then replace '.zshrc' with '.bashrc'$ echo "export OPENSSL_ROOT_DIR=$(brew --prefix openssl)" >> ~/.zshrc~ Add the Qt directory to the PATH and CMAKE_PREFIX_PATH$ export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$(brew --prefix qt@5)$ export PATH=$PATH:$(brew --prefix qt@5)/bin -
使用
python3 -m pip(直接用pip可能安装到 Python 2)安装更多依赖:Terminal window $ python3 -m pip install --upgrade pip$ python3 -m pip install -U \--config-settings="--global-option=build_ext" \--config-settings="--global-option=-I$(brew --prefix graphviz)/include/" \--config-settings="--global-option=-L$(brew --prefix graphviz)/lib/" \argcomplete catkin_pkg colcon-common-extensions coverage \cryptography empy flake8 flake8-blind-except==0.1.1 flake8-builtins \flake8-class-newline flake8-comprehensions flake8-deprecated \flake8-import-order flake8-quotes \importlib-metadata jsonschema lark==1.1.1 lxml matplotlib mock mypy==0.931 netifaces \psutil pydot pygraphviz pyparsing==2.4.7 \pytest-mock rosdep rosdistro setuptools==59.6.0 vcstool请确保
$PATH环境变量包含二进制文件的安装位置($(brew --prefix)/bin) -
可选:如果你想构建 ROS 1 与 ROS 2 之间的桥接(bridge),则还必须安装 ROS 1:
-
从正常的安装说明开始:http://wiki.ros.org/kinetic/Installation/OSX/Homebrew/Source
-
当你执行到调用
rosinstall_generator获取源代码的步骤时,可以使用以下替代命令,仅引入生成有用桥接所需的最少内容:Terminal window rosinstall_generator catkin common_msgs roscpp rosmsg --rosdistro kinetic --deps --wet-only --tar > kinetic-ros2-bridge-deps.rosinstallwstool init -j8 src kinetic-ros2-bridge-deps.rosinstall否则,按照正常说明操作,然后在继续构建 ROS 2 之前 source 生成的
install_isolated/setup.bash。
-
禁用系统完整性保护(SIP)
Section titled “禁用系统完整性保护(SIP)”macOS/OS X 版本 >=10.11 默认启用系统完整性保护(System Integrity Protection)。
若要进程能够继承动态链接器环境变量(例如 DYLD_LIBRARY_PATH),你需要按照 这些说明 禁用 SIP。
构建 ROS 2
Section titled “构建 ROS 2”获取 ROS 2 代码
Section titled “获取 ROS 2 代码”创建一个工作空间并克隆所有仓库:
mkdir -p ~/ros2_{DISTRO}/srccd ~/ros2_{DISTRO}vcs import --input https://raw.githubusercontent.com/ros2/ros2/{REPOS_FILE_BRANCH}/ros2.repos src安装其他 RMW 实现(可选)
Section titled “安装其他 RMW 实现(可选)”ROS 2 使用的默认中间件是 Fast DDS,但中间件(RMW)可以在构建时或运行时替换。
有关如何使用多个 RMW 的指南,请参见 使用多种 RMW 实现。
构建工作空间中的代码
Section titled “构建工作空间中的代码”运行 colcon 工具来构建所有内容(有关使用 colcon 的更多信息,请参阅 Colcon 教程):
cd ~/ros2_{DISTRO}/colcon build --symlink-install --packages-skip-by-dep python_qt_binding注意:由于 SIP、Qt@5 和 PyQt5 之间存在未解决的问题,我们需要禁用 python_qt_binding 才能使构建成功。
当问题解决后,此限制将被移除,参见 https://github.com/ros-visualization/python_qt_binding/issues/103
Source ROS 2 的 setup 文件:
. ~/ros2_{DISTRO}/install/setup.zsh这将自动为所有已构建支持的 DDS 供应商设置环境。
尝试一些示例
Section titled “尝试一些示例”在一个终端中,按上述方法设置 ROS 2 环境,然后运行一个 C++ talker:
ros2 run demo_nodes_cpp talker在另一个终端中 source setup 文件,然后运行一个 Python listener:
ros2 run demo_nodes_py listener你应该看到 talker 显示它正在发布(Publishing)消息,而 listener 显示它收到了(I heard)这些消息。
这验证了 C++ 和 Python API 都正常工作。
继续学习教程,配置你的环境,创建自己的工作空间和包,并学习 ROS 2 核心概念。
参阅「维护源码检出」以定期刷新你的源码安装。
故障排除技巧请参阅 macOS 故障排除一节。
-
如果你按照上述说明使用 colcon 安装了工作空间,“卸载”只需打开一个新终端,而不 source 工作空间的
setup文件即可。 这样,你的环境将表现得好像系统上没有安装DISTRO_TITLE一样。 -
如果你还想释放空间,可以删除整个工作空间目录:
Terminal window rm -rf ~/ros2_{DISTRO}