えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ROSを学生に教えるということ

ROSJP45回の発表内容とその延長です。この発表資料をきっかけにしてROSの教育などについて活発なディスカッションができるとよりオープンになるのかなーと思ったりします。私が知らないだけかもしれないので、その場合は教えていただけると幸いです。

(発表久々すぎて発表にならないレベルで噛んでしまったのですみません…)

ROSを学生に教える??

昨年の春、「ROSが使える学生を増やす」という目標をもとに研究室間でのROS講習のための計画を練りました。

研究室ではロボット系の研究が活発に行われており先輩の成果を引き継ぐことがしばしばあります。そのため、ROSを導入することでその遺産の再利用を加速させる狙いがあります。

カリキュラムを組むといっても、どのような研究でROSを使うのかをヒアリングしてそれに対応するサンプルプログラムを提示して説明するという感じで進めました。

課題

ROSを学生に対して教えるためにいくつか工夫をしました。それぞれ問題点を挙げて説明します。

1:1年しか学習を含めた期間がない

学生の研究室配属と実践は1年間のみです。一応、回路やプログラミングなどの基礎知識は学びますが、これまでROSと無縁だった学生がROSを触るというのは学習コストが高いです。

そのため、3週間程度で学習ができるようにカリキュラムを組むことにしました。ROSの概要などをまず説明したうえで大まかに「①基本のPub-Sub,②ArduinoとROSの接続,,③画像処理とROS」に分けて解説し、これを通して基本的なPub-Subを学ぶという方針にしました。特にROS1は資料が多く、独学でも問題ないくらいにはチュートリアルがあるので参考サイトをいくつか提示して各自調べてもらうことも並行して実施させました。

この講習ではrqt_graphやRvizやコマンドライン操作などのROSの便利ツールの説明を最小限にしました。ただ、ツールの説明を端折ったことでエラーのフィードバック時に「rqt_graphでつながっているか確認して」→「rqt_graph is 何」が起こってしまいました…

f:id:Ray_ar:20220220182801p:plain

この学習法を通して、大まかな流れはつかんでもらえたかなーと思っています。時期的にオンラインでしかフィードバックができなかったので、環境依存のエラーなどの対応は大変でした。

この講習を受けた学生がROSを使って研究の成果物を作られたそうで、成果は一応出たのかなと思います。

2:全員が同じ用途でROSを使うわけではない。

皆さんのROSデビュー(?)はどうでしたか?私はSLAMがきっかけでした。

ROSの用途は本当にたくさんあり、自動運転やロボットアーム、シミュレーション、ヒューマノイドロボット、AGV…といろいろです。

短期間でROSを習得させるとなるとできる限り似た環境のデモを実現したほうがROS学習のモチベーションになっていいと思いますが、特化となるとどうしても実装時間も演習時間も予算も足りません。

そのため、私は以前作成したmotpy_rosのトラッキングシステムを少し改良して単純にした「カメラ入力→サーボ出力」のシステムを作成しました。

f:id:Ray_ar:20220220190538p:plain

チュートリアルでは顔検出のアルゴリズムではなく色に反応するように調整したプログラムを渡して、実践問題で分離された顔認識PythonプログラムをROS移植させるといった流れで講習を行います。

少し難しい内容だったようで達成者がそう多くない課題でしたが、プログラムを自分で作ってつなげてROSの入出力を手軽(?)に体験するにはこのような課題がいいのかなと思っています。


後輩にROSを教えるのは苦戦した点もあり、いい経験になりました。また、ROS講座を通して自分のコードを見直すきっかけになり少しコードがきれいになった(?)と思います。

現時点のシステムではROS1ですが、ROS2移行も進めていきたいと思っているので、来年度以降はROS2に対応したカリキュラムを組めたらいいなーと思います。報告する機会があればいいですが…

microROSやUnityなどとの組み合わせを試しているので、取り入れられたらいいなと思います。

[f:id:Ray_ar:20220220190951p:plain

ちょっと追加:スライドで表示したコマンドをまともに打ってくれないケース

質問で「コマンドを打っても正しい出力が出ない」系の質問をいくつか頂くのですが、ドキュメントの読み間違いだったというケースがあったのでその対策を紹介します。

空白を詰めてしまう

sourceコマンドを分かっていない学生がたまに空白を忘れるというケースがありました。そのため、黄色ラインを入れてはっきりと空白の場所を明記することにしました。これは結構好評でした。

$を直打ちする

まじかよ…と思ったのですが、コマンドを表す$をそのままLinuxターミナルに打ち込む人がいました。ただ、$マーク、環境変数の呼び出しでも使用するので紛らわしいなと思い、全角の「」で囲むことにしました。


この2点を踏まえたビフォーアフターを以下に示します。

f:id:Ray_ar:20220220195644p:plain

発表にあたり、事前に関係教員との確認を取っています。ありがとうございます。