ROSを用いた自作ロボット制作 -環境開発-

# はじめに
ゲストOSを作成してROSを導入します。他の製作記事は[ここから](https://qiita.com/STAHL_S6K/items/49a95e27045f2565e090)。

| 項目  　　　| バージョン   |
|:-----------|------------:|
| ノートPC   | windows10   |
| VirtualBox |    5.2.18   |
| Ubuntu     | 16.04.6 LTS |
| ROS        |   kinetic   |

# なぜROSを導入するのか
ROSはロボットソフトウェア開発向けのフレームワークです。これを使えるようになると以下のような恩恵を受けることができます。

・無料で利用できる
ROSはオープンソースソフトウェアなので無料ですぐに利用できます。


・分散型システムを簡単に構築できる
ROSのシステムはノードという小さいプログラムを複数同時に実行しながら、メッセージという共通のデータ型で情報をやり取りします。なので、画像処理をしながらロボットを動かしセンサの値を読み取るなどの分散型システムを簡単に構築できます。

・多くの高度なソフトウェアツールを利用できる
複雑なロボットになると必要な技術が多くなってきますが、ROSでは多くの高度なソフトウェアツールを利用することができます。代表的なカメラやセンサのドライバ、強力な3D可視化ツールRVIZ、マニピュレータなどのプランニングフレームワークMoveIt!など様々です。

・複数のプログラミング言語に対応している
ROSは複数の言語で開発することができます。メインはC++とPythonですが、利用するデバイスにあった言語を使うことで利便性や互換性が高くなります。

今回制作する自作ロボットにはROSの高度な利用はしていませんが、基礎的な部分を理解し汎用できるハードを作ることを目標としました。

# 環境開発
### VirtualBox
ROSの開発環境を作成するためにフリーの仮想化ソフトウェアであるVirtualBoxをインストールします。手順は以下のサイトを参考にしました。
[VirtualBoxのダウンロードとインストール方法](https://www.websec-room.com/2013/03/26/740)
起動すると以下のような画面が開きます。
<img width="468" alt="virtualbox_maneja.png" src="https://qiita-image-store.s3.amazonaws.com/0/384152/5fdddeeb-ec15-9cf4-364d-610302d6735e.png">

### Ubuntu
仮想マシンを作成してゲストOSをインストールします。手順は以下の記事を参考にしました。
[VirtualBoxにUbuntu16.04をインストール](https://qiita.com/ykawakami/items/4bae371932110b2e25e3)
UbuntuのバージョンはROS kineticとの相性がいいUbuntu 16.04 LTSにします。ユーザー情報の設定で、名前はアルファベットで書き自動的にログインするように設定するとよいでしょう。インストールに成功すると以下のような画面になるはずです。
<img width="518" alt="ubuntu16.04_gamen.png" src="https://qiita-image-store.s3.amazonaws.com/0/384152/ebae4a45-0b0a-cbf1-281e-e3f2d41c1437.png">

### 初期設定
ゲストOSをインストールできてもデフォルトの状態では使い勝手が悪く、ホストOSとのコピペやファイルの共有ができないので開発のしやすい状態ではありません。

1) Guest Additionsのインストール
使い勝手を良くするためにはゲストOS上でソフトウェアGuest Additionsをインストールする必要があります。手順は以下のサイトを参考にしました。
[VirtualBox Guest Additionsのインストール(Ubuntu 17.10)](https://ichibariki.hatenablog.com/entry/2018/05/13/173056)

2) 一般の設定
コピペを可能にするためにはタブの[仮想マシン]->[設定]->[一般]->[高度]の設定を変更します。[クリップボードの共有]と[ドラック＆ドロップ]を双方向にするとホストOSと仮想OS間でお互いにコピペが可能になります。
<img width="537" alt="seting_koudo.png" src="https://qiita-image-store.s3.amazonaws.com/0/384152/0f0c306f-632a-a104-5efa-7842ed413256.png">

3) 共有フォルダの設定
ファイルを共有するためにはホストOSとゲストOSそれぞれに共有するためのフォルダを作りマウントする必要があります。手順は以下のサイトを参考にしました。
[VirtualBoxにおいて、ホストOSとゲストOS (Ubuntu) 間の共有フォルダを作成する方法](https://qiita.com/SUZUKI_Masaya/items/3444a010cf9903a088b3)
うまくいけばホストOSの自分で設定したフォルダとゲストOSの`/media/sh_{共有フォルダ名}`が共有フォルダになっているはずです。

### ROS kinetic
ROS kineticをインストールします。手順は以下の公式サイトのインストールガイドと記事を参考にしました。
[ROS Kinetic の Ubuntu へのインストール](http://wiki.ros.org/ja/kinetic/Installation/Ubuntu)
[ROS講座02 インストール](https://qiita.com/srs/items/e0e0a9dc3f94c2d3348e)
ここには実行するコマンドだけ引用しておきます。

```shell:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install ros-kinetic-desktop-full

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

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

sudo apt-get -y install python-rosinstall

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
```