Instalación de ROS 2 en Mac OS


Este tutorial muestra como realizar una instalación de ROS 2 en OS X. Antes de poder proceder a la instalación de ROS 2 son necesarios algunos requisitos previos. En este tutorial se utilizaran binarios ya compilados, recuerda que existen otros métodos para instalar ROS 2.

También puedes realizar la instalación en Linux. Para ello accede al Tutorial 2.

¿Necesitas más capacidad de cómputo? Estate atento

Antes de instalar ROS 2 son necesarios los siguientes elementos:

Es muy importante que lea los términos de condiciones y los acepte para descargar el archivo .dmg de "Mac OS X x64"

Instale JDK desde el .dmg.

Opcionalmente compruebe la version de java sea 1.8:

$ find /Library/Java | grep jni.h
  /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/include/jni.h
$ java -version
  java version "1.8.0_60"
  Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
  Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

Es necesario para instalar programas necesarios, pero es probable que ya dispongas de este gestor. Las instrucciones de instalación se encuentran en http://brew.sh/

Es necesario que se añadan los siguientes orígenes a brew:

brew tap osrf/ros2
brew tap ros/deps

brew install homebrew/science/opencv --without-python
brew install python3 wget cmake cppcheck gtest

Use pip3 (no pip, se instalara junto con Python) para instalar más programas necesarios:

pip3 install empy setuptools nose vcstool pep8 pydocstyle pyflakes flake8 mock coverage

Las siguiente lineas importaran los repositorios de ROS 2:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
wget https://raw.githubusercontent.com/ros2/ros2/release-latest/ros2.repos
vcs import ~/ros2_ws/src < ros2.repos

El siguiente comando construirá ROS 2. Puede tomar un rato. En caso de que el comando no termine correctamente acude a la sección Troubleshooting.

cd ~/ros2_ws
src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install

En una terminal ejecutar el siguiente bash y tras este el 'talker'

. ~/ros2_install/ros2-osx/setup.bash
talker

En otra terminar ejecutar el mismo bash y tras este el 'listener'

. ~/ros2_install/ros2-osx/setup.bash
liste

Si todo es correcto, deberías de observar como el listener es capaz de escuchar los mensajes que publica el talker.

En caso de que CLT este actualizado a 10.10.3 deberías de obtener este error:

[100%] Building CXX object CMakeFiles/rmw_connext_cpp.dir/src/functions.cpp.o
In file included from /Users/william/ros2/src/ros2/rmw_connext/rmw_connext_cpp/src/functions.cpp:15:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iostream:38:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/ios:216:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/__locale:15:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/string:439:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:628:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:604:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:341:10: fatal error: '__debug' file not found
#include <__debug>
         ^
1 error generated.
make[2]: *** [CMakeFiles/rmw_connext_cpp.dir/src/functions.cpp.o] Error 1
make[1]: *** [CMakeFiles/rmw_connext_cpp.dir/all] Error 2
make: *** [all] Error 2

La solución es la siguiente (http://stackoverflow.com/a/29576048/671658):

$ echo '#define _LIBCPP_ASSERT(x, m) ((void)0)' | sudo tee -a /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug > /dev/null

Puede deshacerse con:

$ sudo rm /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug

Si tienes opencv instalado deberías de obtener lo siguiente:

dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
/bin/sh: line 1: 25274 Trace/BPT trap: 5       /usr/local/bin/cmake

De ser así, necesitas realizar lo siguiente:

$ brew unlink libpng libtiff libjpeg

Lo anterior rompera opencv, por lo que necesitaras actualizarlo para continuar trabajando:

$ sudo install_name_tool -change /usr/local/lib/libjpeg.8.dylib /usr/local/opt/jpeg/lib/libjpeg.8.dylib /usr/local/lib/libopencv_highgui.2.4.dylib
$ sudo install_name_tool -change /usr/local/lib/libpng16.16.dylib /usr/local/opt/libpng/lib/libpng16.16.dylib /usr/local/lib/libopencv_highgui.2.4.dylib
$ sudo install_name_tool -change /usr/local/lib/libtiff.5.dylib /usr/local/opt/libtiff/lib/libtiff.5.dylib /usr/local/lib/libopencv_highgui.2.4.dylib
$ sudo install_name_tool -change /usr/local/lib/libjpeg.8.dylib /usr/local/opt/jpeg/lib/libjpeg.8.dylib /usr/local/Cellar/libtiff/4.0.4/lib/libtiff.5.dylib

El primer comando es necesario para evitar que se construya en contra del sistema libjpeg (etc.) desde la version de /usr/local/lib. El resto esta actualizando las cosas construidas por Homebrew que encuentran la version de libjpeg (etc.) sin tenerlas en /usr/local/lib.