Raspberry Pi 2へのROS Indigo/Ubuntu/OpenCV3他開発環境のインストール(ログ)

## はじめに: 素直に終わらなかったので…
下記に従えば簡単にインストール…ROSだけはできず、かなり難航しました。
2016/5時点での一連の最新のパッケージの状況かもしれず、インストールで行ったことをまとめておきます。
ROS以外にも、開発環境の設定で参考になりそうなことは全て記載してみます。(半分はメモ…)

(2016/5/15 VNCのインストール手順を追記)

### インストール手順として参考にした情報

- [RPi用Ubuntu手順] [RaspberryPi | Ubuntu wiki](https://wiki.ubuntu.com/ARM/RaspberryPi#Ubuntu_14.04_LTS)
- [ROS手順] [ROS Indigo の Ubuntu へのインストール | ROS.org](http://wiki.ros.org/ja/indigo/Installation/Ubuntu)
- [OpenCV3手順] [Install OpenCV 3.0 and Python 2.7+ on Ubuntu | pyimagesearch](http://www.pyimagesearch.com/2015/06/22/install-opencv-3-0-and-python-2-7-on-ubuntu/)

### インストールした環境
- Ubuntu 14.04 LTS
- ROS Indigo
- OpenCV 3.0.0

## Ubuntuのインストール

Ubuntu自体は問題なくインストールできた。

[[RPi用Ubuntu手順]](https://wiki.ubuntu.com/ARM/RaspberryPi#Ubuntu_14.04_LTS) に基本的には従い、下記を実施:

### 1. イメージをmicroSDへ書き込み
手順にリンクしてあるイメージをそのまま利用。
- [Download 2015-04-06-ubuntu-trusty.zip](http://www.finnie.org/software/raspberrypi/2015-04-06-ubuntu-trusty.zip)

### (参考) sshインストール
	$ sudo apt-get update
	$ sudo apt-get install openssh-server

### (参考) UTF-8ワーニング対策
※ この設定があるコンソールで下記がログイン時に警告されることへの対策: LC_ALL=ja_JP.UTF-8

"-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)"

	$ export LANGUAGE=ja_JP.UTF-8
	$ export LANG=ja_JP.UTF-8
	$ export LC_ALL=ja_JP.UTF-8
	$ sudo locale-gen ja_JP.UTF-8

* こちらの方法で良いかもしれない --> [Debian/Ubuntuのデフォルトロケールを変更する | Qiita](http://qiita.com/tailak/items/77b90a4df07e4f6a1fc2)

### 2. ディスク容量確保
※ 意味を理解せず実施するとパーティションが壊れ、イメージの書き込みからやり直しになるので注意して下さい。

	$ sudo fdisk /dev/mmcblk0

コンソールでこのとおり行った:
> Delete the second partition (d, 2), then re-create it using the defaults (n, p, 2, enter, enter), then write and exit (w). Reboot the system, then:

	$ sudo resize2fs /dev/mmcblk0p2

### 3. OSとデスクトップ、Video driver
	$ sudo apt-get install linux-firmware
	$ sudo apt-get install lubuntu-desktop
	$ sudo apt-get install xserver-xorg-video-fbturbo

こちらも実施。
> Then add this to /etc/X11/xorg.conf (create if it doesn't already exist):

	Section "Device"
	    Identifier "Raspberry Pi FBDEV"
	    Driver "fbturbo"
	    Option "fbdev" "/dev/fb0"
	    Option "SwapbuffersWait" "true"
	EndSection

### 4. Video core他
	$ sudo apt-get install libraspberrypi-bin libraspberrypi-dev
	$ sudo ln -s /usr /opt/vc
	$ sudo apt-get install libraspberrypi-bin-nonfree

※シリアルコンソールはスキップ
(以上問題なし)

## ROSのインストール (難航、この記事の本題)

[[ROS手順]](http://wiki.ros.org/ja/indigo/Installation/Ubuntu) では、いくつか問題が出てしまったので下記のように解決。

### 1. リポジトリのrestricted・universe・multiverse設定
[https://help.ubuntu.com/community/Repositories/Ubuntu](https://help.ubuntu.com/community/Repositories/Ubuntu)
こちらに書いてあるとおりで、GUIを操作して設定。

### 2. sources.listを設定
	$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'

### 3. 鍵の設定
	$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

### 4. パッケージのアップデート、インストール
	ubuntu@ubuntu:~$ sudo apt-get install ros-indigo-desktop-full
	Reading package lists... Done
	Building dependency tree       
	Reading state information... Done
	E: Unable to locate package ros-indigo-desktop-full

ros-indigo-desktop-fullをインストールしたかったが、上記のように見つからないため、非full版を選択した。
	
	$ sudo apt-get update
	$ sudo apt-get install ros-indigo-desktop

また、エラーとなった。

	Errors were encountered while processing:
	  /var/cache/apt/archives/libegl1-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb
	  /var/cache/apt/archives/libgles2-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb
	E: Sub-process /usr/bin/dpkg returned an error code (1)

これで解決しなかった。

	$ sudo apt-get -f install

### 5. libegl1/libgles2のエラー対応
そこで、こちらを参考にした。
- [Ubuntu 14.04 (trusty) Raspberry Pi 2 image | Raspberry Pi フォーラム](https://www.raspberrypi.org/forums/viewtopic.php?f=56&t=100553&start=200)

	$ sudo apt-get download libegl1-mesa-dev libgles2-mesa-dev
	$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/libegl1-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb 
予定通りErrorになる。※ ダウンロードは不要だったと思う…

	$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/libgles2-mesa-dev_10.1.3-0ubuntu0.6_armhf.deb 
これも予定通りErrorになる。

	$ sudo apt-get install -f
こちらが成功して、ROSインストールの準備ができた。

### 6. ROSインストールを再トライ
	$ sudo apt-get install ros-indigo-desktop
今度は、成功した。

### 7. rosdepの初期化、.bashrcへのセット、python設定
	$ sudo rosdep init
	$ rosdep update
	$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc

pythonで運用するので…

		$ sudo apt-get install python-rosinstall

## OpenCV3のインストール
[OpenCV3手順](http://www.pyimagesearch.com/2015/06/22/install-opencv-3-0-and-python-2-7-on-ubuntu/)で問題なくインストールできました。

	$ sudo apt-get install build-essential cmake git pkg-config
	$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
	$ sudo apt-get install libgtk2.0-dev
	$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
	$ sudo apt-get install libatlas-base-dev gfortran
	$ pip install numpy
	$ sudo apt-get install python-pip
	$ cd shared/lab/
	$ git clone https://github.com/Itseez/opencv_contrib.git
	$ cd opencv_contrib
	$ git checkout 3.0.0
	$ cd ..
	$ git clone https://github.com/Itseez/opencv.git
	$ cd opencv
	$ git checkout 3.0.0
	$ mkdir build
	$ cd build/
	$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
	    -D CMAKE_INSTALL_PREFIX=/usr/local \
	    -D INSTALL_C_EXAMPLES=ON \
	    -D INSTALL_PYTHON_EXAMPLES=ON \
	    -D OPENCV_EXTRA_MODULES_PATH=~/shared/lab/opencv_contrib/modules \
	    -D BUILD_EXAMPLES=ON .. &> ~/shared/lab/opencv/buildlog.txt
	$ make -j4 &>> ~/shared/lab/opencv/buildlog.txt
	$ sudo make install

## (ご参考) その他の設定

### Keyboard を日本語に
[Ubuntu Weekly Recipe/第376回　Raspberry Pi 2にUbuntuをインストールし，RDPでリモートアクセスする | Gihyo.jp](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0376)

/etc/default/keyboardを編集し、"us"を下記のように"jp"に書き換える。

> XKBLAYOUT="jp"

下記を実施すると、インストールが始まって反映される。

	$ sudo dpkg-reconfigure -f noninteractive keyboard-configuration

### Raspberry Piでカメラ入力を扱うためのインストール

[Accessing the Raspberry Pi Camera with OpenCV and Python | pyimagesearch](http://www.pyimagesearch.com/2015/03/30/accessing-the-raspberry-pi-camera-with-opencv-and-python/)

Raspberry Pi自体でカメラの入力で画像処理するには、この記事の内容が重要。
cv2.VideoCaptureなどの代わりに必要になるPiCameraを、arrayモジュールと併せてインストール。

$ sudo pip install "picamera[array]"

※ 従って、Pythonプログラムも入力などはRPi専用で開発するか、共通化のためのラッパーが必要になるようです。
 (参考) [Unifying picamera and cv2.VideoCapture into a single class with OpenCV | pyimagesearch](http://www.pyimagesearch.com/2016/01/04/unifying-picamera-and-cv2-videocapture-into-a-single-class-with-opencv/)

### Pythonインタプリタを効率化 (MacOSで問題回避が必要)
pythonをインタラクティブモードで利用するとき、タブ補完やヒストリ保存を有効にしたい。ところが、

[13. 対話入力編集とヒストリ置換 | Pythonチュートリアル](http://docs.python.jp/2/tutorial/interactive.html)

この方法のうちタブ補完は、MacOS Xでは働かない。
MacOSは[GPLライセンス回避のため](http://stackoverflow.com/questions/675370/tab-completion-in-python-interpreter-in-os-x-terminal)、本物のreadlineが実装されていないらしい。そこで、

[[Python] Mac OSX10.9でPythonのタブ補完を有効にする | Yura YuWrite](http://yu-write.blogspot.jp/2013/11/python-mac-osx-tab-complete.html)

この手順で~/.pystartupを作成。また、~/.bashrcへ下記を追加。

> export PYTHONSTARTUP=~/.pystartup

### IPアドレス固定
	$ sudo emacs /etc/network/interfaces

下記のように固定する場合のご参考まで。

	iface eth0 inet static
	address 192.168.7.111
	network 192.168.7.0
	netmask 255.255.255.0
	gateway 192.168.7.1
	dns-nameservers 192.168.7.1

### Sambaを設定
	$ mkdir ~/shared
	$ sudo apt-get install samba
	$ sudo emacs /etc/samba/smb.conf

下記を後端に追加。

	[shared]
	path=/home/ubuntu/shared
	read only=no
	browsable=yes
	guest ok = yes
	force user = ubuntu

### Hostnameを変更
	$ sudo emacs /etc/hostname
	$ sudo emacs /etc/hosts
どちらも、所望の名前へ変更。

### VNCサーバーを設定
        $ sudo apt-get install vnc4server
        $ vncserver
初回はパスワードを設定すれば、問題なく動作。

### emacsが必要なので…
	$ sudo apt-get install emacs

.emacsはμemacs風に設定…。

	(global-set-key "\C-h" 'backward-delete-char)
	(global-set-key "\C-z" 'scroll-down)

(以上)