機械工学科高専生とROSロボットを作るための仕組みづくり 

#なんの記事なの？
　ロボットのシステム・ソフトウェア開発好きな学生を増やすために，プログラミング実習後の機械工学科3年生を捕獲してROS勉強会をやろうとした．
　自分だけなら勉強するし，身銭切るし，調べるので，どんな道具でも良いけど，「学生と」となるとそうもいかないので，「うまい・やすい・はやい」を目標に道具立ての試行錯誤を行った活動結果を，備忘録（と反省）を兼ねてまとめました．
　似た事をやろうとしている人は，同じ穴に落ちないようにしてください．
　なお，書き方や理解が大雑把な個所が見られると思いますが，筆者のROSやLinuxに関する知識が未熟なせいですのでご容赦ください（引き続き勉強します）．

# 仲間（学生）のステータス

- のうりょく：すこしたかい
- やるき：ふつう
- そうび：BYOD指定ノートPC（Windows 10, core i5, Memory 8 Gb, 独立GPUなし）
- 所持ゴールド：もってる筈だがでてこない
- とくしゅのうりょく：
    - C言語の基礎：「構造体・・・ってなんでしたっけね？（by 卒研生．担当教員に100のダメージ）」
    - Arduino プログラミング（サッカーロボットの制御）
    - Linux知識：「知ってる知ってる．アレでしょ，えーと，アレ」レベル．
- そのた：ロボット開発＝アルミ製粉業だと思っている（機械科なので）

# どんな機材／開発環境を準備すべきか？

- ロボット：
    - 個人購入は困難．共用品が数台ある（1台/4~5人程度）ぐらいで．
    - [Raspberry Pi Mouse](https://rt-net.jp/products/raspberrypimousev3/) （（株）アールティ）を２台，[TurtleBot3 burger](https://e-shop.robotis.co.jp/list.php?c_id=93)（ROBOTIS）を１台準備
    - CPU（ラズパイ等）ぐらいは買って貰えると嬉しい．
- 開発用PC：BYOD指定ノートPC
- 開発環境構築のポイント：
    - はやい（構築が簡単）
        - 対ストレス性が高くないので，構築困難だと逃げられます．「俺の若けぇ頃はなぁ，鉄板の上に寝て頑張ったもんだ！」などと言うと一瞬で逃げられます．はめるまで我慢．
    - うまい（ぶっ壊してもリカバリが容易）
        - 「Windows の再インストール？したこと無いっすね」（by 卒研生）が普通なので，「ぶっ壊しても直せる」という自信がつくまで再インストールして貰う．「Linux力 はインストール回数に比例する」[1]
    - やすい：
        - PC一台で普段使い（Windows）とROS開発ができるのがベスト

ロボットはこちらで準備することにしたので，学生PCの開発環境をどないするかについて試行錯誤．

# 開発環境 Try and Error
## 1st Gen. (Windows 10 + WSL 1 + Ubuntu 18.04)：
### ポイント：

- コロナ下のリモート授業時だったため，[ラズパイマウスシミュレータ](https://raspimouse-sim-tutorial.gitbook.io/project/)[2]の利用を想定
- 『デュアルブートは危険』という噂（今まで散々やってきたのだが・・・世間がそう言うならば）
- Docker [3]：「せんせいは何を考えているんですか？」（by 同僚）
- Hyper-V：「皆さんWindowsのエディションは？　エディションなにそれ？ ｱ,ﾊｨ」

というわけで，1st Gen.はWSL 1で構築しました（ﾆﾀﾖｳﾅﾓﾝﾀﾞﾄｵﾓｳｶﾞ）．以下，環境構築手順書のフローチャートです．

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319329/8fe048c9-3615-a063-67bf-237ae87e1583.png)

### 結果：

参加者7名の殆どが環境構築で討ち死にしました．原因は，

- 手順書通りに作業したのにエラーが出る（多分ミスってるが，リモートで，こちらも十分な知見が無いのでサポートしきれない）
- シミュレーションまで動いたがすごい遅い（Core i5でシミュレーションは辛かったか？（旧世代だったのかも？））

というわけで，1st Gen.は壮大な実験に終わりました．
　あと，当時，「WSLはシリアルデバイスを認識できないのでrosserialの障壁になる」と思っていたのでWSL案は捨てたのですが，これは後で勘違いだとわかります．

## 2nd Gen. (Raspberry Pi 4)

2nd Gen.は，リモート授業→対面授業となった時期に開始．

### 1st Gen. の反省：

- 仮想環境は構築の手間が増えてダメだ！
- Raspberry Pi 4 ならdesktopとして使えるのでは？　安そうだし！

というわけで，ラズパイ4を開発環境として採用．

- [Raspberry Pi 4](https://www.switch-science.com/catalog/6465/)コンプリートキット（スイッチサイエンス．15730円）
- モバイルモニタ（15000円ぐらい）

しめて3万強・・・あれ？あまり安くなくない？（ものによりますが，3万出せば第7世代の中古ThinkPadが買える）というわけで，「ラズパイなら安い」というのは思い込みだったようです．
　一方，「ロボットと同じCPUなので学習コストが下がる」ことを期待して継続．

### 結果：

- [imager](https://www.raspberrypi.com/software/) で一発構築できるし，なかなかいいじゃん
- だが学生君，amd64アーキテクチャ用の某をインストールして大騒ぎするのはやめてもらおうか
- そもそも，[ラズパイ用Ubuntu desktopイメージ](https://ubuntu.com/download/raspberry-pi)は最新ディストリビューションしか配布されていないだと？　pythonのバージョンがあぁぁぁ（多くのROS教本[4, 5]は kinetic（with Ubuntu 16.0x）と melodic （with Ubuntu 18.0x）を想定しているため，知らないとはまる）

知っていれば避けられる罠に真っ向勝負を仕掛けるのが若さ．

　Ubuntu ではなく，Raspberry Pi OS（Debian ベース）にROSをインストールする方法も公式Wikiで紹介されていますが（[ROSberry Pi](http://wiki.ros.org/ROSberryPi)），Debian 11のリリースに伴い，ラズパイOSも10（buster）ベースから11（bullseye）ベースに変更されたこと，暫くは[両バージョンのラズパイOSが提供される](https://japan.zdnet.com/article/35180661/)ことが，メダパニ力の向上に寄与していると思われます．
　さらに，M1 MacやARM版PCで動くLinuxが出始めたことが，混乱に拍車をかけそうな予感がします（ｷｹﾝﾀﾞ）．

### 結論：

Arm版Linuxはあぶないのでおとなのひとと一緒に使いましょう

## 3rd Gen. (恥ずかしながら帰ってきたWSL)

　Armに懲りたのと，WSL 1でもrosserialを使えるのに気付いたことから，WSLに戻ってきました．時が経ち，WSLのインストールも[コマンド一発](https://docs.microsoft.com/ja-jp/windows/wsl/install)になり，複数の同一Linuxディストリビューションが共存できることも知ったので（上のリンク中ほど），かなり有力な選択肢です．
　
　インストールの話に進む前に，Windowsの仮想環境について整理しておきます．

- Hyper-V：Windows仮想環境の元締め（この程度の認識）．WSLもこの機能を使う．直接利用するにはWindows Pro以上でなければならない（終了）
- WSL 1：~~Hyper-Vの機能を使って~~Ubuntuとかを利用できる．
- WSL 2：いいWSL（この程度の認識）．Windows 11ならXクライアント無しでもGUIアプリを使える．だが，シリアル通信が封じられている（なんで？）．ネットワークがWindowsと別セグメントになるため，ROS 1のロボット-開発機間通信が難しい（できるのかもしれないが分かってない）（終了）
- VirtualBox：Hyper-Vと仲が悪い（この程度の認識）．共存できないので，WSLやDockerの利用に支障が生じる．シリアル通信が使えるらしいので，WSLと絶交しても良いなら選択肢に入る．
- Docker：よくわからんが，シリアル通信できる気がしない（調べてない）

というわけで，Windows + WSL 1 + Ubuntu．環境構築は多少面倒かもしれませんが，armでのカオスを考えたら安いもんです．

　ただし，WSL 1でGUIを使うには別途Xクライアントのインストールが必要です．フリーのクライアント（[VcXsrv](https://sourceforge.net/projects/vcxsrv/)）もありますが，自分は（というか学生が）結構トラブったので，有償のクライアント（[X410](https://www.microsoft.com/ja-jp/p/x410/9nlp712zmn9q?activetab=pivot:overviewtab)）と併せて使っています

### 結果：

- よし！rosserialも動いた完璧！
- だが，Sony Dualshock 繋いでも/dev/joyができないのだが？

　「ロボット操作にDualshock（PlayStation4用コントローラー）使いたいじゃろ」と[繋いてみた](https://cryborg.hatenablog.com/entry/2016/09/19/185501)のですが，Ubuntuだとできる筈の/dev/joyができない・・・という訳で，コントローラーを繋ぐにはひと工夫要りそうです（出来るのか？）．キーボード操作なら問題無いのかもしれません（試してません）．

# まとめ

中古のThinkPad でも買ってUbuntu を入れよう！一番コストが低いぞ（出費＋作業量的な意味で）が正解です（ｲﾏｻﾗ）．
「しなくていい苦労の大海原に乗り出し，一週まわって帰ってきた」のが2021年でした．
来年は，生産的なことをしたいと思います．

# 参考文献：
1. 奈佐原顕郎，[入門者のLinux](https://www.amazon.co.jp/%E5%85%A5%E9%96%80%E8%80%85%E3%81%AE%EF%BC%AC%EF%BD%89%EF%BD%8E%EF%BD%95%EF%BD%98-%E7%B4%A0%E6%9C%B4%E3%81%AA%E7%96%91%E5%95%8F%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-%E3%83%96%E3%83%AB%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9-%E5%A5%88%E4%BD%90%E5%8E%9F%E9%A1%95%E9%83%8E-ebook/dp/B01M3RBWH8/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1V776EI8KDHXG&keywords=%E5%85%A5%E9%96%80%E8%80%85%E3%81%AELinux&qid=1640486832&sprefix=%E5%85%A5%E9%96%80%E8%80%85%E3%81%AElinux%2Caps%2C406&sr=8-1)，ブルーバックス (2016)．相変わらずブルーバックスは初心者に求めるレベルが高い．
2. Raspberry Pi Mouse Simulator’s Tutorial，https://raspimouse-sim-tutorial.gitbook.io/project/（accessed at 2021/12/25）．久々に見たらインストーラーが整備されていて腰が抜けた．
3. Tiryoh, docker-ros-desktop-vnc, https://github.com/Tiryoh/docker-ros-desktop-vnc (accessed at 2021/12/25)．自分は感動したんですけど周囲の理解が得られませんでした．
4. 上田隆一，[Raspberry Piで学ぶ ROSロボット入門](https://www.amazon.co.jp/Raspberry-Pi%E3%81%A7%E5%AD%A6%E3%81%B6-ROS%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E5%85%A5%E9%96%80-%E4%B8%8A%E7%94%B0-%E9%9A%86%E4%B8%80/dp/4822239292/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=20Q1BT8ISQNP8&keywords=ros&qid=1640486508&sprefix=ro%2Caps%2C225&sr=8-3)，日経BP (2017)．
5. ピョ・ユンソクほか，[ROSロボットプログラミングバイブル](https://www.amazon.co.jp/ROS%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB-%E8%A1%A8-%E5%85%81%E3%80%93/dp/4274221962/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=20Q1BT8ISQNP8&keywords=ros&qid=1640486508&sprefix=ro%2Caps%2C225&sr=8-1)，オーム社 (2018)．