私のロボティクス研究章

Table of Contents

この投稿では、2015年高校時代FRC でロボティクスへの情熱を見つけたことから、2021年2月から2021年9月まで コロラド鉱山学校Human Centered Robotics (HCR) Lab で研究助手として過ごした時期まで、私のロボティクスの歩みを振り返ります。なお、2022年後半以降、HCR Lab はコロラド鉱山学校から マサチューセッツ大学アマースト校 へ移転し、サイトも hcr.mines.edu から hcr.cs.umass.edu へ移りました。

背景

私は2018年秋学期にコロラド鉱山学校で学部課程を始めました。専攻はロボティクスと知能システムに重点を置いたコンピュータサイエンスでした。そして2022年春に卒業しました。

私は人生の早い段階で自分の情熱を見つけられた幸運な人間でした。高校時代には、自分が何を好きで、何が得意になれそうかを見極めるためにかなりの時間を費やしました。試行錯誤を重ねた後、私の情熱はコンピュータサイエンスだと分かりました。しかし、この時期に、コードを通じて何かを作り上げることに圧倒的な愛情を抱いていることにも気づきました。

Minesでは、Dr Hao Zhang のもとで、Mines の Human Centered Robotics (HCR) Lab で働く機会を得ました。私は2020年春に、彼の授業「Human Centered Robotics」(CSCI473)を通じて Zhang 博士に初めて会い、COVID と授業課題の混乱が落ち着いた後、2021年春の初めに彼の研究室で働くことになりました。

Human Centered Robotics(CSCI473)の授業

Mines の Human Centered Robotics(CSCI473)は、大学生活の中で私に大きな影響を与えた数少ない授業の一つでした。この授業は Hao Zhang 博士が担当していました。授業の成績は3つのプロジェクトだけで構成されており、それぞれがロボティクスの核心概念を導入する、難しい課題でした。プロジェクトは以下の通りでした。

  1. ロボットオペレーティングシステム(ROS)を学ぶ
  2. ロボットの壁追従のための強化学習
  3. 骨格ベース表現を用いた人間行動のロボット理解

ロボットオペレーティングシステム(ROS)を学ぶ

これは最初に割り当てられたプロジェクトでした。課題は3つありました。

  1. 開発環境のセットアップ
  2. Gazebo シミュレータの理解
  3. ROS の「Hello World」を書く

課題1と2では、開発環境をセットアップし、Gazebo の導入チュートリアルに従うだけでした。これには以下が含まれていました。

一方、課題3は本当に大変でした。この課題は turtlesim を使い、カメが Mines の「M」ロゴを描くようにすることでした。

この課題は、簡単そうに聞こえるものの、見た目以上に難しかったです。このプロジェクトを通じて、私は最終的にオープンループとクローズドループのシステムという概念に触れることになりました。プロジェクトの詳細な説明については、csci473-p1.pdf をご覧ください。あるいは、ROS Move Turtle のプロジェクトページで、このプロジェクトと私の解決策についてさらに学ぶこともできます。

ロボットの壁追従のための強化学習

これは2つ目の課題で、大学で取り組んだ中でも最も難しいプロジェクトの一つでした。プロジェクトの説明は次の通りです。

このプロジェクトでは、学生は強化学習アルゴリズムを設計・実装し、自律移動ロボットに壁に沿って走行し、障害物に衝突しないように学習させます。学生は、ROS Melodic の Gazebo シミュレーションを使用して Triton という名の全方向移動ロボットをシミュレートし、提供された環境マップを使用します。学生は、ロボット上のレーザー距離計を用いてセンシングと学習を行い、ロボットは操舵および速度コマンドによって制御されます。学生は、Ubuntu 18.04 LTS 上で動作する ROS Melodic を使用して、このプロジェクトを C++ または Python でプログラムする必要があります(つまり、プロジェクト1で使用したのと同じ開発環境です)。また、学生は LATEX を使用して標準的な IEEE ロボティクス会議の形式に従ったレポートを作成する必要があります。

強化学習アルゴリズムとして、Q学習 を使うよう指示されました。また、授業で提供された Stingray の Gazebo シミュレーション環境も使用しました。Stingray には Triton のモデルと物理ロジックが含まれていました。さらに、ロボットが追従するための迷路も提供されました。全体として、環境は次のように見えました。

私の解決策は、良くないうえに大きく欠陥があったため、GitHub やウェブ上には公開しませんでした。また、コードを正しい環境で動かすのはかなり難しく、面倒です。しかし、授業に提出したデモ動画はあり、そこに私の解決策が示されています。こちらで見ることができます。

プロジェクトの詳細な説明については、csci473-p2.pdf をご覧ください。

骨格ベース表現を用いた人間行動のロボット理解

3つ目のプロジェクトの説明は次の通りでした。

このプロジェクトでは、学生は複数の骨格ベース表現(提出物1)を実装し、Kinect V1 センサーから収集された公開アクティビティデータセットを用いて人間の行動を分類するために、サポートベクターマシン(SVM)(提出物2)を使用します。さらに、学生は提出物3として、LATEX を使用して標準的な IEEE ロボティクス会議の形式に従ったレポートを作成する必要があります。

このプロジェクトは難しかったですが、2つ目のプロジェクトほどではありませんでした。主な目的は、MSR Daily Activity 3D DatasetKinect V1 センサーデータと サポートベクターマシン を用いて、特定の人間の動作/行動を分類することでした。プロジェクトの詳細な説明については、csci473-p3.pdf をご覧ください。あるいは、LIBSVM を使って人間の行動を予測する のブログ投稿で、このプロジェクトと私の解決策についてさらに学ぶこともできます。

CSCI473 のまとめ

CSCI473 は、Mines での学部課程の中で受講した授業の中でも、最良のものの一つ、あるいは最良の授業そのものでした。これらすべてのプロジェクトは多くのことを教えてくれ、履歴書で振り返ったり参照したりできる、かっこいいプロジェクト集を持つこともできました。また、テストは苦手でもプロジェクトの完遂では力を発揮する自分にとって、初めて「自分の得意分野にいる」と感じた授業でもありました。そして、この授業を通じて Hao Zhang 博士と出会い、最終的に Mines の Human-Centered Robotics(HCR)Lab で研究助手の職を得る助けをしていただきました。

CS フィールドセッション(2020年夏)

CG_GUI_19

2020年夏、CSCI473 を終えて HCR Lab に参加するまでの間、私はコロラド鉱山学校での CS 学部課程の一環として、CSCI370、つまり「Advanced Software Engineering」を受講しました。CSCI370 は、企業のためにソフトウェア関連の解決策を設計・実装・文書化するよう学生に求める授業です。これにより、学生は授業で学んだ知識を現実世界のコンピュータサイエンスの問題に応用できます。授業についてはこちらで詳しく知ることができます。

この授業では、どのプロジェクト/企業に取り組むかを自分で決めます。授業では、各プロジェクトと企業の詳細を記した PDF が提供されました。最終的に私は、Lunar Outpost という会社が出していた「Real Time Wheel Slip Detection and Error Corrections for Enhanced Lunar Navigation」というプロジェクトに取り組むことにしました。名前が長いので、このプロジェクトには「Wheel Slippage Detection」という別名を付けましょう。

問題

Lunar Outpost は、自律型月面ローバーを作ろうとしている新興企業です。月面には月の塵が多く、それが車輪のスリップを引き起こしやすいことで知られています。これは理想的ではありません。車輪のスリップによって、自律システムが現実世界での位置を見失う可能性があるからです。地球では、これは GPS データを使って車輪スリップによるずれを補正することで解決されています。しかし GPS の問題は、地球の周囲を常に周回し、コンピュータが位置を計算できるように固有の信号を送信する 30個以上 のナビゲーション衛星が必要だということです。しかし月には、現時点で GPS のようなものは存在しません。そのため、車輪スリップを検出するには GPS 以外の方法を用いる必要があります。このプロジェクトの問題についてのより詳しいレポートはこちらで見ることができます。

チーム

このプロジェクトは簡単なものではなかったので、チームで取り組む必要がありました。チームは、Mehmet Yilmaz(私)、Kane Bruce、Braedon O’Callaghan、Liam Williams、Kevin Grant の5人のコロラド鉱山学校の学生で構成されていました。

このプロジェクトでは、ある程度の ROS、C++、Python、Linux、Raspberry Pi、Arduino の知識が必要でした。私たちの多くはこれらの技術の一つ以上に経験がありましたが、ROS を使った経験があったのは私だけでした。というのも、2020年春学期に Human Centered Robotics(CSCI473)の授業で ROS を使っていたからです。そのため、早い段階で私はみんなに ROS と、その開発方法についての基本を共有する役を担いました。

課題

このプロジェクトでは、たくさんの課題がありました。しかし、私たちが直面した最大の課題は、テスト用の実機ロボットにアクセスできなかったことでした。これは、COVID の影響で、すべてがリモートになり、Lunar Outpost のラボ/建物内で作業できなくなっていたためです。そのため、シミュレーションを使わざるを得ませんでした。

また、Lunar Outpost のユースケースに対してホイールスリップ問題をどのように解決できるかの手がかりを得るために、WVU Navigation Lab の学術研究も参照しましたが、学部2年生と3年生だった私たちにとっては、予想していたよりも難しかったです。

私たちが直面したもう一つの課題は、このプロジェクトに使える時間の少なさでした。CSCI370 は1か月の授業です。しかし、この問題自体は、何十年にもわたって多くの企業や研究者が解決/完成を目指してきた非常に大きな問題です。ですから、1か月ではこの課題を解決するには到底足りません。それでも、こうしたすべての困難があったにもかかわらず、私たちはやり抜き、必ず成果を出すようにしました。

結論

研究開発を進めた結果、適切な月面の物理をデジタルでシミュレートすることはほぼ不可能であり、したがって、このアルゴリズムをシミュレーションで本当に試すことは得策ではなく、宇宙や月でのホイールスリップ検出に関する意味のある研究にはつながらないと判断しました。私たちは、砂のようなものと、Husky ロボットのような実際のハードウェアを使って適切なテスト環境を構築する方が、この種の研究にははるかに重要であると結論づけました。ホイールスリップ検出コードは ROS ノードとして動作するように更新し、正しく機能し、実機ハードウェアに簡単に取り込んでテストできるようにもしました。このプロジェクトを通して、私はリーダーシップを発揮し、仲間に ROS 開発を教え、Python、ROS、Gazebo の経験を積みながら、これまで一度も遭遇したことのない複雑な問題に取り組むことができました。何よりも、この経験はロボティクスへの情熱をさらに確かなものにし、この分野で研究を進めたいという思いを強め、私のロボティクスの旅の次の段階へとつながる土台を築いてくれました。

HCRラボでのスタート

2020年夏の CSCI473 の CS Field Session を終え、さらに2020年秋学期を終えた後、私はロボティクスの研究に取り組むことを決めました。CSCI473 と CS Field Session の両方でとても良い経験をしたので、HCR Lab で研究をしたいと思うようになりました。前年に Zhang 先生と知り合っていたため、2021年1月にラボにどのような機会があるのかを尋ねるメールを送りました。約2週間以内に、Zhang 先生は興味を示し、研究の選択肢を提示し、ラボでの役割を私に提案してくれました。その後、私は2021年2月にラボでの仕事を始めました。

紹介動画

これは、HCR Lab での活動を始めて数か月後に録画した私の紹介動画です。2021年5月に撮影されたもので、2021年夏に HCR Lab で私が重点的に取り組む研究について説明しています。

私のプロジェクト

HCR Lab での期間を通して、私は主に Triton プロジェクトに取り組んでいました。Triton プロジェクトは、コロラド鉱山大学の Human Centered Robotics Lab によって開発された移動ロボットです。NVIDIA の Jetson Nano を搭載した、三角形のオムニホイール地上ロボットです。

Triton は、簡単にまとめると、以下の部品で構成されていました。

  • NVIDIA Jetson Nano
  • NVIDIA の Seed Studio A205 キャリアボード
  • Arduino Mega
  • 64 GB Micro SD カード
  • カスタム3Dプリント筐体
  • 3つのメカナムホイール
  • 1つの AR バッテリー
  • 最適化された電力分配と配線のためのカスタム回路
  • Intel の Realsense D435 カメラ
  • いくつかの LED

これは教育目的のロボットとして、2018年から2020年頃にかけて設計、構築、製造されました。私が参加した時点で Triton はかなり完成された状態にあり、ラボではその新しいバージョンを作ることも検討していました。しかし、Triton の主な問題はソフトウェアでした。Triton は、移動し、充電し、基本的な意味では機能しましたが、実際には何の知的な処理も行っていませんでした。より高度な動きさえできませんでした。

バッテリー充電器のセットアップ テストエリアのレイアウト
初期テスト段階の Triton たち 棚の上の Triton たち

これに対処し始めるために、ラボは Triton を追跡できるエリアを設置しました。そのために、床から約6〜7フィート上の位置に、2メートル×2メートルのエリアを作り、8台の Optitrack Flex(赤外線)カメラを正方形のような形で配置しました。

エリア I1 エリア I2

このエリアの構築に加えて、各 Triton の本体上部には3つの灰色の球体マーカーが取り付けられていました。

このセットアップにより、私たちは実質的に独自の小規模な GPS システムを構築し、関心領域内にある Triton の正確なメートル単位の座標を取得できるようになりました。Optitrack の赤外線カメラと、三角形に配置された Optitrack の灰色の球体を使うことで、私たちのエリア内にある Triton の正確な座標を特定できました。これにより、移動精度を高めるために閉ループシステムを適用できました。

Optitrack システムは、適切にキャリブレーションされた場合、サブミリメートル精度で約120Hzの位置・姿勢データを提供しました。各 Triton の3つの反射マーカーは、システムが剛体として追跡できる独自の三角形パターンを形成していました。座標系は、(0,0) が追跡エリアの中央に来るようにキャリブレーションされ、X軸とY軸は部屋の形状に合わせて整列していました。しかし、このような正確な位置データがあっても、Triton は依然として移動に苦戦していました。

このセットアップで、私たちが Triton に提供したかった核となる機能の一つは、特定の座標へ移動できることでした。ユーザー、またはそのソフトウェアは、関心領域内の (x, y) 座標を指定できます。するとロボットは、その座標へできるだけ速く、正確に、そして滑らかに移動します。私が参加した時点ではこの機能は存在していましたが、あまりうまく動作していませんでした。以下は、元の移動ロジックがどのように動作していたかを示す簡単なアニメーションです。

元の解決策が実際に動いている様子を録画していなかったので、古い移動ロジックの動作を示すこの簡単なアニメーションを作成しました。これを踏まえて、この方法の問題点は何でしょうか。

  1. とても遅い
  2. 特定の地点へ行くだけのために、ロボットが非常に広いスペースを必要とする。複数の Triton が動き回る状況では、この解決策を使うのが難しくなりました。

では、なぜこのような挙動が起きたのでしょうか。問題は、Triton がまず回転し、alpha を変えながら、特定の誤差範囲内で目標点を向くまで向きを合わせることでした。その後、前方に全力で進み、theta が目標から特定の量だけずれたところで停止し、再び回転を始め、alpha が目標に対して許容範囲内に入るまで回り続けます。すると再び前進し、目的地に到達するまでこれを繰り返します。また、目標点に近づけば近づくほど、はみ出さないように回転速度と突進速度がどんどん遅くなっていきました。その結果、Triton の動きは不自然になり、目標点に着くまでに途方もなく時間がかかり、特定の目標点へ行くだけのために非常に広いエリアを必要とすることになりました。こうした問題のすべて、そしてこの機能が Triton プロジェクトの発展にとっていかに重要であったかを考えると、HCR Lab で働き始めたときの私の最初の課題は、Triton が目標点へよりよく移動できるような、より効果的な解決策を開発することでした。

これを踏まえ、私はこの問題に対する最善の対処法について多くの時間をかけて研究しました。皮肉なことに、私は Mines で Introduction to Feedback Control Systems (EENG307) という授業を取っていました。その授業の初期に、Open-loop controllersClosed-loop controllers の概念について学びました。これを知り、その授業の教授や賢いルームメイトと少し議論した後、Triton を目標点へ到達させるというこの目的は閉ループシステムの問題であることが明らかになりました。

ホワイトボードの制御システム図

その後、広範なテストと研究の結果、私は Triton 向けに2つの異なるコントローラ手法を開発しました。

方法1: 距離-Theta コントローラ

この手法は、同時に動作する2つの独立した比例コントローラを使用していました。

  • 距離コントローラ: 目標までのユークリッド距離を計算し、比例ゲインを適用して前進/後退速度を決定
  • Theta コントローラ: ロボットの現在の進行方向と目標への望ましい進行方向の間の角度誤差を計算し、回転速度のために別の比例ゲインを適用

アルゴリズムは、目標までのユークリッド距離と、ロボットの現在の進行方向と望ましい進行方向の間の角度誤差を継続的に計算していました。線速度と角速度をそれぞれ生成するために、2つの別々の比例ゲインが適用されました。

その結果、Triton は自然に目標へ向かって回転しながら同時に前進し、滑らかな曲線軌道を描くようになりました。主な利点は、ロボットが常に正面を目的地に向けた状態を保てることで、これはカメラベースのアプリケーションにとって非常に重要でした。

方法2: X-Y座標コントローラー

このアプローチでは、ロボットを2Dプロッターのように扱い、X方向とY方向の動きを独立して制御しました:

  • Xコントローラー: X座標の誤差に基づいて東西方向の移動を直接制御
  • Yコントローラー: Y座標の誤差に基づいて南北方向の移動を直接制御

実装ではXおよびY座標の誤差を独立に計算し、別々の比例ゲインを適用したうえで、回転行列を使ってこれらのグローバルな速度成分をロボットのローカル座標系へ変換しました。この変換が必要だったのは、ロボットのオムニホイールドライブがグローバル座標ではなく、自身の参照フレームでの速度を必要としたからです。この方法は目標への最も直接的な経路を生み出し、かなり高速でしたが、明示的な姿勢制御がなかったため、ロボットの向きは徐々にずれていきました。

方法#1については、この方法をMove Turtle (TurtleSim) ブログで詳しく解説しました。PIDコントローラーが一般にどのように機能するか、そして方法#1がどのように動作するかについての詳細をすべて知るために、このブログを読むことを強くおすすめします。私はROSのTurtleSimを使って方法#1を開発し、その後そのコードをTritonに移植し、より現実世界に近い環境に対応するよう更新しました。

方法#2は、かなり異なるものの同等に効果的なアプローチを用いました。ロボットの向きや目標までの距離を考える代わりに、この方法では動きを座標平面の問題として扱います。コントローラーはX方向とY方向の誤差をそれぞれ継続的に計算します。たとえば、ロボットが(0,0)から(2,3)へ移動する必要がある場合、これはXに2メートルの誤差、Yに3メートルの誤差を修正する必要があると解釈します。2つの比例コントローラーが同時に動作し、1つはX誤差に基づいてロボットのX方向速度を調整し、もう1つはY誤差に基づいてY方向の移動を処理します。これにより、3Dプリンターのヘッドの動きのような、より直接的な目標への経路が生まれ、滑らかな斜め移動が可能になりました。ロボットは明示的に目標へ向いて回転する必要がなかったため、この方法は特に狭い空間や正確な位置決めが必要な場合に効果的でした。

両方の方法は、元のアプローチよりも大幅に高速で信頼性が高いことが証明されました。これらの新しい方法が動作している様子を見るには、Tritons in Action Playlistをチェックしてください。そこでは新しい方法で動作するすべてのTritonを見ることができます。

単純な点から点への移動に30〜45秒かかっていたものが、今では約8〜12秒になりました。さらに重要なのは、Tritonが狭い空間でもより効率的に移動できるようになったことで、これはマルチロボットのシナリオで役立つようになりました。

開発上の課題とデバッグ

これらのコントローラーの実装は簡単ではなく、いくつかの大きなデバッグ上の課題を伴いました:

座標系変換: 最も難しかった点の1つは、座標変換を正しく行うことでした。Optitrackシステムは独自の座標系でデータを提供し、ロボットにはローカル座標系があり、私はそれらの間を正確に変換する必要がありました。初期の実装では、回転行列の計算を混同していたため、ロボットが間違った方向に動いていました。

現実世界と理想的な挙動: 最大の課題は、教科書的な制御理論には現れない現実世界の要因を考慮することでした。ロボットの車輪は摩擦特性が異なり、モーターは同じようには応答せず、Optitrackから制御ソフトウェア、ロボットのArduinoへ至る通信経路には常にある程度の遅延がありました。私はこれらの物理的現実に対応するために、何週間もかけて比例ゲインを調整し、デッドバンドフィルターを追加しました。

振動と安定性の問題: 私の最初の実装は、ロボットが目標を通り過ぎて前後に揺れる振動問題に悩まされました。これにより、PIDコントローラーにおける微分項の重要性と、適切なゲイン調整の必要性を学びました。最終的には、システムの本質的な減衰がほとんどの用途に十分だったため、完全なPIDではなく、慎重に調整したゲインを用いた主に比例制御に落ち着きました。

マルチロボット干渉: 複数のロボットが同時に動作すると、予期しない干渉パターンが発生することを発見しました。ロボット同士が同じ空間を「奪い合ったり」、互いに無期限にブロックし合うデッドロック状態を作ってしまうことがありました。これが、調整機構と衝突回避アルゴリズムを実装するきっかけになりました。

マルチTriton制御システム

単一Tritonの移動問題を解決すると、研究室の次の課題は、複数のTritonを同時に連携させることでした。これは私の主要な取り組みの1つとなり、最終的にはプロジェクトへの重要な貢献となりました。

元のシステムは一度に1つのTritonしか制御できず、研究の可能性を大きく制限していました。研究室では、自動運転車同士が通信して交通の流れを最適化し、より良いSLAM(Simultaneous Localization and Mapping)マップを作るような、複数の自律車両が移動を協調させるシナリオをシミュレートしたいと考えていました。

これを解決するために、私はPythonのmultiprocessingライブラリを使ったマルチプロセシングのアプローチを実装しました。各Tritonには専用のプロセスが与えられ、中央制御システムによって調整されながらも独立して実行できました。これにより、複数のTritonが互いの制御ループに干渉することなく同時に移動できるようになりました。

マルチロボットアーキテクチャ設計

私が開発したシステムアーキテクチャは、いくつかの主要コンポーネントで構成されていました:

メインコントローラープロセス: これは中央の調整役として機能し、ユーザーインターフェースの操作、経路計画、ロボット間の高レベルな調整を担当しました。グローバル状態を維持し、個々のロボットプロセスへコマンドを配布しました。

個別ロボットプロセス: 各Tritonには専用のPythonプロセスがあり、次の処理を担当しました:

  • 約50HzでのリアルタイムPID制御計算
  • ロボットのハードウェア(Arduino/Jetson)との通信
  • ローカル経路の実行と障害物回避
  • メインコントローラーへの状態報告

共有メモリ通信: プロセス間の効率的な通信を可能にするために、Pythonのmultiprocessing.shared_memoryとQueueオブジェクトを使用しました。これにより、ネットワーク通信のオーバーヘッドなしにリアルタイムの調整が可能になりました。

同期メカニズム: 複数のロボットが協調する必要があるとき(衝突回避など)に競合を防ぐため、ワークスペースの特定領域への排他的アクセスをロボットが要求できるようにするセマフォとロックを実装しました。

課題は、すべてのロボットがグローバルな調整を維持しながら、それぞれ独立して制御ループを動作させられるようにすることでした。各ロボットプロセスは独自にPID計算を行い、モーターコマンドを直接ハードウェアに送り、メインプロセスは衝突回避や経路計画のようなより高レベルな調整を処理しました。

マルチTriton交差点テスト 初期のマルチTritonセットアップ

将来のマルチエージェント作業のためのドローンを伴うTriton

マルチTritonシステムは、まったく新しい研究の可能性を切り開きました。これにより、次のようなシミュレーションが可能になりました:

  • 車両間通信シナリオ
  • 障害物回避を伴う協調経路計画
  • 群ロボティクスの挙動
  • マルチエージェントSLAMマッピング
  • フォーメーション制御と追従挙動

複数のTritonが同時に動作している研究室のセットアップは、次のような見た目でした:

緑のグリッド上のロボット ロボットのグリッドセットアップ

また、各Tritonの経路を視覚的に定義できる、使いやすいインターフェースも開発しました。各ロボットにたどらせたい経路を文字通り描くことができ、ロボットたちは完全に協調しながらその経路を実行しました。これは、すべての動作を手動でコーディングすることなく複雑な実験を設定するうえで非常に便利でした。

このシステムは、中央制御システムを通じて調整されながら、それぞれ独自のPIDコントローラーを実行する最大5台のTritonを同時に扱うことができました。性能は印象的で、すべてのロボットがチームとして協力しながら、それぞれの精度を維持していました。

単一ロボット制御からマルチロボット協調まで、Tritonの動作を紹介するプレイリストはこちらです: Tritons in Action Playlist

深度センサー統合と座標補正

私が取り組んだもう1つの大きな進歩は、各Tritonに搭載されたIntel RealSense D435深度カメラを活用することでした。Optitrackシステムは非常に高精度な位置データを提供してくれましたが、私はロボットが搭載センサーを使って空間認識を向上させ、座標誤差を補正する方法を探りたいと考えていました。

その考えは、Tritonが深度センサーを使って周囲の他のTritonを検出し、位置を相互参照できるようにすることでした。これは複数の目的に役立ちました:

  1. 誤差補正: Optitrackシステムにキャリブレーションのドリフトや一時的な遮蔽があっても、ロボットは互いの位置を視覚的に確認することで正確な座標系を維持できます。

  2. 強化されたSLAM: 深度センサーを備えた複数のロボットが協力することで、冗長なデータ点を持つ、より豊かな環境マップを作成できました。

  3. 衝突回避: リアルタイムの深度センシングにより、中央制御システムに通信遅延があっても、ロボット同士が互いを検知して回避できるようになる。

私は、Tritonが次のことを可能にするアルゴリズムの実験を始めた。

  • それぞれの特徴的な三角形の形状と反射球マーカーを使って他のTritonを検出する
  • 深度データを使って相対位置と姿勢を計算する
  • これらの計測値をOptitrackデータと比較して不一致を特定する
  • 精度を維持するために、必要に応じて座標系をリアルタイムで調整する可能性を探る

コンピュータビジョン実験

私は、いくつかの段階で動作するコンピュータビジョンのパイプラインを実験することにかなりの時間を費やした。

コンピュータビジョンテストのために向かい合う2台のTriton Tritonのカメラのクローズアップ
テストのために正面を向き合う2台のTriton
向かい合う2台のロボット レースを始めようとしている2台のTriton

深度データ処理: Intel RealSense D435 はRGBと深度の両方のデータストリームを提供していた。私は主に深度データを扱っており、それは30Hzで距離測定値の640x480配列として得られた。最初の課題は、このノイズの多い深度データをフィルタリングして、意味のある幾何学的情報を抽出することだった。

物体検出の試み: 私は多段階の検出アルゴリズムを試した。深度画像をセグメント化して床面レベルにある物体を特定し(壁や天井などを除外し)、およそ0.3x0.3メートルのフットプリントを持つ適切なサイズ特性の物体を探すことで、ある程度の成功を収めた。エッジ検出や幾何学的解析を使って、特徴的なTritonの輪郭を識別しようとしたが、結果はまちまちだった。

マーカー認識実験: 各Tritonに付いている3つの反射球が、最も有望な検出特徴のように見えた。深度画像内の3つの明るい点が作る特徴的な三角形パターンを識別するために、ブロブ検出アルゴリズムを試した。制御された照明条件では有望な結果が得られたが、安定して信頼できるものではなかった。

座標融合研究: ビジョンベースの位置推定とOptitrackデータを融合する手法を調査し、基本的なカルマンフィルタの実装も含めて研究した。利用可能なときはOptitrackデータにより大きな重みを与え、必要なときにはビジョンにフォールバックするという考えだったが、研究室を離れるまでにこれを完全には動作させられなかった。

性能上の課題: これらすべての処理をロボットの制御ループと並行してリアルタイムで動作させるのは難しかった。Jetson Nanoの処理能力を圧迫しすぎないように、アルゴリズムを約10〜15Hzで動かす最適化手法を試した。

残念ながら、私はこのコンピュータビジョンの作業を完全に終える前に研究室を離れなければならなかった。初期段階では有望な結果もあり、深度センサー処理について多くを学んだものの、システムを完全に信頼できる状態までは到達できなかった。それは、他の人が発展させることのできる興味深い研究方向として残った。

コンピュータビジョンアルゴリズムをテストしている私の動画はこちらです。

実験中の深度センサーの表示は次のようなものでした。

深度センサー統合の作業は完了しませんでしたが、この概念は、自動運転車のシナリオをシミュレートするような用途に有望性を示しました。そこでは、車両は外部インフラのみに頼らずに互いを認識する必要があります。私が探求し始めたこの研究方向は、将来の研究室での作業に貢献できる可能性があります。

文書化と知識の保存

HCR Labへの私の最も重要な貢献の一つであり、おそらく私が最も誇りに思っているものは、すべてのプロジェクト文書を整理し保存したことだった。私が研究室に加わったとき、Tritonプロジェクトの知識は複数のプラットフォームや形式に散在していた。重要な情報は次のような場所に分かれていた。

  • 卒業した別々の学生が管理していたさまざまなGoogle Driveアカウント
  • 受信箱の奥に埋もれた古いメール
  • ばらばらのDropboxフォルダ
  • 複数のGitHubリポジトリ
  • 体裁が統一されていないGitLabリポジトリ
  • 特定の人だけが解読できる手書きメモ

この断片化した文書は大きな問題だった。新しい学生は始め方を理解するだけで何週間も費やし、価値ある知識は人々が卒業したり研究室を去ったりするたびに常に失われていた。

私はこの問題を体系的に解決することにした。Tritonプロジェクトに関する文書、コード、動画、メモを一つ残らず追いかけて見つけるのに、数え切れないほどの時間を費やした。そして、それらすべてを明確で論理的な構成を持つ中央集約型のGitLabリポジトリに整理した。

机の上のTriton テーブル上の複数のTriton(合計8台、そのうち5台は組み立て中)

良い角度で棚に置かれたTritonたち

中央集約された文書には次のものが含まれていた。

  • 組み立てガイド: Tritonをゼロから組み立てるための段階的な手順
  • ソフトウェアセットアップ: 開発環境を構築するための完全なガイド
  • コード文書: 明確な説明付きで丁寧にコメントされたコード
  • ハードウェア仕様: 詳細な部品リスト、配線図、PCB設計
  • トラブルシューティングガイド: よくある問題とその解決策
  • 動画チュートリアル: 詳細なOptitrackキャリブレーションのチュートリアルを含む、YouTubeに作成・アップロードした説明動画

また、将来の貢献が整理され、アクセスしやすいものとなるように、文書化の標準も確立した。私が作成したリポジトリ構造は、その後研究室で行われるすべての作業の基盤となった。

既存の文書を整理するだけでなく、知識ベースの重大な欠落を埋めるいくつかの独自のガイドやチュートリアルも作成した。これには、新しい研究室メンバー向けの詳細なセットアップ手順、包括的なトラブルシューティングガイド、複雑な手順の動画ウォークスルーが含まれていた。

その影響は即座で、しかも長く続いた。新しい学生は、数週間ではなく数日で作業を始められるようになった。私が作成した文書リポジトリは、私が去ってから何年も経った今でも研究室で使われている。これはTritonプロジェクトの唯一の信頼できる情報源となり、将来の研究者のために数え切れないほどの時間/日数を節約した。

メンタリングと知識移転

HCR Labでの時間の中で最もやりがいのあった側面の一つは、他の人を指導し、自分が得た知識を共有する機会だった。作業が進み、Tritonシステムにより習熟するにつれて、私は新しいチームメンバーの育成においてますます大きな責任を担うようになった。

研究室後継者の指導

いずれ研究室を離れて学位取得とeBayでの仕事に集中する準備をしていたとき、私は自分の退去後にTritonプロジェクトを引き継ぐことになる2人に、徹底的な訓練を施すようにした。これは単に仕組みを見せることではなく、彼らが基礎原理を本当に理解し、継続的に革新できるようにすることだった。

私は何週間も彼らと密に作業しながら、次のようなことを一緒に行った。

  • PID制御システムの数学的基礎
  • 複数ロボットを調整するためのマルチプロセッシングアーキテクチャ
  • 深度センサー統合とコンピュータビジョンアルゴリズム
  • 文書化システムとその保守方法
  • デバッグ技法と一般的な故障モード

知識移転は非常に徹底していた。実際のデバッグセッションを一緒に行い、既存コードの修正や拡張を任せ、彼らが新しいTritonをゼロから独力でセットアップできることを確認した。

高校生メンタープログラム

さらにやりがいがあったのは、研究室のアウトリーチプログラムを通じて高校生を指導した経験だった。これは、教育の形成期にある段階で、ロボティクス、コンピュータサイエンス、研究を紹介する素晴らしい機会だった。

私は次の内容を含む包括的なカリキュラムを設計した。

コンピュータサイエンスの基礎:

  • 主言語としてPythonを使ったプログラミング概念
  • オブジェクト指向プログラミングの入門
  • アルゴリズムとデータ構造の理解

ロボティクスの概念:

  • センサーの仕組みとインターフェースの方法
  • アクチュエータ制御とモーターシステム
  • 自律システムとフィードバック制御の基礎

ROS(Robot Operating System):

  • publish/subscribeメッセージングシステムの理解
  • ノードとサービスの作成
  • launchファイルとパラメータサーバーの扱い

実践的なプロジェクト作業:

  • 私たちは協力して、Tritonの頭部のLEDシステムを制御するROSサービスを作成した
  • 彼女は、既存システムと統合できる、きれいで文書化されたコードを書くことを学んだ
  • 彼女が作成したLED制御サービスは、Tritonのコードベースの恒久的な一部となった

このメンタリングが特に特別だったのは、彼女がプログラミングについてほぼ何も知らない状態から、活発な研究プロジェクトに有意義なコードを提供するまでに成長していく過程を見られたことだった。彼女は「変数とは何ですか?」と尋ねていたところから、ROSの通信問題を独力でデバッグし、自分自身のサービス実装を書くまでになった。

彼女が開発したLED制御システムにより、研究者は単純なROSコマンドを通じてTritonの頭部LEDの色やパターンを簡単に変更できるようになった。これは単純に聞こえるかもしれないが、ROSアーキテクチャ、ハードウェアとのインターフェース、適切なソフトウェア設計パターンの理解が必要だった。彼女の貢献は、今日でも研究室で使われている。

そのメンター経験は、彼女にとってそうであったのと同じくらい、私にとっても教育的でした。それは、複雑な概念を消化しやすい断片に分解し、私たちが何をしているのかという基本について本当に考えることを私に強いました。誰かに教えることは、私をより良いエンジニアであり研究者にしてくれました。

博士研究との協働

私の研究室での時間の中で、専門的に最もやりがいのあった側面の一つは、自動運転車アルゴリズムの研究に焦点を当てていた博士課程の学生、Pengと密に協力して働いたことでした。私が Triton システムに対して行ったソフトウェア改善は、彼の博士研究を支えるのに役立ちました。

Peng の研究では、自動運転車のシナリオをシミュレートするために、正確で信頼性の高いマルチロボット協調が必要でした。移動制御とマルチロボットシステムに対する私の改善の前は、これらの実験を行うのははるかに困難でした。ロボットはより遅く、精度も低く、互いにこれほど効果的に協調することができませんでした。

私の貢献は、いくつかの分野で Peng の研究に役立ちました。

交差点管理研究: 改良された PID コントローラとマルチロボット協調により、Peng は複数の「車両」(Triton)が動きを調整する必要のある交差点シナリオをシミュレートできました。より良いタイミングと位置決めにより、これらの研究はより実現しやすくなりました。

車車間通信: 私が開発したマルチプロセシングのフレームワークにより、Peng はシミュレートされた車両間の通信プロトコルを実装し、テストできました。各 Triton は他のロボットと協調しつつ意思決定でき、自動運転車が実際に動作する際に必要となるかもしれない振る舞いに似ていました。

SLAM とマッピング研究: 深度センサー統合の作業は、同時自己位置推定と地図作成の研究に向けて、Peng に追加データを提供しました。協調したセンシング能力を持つ複数のロボットがあることで、より包括的なマッピング実験が可能になりました。

私たちの協働が特に価値あるものだったのは、それが単に私が彼の研究を手伝っていたというだけではなく、本物のパートナーシップだったからです。自律走行車の理論的側面に関する Peng の理解は、私の実践的な実装に役立ちました。彼のフィードバックと要件は、システムをより堅牢で高機能にするよう私を後押ししました。

私たちは研究室で一緒に多くの時間を過ごし、シナリオのデバッグをしたり、さまざまな制御戦略について議論したり、Triton プラットフォームが何を達成できるのかを探ったりしました。Peng は同僚であると同時に友人にもなり、彼と働くことで、学術研究が実際にはどのように行われるのかについて多くを学びました。

私が構築したシステムは、Peng の博士論文研究の有用な一部となりました。自分の実践的なエンジニアリングの貢献が、自動運転車技術の研究を支えているのを見るのは本当に充実感がありました。それは、堅実なエンジニアリングと研究が協力して有益な成果を生み出せるのだという私の関心をさらに強めました。

私が研究室を離れた後も、Peng と私は連絡を取り合っていました。私が去った後も自分の仕事が重要な研究に引き続き貢献していると知ることは、非常にやりがいのあることでした。

視点:LLM 前時代の開発

ここで注目すべきなのは、この一連の作業が、LLM 前時代のソフトウェア開発の中で成し遂げられたということです。これらはすべて 2020 年から 2021 年(主に 2021 年)にかけて行われたもので、ChatGPTClaudePerplexity、あるいは Cursor IDE のような AI 搭載の開発ツールが存在する前でした。

コードの一行一行はゼロから書かれ、アルゴリズムは学術論文や教科書を通じて調査され、すべてのデバッグ作業は print 文、デバッガ、そして系統立てたテストのような従来の方法で行われました。座標変換や PID 調整の問題で行き詰まったとき、私は AI アシスタントにその概念を説明してもらったり、問題のデバッグを手伝ってもらったりすることはできませんでした。

このことは開発プロセスを大幅に難しくしましたが、同時に、より教育的でもありました。私は次のことをしなければなりませんでした。

すべてを手作業で調査する: PID 制御理論を理解するには、教科書や学術論文を読む必要がありました。座標変換を理解するには、手で数式を追う必要がありました。実装する前に、すべての概念を完全に理解しておく必要がありました。

AI の助けなしにデバッグする: ロボットが予想外の方向に動いたり、目標の周囲で振動したりしたときは、論理を系統的に追跡し、デバッグ出力を追加し、仮説を一つずつ検証しなければなりませんでした。潜在的な問題を提案したり、エラーパターンの解釈を手伝ったりしてくれる AI はいませんでした。

第一原理から学ぶ: 「ロボティクス向けに Python でマルチプロセシングをどう実装すればいいのか?」とすぐに尋ねることができなかったため、私は基盤となる概念を深く理解しなければなりませんでした。これによって、並行プログラミング、制御システム、コンピュータビジョンについて堅固な基礎を築くことが強いられました。

ドキュメントが重要だった: 後でコードを説明するために AI に頼ることができなかったので、私は非常に明確なドキュメントとコメントを書く必要がありました。この規律は、後に知識を他者へ移転する際に非常に価値があることがわかりました。

今振り返ると、現代の AI ツールは開発の多くの側面を加速させただろう一方で、それらなしで作業したことで、より深い問題解決能力と、基盤となるシステムについてのより徹底した理解を身につけることができました。今日の開発ツールがあったなら、このプロジェクトはどれほど違っていたのだろうと考えるのは興味深いことです。

去るという困難な決断

HCR Lab で働くことがどれほど好きであっても、2021 年後半までに、私は多くの学生が直面する困難な決断に迫られました。それは、複数の機会と責任のバランスを取ることでした。私は同時に、eBay でソフトウェアエンジニアとしてフルタイムで働き、Mines でコンピュータサイエンスの学位を修了し、HCR Lab での研究に貢献していました。

eBay の機会は大きなものでした。それは私にとって初めての本格的なソフトウェアエンジニアリングの職務であり、非常に貴重な業界経験を与えてくれ、安定した収入ももたらしてくれました。しかし、フルタイムの仕事、学位取得、そして研究への有意義な貢献を同時に維持しようとするのは、単純に持続不可能でした。どこかで何かを諦めなければなりませんでした。

研究により多く集中するために履修数を減らす可能性について Dr. Zhang に相談したとき、彼は強く反対しました。彼の考えはもっともでした。学位を修了することを優先すべきであり、eBay での業界経験は私のキャリア形成にとって価値がある、というものでした。研究に集中するために授業を減らすのは魅力的ではあるものの、長期的には最善の決断ではないかもしれないと彼は考えていました。

そこで 2021 年 9 月、約 8 か月にわたる研究室での集中的な作業の後、私は学位取得と eBay での仕事に集中するため、研究助手の役割から一歩引くという困難な決断を下しました。それは当時、私が下さなければならなかった決断の中でも特に難しいものの一つでした。

正式に研究室を離れた後も、私が構築したシステムについて誰かが助けを必要とするたびに、私は引き続き支援を提供しました。必要に応じてドキュメントを更新し、デバッグに関する質問に答え、リモートで問題解決を手伝いました。私が築いたつながりと、そのプロジェクトの成功に対して私が持っていた投資は、正式にチームの一員でなくなったからといって消えるものではありませんでした。

反省と振り返り

今、2025 年になり、4 年が経った今、私はその時期を複雑な感情で振り返っています。私のキャリアはウェブ開発と AI/ML エンジニアリングの深い世界へと進み、それらは非常にやりがいがあり、成長とインパクトのための大きな機会を与えてくれました。

Top-down view of Tritons on table

それでも、「もしも」と思う自分の一部がいます。ロボティクスは、そして正直に言えば今でも、私の真の情熱でした。物理システムに取り組み、自分のコードが現実世界の動きや振る舞いに変わるのを見ることには、ウェブ開発や AI の仕事でさえ完全には再現できない何かがあります。

別の道を選んでいたら何が起きていたのだろう、と私は時々考えます。ロボティクス研究に留まる方法を見つけていたらどうなっていたのか。学部を終えた直後に大学院に進学していたらどうなっていたのか。研究室での仕事を業界経験より優先していたらどうなっていたのか。

しかし同時に、どの道にもトレードオフがあることも理解しています。ウェブ開発と AI で身につけたスキルは非常に価値のあるものでした。業界での経験は、スケールするソフトウェアエンジニアリング、ユーザー体験設計、そして何百万人もの人が使う製品を作る際の実際的な課題について教えてくれました。これらの経験は、私を総合的により良いエンジニアにしてくれました。

HCR Lab で行った仕事は、今日の私の問題への向き合い方にも影響を与え続けています。PID 制御システムに必要な体系的思考は、ソフトウェアシステムにおけるフィードバックループの設計に現れています。そこで身につけたドキュメント作成と知識保存のスキルは、それ以降のあらゆる役割で非常に役立ちました。メンターや教育の経験は、ジュニア開発者とどう働くか、そしてチームの知識共有にどう貢献するかを形作ってくれました。

最も重要なのは、難しくても現実世界に影響を与える技術的問題に取り組むとき、私は最も力を発揮するのだと学んだことです。それがロボットの移動アルゴリズムの最適化であれ、ユーザーが目標を達成するのを助ける AI システムの構築であれ、満足感は、重要な難問を解決することから生まれます。

永続的な影響

HCR Lab での経験を振り返ると、比較的短い時間でどれだけ多くのことを成し遂げたかに驚かされます。私が構築したシステムは Triton プラットフォームの動作を根本的に変え、その改善の多くは今でも使われています。私が作成したドキュメントリポジトリは、プロジェクト全体のナレッジベースになりました。私が築いたメンター関係は、一緒に働いた人々に長く影響を残しました。

しかし、おそらく最も重要なのは、この経験によって、自分が本当に情熱を注いでいる問題に取り組むとき、私はどれほどのことができるのかを知ることができたことです。その 8 か月の間に、私は:

  • プラットフォームを制限していたロボットの移動制御システムを改善した
  • ゼロから複数ロボット協調システムを構築した
  • コンピュータビジョンとセンサーフュージョン機能を統合した
  • 包括的な文書化および知識管理システムを作成した
  • 複数の人を指導し、知識移転を支援した
  • 自律走行車に関する博士課程レベルの研究を支援した

とはいえ、これは単なる技術的な成果だけの話ではありませんでした。そうした成果も私にとって意味のあるものでしたが、重要だったのは、粘り強さと体系的な思考があれば、学部生であっても有用な貢献ができるのだと学んだことでした。

未来とロボティクス

私のキャリアは別の方向へ進みましたが、ロボティクスへの情熱は薄れていません。今でもこの分野の発展を追いかけていますし、ロボット学習や自律システムの進歩にわくわくしています。また、余暇には時折、個人的なロボティクスのプロジェクトにも取り組んでいます。

未来に何が待っているかは、誰にも分かりません。私がAIと機械学習で身につけているスキルは、ますますロボティクスに関連するようになっています。これまでに得た業界経験は、堅牢で拡張性のあるシステムを構築する方法を私に教えてくれました。もしかすると、こうした異なる経験の糸が、思いもよらない形で交わる未来があるのかもしれません。

ひとまず今は、HCR Labで過ごした時間と、そこで得た経験に感謝しています。それは私の技術的なスキルと、どのような仕事に最もやりがいを感じるのかという理解の両方を形作った、形成期でした。時々恋しくなることはあっても、そこで学んだ教訓や身につけたアプローチが、今も私のあらゆる行動に影響を与え続けていることを知っています。

Tritonロボットは今もそこにあり、今も研究者たちの役に立ち、今も重要な仕事を支えています。そして、それは本当に素晴らしいことです。