## page was copied from kinetic/Installation/OSX/Homebrew/Source = Installation Instructions for Melodic in macOS (OS X) = This page describes how to install ROS Melodic on macOS. macOS is not officially supported by ROS and the installation might fail. {{{#!wiki solid/yellow This is a '''work in progress'''! At present, the instructions cover only the installation of ROS-Comm (Bare Bones) variant and tested on the following configuration: - macOS Mojave + native (Apple) Python 2.7.10 + XCode 11.2.1 }}} <> == Setup == === Homebrew === First, go to http://brew.sh to install homebrew and install some additional software: . {{{ $ brew update $ brew install cmake $ brew install poco # for class_loader pkg $ brew install gpgme # for rosbag_storage pkg }}} Add our ROS dependencies tap and the Homebrew Core tap so you can get some non-standard formulae: . {{{ $ brew tap ros/deps $ brew tap osrf/simulation # Gazebo, sdformat, and ogre $ brew tap homebrew/core # VTK5 }}} {{{{#!wiki blue/solid '''Note:''' if you are upgrading from previous ROS distro try this before installing: {{{ $ brew untap ros/DISTRO }}} In general it is not recommended to try and install multiple ROS versions at the same time on macOS due to conflicting system dependencies. }}}} === Setup Environment === You will need to tell Python about modules installed by Homebrew. The recommended way of doing this are the following commands: . {{{ $ mkdir -p ~/Library/Python/2.7/lib/python/site-packages $ echo "$(brew --prefix)/lib/python2.7/site-packages" >> ~/Library/Python/2.7/lib/python/site-packages/homebrew.pth }}} === Additional Tools === Finally, we need to install a few ROS python tools using 'pip'. {{{{#!wiki blue/solid If you don't already have pip, install it with: {{{ $ sudo -H python -m pip install -U pip # update pip }}} }}}} Install the following packages using 'pip': . {{{ $ sudo -H pip install -U defusedxml empy pycryptodome $ sudo -H pip install -U wxPython # install python-wxtools $ sudo -H pip install -U wstool rosdep rosinstall rosinstall_generator rospkg catkin-pkg }}} === Initializing rosdep === . {{{ $ sudo -H rosdep init $ rosdep update }}} <> === Modify Some CMake Config Files === Now you will modify four CMake configuration files to avoid some compile and linker issues on MacOS. Edit the files `src/ros_comm/rosbag/CMakeLists.txt` and `src/ros_comm/rosbag_storage/CMakeLists.txt` by adding the lines below. Where you put it doesn’t really matter.. you can just insert them after the project(“package_name”) line at the top of the file. . {{{ # Default to C++14 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() if(APPLE) # Workaround to find missing libraries include_directories("/usr/local/opt/openssl/include") link_directories("/usr/local/opt/openssl/lib") link_directories("/usr/local/lib") # GPGME library endif() }}} Edit the file `src/ros_comm/message_filters/CMakeLists.txt` by removing the Boost.Signals package dependency. Look for the line: . {{{ find_package(Boost REQUIRED COMPONENTS signals thread) }}} and change it to: . {{{ find_package(Boost REQUIRED COMPONENTS thread) }}} Edit the file `src/ros_comm/roscpp/CMakeLists.txt` by removing the Boost.Signals package dependency. Look for the line: . {{{ find_package(Boost REQUIRED COMPONENTS chrono filesystem signals system) }}} and change it to: . {{{ find_package(Boost REQUIRED COMPONENTS chrono filesystem system) }}} ==== Resolving Dependencies ==== Before you can build your catkin workspace you need to make sure that you have all the required dependencies. We use the `rosdep` tool for this: . {{{ $ rosdep install --from-paths src --ignore-src --rosdistro melodic -y --skip-keys google-mock }}} This will look at all of the packages in the `src` directory and find all of the dependencies they have. Then it will recursively install the dependencies. The `--from-paths` option indicates we want to install the dependencies for an entire directory of packages, in this case `src`. The `--ignore-src` option indicates to rosdep that it shouldn't try to install any ROS packages in the `src` folder from the package manager, we don't need it to since we are building them ourselves. The `--rosdistro` option is required because we don't have a ROS environment setup yet, so we have to indicate to rosdep what version of ROS we are building for. The `-y` option indicates to rosdep that we don't want to be bothered by too many prompts from the package manager. The `--skip-keys` option suppresses some dependency error messages. After a while (and maybe some prompts for your password) rosdep will finish installing system dependencies and you can continue. {{{{#!wiki blue/solid '''Note:''' After running `rosdep` you will see the error below, so you may encounter issues when running `roslisp` or `rosbag`. (would be great if someone can test) . {{{ ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies: roslisp: No definition of [python3-mock] for OS [osx] rosbag: No definition of [python-gnupg] for OS [osx] rosbag_storage: No definition of [libgpgme-dev] for OS [osx] }}} }}}} ==== Building the catkin Workspace ==== Once it has completed downloading the packages and resolving the dependencies you are ready to build the catkin packages. We will use the `catkin_make_isolated` command because there are both catkin and plain cmake packages in the base install, when developing on your catkin only workspaces you may choose to use [[catkin/commands/catkin_make]] which only works with `catkin` packages. Invoke `catkin_make_isolated`: . {{{ $ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH=$HOME/ros_catkin_ws/install_isolated/lib }}} {{{#!wiki blue/solid '''Note:''' The -DCMAKE_MACOSX_RPATH and -DCMAKE_INSTALL_RPATH flags are mandatory. They are needed by `roscore` (and other programs) to find the *.dylib libraries at runtime. }}} {{{#!wiki blue/solid '''Note:''' The default catkin installation location would be `~/ros_catkin_ws/install_isolated`, if you would like to install somewhere else then you can do this by adding the `--install-space /opt/ros/melodic` argument to your `catkin_make_isolated` call. For usage on a robot without Ubuntu, it is recommended to install compiled code into `/opt/ros/melodic` just as the Ubuntu packages would do. Don't do this in Ubuntu, as the packages would collide with apt-get packages. It is also possible to install elsewhere (e.g. `/usr`), but it is not recommended unless you really know what you are doing. Please see [[http://ros.org/reps/rep-0122.html|REP 122: Filesystem Hierarchy Layout]] for more detailed documentation on how the installed files are placed. }}} {{{#!wiki blue/solid '''Note:''' In the above command we are running the `catkin_make_isolated` command from the catkin source folder because it has not been installed yet, once installed it can be called directly. }}} Now the packages should have been installed to `~/ros_catkin_ws/install_isolated` or to wherever you specified with the `--install-space` argument. If you look in that directory you will see that a `setup.bash` file have been generated. To utilize the things installed there simply source that file like so: . {{{ $ source ~/ros_catkin_ws/install_isolated/setup.bash }}} ##endinstallation == Maintaining a Source Checkout == {{{#!wiki blue/solid '''Note:''' This section has not been tested. }}} If we want to keep our source checkout up to date, we will have to periodically update our rosinstall file, download the latest sources, and rebuild our workspace. === Update the workspace === To update your workspace, first move your existing rosinstall file so that it doesn't get overwritten, and generate an updated version. For simplicity, we will cover the *destop-full* variant. For other variants, update the filenames and rosinstall_generator arguments appropriately. {{{ $ mv -i melodic-desktop-full.rosinstall melodic-desktop-full.rosinstall.old $ rosinstall_generator desktop_full --rosdistro melodic --deps --tar > melodic-desktop-full.rosinstall }}} Then, compare the new rosinstall file to the old version to see which packages will be updated: {{{ $ diff -u melodic-desktop-full.rosinstall melodic-desktop-full.rosinstall.old }}} If you're satisfied with these changes, incorporate the new rosinstall file into the workspace and update your workspace: {{{ $ wstool merge -t src melodic-desktop-full.rosinstall $ wstool update -t src }}} === Rebuild your workspace === Now that the workspace is up to date with the latest sources, rebuild it: {{{ $ ./src/catkin/bin/catkin_make_isolated --install }}} {{{#!wiki blue/solid If you specified the `--install-space` option when your workspace initially, you should specify it again when rebuilding your workspace }}} Once your workspace has been rebuilt, you should source the setup files again: {{{ $ source ~/ros_catkin_ws/install_isolated/setup.bash }}} == Troubleshooting == Free to add any tips or workarounds found for installing Melodic on macOS. Troubleshooting from previous releases of ROS are located here: http://wiki.ros.org/kinetic/Installation/OSX/Homebrew/Source#Troubleshooting === 'No definition of [google-mock] for OS [osx]' error during rosdep install === Add `--skip-keys google-mock` to `rosdep install` === empy fails === {{{ sudo pip install empy }}} === ‘ImportError: No module named Crypto’ === {{{ sudo pip install pycryptodome }}} === DYLD_LIBRARY_PATH Problems === Rerun catkin_make_isolated with the CMAKE_MACOSX_RPATH and CMAKE_INSTALL_RPATH flags. . {{{ cd ~/ros_catkin_ws ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH=$HOME/ros_catkin_ws/install_isolated/lib }}}