この記事は「ROS Japan UG #57 ROS納めLT大会」の発表内容についてちょっと詳しく書いたものです。
既に投稿済みの記事をそのまま使って発表するという画期的(!?)な発想の発表スタイルに感動し、それなら資料投稿を記事にしてもOKだろう‥ということで🙃
PCにUbuntu等のOSをインストールする際にほぼ間違いなくお世話になるデバイスといえばLiveUSBです。
みなさんはLiveUSBを持っていますか?もちろん1本は(布教のために)ポケットに忍ばせていますよね(?)
しかし、自分で何かしらのカスタムをしてLiveUSBを作るということした経験のある人は多くはないと思います。
「LiveUSB」で検索をかけると、作成方法(imgをダウンロードしてUSBに焼く)はたくさん出てきますが、自分好みにカスタムする方法はなかなか引っかかりません‥(引っかかっても10年前のものだったりします)
つまり、「ROS 2 特化のLiveUSB作成」というのは一周回って新鮮なのでは!?と考え、いろいろ調べてきました。
この資料の対象者は「ROS 2 を布教したい人(あわよくば他人のWindowsを吹っ飛ばしたい人)」向けとなっております。
LiveUSBを作る背景
私は、学生の頃にROSを使用した講習会を何度か開いたことがあり、その経験をもとにして講習資料をオープンにするなどの活動を行ってきました。
活動当初から「ROSはそのうち高校生レベルから扱われるだろう」と考えていましたが、既にその流れは来ており、高専低学年の学生がROSを挟んで制御する事例が今年出てきたようです。
そんなROSですが、初学者に教えるとなると結構大変です。
1. そもそもUbuntu PCを持っていない
目がターミナルの黒画面になれてしまった皆さんには想像つかないことだとは思いますが、大抵の初学者の方々はそもそもLinux専用機を持っていません。だいたいWindowsです。
なんなら最近はMacBookのケースもあります。最悪ですね。
2. 選択肢が多く、いずれも誰かのニーズを満たさない
そんなノートPCにROS(Ubuntu)をインストールしようとなるのですが、ここでも課題が。インストールアプローチが多い上にそれぞれメリットデメリットあり、多人数になるほど安定した講習が困難になるということです。
今回はWindowsに限定しますが、Windowsノートの場合にROSをインストールしようと思ったら意外とアプローチ方法は多く次の方法があります。
- Windows上に直接ビルド
- WSL直インストール
- WSL + Docker
- バーチャルマシン環境にUbuntuを作る
- デュアルブートでUbuntuを作る
- Ubuntuをクリーンインストール
- LiveUSBでブート
基本的にクリーンインストール以外はハードウェア的に何かしらのトレードオフがあり、制限やニーズに合わせて作るべきですが、その前提環境が「使用者のWindowsに依存する」というなかなか苦しい制約があります。つまり、インストールされているアプリケーションによってはうまくインストールできないということです。(例:ディスク容量
クリーンインストールに近い状態で環境を再現できるデュアルブートがありますが、Windows updateやOSの入れ直しで操作を誤ればどちらか(あるいはいずれも)のOSを吹っ飛ばす恐れがあり、特に重要なデータや複数アカウントログインがされているであろうWindowsでそれをするのはリスクでしかありません。
そのため、インストールが比較的簡単&戻しやすいLiveUSBを使用することが合理的だと考え、これを採用しました。
LiveUSBとは
説明不要な気がしますが、LiveUSBはUSBメモリ上にオペレーティングシステム(OS)をインストールして、PCやラップトップでそのOSを起動・動作させるためのものです。
手軽に作成でき、BIOSが生きていればブート可能なので、CPU・マザーボードの動作確認にも使えます。
OSのインストールでの使用がメインですが、 インストールせずともお試しができます。
LiveUSBはBIOS切り替えでOSの起動を行うため、起動した瞬間から権限がUSB側のOSに渡ります。そのため、そのOS自体がウィルスだった場合の挙動を防ぐことがほぼ不可能となっています。
そのため、動作を信頼できないイメージや他人のUSBを使ってブートしたりすることはしないでください。
もしも動作に不安がある場合は、署名がされているイメージを使ったり、VM(バーチャルマシン)環境でテストするなど、事前にそれが信頼できるものなのかの動作確認をおすすめします。
ISOファイルとは
さて、これからUSBに書き込むイメージを作成して焼きたいところですが、そもそもOSイメージの中身をご存知でしょうか?
UbuntuなどのOSイメージはだいたいISO9660(RAW CD Image)というCDファイルシステムのフォーマットに収められており、CD-ROMとしてマウントすることができます。
これをダブルクリックすると、GUIDパーティションテーブルがどこかのloopデバイスに展開されます。
GUIDパーティションテーブルは、Intel/AMD系チップセットのOS起動に必須です。
マウントしたディスク内の casper
というファイル内にOSの実体が入っています。
さらに掘り下げると、***.squashfsというファイルが見つかります。これを展開することでインストールされるであろうOSの中身を見ることができます。
LiveUSBのカスタムはsquashfsというファイルを展開して弄ってもう一度圧縮することで完成します。
squashfsの展開後にchroot(ルートディレクトリを強制的に移動させるコマンド)経由でいつもどおりのインストールコマンドを叩いてaptやsystemdの設定を行います。
(ちょっと脱線)壁紙の設定方法
壁紙の設定などの簡単な変更であれば、chrootを使用せずとも変更可能です。例えば次のような壁紙を設定してみましょう。
次のコマンドで設定できます。(パスは適宜変更してください)
cp ./penguin_turtle.jpg <path to target>/usr/share/backgrounds/ sed -i 's/warty-final-ubuntu.png/penguin_turtle.jpg/g' <path to target>/usr/share/glib-2.0/ schemas/10_ubuntu-settings.gschema.override
ISOファイルの生成に成功したら、RufusなどのOS書き込みアプリでUSBに書き込んでください。
Ubuntuであれば、Disksアプリケーションの「Restore Disk Image」で簡単に焼けます。
焼いたら完成です!楽しいROS 2 布教ライフを送ってください🐢🐧🤗
インストールされるアプリケーション
リポジトリ内の作成手順では、次のアプリケーションが入っています。
- ROS 2 Humble (Desktop-full)
- librealsense
- OpenVINO
シミュレーションもUSB3.2経由でのRealSense起動いずれもできました。
あなたが布教したいROS 2環境は何ですか?ぜひ作成してその情熱をぶつけちゃいましょう!