ROS講座54 VMWare上でROSを使う

# 環境
この記事は以下の環境で動いています。

| 項目 | 値 |
|:-:|:-:|
| CPU | Core i5-8250U |
| Ubuntu | 16.04 |
| ROS | Kinetic |
| VMware | 14.1.1 |

インストールについては[ROS講座02 インストール](https://qiita.com/srs/items/e0e0a9dc3f94c2d3348e)を参照してください。
またこの記事のプログラムはgithubにアップロードされています。[ROS講座11 gitリポジトリ](https://qiita.com/srs/items/25a56a6abda41dcf396e)を参照してください。

# 概要
実は私はほとんどUbuntuをVMの上で動作させています。VMを使っていてもネイティブ環境とほぼ同様にROSを使うことができます。VM上でROSを動かすときの注意点を書いていきます。
![adv_vm1.png](https://qiita-image-store.s3.amazonaws.com/0/254442/07e4d1cf-34ef-bd68-091c-6b9a6ffcc652.png)

# VM(ヴァーチャルマシーン)とは
VMとは仮想マシンのことで、別のシステム環境を再現するソフトです。今回の例で言いますと。Windows上で起動しているVMwareでは生のPC環境を再現していて、そこにUbuntuをインストールすることができます。この状態の時にWindowsをホストOS、UbuntuをゲストOSを呼びます。
これに対して普通にPCにUbuntuをインストールしている環境をネイティブ環境と言います。

## メリット・デメリット
* メリット
    * 普段使うWindows PC上でROSが使える。
    * 複数のPCを所持する必要がない
    * 複数のUbuntu環境を使い分けれる・同時に起動できる
* デメリット
    * 演算やメモリの性能が低くなる、低く制限される。
    * ネットワーク周りが面倒
    * 予期せぬトラブルに会うことがある。

最大のメリットとして普段使っているwindowsPCにソフトをインストールするだけでUbuntuが使えるということです。わざわざUbuntu用に1つ余計にPCを持つ必要がありません。また1つのWindowsPC上で複数のVMを立ち上げることもできるので、通信周りのテストも簡単にできます。また簡単にインストール・アンインストールができるのでOSを破壊しかねないような危険な作業もリスクが低くできます。
デメリットとしてはVMであるが故の不具合がいくらかあることです。基本的には気になるようなものはないのですが、大きいものがあるので下に書いておきます。

## VMの使い方
VMのソフトとしてVMwareとVirtualBoxの2つが有名ですが、今回はVMware workstation playerを使います。VMware workstation playerはWindowsとLinuxのみ対応で、Macには対応していません（VMware Fusionが対応しているらしいが、未検証）。

### ダウンロード
[製品のダウンロード - My VMware](https://my.vmware.com/jp/web/vmware/downloads)でVMware Workstation Playerを選択します。
![adv_vm2.png](https://qiita-image-store.s3.amazonaws.com/0/254442/ffc4d8b8-0f09-4553-4616-1e5bdf18bd3a.png)

その次の画面でWindows版を選択してダウンロードします。
![adv_vm3.png](https://qiita-image-store.s3.amazonaws.com/0/254442/a2dd8b3a-1453-cf44-e6a6-a8c342d1e816.png)

### インストール
ダウンロードしたインストーラーの指示通りに行えばインストールされます。

### Ubuntuイメージの入手
[Ubuntuのページ](http://releases.ubuntu.com/16.04/)の[ISOイメージ](ubuntu-16.04.5-desktop-amd64.iso)を使います。
実機と違ってUSBメモリやDVDに焼く必要はありません。

### 新しいVMの作り方
VMWareを起動して「新規仮想マシンの作成」をクリックします。
![adv_vm4.png](https://qiita-image-store.s3.amazonaws.com/0/254442/e9d02b00-b53b-6055-03c7-a44583afe4c5.png)

次のウィンドウでインストーラーディスクイメージファイルのラジオボタンをONにして「参照」ボタンからUbuntuイメージを選択して、「次へ」を押します。
![adv_vm5.png](https://qiita-image-store.s3.amazonaws.com/0/254442/3652ea8d-6c06-dc97-4f61-6070124baf5b.png)

VMwareには「簡易インストール機能」があり、特定のOSについては通常よりも簡単にインストールをすることができます。以下の画面で情報を入れて「次へ」を押します。

* フルネームは何でも構いません。ログイン画面で表示される名前です（英数字で入れてください）。
* ユーザー名はbashのプロンプトの左側の名前です。
* 簡易インストールを入れるとホスト名（プロンプトの右側）はubuntuに固定になります。
* パスワードも好きなものを入れてください。
![adv_vm6.png](https://qiita-image-store.s3.amazonaws.com/0/254442/3f88fa08-d639-17c3-f517-7a291e474c0e.png)

これで30分ほど待つとUbuntuのインストールは完了です。

この後ROSのインストールに入ります。ROSのインストールをした後に再起動するとこけることがあります。その時は参考ののリンクを参照に復旧してください。

# VMwareで使うときのTips

## low graphic modeの対処

`apt upgrade`をした後で再起動すると`low graphic mode`と表示されることがあります。その場合は`Ctrl`+`Alt`+`F1`キーを押してCUI画面を開き、画面の指示に従ってユーザー名とパスワードを入れてCUIログインします。その後以下のコマンドを実行します。

```
sudo apt purge -y ubuntu-desktop
sudo apt purge -y lightdm
sudo apt install -y tasksel
sudo tasksel install ubuntu-desktop
```

## カメラ
なぜかWebカメラが使えません。Webカメラをつないでも/dev/video0は出現するのですが、uvc_cameraなどで起動しても真っ黒い画像しか出てきません。
対処法として、vmwareの設定でusbの互換性を「USB2.0」から「USB3.0」に変更することでROSとして画像を読み込むことができました。
USBカメラはUSB2.0ですし、この設定をしても一部のGUIアプリケーションだとカメラ画像につながらなかったりするのですが、私の環境ではROSならつながりました。

![vmware_usb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/8ade5952-7caa-5c9d-dc3d-7e20f4c7ddf8.png)


## ネットワーク
VMのネットワークは色々な種類がありますが、ここでは2種類があります。
![adv_vm_net.png](https://qiita-image-store.s3.amazonaws.com/0/254442/4ea8f135-3410-04f8-ca2a-f6998557c0e7.png)

### NAT
ホストOSとゲストOSの間でネットワークを構成します。ホストOSがインターネットにつながっているならゲストOSからもインターネットを参照することはできますが、ネットワークが分離されているために外部からゲストOSに接続することは基本的にできません。ゲストOSのIPアドレスはVMwareがDHCPしてくれます。

### ブリッジ
ホストOSとゲストOSがともに並列の関係でネットワークにつながります。この時にゲストOSのIPはルーターがDHCPする必要があります。
ルーターによっては相性が悪く、ブリッジモードにしてもIPをDHCPしてくれない物もあります。

### 設定の仕方
まず右上のネットワークのマークのボタンを右クリックして「設定」を選びます。出てくるウィンドウでネットワークの部分を選んで
、そこでNATなりブリッジモードなりを選びます。
![adv_vm6.png](https://qiita-image-store.s3.amazonaws.com/0/254442/4b83684e-f70a-9872-5587-9251f8e7e0f8.png)

## gazeboを使う設定
VMwareはどうやらOpenGL3系に対応していないらしくて、VMware上でgazeboを起動しようとすると失敗します。`export SVGA_VGPU10=0`の環境変数を付けるとOpenGL2系を使うようになり、正常に立ち上がります。bashrcに書いておきましょう。

## CPUコア・メモリの割り当て
標準だとプロセッサは1コア、メモリが1GBしか割り当てられていません。gazeboを起動するなら多めに割り当てましょう。

# 参考
[VMwareのネットワーク構成](https://docs.vmware.com/jp/VMware-Workstation-Player/12.0/com.vmware.player.win.using.doc/GUID-D9B0A52D-38A2-45D7-A9EB-987ACE77F93C.html)
[VMwareでのgazeboの起動](http://answers.gazebosim.org/question/13214/virtual-machine-not-launching-gazebo/)
[Ubuntuが起動しない](http://kottas.hatenablog.com/entry/2017/09/12/020331)

# 目次ページへのリンク
[ROS講座の目次へのリンク](https://qiita.com/srs/items/5f44440afea0eb616b4a)