Skip to content

macOS 源码编译

我们目前支持 macOS Mojave (10.14)。 Rolling Ridley 发行版会随着新平台的可用而不时更改目标平台。 大多数用户会希望使用稳定的 ROS 发行版。

构建 ROS 2 需要安装以下内容:

  1. Xcode

    • 如果尚未安装,请安装 Xcode。

    • 注意:11.3.1 之后的 Xcode 版本无法在 macOS Mojave 上安装,因此你需要手动安装旧版本,参见 https://stackoverflow.com/a/61046761

    • 此外,如果尚未安装 Command Line Tools,请安装:

      Terminal window
      xcode-select --install
      sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

    注意:

    如果手动安装了 Xcode.app,则需要接受 Xcode.app 许可证。 你可以通过打开 Xcode.app 或运行以下命令来完成:

    Terminal window
    sudo xcodebuild -license
  2. brew (需要用它来安装更多依赖;你可能已经有了):

    • 按照 http://brew.sh/ 上的安装说明进行操作。

    • 可选:运行以下命令检查 brew 是否认可你的系统配置:

      Terminal window
      brew doctor

      修复它报告的任何问题。

  3. 使用 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
  4. 设置一些环境变量:

    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
  5. 使用 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)

  6. 可选:如果你想构建 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.rosinstall
      wstool init -j8 src kinetic-ros2-bridge-deps.rosinstall

      否则,按照正常说明操作,然后在继续构建 ROS 2 之前 source 生成的 install_isolated/setup.bash。

macOS/OS X 版本 >=10.11 默认启用系统完整性保护(System Integrity Protection)。 若要进程能够继承动态链接器环境变量(例如 DYLD_LIBRARY_PATH),你需要按照 这些说明 禁用 SIP。

创建一个工作空间并克隆所有仓库:

Terminal window
mkdir -p ~/ros2_{DISTRO}/src
cd ~/ros2_{DISTRO}
vcs import --input https://raw.githubusercontent.com/ros2/ros2/{REPOS_FILE_BRANCH}/ros2.repos src

ROS 2 使用的默认中间件是 Fast DDS,但中间件(RMW)可以在构建时或运行时替换。 有关如何使用多个 RMW 的指南,请参见 使用多种 RMW 实现。

运行 colcon 工具来构建所有内容(有关使用 colcon 的更多信息,请参阅 Colcon 教程):

Terminal window
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 文件:

Terminal window
. ~/ros2_{DISTRO}/install/setup.zsh

这将自动为所有已构建支持的 DDS 供应商设置环境。

在一个终端中,按上述方法设置 ROS 2 环境,然后运行一个 C++ talker:

Terminal window
ros2 run demo_nodes_cpp talker

在另一个终端中 source setup 文件,然后运行一个 Python listener:

Terminal window
ros2 run demo_nodes_py listener

你应该看到 talker 显示它正在发布(Publishing)消息,而 listener 显示它收到了(I heard)这些消息。 这验证了 C++ 和 Python API 都正常工作。

继续学习教程,配置你的环境,创建自己的工作空间和包,并学习 ROS 2 核心概念。

参阅「维护源码检出」以定期刷新你的源码安装。

故障排除技巧请参阅 macOS 故障排除一节。

  1. 如果你按照上述说明使用 colcon 安装了工作空间,“卸载”只需打开一个新终端,而不 source 工作空间的 setup 文件即可。 这样,你的环境将表现得好像系统上没有安装 DISTRO_TITLE 一样。

  2. 如果你还想释放空间,可以删除整个工作空间目录:

    Terminal window
    rm -rf ~/ros2_{DISTRO}