VirtualBox上にROSの開発環境を作る

# はじめに
ROS（Robot Operating System）は既存の環境にインストールしようとすると，付属していろいろ入れる関係でうまくいかない場合がある．
そこでひとまず~~捨て環境~~仮想マシン上の綺麗な環境でROSを試してみよう．
ちなみに仮想マシン上ではGPUをGPGPUとして利用することはできないので，その必要性にぶち当たったら大人しくデュアルブートにしよう．

# 環境
Windows 10 Home

# 仮想化支援環境の有効化
仮想マシンを動かす機能はセキュリティ的な観点からデフォルトでは無効になっている場合がある．
BIOSに入り，マザーボードがAMD系ならSVM（Secure Virtual Machine），Intel系ならVT（Virtualization Technology）などと呼ばれる機能を有効化する（ノートPCの場合はたぶん必要ない）．
僕の環境だと
Windowsを再起動->ロゴが出てきたタイミングでDELかF2->Advanced Mode->詳細->CPU設定->Intel (VMX) Virtualization Technology
という感じで見つかった．
DisableをEnableにして，設定を保存し終了する．
参考：https://did2memo.net/2019/05/13/uefi-bios-enable-intel-virtualization-technology/

# VirtualBoxのインストール
VirtualBoxをダウンロードする．
https://www.virtualbox.org/wiki/Downloads
ダウンロードしたものを実行してインストールする（設定はデフォルトのままでOK）．

# Ubuntuを入れる
今回はUbuntu16.04LTSを入れることにする．
ISOファイルをダウンロードする．
https://www.ubuntulinux.jp/News/ubuntu1604-ja-remix
VirtualBoxを起動して，[新規]から新しい仮想マシンを作成する．
だいたいはデフォルトの設定で進めてよいが以下だけ注意．

- タイプ：Linux
- バージョン：Ubuntu(64-bit)
- メモリーサイズ：4096MB
- ファイルサイズ：100GB
- 起動ハードディスクを選択：先ほどダウンロードしたUbuntuのISOファイルを選ぶ

作成したら[設定]からもう少し設定をする．

- 一般->高度->クリップボードの共有：双方向
- 一般->高度->ドラッグ&ドロップ：双方向
- システム->プロセッサー->プロセッサー数：2
- ディスプレイ->スクリーン->ビデオメモリ：128MB
- ディスプレイ->スクリーン->3Dアクセラレーションを有効化：有効化
- USB->USB3.0(xHCI)コントローラー：選択

これくらいで[設定]を閉じ，[起動]する．
これらの設定について詳しく知りたい方は[こちら](https://vboxmania.net/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E5%AE%9A/)．
Ubuntuを試す/Ubuntuをインストールという選択肢が出てくるので後者を選択．
ここからもデフォルトの設定で進めてよい，ユーザー名やパスワードを適当に設定する．
インストールが終わったら，[今すぐ再起動する]を選択．
ログイン画面が表示されて，ログインできたら無事インストール完了．

# ROSのインストールまでの諸問題
### ウィンドウのサイズが変わっても仮想マシンの画面のサイズが変わらない問題
デバイス->Guest Additions CDイメージの挿入
で解決．
ちなみにこのGuest Additionsがたまに機能しなくなることがある．
そのときは
仮想マシン->設定->ディスプレイ->表示倍率
をいじって，戻してってすると直る（？）．

### apt updateがうまくいかない問題
```terminal:terminal
sudo mv /etc/apt/apt.conf.d/50appstream /etc/apt/apt.conf.d/50appstream.disable
sudo apt update -y
sudo apt upgrade -y
sudo mv /etc/apt/apt.conf.d/50appstream.disable /etc/apt/apt.conf.d/50appstream
sudo apt update -y
```
参考：http://grainrigi.hatenablog.com/entry/2017/08/26/232405

### 「システムプログラムの問題が見つかりました」が鬱陶しい問題
```terminal:terminal
sudo rm /var/crash/*
sudo sed -i 's/enabled=1/enabled=0/g' /etc/default/apport
```
参考：https://qiita.com/naoyukisugi/items/d0a30f1e7b9761fdf3e9

# ROSのインストール
以下のスクリプトを実行すれば，完了する．
詳しくはこちら．https://wiki.ros.org/ja/kinetic/Installation/Ubuntu

```shell:ros_setup.sh
## 準備
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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
## ROSのインストール
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get 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
echo "export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/" >> ~/.bashrc
source ~/.bashrc
```
今回はホームディレクトリ直下にcatkin_wsというワークスペースを作成した．
ROSパッケージは~/catkin_ws/src以下で管理する．
ROSについてやcatkinの使い方についてはこちら．
https://qiita.com/srs/items/5f44440afea0eb616b4a

# おまけ
分割，レイアウトの保存ができるターミナルterminator．
とても便利．

```terminal:terminal
sudo apt install terminator
```
参考：https://qiita.com/SUZUKI_Masaya/items/ddc9bcfaf6b09708fe32