Intel Edison に ROSをインストール

# Intel EdisonにROSをインストールする方法を紹介します。
EdisonにROSをインストールする方法の主流は、Edisonにubilinuxをいれてdebian化をし、その後はRaspberryPiにROSをインストールするのと同様にインストールすることのようです。
しかしながら、ubilinuxは現在スポンサーがいないために手軽に入手はできることができないそう。[公式サイト](https://emutex.com/products/ubilinux)
もうひとつの方法は、Intelから提供されているLinuxを自分でカスタマイズすることです。
しかし、それのやり方はドキュメント化が海外でもされていない！ので、今回はやり方をまとめてみました。

### 必要環境
Ubuntu 14.04 LTS
40GB以上の空き容量

### 必要パッケージのインストール
```
sudo apt-get install build-essential git diffstat gawk chrpath texinfo libtool gcc-multilib dfu-util
```

### Intel公式サイトからソフトウェア群のダウンロード
```
cd ~/
wget https://downloadmirror.intel.com/25028/eng/edison-src-ww25.5-15.tgz
tar xvf edison-src-ww25.5-15.tgz
```

### ビルド環境の用意
```
cd ~/edison-src
mkdir bitbake_download_dir && mkdir bitbake_sstate_dir
./meta-intel-edison/setup.sh --dl_dir=bitbake_download_dir --sstate_dir=bitbake_sstate_dir
```

### 前の手順でダウンロードされたレシピの中にひとつだけ壊れたリンクがあるので修正
```emacs:~/edison-src/out/linux64/poky/meta-intel-iot-middleware/recipes-connectivity/paho-mqtt/paho-mqtt_3.1.bb
SRC_URI = "git://github.com/eclipse/paho.mqtt.c.git;protocol=http \
           file://makefile.patch \
"
```

### 追加で必要なレポジトリをダウンロード
```
cd ~/edison-src/meta-intel-edison/
git clone git://git.openembedded.org/openembedded-core
git clone git://git.openembedded.org/meta-openembedded
git clone https://github.com/bmwcarit/meta-ros
cd ~/edison-src/meta-intel-edison/openembedded-core && git checkout dizzy
cd ~/edison-src/meta-intel-edison/meta-openembedded && git checkout dizzy
```

### Edisonのレシピの最後にROSのレシピを追加

```emacs:~/edison-src/meta-intel-edison/meta-intel-edison-distro/recipes-core/images/edison-image.bb
IMAGE_INSTALL += "roslaunch"
IMAGE_INSTALL += "roscpp-tutorials"
```
ここには色々なものを追加できる。ROSのビルドファームにあるパッケージのレシピはたくさん用意されているので、必要に応じて追加する。

### 追加したレシピのパスを追加
BBLAYERSを下の内容に置き換える（usernameはユーザー名に置換した上で）

```emacs:~/edison-src/out/linux64/build/conf/bblayers.conf
BBLAYERS ?= " \
  /home/username/edison-src/out/linux64/poky/meta \
  /home/username/edison-src/out/linux64/poky/meta-yocto \
  /home/username/edison-src/out/linux64/poky/meta-yocto-bsp \
  /home/username/edison-src/meta-intel-edison/meta-intel-edison-bsp \
  /home/username/edison-src/meta-intel-edison/meta-intel-edison-distro \
  /home/username/edison-src/out/linux64/poky/meta-intel-iot-middleware \
  /home/username/edison-src/meta-intel-edison/meta-intel-arduino \
  /home/username/edison-src/meta-arduino \
  /home/username/edison-src/meta-intel-edison/openembedded-core/meta \
  /home/username/edison-src/meta-intel-edison/meta-openembedded/meta-oe \
  /home/username/edison-src/meta-intel-edison/meta-openembedded/meta-python \
  /home/username/edison-src/meta-intel-edison/meta-openembedded/meta-multimedia \
  /home/username/edison-src/meta-intel-edison/meta-ros \
  \
  "
```

### マシンスペックを有効活用できるようにする
```emacs:~/edison-src/out/linux64/build/conf/local.conf
BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"
```
BB_NUMBER_THREADSはSSDを持っている場合は12がいいらしい。
PARALLEL_MAKEはスレッド数。

### ビルドする
```
cd ~/edison-src/out/linux64
source poky/oe-init-build-env
bitbake edison-image
```
数時間くらいかかります。

### Edisonにフラッシュするためのスクリプトを修正
修正前

```emacs:~/edison-src/meta-intel-edison/utils/flash/postBuild.sh(L9)
build_dir=$top_repo_dir/build
```
修正後

```emacs:~/edison-src/meta-intel-edison/utils/flash/postBuild.sh(L9)
build_dir=$top_repo_dir/out/linux64/build
```

### フラッシュの準備
```
cd ~/edison-src/meta-intel-edison/utils/flash
./postBuild.sh
```
### Edisonの準備
Intel Edison Breakout boardならば、下のUSBポートにmicro USB type Bを接続する。
シリアル通信に使う方のポートでない。
この段階ではPCには接続しない。
###フラッシュ
```
cd ~/edison-src/out/linux64/build/toFlash
./flashall.sh
```
ここでEdisonの接続が求められるので、接続する。そうするとフラッシュが始まるので5分くらい待つ。

それが終わったら完了！

#参考文献

[Official Documentation](https://software.intel.com/en-us/node/593591)

[About missing repository](https://communities.intel.com/thread/101849)

[About flashing]
(https://software.intel.com/en-us/node/593591)