Installing ROS Indigo on MacOSX Yosemite

- - -

# 注意

- 環境によって異なる場合があります。
- 開発が活発のため今後動かなくなるかも。

# 動作環境

- MacBook Pro (Retina, 15-inch, Early 2013)
- 2.8GHz Intel Core i7
- 16GBメモリ
- Intel HD Graphics 4000 1024MB / NVidia GeForce 650M
- MacOSX Yosemite (10.10.1)


```bash:brewconfig
$ brew config
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: cd0f3183b253fb3d3d359a36c6671de92d1b2258
Last commit: 7 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: 8-core 64-bit ivybridge
OS X: 10.10.1-x86_64
Xcode: 6.1.1
CLT: 6.1.1.0.1.1416017670
Clang: 6.0 build 600
X11: 2.7.7 => /opt/X11
System Ruby: 2.0.0-p481
Perl: /usr/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /usr/bin/ruby
```

# インストール

基本はwikiページ
http://wiki.ros.org/indigo/Installation/OSX/Homebrew/Source
に従う。

```bash
# initialize homebrew
$ brew update

# install cmake for ros
# normally $ brew install make
# currently use another make because of python linker problem
# see: https://github.com/Homebrew/homebrew/issues/25118
$ brew remove -f cmake
$ brew install nikolausdemmel/devel/cmake

$ brew tap ros/deps
$ brew tap osrf/simulation  # Gazebo, sdformat, and ogre
$ brew tap homebrew/versions # VTK5
$ brew tap homebrew/science  # others
$ echo 'export PATH=/usr/local/bin:$PATH' >> .bashrc
$ exec -l $SHELL
$ 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
```

```bash
# install ros python tools
$ pip install -U wstool rosdep rosinstall rosinstall_generator rospkg catkin-pkg Distribute sphinx
```

```bash
# initialize rosdep
$ sudo rosdep init
$ rosdep update
```

```bash
# install ros fundamental components
$ mkdir -p ~/ros/indigo
$ cd ~/ros/indigo
$ rosinstall_generator desktop_full --rosdistro indigo --deps --wet-only --tar > indigo-desktop-full-wet.rosinstall
$ wstool init -j8 src indigo-desktop-full-wet.rosinstall
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y
$ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
```

**NOTE** ここで詰まったのでメモ

- pyqwtのインストールでエラー

```bash
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y
executing command [brew install pyqwt]
==> Downloading https://downloads.sourceforge.net/project/pyqwt/pyqwt5/PyQwt-5.2
Already downloaded: /Library/Caches/Homebrew/pyqwt-5.2.0.tar.gz
==> Patching
patching file configure/configure.py
==> python configure.py --module-install-path=/usr/local/Cellar/pyqwt/5.2.0/lib/

Setup the PyQwt package build.
sip invokation:
'/usr/local/Cellar/sip/4.16.3_1/bin/sip -I /usr/local/share/sip -b tmp-qwt5qt4/qwt5qt4.sbf -c tmp-qwt5qt4   -x VendorID -t WS_MACX -x PyQt_NoPrintRangeBug -t Qt_4_8_6 -x Py_v3 -g -x HAS_PYQT_031105 -x HAS_NUMARRAY -x HAS_NUMERIC -x HAS_QWT4 -t Qwt_5_2_0 ../sip/qwt5qt4/QwtModule.sip'
SIP failed to generate the C++ code.

READ THIS: http://git.io/brew-troubleshooting

ERROR: the following rosdeps failed to install
```

依存パッケージのpyqtがprebuiltで入るが、これがいけないみたい。


```bash
$ brew reinstall pyqt --build-from-source
$ brew install pyqwt
```

これで入った。

- gazebo 1.9.7のエラー

gazebo 1.9.7はboost1.57と相性がわるく、qtのmocを作るところでassertがかかってしまいビルドが途中で終わってしまう。

patchを送ろうと思いissueを書いたら対応していただいた。
現在は`brew upgrade gazebo`でインストールできる。
opensourceとSteven Petersさんに感謝。

https://bitbucket.org/osrf/gazebo/issue/1399/build-fails-with-boost-157

- rviz / visualization_turorials

上のgazeboと同じ問題
githubの開発ブランチindigo-develでは対応済みだが、release版では未対応のものをダウンロードしてくる。

rvizはgithubのindigo-develにダウンロード先を変える。
visualization_tutorialsは通常不要なので削除

```bash
$ cd ~/ros/indigo/src
$ wstool set rviz --git git@github.com:ros-visualization/rviz.git -v indigo-devel
$ wstool rm visualization_tutorials/interactive_marker_tutorials
$ wstool rm visualization_tutorials/librviz_tutorial
$ wstool rm visualization_tutorials/rviz_plugin_tutorials
$ wstool rm visualization_tutorials/rviz_python_tutorial
$ wstool rm visualization_tutorials/visualization_marker_tutorials
$ wstool rm visualization_tutorials/visualization_tutorials
```

- ~~rostopicなどpythonでスタティックライブラリを読んでいるコードが落ちる問題~~
=> 別バージョンのcmakeを入れて対処可能

`rostopic list`などを使うと以下のエラーが出る事がある。

```bash
Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6
```

依存パッケージをたどっていくと、rostopic -> rosbag -> roslz4というパッケージにエラーがある模様。

```bash
$ otool -L $CATKIN_WS/install_isolated/lib/python2.7/site-packages/roslz4/_roslz4.so

_roslz4.so:
	_roslz4.so (compatibility version 0.0.0, current version 0.0.0)
	libroslz4.dylib (compatibility version 0.0.0, current version 0.0.0)
	/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.6)
	/usr/local/lib/liblz4.1.dylib (compatibility version 1.0.0, current version 1.5.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
```

なぜかOSXのシステム標準のPythonを参照しているので、Homebrew製のPythonから使うと落ちていたようだ。

```bash
$ install_name_tool -change /System/Library/Frameworks/Python.framework/Versions/2.7/Python /usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/Python _roslz4.so
```

これでSystemからHomebrew系に変えてやると正しく動くようになった。