ROS環境(Ubuntu20.04 noetic)をUSBメモリにインストールする

# はじめに
ROSの講座を開催するにあたって，ROSを少しだけ触りたい場合に
Ubuntuの環境をどうやって用意すれば良いか質問がありました. 
Dockerなどの仮想環境もアリですが，重たかったり，情報が少なかったり，微妙に使い勝手が違ったりと初めてROSを触る初心者には少々ハードルが高いです．

今回は手元のWindows環境になるべく影響を与えないために，
USBメモリにUbuntuとROSをインストールし，Windows環境しか手元になくてもROSを試せるという環境を構築してみます．

※操作を間違えるとWindowsが消えたり使えなくなったりする可能性もあります．必ず必要なファイルはバックアップを取り自己責任で行ってください．

# 作る環境
| Ubuntuバージョン | ROSバージョン |
|:------------:|:------------:|
|20.04|Noetic Ninjemys|


# 用意するもの
・Windows PC　
　BIOSモード：UEFI
　BitLocker：解除済み
・Ubuntu20.04のインストーラーを書き込むためのUSBメモリ
　Ubuntuは2.7GB程度なので４GBもあれば十分です．
・Ubuntu20.04をインストールするUSBメモリ
　USB3.0　容量64GB以上推奨
　なるべく早いやつが良いです．
　私はAmazonで買えるよくわからんUSBを使いました．
 (本当にこんな値段で読み取り350MBも出るのか…？)
<img width="400" alt="IMG_7587.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/3cf3dab5-f113-9bf0-a27d-788e5f9a7384.jpeg">

https://www.amazon.co.jp/%E3%80%90Amazon%E9%99%90%E5%AE%9A%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89%E3%80%91Vansuny-%E8%AA%AD%E5%8F%96%E3%82%8A%E6%9C%80%E5%A4%A7350MB-%E8%B6%85%E9%AB%98%E9%80%9F%E3%83%87%E3%83%BC%E3%82%BF%E8%BB%A2%E9%80%81-%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96-%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%A1%E3%83%A2%E3%83%AA/dp/B0B5RHDBXP/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=35C29RB4RIETK&keywords=USB%E3%83%A1%E3%83%A2%E3%83%AA%2B128gb%2BVANSUNY&qid=1672377520&sprefix=usb%E3%83%A1%E3%83%A2%E3%83%AA%2B128gb%2Bvansuny%2Caps%2C1194&sr=8-2&th=1

# 1. インストーラ用USBメモリの作成
これは通常のUbuntu PCを作る際にも必要となる作業です．
### 1.1. Ubuntu20.04のインストールイメージを下記サイトよりDL
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/bd7ea85f-d364-3195-9b94-5bbdd853ca1b.png)

http://jp.releases.ubuntu.com/focal/

### 1.2. ダウンロードしたISOファイルをUSBメモリに書き込み，USBメモリからUbuntuをインストールできるように準備する
RufusというソフトでISOイメージをUSBメモリに書き込みます
サイトにアクセスし，ダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/1ae3bbf5-3136-7db6-987b-717576a56131.png)

https://rufus.akeo.ie/

デバイス欄にインストール用のUSBメモリを選択し，
ブートの種類の欄でダウンロードしたイメージファイルを選択します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/3179ddff-c3be-2e06-b8e9-a1a7209ca393.png)

# 2.USBメモリにUbuntuをインストール

### 2.1 USBメモリからインストーラーを起動
buntu USBとイメージを書き込んだインストールUSBをPCに差し込み、PCを起動します．
BIOS設定からUSBメモリからブートできるように設定してください．

[言語選択の画面になりますので、日本語を選択してUbuntuをインストールをクリックします．
![IMG_7588.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/2959eb6a-6db3-6020-07d8-5842bdafa098.jpeg)

[キーボードレイアウト]の画面になるので、日本語キーボードが選択されていることを確認して、[続ける]をクリックします．
![IMG_7589.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/89f3a816-0673-0bb6-102d-59afd4c49b48.jpeg)

接続するネットワークを選択します．
![IMG_7590.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/7b0db186-3d6b-8df4-627e-3e8894727732.jpeg)

アップデートと他のソフトウェアの画面になるので、好みの設定で[続ける]をクリックします．
![IMG_7592.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/61bbaf40-c09f-7fee-18dd-0432b469d524.jpeg)

これからの作業を間違えるとWindowsが消えてしまうので、これから細心の注意を払ってください．
インストールの種類はそれ以外を選択して続けるをクリックします．
![IMG_7593.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/da1e730a-ad79-7b67-5b3c-f6b4bdc2452a.jpeg)

Ubuntu USBに割り当てられている領域を選択します．下の図の私のようにUSBメモリの領域が不明となっている場合は,選択してその下のーボタンをクリックして空き領域にします．
![IMG_7594.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/793f8c73-1eb3-9496-fe0a-f36ed60ad57a.jpeg)
空き容量に変更出来たら選択して，＋ボタンをクリックします．
![IMG_7598.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/cea7a7f7-719b-48e4-5e45-34c109caeb40.jpeg)

USBメモリにはUbuntuのブートローダがインストールされるEFIシステムパーティションとUbuntuがインストールされるルートパーティションを作ります．
まずはEFIシステムです．画像のように設定します．
サイズ：200MB
新しいパーティションのタイプ：基本パーティション
新しいパーティションの場所：この領域の始点
利用方法：EFIシステムパーティション
![IMG_7599.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/6f1323a1-a2b4-24cf-b30d-fc8e0fb36572.jpeg)
次にルートパーティションです．同様にUSBの空き容量を選択して，+ボタンをクリックし下記の通り設定します．
サイズ：そのまま
新しいパーティションのタイプ：基本パーティション
新しいパーティションの場所：この領域の始点
利用方法：ext4　ジャーナリングファイルシステム
マウントポイント：/    　　　　　　　　　　　←設定忘れないように！！！
![IMG_7600.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/c702c59e-cc41-6d63-2752-27a6eb9bfefb.jpeg)

Ubuntuを起動するブートローダをインストールするデバイスを選択します．
USBに割り当てられているデバイスを選びます．
USB以外のデバイスを選ぶとWindowsが起動しなくなるから注意です．
選べたらインストールをクリック．
![IMG_761.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/358b9278-6b56-7d58-8267-1fdb010617e7.jpeg)

確認画面が出てくるので間違いないか確認し，続けるをクリック
![IMG_7602.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/4b1b320e-987b-6683-e243-f6ce50b7dd29.jpeg)

あとはPCの情報や時間の設定を行い，待っていれば完了です！
![Screenshot from 2022-12-30 16-17-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/dee479ef-b768-c0c6-892d-0f51a47c2f63.png)

# 3.ROSのセットアップ
他に記事がたくさんあるので,必要なさそうですが一応．
### 3.1 sources.listを設定
```
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
### 3.2 鍵の設定
```
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
```
### 3.3 Ubuntu をアップデート
```
sudo apt update
```
### 3.4 インストール
```
sudo apt install ros-noetic-desktop-full
```
### 3.5 環境設定
```
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
### 3.6 rosinstallの準備
```
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
```
### 3.7 rosdepの初期化
```
sudo rosdep init
rosdep update
```
### 3.8 ROSのワークスペースを作成、ビルド
```
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
```
### 3.9 ワークスペースのオーバーレイ
```
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
下記コマンドで
/home/<username>/catkin_ws/src:/opt/ros/noetic/share
と表示されればOK
```
echo $ROS_PACKAGE_PATH
```
### 3.10 インストールの確認
```
roscore
```
下記のようにエラーが出ず表示できればOK
```
<username>@ubuntu:~$ roscore
... logging to /home/<username>/.ros/log/3da110c6-4d4c-11eb-b763-f9ecf65ee99d/roslaunch-ubuntu-20827.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

invalid ROS_IP (must be a valid IPv4 or IPv6 address)
invalid ROS_IP (must be a valid IPv4 or IPv6 address)
invalid ROS_IP (must be a valid IPv4 or IPv6 address)
started roslaunch server http://master:33043/
ros_comm version 1.15.9


SUMMARY
========

PARAMETERS
 * /rosdistro: noetic
 * /rosversion: 1.15.9

NODES

auto-starting new master
process[master]: started with pid [20835]
invalid ROS_IP (must be a valid IPv4 or IPv6 address)
invalid ROS_IP (must be a valid IPv4 or IPv6 address)
ROS_MASTER_URI=http://master:11311/

setting /run_id to 3da110c6-4d4c-11eb-b763-f9ecf65ee99d
process[rosout-1]: started with pid [20845]
started core service [/rosout]
```

参考　ROS公式 Noeticインストール手順

http://wiki.ros.org/noetic/Installation/Ubuntu

# 4. 設定と必要なソフトのインストール
### 4.1 ディレクトリ名の変更
ホームディレクトリのフォルダ名が日本語のままだと使いにくいので英語に戻します．
ターミナルで下記コマンドを実行するとウインドウが開くので、”Don’t ask me this again”にチェックを入れて、
[Update Names]をクリックします．
```
LANG=C xdg-user-dirs-gtk-update
```
### 4.2 VSCodeのインストール
VSCodeのダウンロードページに移動し，debファイルを入手します．
[Visual Studio Code](https://code.visualstudio.com/download)
この際，Raspberri Piの場合はARM，またはARM64をダウンロードします．
ノートPCをお使いの場合はDebian,Ubuntuという所でOKです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/4daec5a9-dcdb-8120-0a89-f09eddb8f84a.png)

下記コマンドを実行し，ソフトウェアのインストールします．
installコマンド以降はダウンロードしたバージョンによってファイル名が変わるため，ダウンロードしたファイル名に変更してください．

```
cd Downloads/
sudo apt install ./code_1.67.2-1652812855_arm64.deb
```

ソフトが起動したら一番左のアイコンのExtensionsを選択し，以下のパックをインストールします．
(インストールが終わったらVSCodeの再起動が必要です)
・Japanese Langage pack
・Visual Studio Code Extension for ROS
・C++ Extension Pack
・Python　Extension Pack

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/8ee0e944-e014-cb5d-4f4a-69de862af04c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/fb0e16bc-152d-cc69-4eca-47cd6d15eb95.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/3b88731e-a5c1-5f0d-8082-adc348358679.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438020/f74297cf-9598-ad09-8742-b85cdd3c6c9e.png)



# 環境のバックアップ
USBLinuxのメリットとして，USBまるごとバックアップを取れることがあげられます.
ROS環境を作った後はUSBメモリのクローンを作っておくと破損や紛失に備えられます．
以下参考にさせていただいた素晴らしいサイトです．

https://demura.net/misc/20409.html