FPGAでROSを動かそう

#FPGAでROS?
近年はFPGAの需要も各方面から高まりつつあります。そのFPGAのチップは年々，性能が向上しつつあります。さまざまあるFPGAのチップの中にも最近はARM(プロセッサ)が同一のFPGAチップに搭載されているものもあります。つまりこれはFPGAロジックのほかにCPUまで一緒に使用できるわけですね。
　今回はこのFPGAに搭載しているARMコア使用して，FPGAにROSをインストールします。
※ちなみに…ROS(Robot Operating System)とはOSRF(OpenSource Robotics Foundation)によってオープンソースで公開されているロボット向けのメタ・オペレーティングシステムです.

#ROSインストールする前の準備
ROSインストールの前にはいくつかの準備があります。まず必要なものについて。

- ARMコア入りのFPGAチップを搭載したFPGAボード
- Ubuntuブート用のマイクロSDカード(8GB以上)

今回使用したFPGAボードはterasic社製DE1-SOC，FPGAはAltera社製CycloneⅤです。またSDカードはROSで推奨されているプラットフォームがUnix OSのUbuntuですのでそのブート用に使用します。

#さっそくインストール
##UbuntuブートSDの作り方
インストールするUbuntuはLinaro Ubuntu12.4というものです。ブートイメージに関してはTerasicがBSPのイメージを配布しています。
BSPイメージ
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=165&No=836&PartNo=4
上記ページの下部にある「Linux Ubuntu Desktop」をダウンロードします。
イメージはWin32DiskImagerというソフトでSDカードに書き込みます。
ダウンロードページ
http://sourceforge.jp/projects/sfnet_win32diskimager/

##Ubuntuの動作とネットワーク設定
作成したブートSDはFPGAボードのSDスロットに挿入します。また電源を入れる前に，FPGAボードの裏にあるDIPスイッチのすべてをすべて0にします。
次にFPGAボードの電源を入れると…なんとふつうにUbuntuが動き出します(はず)。FPGAボードとSDカードだけでUbuntuが動いているのをみると感動してしまいました…。ちなみにキーボードやディスプレイは特別な設定を施さなくともちゃんと動作しています。
Ubuntuの動作を確認したら，ネットワーク設定をします。FPGAボードにはLANケーブルを接続しておきます。
設定を施すファイルは/etc/network/interfacesで，ターミナルを開きエディタで編集を行います。

```
sudo gedit /etc/network/interfaces
```
次のように編集をします。
※ちなみにこのUbuntuのルートパスワードはデフォルトでは「linaro」となっています。

```
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
```

編集したらUbuntuを再起動します。またプロキシ環境下で作業をする方はプロキシ設定も行ってください。

##ROSのインストール
まずUbuntuのほうリポジトリの設定を変更します。

/etc/apt/sources.listを右クリックのSoftware Sourcesで開きます。
そのあと，"restricted," "universe","multiverse"のリポジトリの使用許可の為、
のタブでチェックを入れてください。
なお、上手くいかない方は、下記のコードをsources.listに貼り付けてください。

```
deb http://ports.ubuntu.com/ubuntu-ports/ precise main universe restricted multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports/ precise main universe restricted multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ precise-security universe main multiverse restricted
deb http://ports.ubuntu.com/ubuntu-ports/ precise-updates universe main multiverse restricted
deb http://ports.ubuntu.com/ubuntu-ports/ precise-proposed universe main multiverse restricted
deb http://ports.ubuntu.com/ubuntu-ports/ precise-backports universe main multiverse restricted
deb http://ppa.launchpad.net/stephane.magnenat/precise/ubuntu precise main
deb-src http://ppa.launchpad.net/stephane.magnenat/precise/ubuntu precise main
```

終わったらapt-get updateしてください。

```
sudo apt-get update
```

そのあとはROSのリポジトリを設定します。以下のコマンドを実行してください。

```
sudo sh -c 'echo "deb http://packages.namniart.com/repos/ros precise main" > /etc/apt/sources.list.d/ros-latest.list'
```

ROSのリポジトリへの鍵を入手します。

```
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
wget http://packages.namniart.com/repos/namniart.key -O - | sudo apt-key add -
```

ここでもう一度apt-get update

```
sudo apt-get update
```
いよいよROS本体のインストールです。以下のコマンドでインストールされるのはROSパッケージ、通信ライブラリ、ビルドルールといったROSに必要な最小構成のものです。(本来、ROSはGUIシュミレータやグラフツールにも対応する)

```
sudo apt-get install ros-groovy-ros-base
```

##rosdepの初期化
rosdepはコンパイルの対象となるソースのシステム依存を簡易化し，ROSで特に重要とされるコマンドです。
以下のコマンドを順に実行してください。

```
sudo apt-get install python-rosdep
sudo rosdep init
rosdep update
```

##環境変数の設定
ROSをUbuntuで使用するうえでの環境変数の設定を行います。以下のコマンドを実行してください。

```
echo "source /opt/ros/groovy/setup.bash" >> ~/.bashrc
source ~/.bashrc
```

echoコマンドの実行ができなかったらsudoで実行してください。

##rosinstallのインストール
rosinstalはROSで配布されるROSパッケージのソースツリーを簡単にダウンロードするためのコマンドです。

```
sudo apt-get install python-rosinstall
```

#終わり！
これでFPGA上でのROSインストールは終了です。お疲れ様でした。あとはROSでのシステム設計を楽しみましょう。
ちなみにROSの使い方のチュートリアルは日本語版がありますので下記のアドレスをご参照ください。
http://wiki.ros.org/ja

#余談
###プロキシ環境下での作業
ROSのインストール中に困ったことを少し書きます。僕自身学校の開発環境がプロキシ下にあります。それで
インストール中、プロキシに関係すると思われるエラーが何度も起きました。原因はよくわからなかったのですが、
プロキシの設定がうまくコマンドにわたっていないようでした。
そこでsudoのオプションに-Eというのがあります。これはプロキシの設定を直接sudoコマンドに
渡してあげることができるオプションで、これでうまく行くことがよくありましたので
プロキシ関係のエラーで困ったらぜひ使ってみてください。
###「linaro ROS」で検索すると…
タイトルの通り「linaro ROS」で検索するヒットするページの中に下記のアドレスのものがあると思います。
「groovy/Installation/Linaro/Source - ROS Wiki」
http://wiki.ros.org/groovy/Installation/Linaro/Source
これはlinaro UbuntuにROSをインストールするための手順について書いているのですが全然うまくかなくて
四苦八苦しました…（単純に僕の知識不足かもしれないですが）したがってこのページはあまりお勧めはしませんし、
今回説明した方法のほうがシンプルで簡単です。

#参考にしたサイト
「Ubuntu ARM install of ROS Groovy」
http://wiki.ros.org/groovy/Installation/UbuntuARM
「DE1-SOC(ARM + FPGA) ARCHIVE-ソフトウェアエンジニアの素人電子工作」
http://elelab-net.com/hobbytec/?cat=31