ROSを始めよう　その１

# はじめに
[ROS](http://wiki.ros.org/ja)(Robot Operating System)といえば、世界中で使われているオープンソースのロボット用ソフトウェアプラットフォームです。
ロボットをやるなら是非マスターしておきたいところなのですが、学科の授業で扱ったことはあるものの結局使いこなせずじまい。。。
理解できていないところも多い。。。
ということで、この際ゼロから勉強を始めてみようと思います！

# この記事で利用する環境
- Raspberry Pi3 model B
- Ubuntu MATE 16.04.2(Xenial)
- ROS Kinetic
- (microSDカードへのOS書き込みまで)MacのノートPC

なぜRaspberry Piを使うのか、と思われた方もいらっしゃるかもしれません。
本当は僕もノートPCにUbuntu18.04+ROS Melodicを入れて、最新版でやりたかったんですが、手元に丁度いいPCがなかったんですよね。でもラズパイとmicro SDカードはあったのでそれを使うことにしました。理由はそれだけです。今回は勉強が目的で、何かプロジェクトを予定しているわけではないですしね。

# まずは環境を整える
今回は[こちらのサイト](http://ai-coordinator.jp/ubuntu-mate-ros)を参考にさせていただきました。問題なく環境を整えることができ、大変助かりました。

## STEP1: Ubuntu MATEの準備
Raspberry Piで利用するためにmicroSDカードにUbuntu MATEというOSを書き込む必要があります。今回は16GBのSDカードを使用しましたが、8GBでも良いと思います。

1. [公式サイト](https://ubuntu-mate.org/download/)に行き、Raspberry Pi→16.04.2の順に選択する
2. ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xzをクリックするとダウンロードされる
3. 新品でない場合はmicroSDを一度フォーマットしておく([参考](https://komonon.jp/format-sd-card-mac/))
4. 先ほどダウンロードしたxzファイルを解凍する
    1. `$ brew install xz`
    2. `$ xz -d ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz`
5. microSDに書き込むため、SDをアンマウントする
    1. `$ diskutil list`でSDカードがどこにマウントされているか探す
    2. /dev/disk3だった場合、`$ sudo diskutil umount /dev/disk3`とする
    3. 間違ったものをアンマウントしているとマズイので`$ diskutil list`で再度確認
6. OSをmicroSDカードに書き込む
    1. `dd if=ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img of=/dev/disk3 bs=1m`1時間程度かかる
    
## STEP2: Raspberry Pi3でのUbuntu MATEのセットアップ
STEP1で準備したmicroSDカードをRaspberry Pi3に差し込み、起動するとセットアップが始まります。
指示に従って、WiFi設定やユーザー名や地域や言語を設定すれば良いです。
日本語を選ぶと、"ダウンロード"というように一部ディレクトリ名が日本語になってしまうのが厄介ですが、そこが気になる以外の問題はないと思います。

## STEP3: ROSのセットアップ
Raspberry PiにROS Kineticをインストールする方法が[公式サイト](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)にまとめられています。
そのページの冒頭の文章を読むと、
> today it is faster and easier to use Ubuntu Mate 16.04 (Xenial, download here) together with the standard ARM installation instructions here.

とありますので、hereをクリックすると、[今回参考にするページ](http://wiki.ros.org/kinetic/Installation/Ubuntu)が出てきます。
これをそのまま実行していきましょう。

1. `$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'`これで１行なので注意！
2. `$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116`
3. `$ sudo apt-get update`
4. `$ sudo apt-get upgrade`かなり時間がかかる
5. `$ sudo apt-get install ros-kinetic-desktop-full`今回はフルバージョンを入れます
6. `$ sudo rosdep init`rosdepのインストール
(自分でROSのパッケージをビルドするときに依存するライブラリを自動でインストールしてくれる)
7. `$ rosdep update`
8. `$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc`環境変数の設定
9. `$ source ~/.bashrc`
10. `$ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential`各種便利コマンドのインストール
11. `$ roscore`を実行し、最後の方に`started core service [/rosout]`と出て来れば問題無し、Ctrl+Cで終了(ROSでは基本的にコマンドはCtrl+Cで終了させます。)

## STEP4: その他の設定(必要であれば)
sshでラズパイに接続したい場合
`$ sudo apt install openssl-server`を実行してください。
接続の際に，`port 22:Connection refused`とエラーが出るときは以下を実行するようです。

```
# 22番ポートの開放
$ sudo ufw allow 22
# sshの再起動
$ sudo /etc/init.d/ssh restart
# 起動時にsshの起動
$ sudo systemctl enable ssh
```

日本語入力がしたい場合
[このサイト](https://deviceplus.jp/hobby/raspberrypi_entry_049/)を参考にしてください。

# まとめ
ということで、今回は環境の準備までを行いました。
これからROSの勉強を始めていきます。

[その２](https://qiita.com/hagi-suke/items/fde0dab42294f569a0fe)