私のロボティクス研究章
Table of Contents
この投稿は、私のロボティクスの旅を語ります。2015年にFRCでロボティクスへの情熱を発見したことから始まり、2021年2月から2021年9月までコロラド鉱山学校の人間中心ロボティクス(HCR)ラボで研究助手としての時間を過ごしました。2022年末以降、HCRラボはコロラド鉱山学校からマサチューセッツ大学アマースト校に移転し、サイトもhcr.mines.eduからhcr.cs.umass.eduに移動しました。
背景
私は2018年秋学期にコロラド鉱山学校で学部の勉強を始めました。私の専攻はロボティクスとインテリジェントシステムに焦点を当てたコンピュータサイエンスでした。そして、2022年春に卒業しました。
私は早い段階で自分の情熱を見つけることができて幸運でした。高校時代、私は自分が好きなことや得意なことを見つけるために多くの時間を費やしました。いくつかの試行錯誤の後、私の情熱はコンピュータサイエンスであることがわかりました。しかし、この時期に、私はコードを通じて何かを作ることへの圧倒的な愛を発見しました。
鉱山学校では、Dr. Hao Zhangの下で鉱山学校の人間中心ロボティクス(HCR)ラボで働く機会を得ました。私は2020年春に「人間中心ロボティクス」(CSCI473)という彼のクラスで初めてDr. Zhangに会い、COVIDの混乱と授業の後、2021年初春に彼のラボで働くことができました。
人間中心ロボティクス(CSCI473)クラス
鉱山学校の人間中心ロボティクス(CSCI473)は、私の大学生活の中で深い影響を与えた数少ないクラスの一つでした。このクラスはDr. Hao Zhangによって教えられました。クラスの成績は、ロボティクスの核心概念を紹介する挑戦的な問題を提示する3つのプロジェクトで構成されていました。これらのプロジェクトは次の通りです:
- ロボットオペレーティングシステム(ROS)の学習
- ロボットの壁追従のための強化学習
- 骨格ベースの表現を使用した人間行動のロボット理解
ロボットオペレーティングシステム(ROS)の学習
これは私たちに割り当てられた最初のプロジェクトでした。このプロジェクトは3つのタスクで構成されていました:
- 開発環境の設定
- Gazeboシミュレーターの理解
- ROSの「Hello World」の作成
タスク1と2では、開発環境を設定し、Gazeboの入門チュートリアルに従う必要がありました。これには以下が含まれます:
- ROS Melodicの設定、私は2011年のHPノートパソコンで行いましたが、十分でした
- ROSとGazeboのインストールと設定
- gazebosimのチュートリアルとe-manualのチュートリアルを通過すること。
一方、タスク3は本当に挑戦的でした。このタスクはturtlesimを使用して、亀が鉱山学校の「M」ロゴを描くことでした:
![]() |
![]() |
このタスクは、一見簡単に思えましたが、見た目よりも難しかったです。このプロジェクトは最終的にオープンループとクローズドループシステムの概念を私に紹介しました。プロジェクトの詳細については、csci473-p1.pdfを確認するか、ROS Move Turtleプロジェクトページでこのプロジェクトと私の解決策について詳しく学ぶことができます。
ロボットの壁追従のための強化学習
これは私たちに割り当てられた2番目のプロジェクトで、大学で取り組んだ中で最も難しいプロジェクトの一つでした。プロジェクトの説明は次の通りです:
このプロジェクトでは、学生は強化学習アルゴリズムを設計し、実装して、自律移動ロボットに壁を追従させ、障害物に衝突しないように教えます。学生は、ROS MelodicのGazeboシミュレーションを使用して、Tritonという名前の全方向移動ロボットをシミュレートし、提供された環境マップを使用します。学生は、ロボットに搭載されたレーザー距離センサーを使用して感知と学習を行い、ロボットは操舵と速度コマンドを使用して制御されます。学生は、Ubuntu 18.04 LTS上で動作するROS MelodicでこのプロジェクトをC++またはPythonを使用してプログラムする必要があります(つまり、プロジェクト1で使用したのと同じ開発環境です)。また、学生はLATEXを使用して標準IEEEロボティクス会議の形式に従ったレポートを書く必要があります。
強化学習アルゴリズムにはQ-Learningを使用するよう指示されました。また、クラスが提供したStingray Gazeboシミュレーション環境も使用しました。StingrayはTritonモデルと物理ロジックで構成されていました。ロボットが追従するための迷路も提供されました。全体的に、環境は次のように見えました:
私は自分の解決策をGitHubやウェブに公開しませんでした。なぜなら、それはあまり良くなく、欠陥が多かったからです。また、正しい環境でコードを実行するのは非常に難しく、面倒でした。しかし、私はクラスに提出したデモビデオを持っており、私の解決策を示しています。ここで見ることができます:
プロジェクトの詳細については、csci473-p2.pdfを確認してください。
骨格ベースの表現を使用した人間行動のロボット理解
3番目のプロジェクトの説明は次の通りです:
このプロジェクトでは、学生は複数の骨格ベースの表現(成果物1)を実装し、サポートベクターマシン(SVM)(成果物2)を使用して、Kinect V1センサーから収集された公的な活動データセットを使用して人間の行動を分類します。さらに、学生はLATEXを使用して標準IEEEロボティクス会議の形式に従ったレポートを書く必要があります(成果物3)。
このプロジェクトは挑戦的でしたが、2番目のプロジェクトほど難しくはありませんでした。主な目標は、Kinect V1センサーのデータを使用し、MSR Daily Activity 3D Datasetとサポートベクターマシンを使用して特定の人間の行動を分類することでした。プロジェクトの詳細については、csci473-p3.pdfを確認するか、LIBSVMを使用して人間の行動を予測するブログ投稿でこのプロジェクトと私の解決策について詳しく学ぶことができます。
CSCI473の結論
CSCI473は、私が鉱山学校での学部の勉強中に受けたクラスの中で、最も良いクラスの一つです。これらのプロジェクトは私に多くのことを教え、私の履歴書に反映させるための素晴らしいプロジェクトのカタログを持つことを可能にしました。また、私はテストを受けるのが得意ではありませんが、プロジェクトを完成させるのが得意だったため、私が自分の要素にいると感じた最初のクラスでもありました。このクラスを通じて、私はDr. Hao Zhangに出会い、最終的に鉱山学校の人間中心ロボティクス(HCR)ラボで研究助手のポジションを確保するのを手伝ってもらいました。
CSフィールドセッション(2020年夏)
2020年の夏、CSCI473を修了しHCRラボに参加する間に、私はコロラド鉱山学校のCS学部プログラムの一環としてCSCI370または「高度なソフトウェア工学」を受講しました。CSCI370は、学生が企業のためにソフトウェア関連のソリューションを設計、実装、文書化することを求めるコースです。学生は、授業で学んだ知識を実際のコンピュータサイエンスの問題に適用することができます。このコースについての詳細はこちらで学ぶことができます。
このコースでは、どのプロジェクト/企業に取り組むかを決定することができます。コースは各プロジェクトと企業の詳細をPDFで提供しました。最終的に、私はLunar Outpostという企業が投稿した「強化された月面ナビゲーションのためのリアルタイムホイールスリップ検出とエラー修正」というプロジェクトに取り組むことに決めました。名前が長いため、このプロジェクトには「ホイールスリッページ検出」という別名を付けましょう。
問題
Lunar Outpostは、自律型月面ローバーを作成しようとしているスタートアップです。月面には、ホイールスリップを引き起こすことで知られる月の塵がたくさんあります。これは理想的ではありません。なぜなら、ホイールスリップは自律システムが実際の位置を見失う原因となるからです。地球では、GPSデータを使用してホイールスリップによって引き起こされるオフセットを修正することでこの問題が解決されます。しかし、GPSの問題は、30以上のナビゲーション衛星が常に地球の周りを回り、コンピュータが位置を計算できるようにするユニークな信号を送信する必要があることです。しかし、月面には現在そのようなGPSは存在しません。これを考慮すると、ホイールスリップを検出するためにはGPS以外の別の方法を使用する必要があります。プロジェクトの問題の詳細なレポートはこちらで見ることができます。
チーム
このプロジェクトは簡単なプロジェクトではなかったため、チームで行う必要がありました。チームは、コロラド鉱山学校の学生5人で構成されていました:
このプロジェクトは簡単なプロジェクトではなかったため、チームで行う必要がありました。このチームは、メフメット・イールマズ(私)、ケイン・ブルース、ブレイドン・オキャラハン、リアム・ウィリアムズ、ケビン・グラントで構成されていました。
このプロジェクトでは、ROS、C++、Python、Linux、Raspberry Pi、Arduinoの知識が必要でした。私たちのほとんどはこれらの技術の1つ以上の経験がありましたが、私は春2020学期の人間中心ロボティクス(CSCI473)クラスでROSを使用していた唯一の経験者でした。このため、早い段階で、私は皆をROSについての理解を深め、開発方法を教える手助けをしました。
課題
このプロジェクトには多くの課題がありました。しかし、私たちが直面した最大の課題は、テストのために実際のロボットにアクセスできなかったことです。これは、COVIDの影響で全てがリモートになり、ルナアウトポストのラボや建物で作業することができなかったためです。このため、私たちはシミュレーションを使用せざるを得ませんでした。
また、私たちはWVUナビゲーションラボのいくつかの学術研究を通じて、ルナアウトポストのユースケースにおけるホイールスリップ問題がどのように解決できるかのアイデアを得ました。これは、私たちが学部の2年生と3年生であったため、予想以上に難しいものでした。
私たちが直面したもう一つの課題は、このプロジェクトに取り組むための時間の量でした。CSCI370は1ヶ月のクラスです。しかし、問題自体は多くの企業や学者が数十年にわたって解決/完璧にしようとしている大規模な問題です。したがって、1ヶ月ではこの問題を解決するには全く不十分です。しかし、これらの課題にもかかわらず、私たちは乗り越え、成果を出すことを確実にしました。
結論
すべての研究と開発を経て、私たちは適切な月の物理をデジタルでシミュレートすることはほぼ不可能であると判断しました。したがって、このアルゴリズムをシミュレーションで試すことは無意味であり、宇宙や月でのホイールスリップ検出において有意義な研究を生み出すことはありませんでした。私たちは、砂やハスキー・ロボットのような実際のハードウェアを使用して適切なテスト環境を設定することが、この種の研究にとってはるかに重要であると結論付けました。私たちはホイールスリップ検出コードをROSノードとして機能するように更新し、正常に動作し、テストのために実際のハードウェアに簡単にインポートできるようになりました。このプロジェクトは、私にリーダーシップの役割を果たし、ROS開発について仲間を教育し、Python、ROS、Gazeboの経験を得る機会を与え、私がこれまで遭遇したことのない複雑な問題に取り組むことを可能にしました。最も重要なのは、この経験が私のロボティクスへの情熱をさらに強固にし、この分野での研究を追求するという私の願望を強化し、私のロボティクスの旅における次のステージの準備を整えたことです。
HCRラボでのスタート
2020年夏のCSCI473、私のCSフィールドセッションと2020年秋学期を終えた後、私はロボティクスの研究を追求することに決めました。CSCI473とCSフィールドセッションの両方で素晴らしい経験をしたので、HCRラボで研究を行いたいと思いました。前年に張博士に会ったので、2021年1月にラボの機会についてメールを送ることにしました。約2週間後、張博士は興味を示し、研究の選択肢を提示し、ラボでの役割を提案してくれました。それから私は2021年2月にラボでの仕事を始めました。
イントロダクションビデオ
こちらが、HCRラボでの数ヶ月後に録画した私のイントロダクションビデオです。2021年5月に録画され、2021年夏にHCRラボで私が焦点を当てる研究について説明しています:
私のプロジェクト
HCRラボでの時間を通じて、私は主にトリトンプロジェクトに焦点を当てました。トリトンプロジェクトは、コロラド鉱山学校のヒューマンセンタードロボティクスラボによって開発されたモバイルロボットです。これは、NVIDIAのJetson Nanoによって駆動される三角形のオムニホイール地上ロボットです。
トリトンは、簡単に言うと、以下の部品で構成されていました:
- NVIDIA Jetson Nano
- NVIDIAのSeed Studio A205キャリアボード
- Arduino Mega
- 64 GBマイクロSDカード
- カスタム3Dプリントボディ
- 3つのメカナムホイール
- 1つのARバッテリー
- 最適化された電力分配と配線のためのカスタム回路
- インテルのRealsense D435カメラ
- 一部のLED
これは、教育目的のためのロボットとして2018年から2020年にかけて設計、構築、製造されました。私が参加した時点で、トリトンはかなり確立されており、ラボは新しいバージョンを作成することを検討していました。しかし、トリトンの主な問題はそのソフトウェアでした。トリトンは基本的には移動、充電、機能することができましたが、実際には何も知的なことを行っていませんでした。さらに、より高度な動きをする能力すら欠いていました。
![]() |
![]() |
![]() |
![]() |
この問題に対処するために、ラボはトリトンを追跡できるエリアを設定しました。これを実現するために、床から約6-7フィートの高さに8つのOptitrack Flex(赤外線)カメラを正方形の形に配置した2メートル×2メートルのエリアを作成しました。
![]() |
![]() |
このエリアを構築するだけでなく、各トリトンの上部には3つの灰色の球が取り付けられました。
このセットアップにより、私たちはトリトンの正確な座標をメートル単位で取得できる小規模なGPSシステムを効果的に構築しました。Optitrack赤外線カメラと三角形の形をしたOptitrack灰色球を使用することで、私たちはトリトンの正確な座標を特定することができました。これにより、動きの精度を向上させるための閉ループシステムを適用することができました。
Optitrackシステムは、適切にキャリブレーションされている場合、約120Hzでサブミリメートルの精度で位置と方向データを提供しました。各トリトンの3つの反射マーカーは、システムが剛体として追跡できる独自の三角形パターンを形成しました。座標系は、トラッキングエリアの中心に(0,0)があり、X軸とY軸が部屋のジオメトリに整列するようにキャリブレーションされました。しかし、この正確な位置データにもかかわらず、トリトンは移動に苦労していました。
このセットアップにより、私たちがトリトンに提供したいと考えていたコア機能の1つは、特定の座標に移動する能力でした。ユーザーまたはそのソフトウェアは、関心のあるエリア内の(x, y)座標を提供できます。次に、ロボットはその座標にできるだけ速く、正確に、シームレスに移動します。私が参加したとき、この機能は存在していましたが、あまりうまく機能していませんでした。こちらが、元の移動ロジックがどのように機能していたかを示す簡単なアニメーションです:
私は元の解決策の実行を記録していなかったので、古い移動ロジックの動作を示すこの簡単なアニメーションを作成しました。これを知った上で、この方法の問題は何でしょうか?
- 本当に遅い
- 特定のポイントに行くためにロボットが多くのスペースを占有する。これにより、複数のトリトンが移動しているときにこの解決策を使用するのが難しくなりました。
では、なぜこの動作が発生していたのでしょうか?問題は、トリトンが最初にターゲットポイントに向かうまでアルファを変えながら回転し、その後前進し、ターゲットから特定の量だけオフセットした後に停止し、再び回転を始めることでした。アルファがターゲットゴールの許容範囲内に入るまで、再び前進し続けます。また、目標ポイントに近づくにつれて、ターンとスプリントの速度が遅くなり、オーバーシュートしないようにします。この結果、トリトンは不自然な動きをし、ターゲットポイントに到達するのに非常に時間がかかり、特定のターゲットポイントに到達するために多くのエリアを必要としました。これらのすべての問題を考慮し、この機能がトリトンプロジェクトの開発にとってどれほど重要であったかを考えると、HCRラボでの仕事を始めたとき、私の最初のタスクは、トリトンが目標ポイントにより良くナビゲートできるようにするためのより効果的な解決策を開発することでした。
これを知った上で、私はこの問題に対処する最良の方法を研究するのに多くの時間を費やしました。皮肉なことに、私は鉱山学校でフィードバック制御システム入門(EENG307)というクラスを受講していました。そのクラスの初めに、オープンループコントローラーとクローズドループコントローラーの概念について学びました。これを知り、そのクラスの教授や賢いルームメイトとの議論の後、トリトンを目標ポイントに到達させるという目標がクローズドループシステムの問題であることが明らかになりました。
さて、広範なテストと研究の後、私はトリトンのために2つの異なるコントローラーアプローチを開発しました:
方法1:距離-シータコントローラー
このアプローチでは、同時に動作する2つの別々の比例コントローラーを使用しました:
- 距離コントローラー:ターゲットまでのユークリッド距離を計算し、前進/後退速度を決定するために比例ゲインを適用しました
- シータコントローラー:ロボットの現在の進行方向とターゲットへの望ましい進行方向との間の角度誤差を計算し、回転速度のために別の比例ゲインを適用しました
アルゴリズムは、ターゲットまでのユークリッド距離とロボットの現在の進行方向と望ましい方向との間の角度誤差を継続的に計算しました。2つの別々の比例ゲインが適用され、それぞれ線形および角速度を生成しました。
これにより、トリトンは自然に目標に向かって回転しながら同時に前進し、滑らかな曲線パスを作成しました。主な利点は、ロボットが常に前面を目的地に向けて保持することができ、カメラベースのアプリケーションにとって重要であることです。
方法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ではなく、慎重に調整されたゲインを持つ主に比例制御に落ち着きました。
マルチロボットの干渉: 複数のロボットが同時に動作する際に、予期しない干渉パターンが発生しました。ロボットは時々同じ空間を「争ったり」、互いに無限にブロックし合うデッドロック状況を作り出したりしました。これにより、調整メカニズムや衝突回避アルゴリズムを実装することになりました。
マルチトリトン制御システム
単一のトリトンの動作問題を解決した後、ラボの次の課題は、複数のトリトンが同時に協力して動作することでした。これは私の主な焦点の1つとなり、プロジェクトへの重要な貢献となりました。
元のシステムは1回に1つのトリトンしか制御できず、研究の可能性を大きく制限していました。ラボは、複数の自律車両がその動きを調整する必要があるシナリオをシミュレートしたいと考えていました。たとえば、自動運転車が互いに通信して交通の流れを最適化し、より良いSLAM(同時位置特定と地図作成)マップを作成することです。
これを解決するために、私はPythonのmultiprocessingライブラリを使用したマルチプロセッシングアプローチを実装しました。各トリトンには独自の専用プロセスが与えられ、中央制御システムによって調整されながら独立して実行できるようになりました。これにより、複数のトリトンが互いの制御ループに干渉することなく同時に移動できるようになりました。
マルチロボットアーキテクチャ設計
私が開発したシステムアーキテクチャは、いくつかの重要なコンポーネントで構成されていました:
メインコントローラープロセス: これは中央のコーディネーターとして機能し、ユーザーインターフェースの相互作用、経路計画、およびロボット間の高レベルの調整を処理しました。グローバルな状態を維持し、個々のロボットプロセスにコマンドを分配しました。
個々のロボットプロセス: 各トリトンには、次のことを処理する専用のPythonプロセスがありました:
- 約50HzでのリアルタイムPID制御計算
- ロボットのハードウェア(Arduino/Jetson)との通信
- ローカル経路の実行と障害物回避
- メインコントローラーへのステータス報告
共有メモリ通信: Pythonのmultiprocessing.shared_memoryおよびQueueオブジェクトを使用して、プロセス間の効率的な通信を可能にしました。これにより、ネットワーク通信のオーバーヘッドなしでリアルタイムの調整が可能になりました。
同期メカニズム: 複数のロボットが調整する必要がある場合(衝突を避けるなど)、私はロボットが作業空間の特定の領域への排他的アクセスを要求できるセマフォやロックを実装しました。
課題は、すべてのロボットがグローバルな調整を維持しながら独立して制御ループを操作できるようにすることでした。各ロボットプロセスは独自のPID計算を実行し、モーターコマンドをハードウェアに直接送信し、メインプロセスは衝突回避や経路計画などの高レベルの調整を処理しました。
![]() |
![]() |
マルチトリトンシステムは、まったく新しい研究の可能性を開きました。私たちは今、次のことをシミュレートできるようになりました:
- 車両間通信シナリオ
- 障害物回避を伴う協調経路計画
- スワームロボティクスの行動
- マルチエージェントSLAMマッピング
- フォーメーション制御と追従行動
複数のトリトンが同時に動作しているラボのセットアップは次のようになっていました:
![]() |
![]() |
私はまた、研究者が各トリトンの経路を視覚的に定義できるユーザーフレンドリーなインターフェースを開発しました。実際に、各ロボットが従うべき経路を描くことができ、彼らは完璧に調整されたこれらの経路を実行しました。これは、すべての動きを手動でコーディングすることなく、複雑な実験を設定するのに非常に便利でした。
このシステムは、最大5つのトリトンを同時に処理でき、それぞれが独自のPIDコントローラーを実行しながら中央制御システムを通じて調整されました。パフォーマンスは印象的で、すべてのロボットがチームとして協力しながら個々の精度を維持しました。
こちらは、単一ロボット制御からマルチロボット調整まで、Tritonsが動作している様子を示すプレイリストです:Tritons in Action Playlist
深度センサーの統合と座標補正
私が取り組んだもう1つの大きな進展は、各トリトンに搭載されたIntel RealSense D435深度カメラを利用することでした。Optitrackシステムは非常に正確な位置データを提供しましたが、ロボットが搭載センサーを使用して空間認識を改善し、座標誤差を補正する方法を探りたかったのです。
アイデアは、トリトンが深度センサーを使用して近くの他のトリトンを検出し、彼らの位置を相互参照できるようにすることでした。これには複数の目的があります:
-
誤差補正: Optitrackシステムにキャリブレーションのドリフトや一時的な遮蔽があった場合、ロボットは互いの位置の視覚的確認を使用して正確な座標系を維持できます。
-
強化されたSLAM: 深度センサーを持つ複数のロボットが協力することで、冗長なデータポイントを持つ環境のより豊かな地図を作成できます。
-
衝突回避: リアルタイムの深度センサーは、中央制御システムに通信遅延があっても、ロボットが互いに検出し、回避することを可能にします。
私は、トリトンが以下を行うことを可能にするアルゴリズムの実験を始めました:
- 特徴的な三角形の形状と反射球マーカーを使用して他のトリトンを検出する
- 深度データを使用して相対的な位置と向きを計算する
- これらの測定値をオプティトラックデータと比較して不一致を特定する
- 精度を維持するためにリアルタイムで座標系を調整する可能性がある
コンピュータビジョン実験
私は、いくつかの段階で機能するコンピュータビジョンパイプラインの実験にかなりの時間を費やしました:
![]() |
![]() |
![]() |
![]() |
![]() |
深度データ処理: インテルのRealSense D435は、RGBと深度データストリームの両方を提供しました。私は主に、30Hzで640x480の距離測定の配列として提供される深度データを扱いました。最初の課題は、このノイズの多い深度データをフィルタリングして意味のある幾何学的情報を抽出することでした。
物体検出の試み: 私は多段階の検出アルゴリズムを実験しました。床レベルで物体を特定するために深度画像をセグメント化することに成功し(壁、天井などをフィルタリング)、おおよそ0.3x0.3メートルのフットプリントを持つ物体を探しました。エッジ検出と幾何学的分析を使用して特徴的なトリトンのプロファイルを特定しようとしましたが、結果はまちまちでした。
マーカー認識実験: 各トリトンの三つの反射球は、最も有望な検出機能のように思えました。私は、深度画像内の三つの明るいスポットの特徴的な三角形パターンを特定するためにブロブ検出アルゴリズムを実験しました。制御された照明条件下でいくつかの有望な結果が得られましたが、一貫して信頼できるものではありませんでした。
座標融合研究: 私は、視覚に基づく位置推定をオプティトラックデータと融合するアプローチを研究しました。基本的なカルマンフィルターの実装を含みます。概念は、オプティトラックデータが利用可能な場合はより重みを与え、必要に応じて視覚に戻るというものでしたが、ラボでの時間が終わる前に完全に機能させることはできませんでした。
パフォーマンスの課題: すべての処理をロボットの制御ループとリアルタイムで実行することは困難でした。私は、Jetson Nanoの処理能力を圧倒することなく、アルゴリズムを約10-15Hzで実行するための最適化アプローチを実験しました。
残念ながら、私はこのコンピュータビジョンの作業を完全に終える前にラボを離れなければなりませんでした。いくつかの有望な初期結果が得られ、深度センサー処理について多くを学びましたが、システムを完全に信頼できる状態にすることはできませんでした。それは他の人が潜在的に構築できる興味深い研究方向のままでした。
私がコンピュータビジョンアルゴリズムをテストしている動画はこちらです:
私の実験中の深度センサーのビューは次のように見えました:
深度センサー統合作業を完了しなかったものの、この概念は、車両が外部インフラに依存せずに互いに認識する必要がある自動運転車シナリオのシミュレーションなどのアプリケーションに対して有望であることを示しました。私が探求し始めた研究方向は、将来のラボでの作業に貢献する可能性があります。
ドキュメンテーションと知識の保存
HCRラボへの私の最も重要な貢献の一つ、そしておそらく私が最も誇りに思っているのは、すべてのプロジェクトドキュメンテーションを整理し、保存することでした。私がラボに参加したとき、トリトンプロジェクトの知識は複数のプラットフォームと形式に散らばっていました。重要な情報は以下に広がっていました:
- 卒業した異なる学生が持つさまざまなGoogleドライブアカウント
- 受信トレイに埋もれた古いメール
- ランダムなDropboxフォルダー
- 複数のGitHubリポジトリ
- 一貫性のない構成のGitLabリポジトリ
- 特定の人だけが解釈できる手書きのメモ
この断片化されたドキュメンテーションは大きな問題でした。新しい学生は、始める方法を理解するのに数週間を費やし、貴重な知識は人々が卒業したりラボを去ったりするたびに常に失われていました。
私はこの問題を体系的に解決することにしました。私は、トリトンプロジェクトに関連するすべてのドキュメンテーション、コード、ビデオ、メモを追跡するのに無数の時間を費やしました。そして、すべてを明確で論理的な構造を持つ集中型GitLabリポジトリに整理しました。
![]() |
![]() |
集中型ドキュメンテーションには以下が含まれていました:
- ビルドガイド: トリトンをゼロから組み立てるためのステップバイステップの指示
- ソフトウェアセットアップ: 開発環境を設定するための完全なガイド
- コードドキュメンテーション: 明確な説明を伴った良好なコメント付きのコード
- ハードウェア仕様: 詳細な部品リスト、配線図、PCB設計
- トラブルシューティングガイド: 一般的な問題とその解決策
- ビデオチュートリアル: 私はYouTubeに教育ビデオを作成し、アップロードしました。詳細なオプティトラックキャリブレーションチュートリアルを含みます:
私はまた、将来の貢献が整理され、アクセス可能であることを保証するためにドキュメンテーション基準を確立しました。私が作成したリポジトリ構造は、ラボでのすべての後続の作業の基盤となりました。
既存のドキュメンテーションを整理するだけでなく、私は知識ベースの重要なギャップを埋めるいくつかのオリジナルガイドとチュートリアルを作成しました。これには、新しいラボメンバーのための詳細なセットアップ指示、包括的なトラブルシューティングガイド、複雑な手順のビデオウォークスルーが含まれます。
その影響は即座で持続的でした。新しい学生は数週間ではなく数日でスピードアップできました。私が作成したドキュメンテーションリポジトリは、私が去った後もラボで使用され続けています。それはトリトンプロジェクトの唯一の真実の情報源となり、将来の研究者のために無数の時間/日を節約しました。
メンタリングと知識の移転
HCRラボでの私の時間の中で最もやりがいのある側面の一つは、他の人をメンターし、私が得た知識を共有する機会でした。私の作業が進むにつれて、トリトンシステムに関する経験が増え、新しいチームメンバーのトレーニングに対する責任が増していきました。
ラボの後継者のメンタリング
私は最終的にラボを離れて学位を取得し、eBayでの仕事に集中する準備をしているとき、私の退職後にトリトンプロジェクトを引き継ぐ二人を徹底的にトレーニングすることを確実にしました。これは、彼らに物事の動作を示すだけでなく、彼らが本当に基礎原則を理解できるようにすることが重要でした。
私は数週間、彼らと密接に協力しながら以下を進めました:
- PID制御システムの数学的基礎
- 複数のロボットを調整するためのマルチプロセッシングアーキテクチャ
- 深度センサー統合とコンピュータビジョンアルゴリズム
- ドキュメンテーションシステムとその維持方法
- デバッグ技術と一般的な故障モード
知識の移転は非常に徹底的でした。私たちは一緒に実際のデバッグセッションを行い、彼らに既存のコードを修正し、拡張させ、彼らが独立して新しいトリトンをゼロからセットアップできることを確認しました。
高校メンタープログラム
おそらくさらにやりがいがあったのは、ラボのアウトリーチプログラムを通じて高校生をメンターした経験です。これは、教育の形成段階でロボティクス、コンピュータサイエンス、研究に誰かを紹介する素晴らしい機会でした。
私は以下をカバーする包括的なカリキュラムを設計しました:
コンピュータサイエンスの基礎:
- Pythonを主要言語として使用したプログラミング概念
- オブジェクト指向プログラミングの紹介
- アルゴリズムとデータ構造の理解
ロボティクスの概念:
- センサーの動作とそれらとのインターフェース方法
- アクチュエーター制御とモーターシステム
- 自律システムとフィードバック制御の基本
ROS(ロボットオペレーティングシステム):
- パブリッシュ/サブスクライブメッセージングシステムの理解
- ノードとサービスの作成
- ランチファイルとパラメータサーバーの操作
実践的なプロジェクト作業:
- 私たちは、トリトンの頭のLEDシステムを制御するROSサービスを作成するために協力しました
- 彼女は、既存のシステムと統合されたクリーンで文書化されたコードを書くことを学びました
- 彼女が作成したLED制御サービスは、トリトンのコードベースの永久的な部分となりました
このメンタリングが特に特別だったのは、彼女がプログラミングについてほとんど何も知らなかった状態から、アクティブな研究プロジェクトに意味のあるコードを貢献するまでの進歩を見守ることでした。彼女は「変数とは何か?」と尋ねるところから、独立してROS通信の問題をデバッグし、自分のサービス実装を書くまで成長しました。
彼女が開発したLED制御システムは、研究者が単純なROSコマンドを通じてトリトンの頭のLEDの色やパターンを簡単に変更できるようにしました。これは単純に聞こえるかもしれませんが、ROSアーキテクチャ、ハードウェアインターフェース、および適切なソフトウェア設計パターンを理解する必要がありました。彼女の貢献は、今日でもラボで使用されています。
メンターシップは、私にとっても彼女にとっても教育的なものでした。それは、複雑な概念を消化可能な部分に分解し、私たちが行っていることの基本について本当に考えることを強いるものでした。他の誰かに教えることは、私をより良いエンジニアであり研究者にしました。
博士研究とのコラボレーション
私がラボで過ごした時間の中で、最も職業的にやりがいのある側面の一つは、自己運転車アルゴリズムに焦点を当てた博士課程の学生であるペンと密接に協力したことでした。私がトライトンシステムに加えたソフトウェアの改善は、彼の博士研究を支えるのに役立ちました。
ペンの研究は、自己運転車のシナリオをシミュレートするために、正確で信頼性のあるマルチロボットの調整を必要としました。私が移動制御とマルチロボットシステムに加えた改善の前は、これらの実験ははるかに実施が難しかったです。ロボットは遅く、正確性に欠け、効果的に協力することができませんでした。
私の貢献は、ペンの研究のいくつかの分野で役立ちました:
交差点管理研究: 改良されたPIDコントローラーとマルチロボット調整により、ペンは複数の「車両」(トライトン)がその動きを調整する必要がある交差点シナリオをシミュレートできるようになりました。より良いタイミングと位置取りは、これらの研究をより実現可能にしました。
車両間通信: 私が開発したマルチプロセッシングフレームワークにより、ペンはシミュレートされた車両間の通信プロトコルを実装し、テストすることができました。各トライトンは、他のトライトンと調整しながら意思決定を行うことができ、自己運転車がどのように機能する必要があるかに似ています。
SLAMとマッピング研究: 深度センサーの統合作業は、ペンの同時位置特定とマッピング研究に追加のデータを提供しました。調整されたセンサー機能を持つ複数のロボットがあれば、より包括的なマッピング実験が可能になりました。
私たちのコラボレーションが特に価値のあるものであったのは、私が彼の研究を助けるだけでなく、真のパートナーシップであったからです。ペンの自律車両の理論的側面に対する理解は、私の実践的な実装に影響を与えました。彼のフィードバックと要件は、私にシステムをより堅牢で能力のあるものにするよう促しました。
私たちはラボで多くの時間を共に過ごし、シナリオのデバッグ、異なる制御戦略の議論、トライトンプラットフォームが何を達成できるかを探求しました。ペンは同僚であり友人となり、彼と一緒に働くことで、学術研究が実際にどのように機能するかについて多くを学びました。
私が構築したシステムは、ペンの論文作業の有用な部分となりました。私の実践的なエンジニアリングの貢献が自律車両技術の研究を支えるのを見て、本当に充実感を得ました。それは、堅実なエンジニアリングと研究がどのように協力して有用な成果を生み出すことができるかに対する私の関心を強化しました。
ラボを離れた後も、ペンと私は連絡を取り続けました。私の仕事が私の退職後も重要な研究に貢献し続けていることを知ることは、非常にやりがいのあることでした。
視点:LLM前の開発時代
このすべての作業は、ソフトウェア開発のLLM前の時代に達成されたことは注目に値します。これらはすべて2020年から2021年(主に2021年)の間に行われ、ChatGPT、Claude、Perplexity、またはCursor IDEのようなAI駆動の開発ツールが存在する前のことでした。
すべてのコードはゼロから書かれ、すべてのアルゴリズムは学術論文や教科書を通じて研究され、すべてのデバッグセッションは、プリントステートメント、デバッガー、そして体系的なテストのような従来の方法を含んでいました。座標変換やPID調整の問題で行き詰まったとき、私はAIアシスタントに概念を説明したり、問題をデバッグする手助けを求めることはできませんでした。
これにより、開発プロセスは大幅に困難になりましたが、同時により教育的でもありました。私は:
すべてを手動で研究する必要があった: PID制御理論を理解するためには、教科書や学術論文を読む必要がありました。座標変換を理解するには、手で数学を解く必要がありました。すべての概念は実装前に完全に理解されなければなりませんでした。
AIの助けなしでデバッグする: ロボットが予期しない方向に動いたり、ターゲットの周りで振動したりしたとき、私は論理を体系的に追跡し、デバッグ出力を追加し、仮説を一つずつテストする必要がありました。潜在的な問題を提案したり、エラーパターンを解釈する手助けをするAIはありませんでした。
第一原理から学ぶ: 「ロボティクスのためにPythonでマルチプロセッシングを実装するにはどうすればよいか?」とすぐに尋ねることができないため、私は基礎的な概念を深く理解する必要がありました。これにより、並行プログラミング、制御システム、コンピュータビジョンの堅実な基盤を構築することを強いられました。
文書化が重要だった: 後でAIにコードを説明させることができなかったため、私は非常に明確な文書とコメントを書く必要がありました。この規律は、他の人に知識を移転する際に非常に貴重でした。
振り返ってみると、現代のAIツールがあれば多くの開発の側面が加速されたであろうが、それなしで作業することは、より深い問題解決スキルと基礎システムのより徹底的な理解を発展させることを強いるものでした。今日の開発ツールが利用可能であった場合、このプロジェクトがどのように異なっていたかを考えるのは興味深いことです。
離れるという難しい決断
HCRラボでの作業が大好きだったにもかかわらず、2021年の終わりには、多くの学生が直面する難しい決断に直面しました:複数の機会と責任のバランスを取ることです。私は同時にeBayでフルタイムのソフトウェアエンジニアとして働き、マインズでコンピュータサイエンスの学位を取得し、HCRラボでの研究に貢献していました。
eBayの機会は重要でした。それは私の最初の主要なソフトウェアエンジニアリングの役割であり、貴重な業界経験を提供し、安定した収入をもたらしました。しかし、フルタイムの仕事を維持し、学位を取得し、研究に意味のある貢献をすることは単に持続不可能でした。何かを手放さなければなりませんでした。
私は、ラボの作業にもっと集中するためにコースの負担を減らす可能性について、張博士に相談しましたが、彼はそれに強く反対しました。彼の理由は妥当でした:学位を取得することが優先事項であり、eBayでの業界経験は私のキャリア開発にとって貴重であるべきだと考えました。研究に集中するためにクラスを落とすことは魅力的でしたが、長期的には最良の決定ではないかもしれないと感じていました。
したがって、2021年9月、ラボでの約8か月の集中的な作業の後、私は研究助手の役割から退くという難しい決断を下し、学位の取得とeBayでの仕事に集中することにしました。それは当時、私が下した中で最も難しい職業的な決断の一つでした。
ラボを正式に離れた後も、私は私が構築したシステムに関して誰かが助けを必要とするたびにサポートを提供し続けました。必要に応じて文書を更新し、デバッグに関する質問に答え、リモートで問題をトラブルシュートしました。私が築いたつながりやプロジェクトの成功への投資は、私がもはやチームの公式な一員でなくなったからといって消えることはありませんでした。
反省と振り返り
今、2025年、4年後に、私はその時期を複雑な感情で振り返っています。私のキャリアパスは、ウェブ開発とAI/MLエンジニアリングの深い領域に私を導き、これらの分野は非常にやりがいがあり、成長と影響のための大きな機会を提供してくれました。
しかし、私の中には「もしも」という部分があります。ロボティクスは、そして正直に言えば今でも、私の真の情熱です。物理システムで作業し、自分のコードが現実の動きや行動に変わるのを見ることには、ウェブ開発やAIの作業では再現できない何かがあります。
私は時々、もし異なる道を選んでいたらどうなっていたのかを考えます。もしロボティクス研究に留まる方法を見つけていたら?もし学部の学位を終えた後すぐに大学院に進んでいたら?もし業界経験よりもラボの作業を優先することを選んでいたら?
しかし、私はまた、すべての道にはトレードオフがあることを認識しています。ウェブ開発とAIで身につけたスキルは非常に貴重でした。業界経験は、スケールでのソフトウェアエンジニアリング、ユーザーエクスペリエンスデザイン、何百万もの人々が使用する製品を構築する際の実際の課題について教えてくれました。これらの経験は、私を全体的により良いエンジニアにしました。
私がHCRラボで行った作業は、今日の問題へのアプローチに影響を与え続けています。PID制御システムに必要な体系的思考は、ソフトウェアシステムのフィードバックループを設計する際に現れます。私が発展させた文書化と知識保存のスキルは、これまでのすべての役割で非常に貴重でした。メンターシップと教育の経験は、私がジュニア開発者とどのように協力し、チームの知識共有に貢献するかを形作りました。
最も重要なのは、この経験が、私が実際の影響を持つ挑戦的な技術的問題に取り組むときに活力を得ることを教えてくれたことです。ロボットの動きのアルゴリズムを最適化することでも、ユーザーが目標を達成するのを助けるAIシステムを構築することでも、満足感は重要な問題を解決することから得られます。
永続的な影響
HCRラボでの経験を振り返ると、比較的短い時間でどれだけ多くのことを達成したかに驚かされます。私が構築したシステムは、トライトンプラットフォームの運用方法を根本的に変え、その多くの改善は今日でも使用されています。私が作成した文書リポジトリは、プロジェクト全体の知識ベースとなりました。私が形成したメンターシップ関係は、私が働いた人々に持続的な影響を与えました。
しかし、おそらく最も重要なのは、この経験が、私が本当に情熱を持って取り組む問題に取り組むときに何ができるかを示してくれたことです。その8か月間、私は:
- プラットフォームを制限していたロボット移動制御システムを改善しました
- ゼロからマルチロボット調整システムを構築しました
- コンピュータビジョンとセンサーフュージョン機能を統合しました
- 包括的なドキュメンテーションとナレッジマネジメントシステムを作成しました
- 数人を指導し、知識の移転を手助けしました
- 自律走行車に関する博士号レベルの研究をサポートしました
これは単に技術的な成果についてではなく、それらは私にとって意味のあるものでした。粘り強さと体系的な思考を持っていれば、学部生であっても有用な貢献ができることを学びました。
未来とロボティクス
私のキャリアは他の方向に進んでいますが、ロボティクスへの情熱は衰えていません。私は今でもこの分野の進展を追いかけており、ロボット学習や自律システムの進歩に興奮しています。また、暇な時間に個人的なロボティクスプロジェクトに取り組むこともあります。
未来に何が待っているかは誰にもわかりません。私がAIと機械学習で身につけているスキルは、ロボティクスにますます関連性を持っています。私が得た業界経験は、堅牢でスケーラブルなシステムを構築する方法を教えてくれました。もしかしたら、これらの異なる経験の糸が予期しない形で結びつく未来があるかもしれません。
今のところ、私はHCRラボで過ごした時間とそこで得た経験に感謝しています。それは私の技術的スキルと、私が最も充実感を感じる仕事の種類についての理解を形成した重要な時期でした。時々それを恋しく思うこともありますが、私が学んだ教訓や発展させたアプローチは、私が行うすべてのことに影響を与え続けていることを知っています。
トライトンロボットはまだそこにいて、研究者を支え、重要な作業を可能にしています。それは本当に素晴らしいことです。

















