#なんの記事なの?
ロボットのシステム・ソフトウェア開発好きな学生を増やすために,プログラミング実習後の機械工学科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 ((株)アールティ)を2台,TurtleBot3 burger(ROBOTIS)を1台準備
- CPU(ラズパイ等)ぐらいは買って貰えると嬉しい.
- 開発用PC:BYOD指定ノートPC
- 開発環境構築のポイント:
- はやい(構築が簡単)
- 対ストレス性が高くないので,構築困難だと逃げられます.「俺の若けぇ頃はなぁ,鉄板の上に寝て頑張ったもんだ!」などと言うと一瞬で逃げられます.はめるまで我慢.
- うまい(ぶっ壊してもリカバリが容易)
- 「Windows の再インストール?したこと無いっすね」(by 卒研生)が普通なので,「ぶっ壊しても直せる」という自信がつくまで再インストールして貰う.「Linux力 はインストール回数に比例する」[1]
- やすい:
- PC一台で普段使い(Windows)とROS開発ができるのがベスト
- はやい(構築が簡単)
ロボットはこちらで準備することにしたので,学生PCの開発環境をどないするかについて試行錯誤.
開発環境 Try and Error
1st Gen. (Windows 10 + WSL 1 + Ubuntu 18.04):
ポイント:
- コロナ下のリモート授業時だったため,ラズパイマウスシミュレータ[2]の利用を想定
- 『デュアルブートは危険』という噂(今まで散々やってきたのだが・・・世間がそう言うならば)
- Docker [3]:「せんせいは何を考えているんですか?」(by 同僚)
- Hyper-V:「皆さんWindowsのエディションは? エディションなにそれ? ア,ハィ」
というわけで,1st Gen.はWSL 1で構築しました(ニタヨウナモンダトオモウガ).以下,環境構築手順書のフローチャートです.
結果:
参加者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コンプリートキット(スイッチサイエンス.15730円)
- モバイルモニタ(15000円ぐらい)
しめて3万強・・・あれ?あまり安くなくない?(ものによりますが,3万出せば第7世代の中古ThinkPadが買える)というわけで,「ラズパイなら安い」というのは思い込みだったようです.
一方,「ロボットと同じCPUなので学習コストが下がる」ことを期待して継続.
結果:
- imager で一発構築できるし,なかなかいいじゃん
- だが学生君,amd64アーキテクチャ用の某をインストールして大騒ぎするのはやめてもらおうか
- そもそも,ラズパイ用Ubuntu desktopイメージは最新ディストリビューションしか配布されていないだと? pythonのバージョンがあぁぁぁ(多くのROS教本[4, 5]は kinetic(with Ubuntu 16.0x)と melodic (with Ubuntu 18.0x)を想定しているため,知らないとはまる)
知っていれば避けられる罠に真っ向勝負を仕掛けるのが若さ.
Ubuntu ではなく,Raspberry Pi OS(Debian ベース)にROSをインストールする方法も公式Wikiで紹介されていますが(ROSberry Pi),Debian 11のリリースに伴い,ラズパイOSも10(buster)ベースから11(bullseye)ベースに変更されたこと,暫くは両バージョンのラズパイOSが提供されることが,メダパニ力の向上に寄与していると思われます.
さらに,M1 MacやARM版PCで動くLinuxが出始めたことが,混乱に拍車をかけそうな予感がします(キケンダ).
結論:
Arm版Linuxはあぶないのでおとなのひとと一緒に使いましょう
3rd Gen. (恥ずかしながら帰ってきたWSL)
Armに懲りたのと,WSL 1でもrosserialを使えるのに気付いたことから,WSLに戻ってきました.時が経ち,WSLのインストールもコマンド一発になり,複数の同一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)もありますが,自分は(というか学生が)結構トラブったので,有償のクライアント(X410)と併せて使っています
結果:
- よし!rosserialも動いた完璧!
- だが,Sony Dualshock 繋いでも/dev/joyができないのだが?
「ロボット操作にDualshock(PlayStation4用コントローラー)使いたいじゃろ」と繋いてみたのですが,Ubuntuだとできる筈の/dev/joyができない・・・という訳で,コントローラーを繋ぐにはひと工夫要りそうです(出来るのか?).キーボード操作なら問題無いのかもしれません(試してません).
まとめ
中古のThinkPad でも買ってUbuntu を入れよう!一番コストが低いぞ(出費+作業量的な意味で)が正解です(イマサラ).
「しなくていい苦労の大海原に乗り出し,一週まわって帰ってきた」のが2021年でした.
来年は,生産的なことをしたいと思います.
参考文献:
- 奈佐原顕郎,入門者のLinux,ブルーバックス (2016).相変わらずブルーバックスは初心者に求めるレベルが高い.
- Raspberry Pi Mouse Simulator’s Tutorial,https://raspimouse-sim-tutorial.gitbook.io/project/(accessed at 2021/12/25).久々に見たらインストーラーが整備されていて腰が抜けた.
- Tiryoh, docker-ros-desktop-vnc, https://github.com/Tiryoh/docker-ros-desktop-vnc (accessed at 2021/12/25).自分は感動したんですけど周囲の理解が得られませんでした.
- 上田隆一,Raspberry Piで学ぶ ROSロボット入門,日経BP (2017).
- ピョ・ユンソクほか,ROSロボットプログラミングバイブル,オーム社 (2018).