在macOS上构建ROS 2

系统要求

我们支持macOS 10.14 (Mojave)。 [待校准@5706]

但是,一些新版本 (如10.13.x) 和一些旧版本 (如10.11.x和10.10.x) 也可以使用。 [待校准@5707]

安装先决条件 [待校准@5708]

为了编译ROS 2,您需要安装以下内容: [Alyssa@5709]

  1. Unix [待校准@5710]

    • 如果尚未安装,请安装Xcode。 [待校准@5711]

    • 注意: 11.3.1之后的Xcode版本无法再安装在macOS Mojave上,因此您需要手动安装旧版本,请参阅: https://stackoverflow.com/a/61046761 [Alyssa@5712]

    • 另外,如果尚未安装它,请通过命令行工具安装: [Alyssa@5713]

      xcode-select --install
      # This command will not succeed if you have not installed Xcode.app
      sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
      # If you installed Xcode.app manually, you need to either open it or run:
      sudo xcodebuild -license
      # To accept the Xcode.app license
      
  2. brew * (需要安装更多的东西; 你可能已经安装了这个工具) *: [Alyssa@5714]

  3. 使用 brew 安装更多包: [Alyssa@5718]

    brew install cmake cppcheck eigen pcre poco tinyxml wget bullet
    
    brew install python@3.8
    brew unlink python
    # Make the python command be Python 3.8
    brew link --force python@3.8
    
    # install dependencies for Fast-RTPS if you are using it
    brew install asio tinyxml2
    
    brew install opencv
    
    # install console_bridge for rosbag2
    brew install console_bridge
    
    # install OpenSSL for DDS-Security
    brew install openssl
    # if you are using ZSH, then replace '.bashrc' with '.zshrc'
    echo "export OPENSSL_ROOT_DIR=$(brew --prefix openssl)" >> ~/.bashrc
    
    # install dependencies for rcl_logging
    brew install log4cxx spdlog
    
    # install CUnit for Cyclone DDS
    brew install cunit
    
  4. 安装rviz的依赖项 [Alyssa@5719]

    # install dependencies for Rviz
    brew install qt@5 freetype assimp
    
    # Add the Qt directory to the PATH and CMAKE_PREFIX_PATH
    export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:/usr/local/opt/qt@5
    export PATH=$PATH:/usr/local/opt/qt@5/bin
    
  5. 安装rqt的依赖项 [Alyssa@5720]

    brew install graphviz pyqt5 sip
    
  6. 使用 python3 -m pip ( pip 可能安装Python3或Python2) 安装更多包: [Alyssa@5721]

    python3 -m pip install -U \
     argcomplete catkin_pkg colcon-common-extensions coverage \
     cryptography empy flake8 flake8-blind-except flake8-builtins \
     flake8-class-newline flake8-comprehensions flake8-deprecated \
     flake8-docstrings flake8-import-order flake8-quotes ifcfg \
     importlib-metadata lark-parser lxml mock mypy==0.761 netifaces \
     nose pep8 pydocstyle pydot pygraphviz "pyparsing>=2.4,<3" \
     pytest-mock rosdep rosdistro setuptools vcstool
    

    请确保 “$ PATH'' 环境变量包含了二进制文件的安装位置 (默认值:“ $ HOME/Library/Python/<version>/bin'') [Alyssa@5722]

  7. Optional: if you want to build the ROS 1<->2 bridge, then you must also install ROS 1:

    • 从标准安装说明开始: https://wiki.ros.org/kinetic/Installation/OSX/Homebrew/Source [Alyssa@5724]

    • 当您进行调用 rosinstall_generator 来获取源文件的步骤时,这里有一个可选命令,它只安装一些为了生成有用的bridge所需的最低限度依赖包: [Alyssa@5725]

      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 文件。 [Alyssa@5726]

禁用系统完整性保护 (SIP)

macOS/OS X版本 > = 10.11时默认情况下启用了系统完整性保护。为使SIP不阻止继承动态链接器的环境变量的进程,如 DYLD_LIBRARY_PATH ,你需要禁用它 参考此说明文档[Alyssa@5728]

获取ROS 2代码

创建工作空间并克隆所有仓库: [Alyssa@5492]

mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy
wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos

安装其他DDS供应商 (可选) [待校准@5729]

如果你想使用除了默认的eProsima的快速RTPS,以外的DDS或RTPS供应商,你可以在 here 找到说明。 [Alyssa@5496]

编译ROS 2代码 [Alyssa@5604]

运行 colcon 工具来编译一切 (更多关于 colcon 的使用在 this tutorial 中): [Alyssa@5730]

cd ~/ros2_foxy/
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 [Alyssa@5731]

环境设置

设置ROS 2安装文件的环境变量: [Alyssa@5732]

. ~/ros2_foxy/install/setup.bash

这将自动为其支持的任何DDS供应商设置编译环境。 [Alyssa@5611]

尝试运行一些例子 [Alyssa@5504]

在一个终端中,如上所述设置ROS 2环境,然后运行一个c++的 talker : [Alyssa@5733]

ros2 run demo_nodes_cpp talker

在另一个终端源文件中,source安装文件,然后运行一个Python的 listener : [Alyssa@5545]

ros2 run demo_nodes_py listener

你应该看到了 talker 说这是 Publishing 消息 ,listenerI heard 这些消息。这证明了C++和Python的APIs都是正常工作的。万岁! [Alyssa@5507]

安装后的下一步

继续使用 tutorials and demos 来配置您的环境,创建您自己的工作空间和包,并学习ROS 2核心概念。 [Alyssa@5734]

使用ROS 1 bridge

ROS 1bridge可以连接从ROS 1到ROS 2的话题,反之亦然。看看这个专门的文献 documentation 如何编译和使用ROS 1bridge。 [Alyssa@5511]

附加RMW实现 (可选)

ROS 2使用的默认中间件是 Fast-RTPS ,但中间件 (RMW) 可以在运行时进行替换。查看 guide 了解如何使用多个RMWs。 [Alyssa@5513]

了解最新情况 [Alyssa@5518]

请参阅 维护ROS 2Foxy源文件的检出 以定期的刷新安装源。 [Alyssa@5519]

故障排除

故障排除技术可以参考 here[Alyssa@5735]

卸载

  1. 如果你按照上面的指示用colcon安装了你的工作空间, "uninstalling" 可能只是打开一个新的终端,而没有source工作空间的 setup 文件。因此,您的环境就会表现得好像您的系统上没有安装Foxy。 [Alyssa@5523]

  2. 如果您还打算释放所有空间,则可以使用以下命令删除整个工作空间的目录: [Alyssa@5524]

    rm -rf ~/ros2_foxy