(以下の文章は人工知能によって翻訳されました。元の文を表示するにはこちらをクリックしてください。)
数ヶ月前、私はROS Developers Podcast #21 で、米国海軍アカデミーのシステムエンジニアリング部門の教授であるJoel Espositoとロボティクス教育の状況についてインタビューしました。そのポッドキャストで、Joelは世界中でどのようにロボティクスが教えられているかについての深い研究について話しています。彼は学生がロボティクスについて知るために説明する必要がある共通のロボティクスのトピックを特定し、人々がそれを教えるために使用しているリソースのリストを示しています。しかし、それ以上に、彼は学生が学んだことをロボットと実際に実践する重要性を指摘しています。
私の視点からは、ロボティクスは読むことではなく、実践することに関係しています。ロボティクスの授業は、逆運動学のためにヤコビアンを計算する方法を学ぶことではありません。ヤコビアンを計算することはロボティクスとは無関係であり、それはロボティクスの問題を解決するために使用する数学的なツールに過ぎません。そのため、ロボティクスの授業はヤコビアンの計算方法に焦点を当てるのではなく、エンドエフェクタを特定の位置に移動させる方法に焦点を当てるべきです。
👨🎓:このロボットアームのエンドエフェクタをあの点に移動したいんです。どうすればいいですか?
👨🏫:まず、アームの現在の構成を行列で表現する必要があります!
👨🎓:ああ、わかりました。どうやればいいですか?
👨🏫:現在の状態をエンコードするために行列を使用する必要があります。それを行いましょう。そのシミュレートされたロボットアームを取り、/joint_statesにサブスクライブし、ジョイントの値をキャプチャします。それらの値から、それを格納する行列を作成します。任意のタイムステップで行列を変更できるようにする必要があります。つまり、アームを動かすと、行列も変化しなければなりません。
[…]
👨🎓:できました!では、このボトルにグリッパーを近づけるにはどうすればいいですか?
👨🏫:それなら、ヤコビアンを計算する必要があります。やりましょう!エンドエフェクタの所望の位置を手動で入力できるプログラムを作成してください。それを基にして、ヤコビアンを計算します。
👨🎓:ヤコビアンをどう計算するんですか?
👨🏫:そう聞いてくれて嬉しいです!☺️
…
理論を学ぶことはロボティクスの重要な部分ですが、最も重要なのは実践とロボットと共に行うことです。そのため、私は学生がロボティクスのトピックを学ぶ間、実際の実践を可能にするベースシステムとしてROSを使用する提案をしています。
提案
逆運動学やロボットのナビゲーションなどの複雑なトピックを教える際、それは(単なる)理論的な問題ではあってはなりません。実践は、これらの複雑なロボティクスのトピックの教育に組み込まれるべきです。
私は、ロボティクスを教える際にROSを同時に教え、授業全体を通じてROSを使用して、教えているロボティクスのトピックを実装し、学生が実際に学んでいることを実践する手段として活用する提案をしています。例えば、障害物回避の異なるアルゴリズムについて話している場合、シミュレートされたロボットを提供し、学生にそのロボットのためのアルゴリズムを実際に実装するROSプログラムを作成させます。このアプローチに従うことで、学生の学習は理論だけでなく、実践も含まれるようになります。
この手法でROSを使用する利点は、ROSが既に多くの素材を提供しており、私たちが使用して学生に特定のトピックを教える際に必要な小さな部分を作成する方法に集中できる点にあります。
現在、5年前には利用できなかった多くのツールがあります。これらを活用して、学生の質と量を向上させましょう!パワーポイントスライドを使用する代わりに、対話型のPythonノートブックを使用しましょう。クラス全体で1つのロボットを使用する代わりに、各学生にロボットシミュレーションを提供しましょう。画面に方程式を表示する代わりに、学生にそれをROSノードで実装したものを提供し、変更できるようにしましょう。
新しい手法ではありません
私が説くのは、私が実践していることです。これは、私がバルセロナのラサール大学で行っている「ロボットナビゲーション」の授業で使用している方法です。この授業では、ロボットが障害物を避けながら空間のある地点から別の地点に自律的に移動する方法の基本を教えています。SLAM、パーティクルフィルタ、ダイナミックウィンドウアプローチなど、あなたも知っていると思います。この授業の一環として、学生はROSを学び、私が説明する理論的な概念の中からいくつかを実装するために使用しなければなりません。たとえば、エンコーダから提供される値を基にオドメトリを計算する方法などです。
しかし、私だけがこの方法を使ってロボティクスを教えているわけではありません。例えば、コーネル大学のロス・ネッパー教授は、ROS開発者ポッドキャスト第23回で私に語ったように、ロボティクスの基礎を教えるためにROSを使用しています。そのインタビューで、ロスはROSの教え方をロボティクスの科目と並行しています。彼はさらに進んで、学生にROSのナビゲーションスタックやMoveIt!など、多くのROSソフトウェアの使用を禁止しています。彼の主張は非常に妥当です。彼は、学生が実際にそれをどのように行うかを学ぶことを望んでいます。他の誰かが行ったもの(ナビゲーションスタックのようなもの)を単に使用する方法ではなく、ですが、彼は依然としてROSのインフラを使用しています。
ROSでロボティクスを教える方法
この方法は、以下の手順を含みます:
- 最初に、ROSの基本トピックを説明するROSのクラスを開始します。これは、作業を開始するのに必要な内容です。
- 次に、選んだロボティクスのテーマを説明し、学生にROSプログラムを使って実装させます。シミュレートされたロボットを使用することをお勧めします。
- アルゴリズムの実装を続けるために新しいROSの概念が必要な場合、そのトピックに関するクラスを行います。
- 次のロボティクスのテーマに進みます。
- ROSベースの実際のロボットプロジェクトを追加し、学生に実際のROSベースのロボットを使用した単一のプロジェクトで学んだことを適用させます。
- 試験を実施します。
1. 基本的なROSの概念を説明する
このステップでは、学生がROSプログラムを作成できるようにするためのROSの基本的な内容を説明する必要があります。これには以下の内容が含まれます:
- ROSパッケージ (ROS Packages)
- ROSノードの起動 (Launching ROS Nodes)
- 基本的なROSコマンド
- ROSトピックのサブスクライバ (ROS Topic Subscribers)
- 可視化とデバッグのためのRviz
これらのトピックについて詳しく説明する必要はありません。基本的な理解を得るために必要な範囲だけを説明すれば良いです。ROSのより深い知識と理解は、学期中のさまざまなクラスでの実践を通じて習得されます。彼らは理論的な概念の実装のためのソフトウェアを作成しようとする間に、それらの概念を実践し、脳に深く刻み込む必要があります。
重要なのは、これらの概念をシミュレートされたロボットを使用して説明し、学生にそれらの概念をシミュレートされたロボットに適用させることです。例えば、学生に最寄りの障害物までの距離を取得するためにトピックを読むようにさせたり、ロボットを移動させるためにトピックに書き込ませたりします。トピックが何であるかを説明して、スライドにコードを提供するだけでなく、実際にデータの生産者、つまりシミュレートされたロボットに接続させるのです。
また、このステップでは、カスタムメッセージの作成やサービス、アクションクライアントについて教えるのはやめておくことをお勧めします。これは非常に初心者向けのクラスには適しておらず、次のロボティクスのクラスで必要になる可能性は非常に低いです。
*リソース: 参考として、当社が作成したこの「ROS Basics In 5 Days」コースのシラバスを確認できます。私たちの多年にわたるROSトレーニングの経験を元に、このROS基礎コースをまとめ、ROSに関連する基本的なプロジェクトを理解し、作成するのに役立つ重要な概念とツールを含めました。
2. ロボティクスのトピックを説明して実装する
さて、ロボティクスのトピックを教える準備が整いました。クラスを2つのパートに分けることをお勧めします:
- 最初のパートでは、ロボティクスのトピックの理論を説明します。
- 2番目のパートでは、その理論を実際に実装します。あなたが説明した内容を実際に行うプログラムを作成します。
その理論的な部分を実装するために、学生が特定のポイントをサポートするための事前に作成されたコードが必要な場合があります。それは、あなたがクラスをより熟知して、各学生にそのサポートコードを提供する必要があることを意味します。幸いなことに、ROSを使用すると、そのようなコードは既に他の誰かによって作成されている可能性が非常に高いです。したがって、そのコードを見つけたり開発したりして、それをROSパッケージとして学生に提供してください。どこでコードを見つけ、それを学生に提供するかについての詳細は以下で説明します。
ここで考慮すべき興味深い点は、Knepper教授が指摘したことです:彼は意図的なエラーを含むいくつかの演習を作成しており、それによって学生がシステムが正しく機能していない状況を認識し、さらに重要なのは、それらのエラーを解決するスキルを作成できるようにしています。この点も考慮してください。
3. 新しいROSの概念を追加する
ある時点で、教えているロボティクスのトピックに合わせてカスタムROSメッセージ(ROS message)を作成する必要があるかもしれません。または、顔認識のためのサービスを提供する必要があるため、ROSサービス(ROS service)を使用する必要があるかもしれません。ROSに関する説明が必要な場合は、今が最適なタイミングです。その必要性を利用して概念を説明してください。つまり、学生がそれがどのように使用されるか全くわからない状態でROSアクションサーバ(ROS action servers)のような概念を説明するのは良くありません。新しいROSの概念を説明する最適な瞬間は、その概念がみんなにとって必要だと非常に明確になった時です。
私は、学生がそれらの概念をプログラムで使用する必要がない場合、ROSサービス(ROS service)のような複雑な概念を説明することは、良い使用例を提供しても理解が非常に難しくなると分かりました。彼らはそれらの概念をプログラムで使用しないという痛みを感じることができません。実際にその概念を適用する必要がある状況に直面したとき、つまり実際に痛みを感じたときに、知識は彼らの頭に統合されます。
4. 次のロボティクスのトピックに進む
この方法を続けてください。次のトピックに移動します。異なるロボットシミュレーションを提供します。学生に実装を求めます。そして、この方法を使ってコース全体を終えるまで続けます。
5. 実際のロボットプロジェクト
シミュレータでのテストは、実際の人生に似た経験を提供するので良いです。ただし、本当のテストは実際のロボットを使用するときです。通常、大学には各学生に対するロボットの予算はありません。それが私たちがシミュレーションの使用を積極的に推進している理由です。ただし、ある程度の実際のロボットの経験が必要であり、ほとんどの大学はクラス全体に対していくつかのロボットを持つことができます。それがロボティクスプロジェクトが活躍する時点です。
コース全体の知識を包括したロボティクスプロジェクトを定義してください。学生が自分たちの結果を実際のロボットでテストするグループを作成させます。このアプローチには多くの利点があります:学生はすべてのレッスンを1つのアプリケーションにまとめなければなりません。それを実際のロボットで動かさなければなりません。さらに、チームで働かなければなりません。
このステップを学生に提供するために、以下の準備が必要です:
- 実際のロボットが実行される環境のシミュレーション。これにより、学生はほとんどのコードをシミュレータでより迅速に練習できます。また、(さもないと、学生は常に実際のロボットのラボであなたの存在を求めるかもしれません)ある程度休息することもできます。😉
- 週に数時間、学生が実際のロボットで練習できるようにするためのスケジュールを組む必要があります。
最後に、各チームのプロジェクトを評価する日を決定します。それは「デモデー」と呼ばれます。デモデーでは、各グループがそのコードがロボットを予定通りに動かすことができるかを示す必要があります。
例えば、ラサール大学では、15人の学生用に2台のTurtlebotを使用しています。プロジェクトを行うために、学生は2人1組のチームを作成する必要があります。そして、デモデーでは、彼らのロボットはバルセロナの実際のコーヒーショップでコーヒーを提供できるようにならなければなりません(サポートしてくれたCosta Coffeeさん、ありがとうございます!)。すべての学生は自分たちのプログラムを持ってコーヒーショップに行き、2台のロボットを持参します。その後、1つのチームが片方のロボットでデモを行っている間、もう1つのチームは準備をします。
もしROSの認定ロボットが必要な場合、私の友人のオンラインショップ、ROS Components shopをお勧めします。私が必要なときにロボットやパーツを購入する場所です。私には紹介料は発生しません!ただ彼らが素晴らしいと思うだけです。
6. 評価
このプロセス全体で非常に重要な点は、学生の評価方法です。私の意見では、評価は連続的である必要があります。そうでないと、学生たちは試験の前日まで何もしません。その後、皆、不平不満が絶えません。
私の場合、ラサール大学では毎月、その月に教えたトピックと前月に教えたトピックをカバーする1時間の試験を行います。
私たちの場合、試験は完全に実践的です。彼らは教えた科目に関連する何かをロボットに実行させなければなりません。例えば、拡張カルマンフィルタを使用して環境のマップを作成させる必要があります。私は拡張カルマンフィルタの実装を提供することがあるかもしれませんが、学生はそれをどのように使用するか、ロボットから適切なデータを取得する方法、それをフィルタに提供する方法、出力を使用してマップを構築する方法を知っていなければなりません。
例として、以下に私が生徒たちに行った最後のデッドレコニングナビゲーションに関する試験が含まれるROSjectを見つけることができます。ROSjectには、試験を行うために必要なすべてが含まれており、指示書、スコア、およびロボットのシミュレーションも含まれています。これは次のポイントに繋がっています。
学生への教材提供方法
もし私がROSを使用した実践的な方法でロボティクスを教えることを説得したなら、この時点で以下の2つの点について心配する必要があるかもしれません:
- 一体どうやってその全ての教材を作成すればいいのだろうか!
- 学生がシミュレーションとROSコードを実行できる環境をどうやって提供すればいいのだろうか!
非常に妥当な懸念です。
教材の準備は多くの作業を伴います。そしてさらに重要なことは、多くのリスクがあるということです。このような教材を準備する際には、準備したものが学生のコンピュータで動作しない可能性が高いです。そのため、私は全ての教材を準備し、共有するためにオンラインプラットフォームを使用することを提案します。これにより、誰がそれを使用しても動作することを100%保証できます。
私はROS Development Studioを使用することを提案します。これは、私たちの会社The Constructで開発したROSコードの簡単な作成、テスト、配布を行うためのプラットフォームです。
ROS Development Studio(略してROSDS)は、ウェブブラウザを使用して任意のコンピュータで教材を作成できます。必要なシミュレーションをすでに提供しており(独自のシミュレーションも追加できます)、学生の教材としてPythonノートブック構造を提供します。ROSパッケージの形式で学生が必要とする任意のコードを含めることができます。
しかし、ROS Development Studioの最も興味深い点は、学生にシンプルなウェブリンクを送信することで、すべての教材を共有できる点です。これをROSjectと呼びます。ROSjectは、シミュレーション、ノートブック、コードが1つのウェブリンクに含まれる完全なROSプロジェクトです。このリンクを提供すると、誰にでもその内容のコピーが提供され、ROSjectを作成した条件とまったく同じ状況で実行できます。
この共有機能により、学生は試験の評価のためにプログラムを共有することが非常に簡単になります。ROSjectにはすべての教材が含まれているため、プログラムを作成した学生の環境で試験を修正することは非常に簡単です。ファイルをコピーしたり、コンピュータ環境を設定する必要はありません。学生にROSjectのリンクを共有するように伝えるだけです。
ラサール大学では、さまざまなレッスンと実習にROSjectを使用しています。例えば、プロジェクト評価を行うカフェのシミュレーションを含むROSjectがあります。また、試験を作成するためにROSjectを使用しています(前のセクションで確認できる通り)。
まとめると、ROSjectは、シミュレーションとコードを含む説明を完全な単位にまとめることができます。しかも、すべて無料です。
ただし、自分のクラス用のROSjectを作成する必要があります。これは、今後ますます多くの大学が自分のROSjectを作成し、オンラインで公開しているため、近い将来に終了することでしょう。
ただし、それらが作成されるのを待ちたくない場合は、私たちのオンラインアカデミー、Robot Ignite Academyをお勧めします。ここでは、ROS基礎、ROS2、ロボットナビゲーション、ディープラーニング、操作、ロボットパーセプションなど、ROSを使用したすぐに利用可能なコースを提供しています。ただし、アカデミーは生徒一人あたり一定の費用がかかります。ただし、準備を簡略化するため、非常にお勧めです。私たちはラサール大学でRobot Ignite Academyを使用していますが、アメリカのクラークソン大学、ミシガン大学、日本の中京大学、オーストラリアのシドニー大学、ルクセンブルク大学(ルクセンブルク)、フランスのランス大学、スペインのアリカンテ大学など、世界中の多くの大学が使用しています。
追加でカバーする必要のあるトピック
最後に、この方法を使用する際に特定の問題点を指摘したいと思います。
私は、私たちの「ロボットナビゲーション」クラスに来るほとんどの人々が、PythonまたはC++のプログラミングについてのゼロの知識、Linuxシェルの使用方法についての知識がないという問題を特定しました。世界中のいくつかのロボティクスの先生とのインタビューの結果、これが他の国々でも同じ状況であることがわかりました。
もしそのような状況である場合、まず最初に、教えるプログラミングの範囲をPythonの使用に限定することをお勧めします。C++には入り込まないでください。C++は、ロボティクスと同時に教えるにはあまりにも複雑です。また、Pythonは非常に強力で学びやすい言語です。
Pythonを学ぶための無料のオンラインコースはこちら、Linuxシェルを学ぶための別のコースはこちらで見つけることができます。
通常、PythonとLinuxシェルに関する最初のクラスを作成します。このクラスを行った直後、次の週にすぐにPythonとLinuxシェルに関する試験を行います。試験の目的は、これらのプログラミングスキルの重要性を学生に強調することです。これらはすべての基盤です。
Pythonを学ぶための無料のオンラインコースはこちら、Linuxシェルを学ぶための別のコースはこちらで見つけることができます。
さらに、学生たちが英語を理解するのに問題を抱えている場合(英語圏外の国にいる場合)、それも別の問題となるかもしれません。ROSのドキュメンテーションのほとんどは英語です。ROSコミュニティでのコミュニケーションは英語で行われます(それが好きでなくても)。生徒たちの基準を下げ、授業のノートを母国語で作成し、ドキュメンテーションの資料だけを母国語で提供することに誘惑されるかもしれません。しかし、それはお勧めしません。生徒たちを英語の学習に駆り立てましょう!コミュニティは共通の言語が必要であり、現在、それは英語です。生徒たちに成長を促し、ドキュメンテーションの資料を英語で読むことを強制しましょう。
結論
この記事では、Joel Espositoの調査結果について話し始めました。もしポッドキャストのインタビューを聞いたなら、彼の最終的な結論は、ロボティクスの教育にROSを使用しない方が良いというものでした。同じ意見を持つ他の教師もいるかもしれません。一方で、Knepper教授のように反対意見を持つ教師もいます。これらは、この記事の私の意見と同じように、それぞれの視点です。Joelのポッドキャストのインタビューを聞いて、彼がそれを提案する理由を理解することをお勧めします。
あなたがどちらの意見が最適であるかを決定するのはあなた次第です。ここにはいくつかの意見があります。あなたにとって最適な方法は何でしょうか?お答えをコメントに残して、議論を始めましょう。
0 Comments