ROS2 インストールマニュアル

# ROS2のインストール
 昨日はROS2のインストールを行った。
その記録を、ここに記す。
人によってはまどろっこしいと思われるかもしれないが…一応初心者向けマニュアルとして初心者が書いてるので…悪しからず。

## 環境
- CPU:AMD Ryzen9 3950X
- RAM:64GB
- GPU:AMD Radeon5700
- OS:Windows10Home 64bit
- 仮想環境:VMware16 Player


## VMware16セットアップ
まずは、VMware16 Playerを起動し、ホームの「新規仮想マシンの作成をクリック」。
するとこのような画面が出る。
![VMware16セットアップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/1beab551-6737-45e9-e253-5f0f20a09bbb.png)
今回は[後でOSをインストール]を選択する。
![VMware16セットアップ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/bf08212d-472e-2b45-9a65-9f1c870cd545.png)
このように、Linux Ubuntu 64ビットを選択する。
![VMware16セットアップ3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/946302c7-1ada-dde5-3f65-d1a3e9624dfb.png)
仮想マシン名は、わかりやすいように何でもいいが、今回は『Ubuntu_20.04_ROS2_install_tutorial』とする。
次に、ディスク容量と仮想ディスクのファイル選択画面に入る。
![VMware16セットアップ4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/8b22b959-dacd-d502-5ede-f46adf8a6aed.png)
ディスク容量は50GBほどあれば十分足りると思われる。また、仮想ディスクに関しては特に単一でも分割でも問題は無いと思われるが、今回はVMwareが推奨する分割で設定しておく。
これは確証は持てないが、HDDやSSDのパーティション設定時に選択するファイルシステムのタイプによるものと思われる。今では問題は無いが、ファイルシステムによっては1ファイルあたりのファイルサイズに上限が存在するので、それとの兼ね合いと思われるが今はほぼ気にする必要はない。より詳しく知りたい場合は自分でググってくれｗ
最後に、[仮想マシンを作成する準備完了]という画面に入るので、[ハードウェアをカスタマイズ]を選択して自分のホストマシン環境にあった設定を行う。
![VMware16セットアップ4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/429e18d0-7a3e-3f39-1b34-316c6c5678c4.png)
ハードウェアカスタマイズで[新規CD/DVD(sata)]の項目で、Ubuntu20.04のISOイメージファイルを忘れずに選択しておくこと。
![VMware16セットアップ5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/1afdca62-699c-6b04-9db2-9cc4fc7d4a72.png)
完了すれば、仮想マシン一覧の中に新たに作成した仮想マシンが表示されるので、ダブルクリックして実行する。

## Ubuntu20.04LTSのインストール
![VMware16セットアップ6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/ce5d1fc1-1f19-b73f-f822-09d64100ba0a.png)
VMware16側の問題なのか少しわからないが、Ubuntu20.04のインストール作業中は画面が見切れてしまう。少し見にくいいが頑張れ。
![Ubuntu20.04インストール1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/f3ce3722-facf-8ff2-865b-1c0abf65106e.png)
正常に読み込まれればisoファイルのチェックが始まり、[Ubuntuを試す]と[Ubuntuをインストール]の２つの選択肢が出てくるので赤丸の[Ubuntuをインストール]をクリック。
![Ubuntu20.04インストール2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/282fcd62-baba-c271-0a84-35ff2b5bc20b.png)
キーボードレイアウトに問題が無ければ、画面の通りに設定して[続ける]をクリック。
![Ubuntu20.04インストール3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/636182dd-b796-efb2-9d58-e43100ec0a2d.png)
OSインストール時についでに付けてくるソフトを入れるか聞かれるが、最小インストールでも問題は無いので時間をかけたく無いなら「最小インストール」を選択して続ける。
![Ubuntu20.04インストール4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/1290d08c-9b0f-49b0-b549-6d69fd0bdd3f.png)
OSインストール時のパーティション設定等を手動で設定するか自動で設定するかを選べるが、VMware環境なら上の[ディスクを削除してUbuntuをインストール]を選択してインストールする。
![Ubuntu20.04インストール5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/bdbfcc9d-9cc4-5a87-bb5e-09cdda9dbb69.png)
この画面も[続ける]をクリックする。
次に「どこに住んでいますか？」というタイムゾーンの設定画面に移るので[Tokyo]を選択する。
その後ユーザ設定画面に入るが好きに設定するとよい。一つの仮想マシンに複数のユーザを設定しないのであれば、自動ログインを選択することをおすすめする。
![Ubuntu20.04インストール6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/a0ebc4e9-6b74-f89a-b3d4-a28f3d640faa.png)
続けるをクリックするとUbuntuのインストールが開始される。
![Ubuntu20.04インストール7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/3cf18168-3a3a-81bd-e2b5-9549f3ee1d8c.png)
正常に終われば、このような画面に移行するので[今すぐ再起動する]をクリック。
Prease remove install mediaと出るので、なんらかのキーを押すとUbuntuOSが立ち上がる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/79cf59ca-0410-7dfd-19b9-0e4886e49960.png)
この画面はスキップしてあとから設定すればよい。
また、「Ubuntu22.04LTSのアップグレードが利用可能です」というウィンドウが出てくるが、ROS2との兼ね合いもあり今年は20.04LTSとROS2Foxyの組み合わせで進めるので[アップグレードしない]をクリックする。
UbuntuOSに入れば。まずやることは、ネットワークとディスプレイと電源のチェックである。ネットワークは接続済みとなっていればよい。
電源管理にてブランクスクリーンを[しない]と選択すれば、画面が消えることはない。
次にディスプレイの設定を、[任意倍率のスケーリング]にチェックを入れ、[解像度]を1920×1080と設定する。
ここは使用するホストマシン環境に合わせて適宜調整するとよい。
![Ubuntuインストール完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/c279753a-c91d-bcf3-783b-09fe424aa021.png)
また、左側面のバーのところに[端末]を配置しておくことを推奨する。

## ROS2のインストール
まず[端末]をダブルクリックして、コンソールを開く。
``` 
    sudo apt update
```
するとパッケージリストの読み込み等が行われる。
 ![ros2install_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/912c972e-e10d-48f7-6a64-0632cdb5e0fd.png)
ros2のインストールに移る前に、open-vm-toolsをインストールする。
これは、VMware環境において、ホストマシンと仮想マシンの間でクリップボードを共有することが出来るツールである。
これにより、私が書いているこのマニュアルをコピペすることで、インストール出来る。
コピペするのは記事内で黒くで囲われた部分だ。
```
    コピペ
```
インストール方法は、
```
    sudo apt install open-vm-tools-desktop
```
続行するか聞かれるのでYを入力してインストール、完了したら仮想マシンの再起動を行う。
再起動後、ホストマシン側で適当に文章をコピーして、コマンドライン貼り付けると、実際に文字がコピペされているのが確認出来るはずだ。

次にcurlという、URLシンタックスを用いてデータの送受信を行うコマンドラインツールと、GNUPG2という公開鍵暗号等を取り扱うパッケージ、lsb-releaseというコマンドラインツールの３つをインストールする。
```
    sudo apt install curl gnupg2 lsb-release
```
![ros2install_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/a618d3ae-0fe8-67b0-86e6-102c981f444e.png)
このように続行するか確認されるのでYを入力。
そして、パッケージアップデートを行う。
```
    sudo apt upgrade
```
続行するか聞かれるのでYを入力する。
次に、gpgの公開鍵を入力する。
```
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
```
次に、ソースリストにリポジトリの追加を行う。
```
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" |sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
```
上記２つのコマンドは、完了してもとくに何もなく新しいコマンドの受付状態に移行する。
リポジトリ更新のためもう一度
```
    sudo apt update
```
を行う。
もし、上記2行に問題があればこのようにでエラーが出る。
![gpg_miss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2656319/1a447d4e-2ac1-1cbf-c499-2abc78e9640a.png)
暇があれば、探してみよう。
<font color="White">正解は、sudo curlの方でgithubの前にraw.が抜けているのとusercontentのuが抜けているのとusr/share/key-archive-keyring.gpgとなっている。</font>
何らかのミスで失敗した場合は、
```
    sudo apt-key del F42ED6FBAB17C654
    sudo rm /usr/share/keyrings/ros-archive-keyring.gpg
    sudo rm /etc/apt/sources.list.d/ros2.list
```
してから、もう一度やりなおす。
それでもだめなら、
```
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
```
ここのF42ED6FBAB17C654は、実際に画面に表示されたNO_PUBKEYに続く値を入力する。
構文的な理解ができていないので、よくわからないが、その後sudo apt updateすると治る…ここは正直再現性薄いから…まじで困る…

でいよいよROS2のインストールに入れる。
```
    sudo apt install ros-foxy-desktop
```
あと、今回必要な、GAZEBOとpython-colconのインストールを行う。
```
    sudo apt install ros-foxy-gazebo-ros-pkgs
    sudo apt install python3-colcon-common-extensions
```

これでとりあえず完了となる。
なにかあれば、報告してほしい。
明日からは、なにか簡単なURDFの作成を行いシミュレーションロボットの動作準備を進める。

## 参考文献
科学情報出版株式会社 『ロボットプログラミング ROS2の実装・実践』-実用ロボットの開発- 日本大学 内木場 文男[著]
第3章 ROS2の基礎 P.18-P.19