HCRラボ ロボティクス研究

Table of Contents

この投稿は、私のロボティクスの旅路を振り返ります。2015年に高校FRCを通じてロボティクスへの情熱を発見したことから、Colorado School of MinesHuman Centered Robotics (HCR) Lab2021年2月から2021年9月の期間リサーチアシスタントとして働いたことまでです。2022年後半以降、HCR LabはColorado School of MinesからUniversity of Massachusetts Amherstへ移転し、サイトもhcr.mines.eduからhcr.cs.umass.eduへ変更されました。

背景

I started my undergraduate studies at the Colorado School of Mines in the Fall 2018 semester. My major was Computer Science with a focus on Robotics & Intelligent Systems. And I graduated in Spring 2022.

I was lucky to find my passion early on in my life. During high school, I spent a good amount of time to figure out what I liked and what I could be good at. After some trial and error, I was able to figure out that my passion was computer science. But it was also during this time that I discovered I had this overwhelming love for building through code.

At Mines, I got the opportunity to work at Mines’ Human Centered Robotics (HCR) Lab under Dr Hao Zhang. I first met Dr. Zhang in Spring 2020 through his class “Human Centered Robotics” (CSCI473), and after the chaos of COVID and classwork, I got to work in his lab in early Spring 2021.

ヒューマンセンタードロボティクス (CSCI473) クラス

Mines’ Human Centered Robotics (CSCI473) was one of only a few classes from my college experience that had a profound impact on me. The class was taught by Dr. Hao Zhang. Our entire grade for the class was made up of just three projects, each of which presented a challenging problem that introduced core concepts of robotics. These projects consisted of:

  1. Learning Robot Operating System (ROS)
  2. Reinforcement Learning for Robot Wall Following
  3. Robot Understanding of Human Behaviors Using Skeleton-Based Representations

🧩 ロボットオペレーティングシステム (ROS) の学習

This was the first project we were assigned. The project consisted of three tasks:

  1. Setup Development Environment
  2. Understand Gazebo Simulator
  3. Write a ROS “Hello World”

For tasks 1 and 2, we just had to set up our development environment and follow an introduction to Gazebo tutorial. This included:

Task 3, on the other hand, was a real challenge. The task was to use turtlesim and have the turtle draw the Mines’ “M” logo:

This task, though it sounded simple, was more difficult than it looked. This project eventually introduced me to the concept of Open-Loop and Closed-Loop systems. You can learn more about this project and my solution on the ROS Move Turtle project page.

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

This was the second project we were assigned, and it was one of the hardest projects I ever worked on in college. The project description was as follows:

In this project, students will design and implement reinforcement learning algorithms to teach an autonomous mobile robot to follow a wall and avoid running into obstacles. Students will be using the Gazebo simulation in ROS Melodic to simulate an omni-directional mobile robot named Triton, and using an environment map that is provided to you. Students will be using a laser range scanner on the robot to perform sensing and learning, where the robot is controlled using steering and velocity commands. Students are required to program this project using C++ or Python in ROS Melodic running on Ubuntu 18.04 LTS (i.e., the same development environment used in Project 1). Also, students are required to write a report following the format of standard IEEE robotics conferences using LATEX.

For the reinforcement learning algorithm, we were instructed to use Q-Learning. We also used the Stingray Gazebo simulation environment provided by the class. Stingray consisted of the Triton model and physics logic. We were also provided a maze for the robot to follow. All in all, the environment looked like this:

For the full project description, check out csci473-p2.pdf. I never published my solution to GitHub or the web because it was not very good and heavily flawed. Also, getting the code running in the right environment is quite difficult and annoying. However, I do have a demo video that I submitted to the class, showing my solution. You can view it here:

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

For the third project, the project description was as follows:

In this project, students will implement several skeleton based representations (Deliverable 1) and use Support Vector Machines (SVMs) (Deliverable 2) to classify human behaviors using a public activity dataset collected from a Kinect V1 sensor. Additionally, students are required to write a report following the format of standard IEEE robotics conferences using LATEX in Deliverable 3.

This project was challenging but not as difficult as the second project. The main goal was to use Kinect V1 sensor data, from the MSR Daily Activity 3D Dataset, and Support Vector Machines to classify certain human actions/behaviors. You can learn more about this project and my solution on the Predict Human Actions Using LIBSVM project page.

CSCI473 結論

CSCI473 is one of, if not the best class I took during my undergraduate studies at Mines. All these projects taught me a lot and allowed me to have a cool catalog of projects to reflect on and refer to on my resume. It was also the first class where I felt like I was in my element, as I was never a good test taker but excelled in completing projects. It was also through this class that I met Dr. Hao Zhang, who eventually helped me secure a position as a research assistant at Mines’ Human-Centered Robotics (HCR) Lab.

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

CG_GUI_19

During the Summer of 2020, between completing CSCI473 and joining the HCR Lab, I took CSCI370 or “Advanced Software Engineering” as part of my CS undergraduate program at the Colorado School of Mines. CSCI370 is a course that makes students design, implement, and document software-related solutions for a company. It allows students to apply their coursework knowledge to real world computer science problems. You can learn more about the course here.

In the course, you get to decide what project/company you will work on. The course provided PDFs detailing each project and company. Ultimately I decided to work on a project posted by a company called Lunar Outpost called “Real Time Wheel Slip Detection and Error Corrections for Enhanced Lunar Navigation”. Since the name is long, lets give the project an alias of “Wheel Slippage Detection”.

問題

Lunar Outpost is a startup trying to create autonomous lunar rovers. On the moon, there is a lot of lunar dust that is known for causing a lot of wheel slippage. This is not ideal because wheel slippage can cause autonomous systems to lose track of their real world location. On Earth, this is solved by using GPS data to correct for any offset caused by wheel slippage. But the issue with GPS is that it only works by having 30+ navigation satellites constantly circling the Earth in orbit and transmitting unique signals that allows computers to calculate their position. But on the moon, there is currently no such thing as a GPS. Knowing this, another method other than GPS has to be used to detect wheel slippage. A more detailed report of the project’s problem can be viewed here.

チーム

This project was not a simple project, so it had to be done in a team. The team consisted of five fellow Colorado School of Mines students:

This project was not a simple project, so it had to be done in a team. This team consisted of Mehmet Yilmaz (me), Kane Bruce, Braedon O’Callaghan, Liam Williams, and Kevin Grant.

The project required us to know some ROS, C++, Python, Linux, Raspberry Pi, and Arduino. Most of us had experience in one or more of these technologies but I was the only one with experience in ROS since I used ROS in my Human Centered Robotics (CSCI473) class during the Spring 2020 semester. Due to this, early on, I helped get everyone up to speed about ROS and how to develop for it.

課題

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

また、WVU Navigation Labの学術研究を調査し、Lunar Outpostのユースケースにおけるホイールスリップ問題の解決方法を把握しようとしました。これは、私たち学部2年生や3年生にとって、予想以上に難しいものでした。

私たちが直面したもう一つの課題は、このプロジェクトに取り組む時間の量でした。CSCI370は1か月の授業です。しかし、問題自体は何十年も多くの企業や学者が解決・完璧化しようとしている大規模な問題です。したがって、1か月ではこの課題を解決するには全く足りません。それでも、これらすべての課題にもかかわらず、私たちは粘り強く取り組み、必ず成果を出すようにしました。

結論

すべての研究と開発を進めた結果、月の物理をデジタルで正確にシミュレートすることはほぼ不可能であると判断しました。そのため、このアルゴリズムをシミュレーションで試すことは意味がなく、宇宙や月でのホイールスリップ検出に関する有意義な研究にはつながりません。私たちは、砂や実際のハードウェア(例えばHuskyロボット)を使用した適切なテスト環境を構築することが、この種の研究にとってはるかに重要であると結論付けました。ホイールスリップ検出コードをROSノードとして更新し、正しく機能し、実際のハードウェアに簡単にインポートしてテストできるようにしました。このプロジェクトを通じて、リーダーシップを取る役割を担い、仲間にROS開発を教育し、Python、ROS、Gazeboの経験を積み、これまでに遭遇したことのない複雑な問題に取り組むことができました。最も重要なのは、この経験がロボティクスへの情熱をさらに確固たるものにし、研究への意欲を強化し、私のロボティクスの旅の次のステップへの土台を築いたことです。

HCRラボでの開始

CSCI473を修了し、2020年夏のCSフィールドセッションと2020年秋学期を終えた後、ロボティクスの研究に取り組むことに決めました。CSCI473とCSフィールドセッションの両方で素晴らしい経験をしたため、HCRラボで研究したいと思うようになりました。前年に張博士に会っていたので、2021年1月にラボでの機会があるかどうかをメールで問い合わせました。約2週間以内に張博士は関心を示し、研究オプションを提示し、ラボでの役割をオファーしてくれました。その後、2021年2月にラボでの仕事を開始しました。

紹介ビデオ

こちらは、HCRラボでの数か月後に録画した私の紹介ビデオです。2021年5月に録画され、2021年夏にHCRラボで取り組む研究内容をカバーしています:

私のプロジェクト

HCRラボでの期間中、主にTritonプロジェクトに焦点を当てました。Tritonプロジェクトは、Colorado School of Minesの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フィートの高さに正方形に配置された8台のOptitrack Flex(赤外線)カメラで、2メートル×2メートルのエリアを作成しました。

エリア I1 エリア I2

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

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

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

このセットアップにより、Tritonに提供したい主要機能の一つは、特定の座標へ移動する能力でした。ユーザーまたはそのソフトウェアは、関心エリア内の(x, y)座標を提供でき、ロボットはできるだけ速く、正確に、シームレスにその座標へ移動します。私が参加した時点で、この機能は存在していましたが、うまく機能していませんでした。以下は、元の移動ロジックがどのように動作したかを示すシンプルなアニメーションです:

元のソリューションの実行を録画していなかったので、古い移動ロジックの動作を示すシンプルなアニメーションを作成しました。これを踏まえて、この手法の問題点は何でしょうか?

  1. 本当に遅い
  2. 特定のポイントへ行くためにロボットが多くのスペースを占有してしまいます。このため、複数のTritonが同時に動く際にこのソリューションを使用するのが困難でした。

では、なぜこのような挙動が起きたのでしょうか?問題は、Tritonが最初に回転し、αを変えて目標点を特定の誤差範囲内で指すまで回転し続けることにありました。その後前進し、θが目標から特定の量だけずれた時点で停止し、再びαが目標範囲内になるまで回転を開始します。次に再び前進し、これを目的地点に到達するまで繰り返します。また、目標点に近づくにつれて、回転と前進の速度が大幅に遅くなり、オーバーシュートしないようにします。この結果、Tritonは不自然な動きをし、目標点に到達するのに永遠に時間がかかり、特定の目標点に到達するだけでも多くのエリアが必要となりました。これらすべての問題と、Tritonプロジェクトの開発においてこの機能が極めて重要であったことを考慮し、HCRラボでの仕事を始めた際、最初の課題はTritonが目標点へより効果的にナビゲートできるようなソリューションを開発することでした。

このことを踏まえて、私はこの問題に対処する最善の方法を研究するのに多くの時間を費やしました。皮肉なことに、Minesでフィードバック制御システム入門 (EENG307)という授業を受講していました。その授業の初めに、オープンループコントローラクローズドループコントローラの概念を学びました。これを踏まえ、授業の教授と賢いルームメイトと議論した結果、Tritonを目標点に導くことはクローズドループシステムの問題であることが明らかになりました。

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

広範なテストと研究の結果、私はTriton向けに2つの異なるコントローラアプローチを開発しました:

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

このアプローチは、同時に動作する2つの独立した比例コントローラを使用しました:

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

アルゴリズムは、目標までのユークリッド距離とロボットの現在の向きと望ましい方向との角度誤差を継続的に計算しました。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 プレイリスト をチェックしてください。これには新しい手法で動作するすべての Triton が掲載されています。

かつては単純な点対点移動に 30〜45 秒かかっていたものが、現在は約 8〜12 秒で完了します。さらに重要なのは、Triton が狭い空間でもより効率的にナビゲートできるようになり、マルチロボットシナリオで有用になったことです。

開発上の課題とデバッグ

これらのコントローラを実装することは簡単ではなく、いくつかの重要なデバッグ課題が伴いました:

  • 座標系変換: 最も厄介な点の一つは座標変換を正しく行うことでした。Optitrack システムは独自の座標フレームでデータを提供し、ロボットはローカル座標フレームを持ち、正確に変換する必要がありました。初期の実装では回転行列計算を混同したため、ロボットが誤った方向に動いていました。
  • 実世界 vs. 理想的な挙動: 最大の課題は、教科書の制御理論には現れない実世界の要因を考慮することでした。ロボットのホイールは異なる摩擦特性を持ち、モーターは同一に応答せず、Optitrack から制御ソフトウェア、そしてロボットの Arduino への通信チェーンには常に遅延がありました。私は数週間かけて比例ゲインを調整し、デッドバンドフィルタを追加してこれらの物理的現実に対応しました。
  • 振動と安定性の問題: 最初の実装では、ロボットが目標をオーバーシュートし、前後に揺れる振動問題が発生しました。これにより、PID コントローラにおける微分項の重要性と適切なゲイン調整の必要性を学びました。最終的に、システムの固有の減衰がほとんどの用途で十分であるため、完全な PID ではなく、慎重に調整した比例制御を主に採用しました。
  • マルチロボット干渉: 複数のロボットが同時に動作すると、予期しない干渉パターンが見つかりました。ロボットは時々同じ空間を「争い」合ったり、互いに無期限にブロックし合うデッドロック状態を作り出したりしました。これにより、協調メカニズムと衝突回避アルゴリズムを実装することになりました。

マルチTriton制御システム

単一の Triton の移動問題を解決した後、ラボの次の課題は複数の Triton を同時に連携させることでした。これが私の主な注力領域の一つとなり、プロジェクトへの重要な貢献となりました。

元のシステムは一度に一つの Triton しか制御できず、研究の可能性が大幅に制限されていました。ラボは、複数の自律走行車が相互に通信して交通流を最適化し、より良い SLAM(同時定位とマッピング)マップを作成するようなシナリオをシミュレートしたいと考えていました。

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

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

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

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

  • 個別ロボットプロセス: 各 Triton は以下を処理する専用の Python プロセスを持っていました:

    • 約 50Hz のリアルタイム PID 制御計算
    • ロボットのハードウェア(Arduino/Jetson)との通信
    • ローカルパス実行と障害物回避
    • メインコントローラへのステータス報告
  • 共有メモリ通信: Python の multiprocessing.shared_memory と Queue オブジェクトを使用して、プロセス間の効率的な通信を実現しました。これにより、ネットワーク通信のオーバーヘッドなしにリアルタイムで調整できました。

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

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

マルチTriton 交差点テスト 初期のマルチTriton 設定

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

マルチTriton システムは全く新しい研究の可能性を開きました。これで以下をシミュレートできるようになりました:

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

以下は、複数の Triton が同時に動作しているラボの設定です:

緑のグリッド上のロボット ロボットグリッド設定

私はまた、研究者が各 Triton のパスを視覚的に定義できるユーザーフレンドリーなインターフェースも開発しました。各ロボットが従うべきパスを文字通り描くことができ、完璧に調整された状態でそのパスを実行しました。これにより、すべての動きを手動でコード化することなく、複雑な実験を設定するのに非常に役立ちました。

このシステムは最大 5 台の Triton を同時に処理でき、各々が独自の PID コントローラを実行しながら中央制御システムを通じて調整されました。パフォーマンスは印象的で、すべてのロボットが個々の精度を維持しつつチームとして協調して動作しました。

単一ロボット制御からマルチロボット調整まで、Triton の実演を示すプレイリストはこちらです: Tritons in Action プレイリスト

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

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

アイデアは、Triton が深度センサーを使用して近くの他の Triton を検出し、位置を相互参照できるようにすることでした。これには複数の目的があります:

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

  2. 強化された SLAM: 深度センサーを搭載した複数のロボットが協働することで、冗長なデータポイントを用いたはるかに豊かな環境マップを作成できます。

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

私は Triton が以下を行えるようにするアルゴリズムの実験を始めました:

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

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

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

コンピュータビジョンテストのために向き合う二つの Triton Triton のカメラのクローズアップ
テスト用に向き合う二つの Triton
向き合う二つのロボット レース直前の二つの Triton

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

物体検出の試み: 私はマルチステージ検出アルゴリズムを実験しました。床レベルの物体を特定するために深度画像をセグメント化し(壁や天井などを除去)、おおよそ 0.3x0.3 メートルのフットプリントを持つ適切なサイズ特性を持つ物体を探すことにある程度成功しました。エッジ検出と幾何解析を使用して独特の Triton プロファイルを識別しようと試みましたが、結果はまちまちでした。

マーカー認識実験: 各 Triton の 3 つの反射球は最も有望な検出特徴のように思えました。ブロブ検出アルゴリズムを用いて深度画像内の 3 つの明るい点の特徴的な三角パターンを識別しようと実験しました。制御された照明条件下でいくつか有望な結果が得られましたが、常に信頼できるわけではありませんでした。

座標融合研究: ビジョンベースの位置推定と Optitrack データを融合するアプローチを調査し、基本的なカルマンフィルタ実装を含めました。概念は、利用可能なときは Optitrack データにより重みを付け、必要に応じてビジョンにフォールバックすることでしたが、ラボでの在籍期間が終了する前に完全に機能させることはできませんでした。

性能上の課題: このすべての処理をロボットの制御ループと並行してリアルタイムで実行させることは困難でした。Jetson Nano の処理能力を圧迫せずにアルゴリズムを約 10‑15Hz で動作させるための最適化手法を実験しました。

残念ながら、私はラボを離れなければならず、このコンピュータビジョンの作業を完全に完了することはできませんでした。いくつか有望な初期結果が得られ、深度センサー処理について多くを学びましたが、システムを完全に信頼できる状態にすることはできませんでした。この方向性は他の研究者がさらに構築できる興味深い研究テーマとして残っています。

以下は、私がコンピュータビジョンアルゴリズムをテストしているビデオです:

実験中の深度センサーのビューは次のようでした:

深度センサー統合作業は完了しませんでしたが、この概念は自動運転車シナリオのシミュレーションなど、外部インフラにのみ依存せずに車両同士が互いを認識する必要がある応用に有望です。私が始めた研究方向は、将来的にラボの作業に貢献できる可能性があります。

ドキュメンテーションと知識の保存

私が HCR ラボに対して最も重要な貢献の一つ、そしておそらく最も誇りに思う貢献は、プロジェクトのすべてのドキュメンテーションを整理し保存したことです。ラボに参加したとき、Triton プロジェクトの知識は複数のプラットフォームと形式に散在していました。重要な情報は以下に分散していました:

  • 卒業したさまざまな学生が所有する Google Drive アカウント
  • 受信トレイに埋もれた古いメール
  • ランダムな Dropbox フォルダ
  • 複数の GitHub リポジトリ
  • 整理が不統一な GitLab リポジトリ
  • 特定の人だけが解読できる手書きノート

この断片化されたドキュメンテーションは大きな問題でした。新入生は何週間もかけて始め方を探す必要があり、卒業や退職に伴い貴重な知識が常に失われていました。

私はこの問題を体系的に解決することに取り組みました。Triton プロジェクトに関連するすべてのドキュメント、コード、ビデオ、ノートを追跡するのに無数の時間を費やし、すべてを集中化された GitLab リポジトリに明確で論理的な構造で整理しました。

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

棚に美しい角度で置かれた Triton

集中化されたドキュメンテーションには以下が含まれています:

  • ビルドガイド: 最初から Triton を組み立てるためのステップバイステップの手順
  • ソフトウェアセットアップ: 開発環境を構築するための完全なガイド
  • コードドキュメンテーション: 明確な説明が付いた十分にコメントされたコード
  • ハードウェア仕様: 詳細な部品リスト、配線図、PCB 設計
  • トラブルシューティングガイド: 一般的な問題とその解決策
  • ビデオチュートリアル: YouTube にアップロードした指導ビデオを作成し、詳細な Optitrack キャリブレーションチュートリアルを含みます:

また、将来の貢献が整理されアクセスしやすいようにドキュメンテーション標準を確立しました。私が作成したリポジトリ構造は、ラボのすべての後続作業の基盤となりました。

既存のドキュメンテーションを整理するだけでなく、知識ベースの重要なギャップを埋めるオリジナルのガイドやチュートリアルも多数作成しました。これらには新しいラボメンバー向けの詳細なセットアップ手順、包括的なトラブルシューティングガイド、複雑な手順のビデオウォークスルーが含まれます。

その影響は即座に、そして永続的でした。新入生は数週間ではなく数日で作業に追いつくことができました。私が作成したドキュメンテーションリポジトリは、私が退職した数年後も現在もラボで使用され続けています。Triton プロジェクトの唯一の真実の情報源となり、将来の研究者のために無数の時間/日数を節約しました。

メンタリングと知識の移転

私が HCR ラボで過ごした時間で最もやりがいを感じた側面の一つは、他者を指導し自分が得た知識を共有する機会でした。作業が進むにつれ、Triton システムに熟練するにつれて、私は新しいチームメンバーのトレーニングにますます多くの責任を担うようになりました。

ラボ後継者のメンタリング

学位取得と eBay での仕事に集中するために最終的にラボを離れる準備をしていたとき、私の退職後に Triton プロジェクトを引き継ぐ二人のメンバーを徹底的に訓練しました。これは単に操作方法を見せるだけでなく、根本的な原理を真に理解させ、継続的にイノベーションを起こせるようにすることが目的でした。

数週間にわたり彼らと密に作業し、以下を徹底的に教えました:

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

知識の移転は非常に徹底的でした。実際のデバッグセッションを共に行い、既存コードの修正・拡張をさせ、彼らが単独で新しい Triton をゼロからセットアップできるようにしました。

高校メンターシッププログラム

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

包括的なカリキュラムを設計し、以下をカバーしました:

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

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

ロボティクス概念:

  • センサーの動作原理とインターフェース方法
  • アクチュエータ制御とモーターシステム
  • 自律システムとフィードバック制御の基本

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

  • パブリッシュ/サブスクライブメッセージングシステムの理解
  • ノードとサービスの作成
  • ランチファイルとパラメータサーバの使用

ハンズオンプロジェクト作業:

  • Triton のヘッド LED システムを制御する ROS サービスの作成に共同で取り組んだ
  • 既存システムに統合された、クリーンで文書化されたコードを書く方法を学んだ
  • 彼女が作成した LED 制御サービスは Triton コードベースの永続的な一部となった

このメンタリングが特に特別だったのは、プログラミングについてほとんど何も知らなかった彼女が、実際の研究プロジェクトに有意義なコードを貢献できるまでに成長した過程を目の当たりにしたことです。彼女は「変数とは何ですか?」と質問する段階から、ROS の通信問題を自力でデバッグし、独自のサービス実装を書けるようになりました。

彼女が開発した LED 制御システムにより、研究者はシンプルな ROS コマンドで Triton のヘッド LED の色やパターンを簡単に変更できるようになりました。これは一見単純に思えるかもしれませんが、ROS アーキテクチャ、ハードウェアインターフェース、適切なソフトウェア設計パターンの理解が必要でした。彼女の貢献は現在もラボで使用されています。

メンターシップは、彼女にとってと同様に私にとっても教育的でした。 それは、複雑な概念を消化しやすい部分に分解し、私たちがやっていることの基本に本当に向き合うことを強いました。 他人に教えることで、私はより良いエンジニア・研究者になることができました。

PhD研究との協働

私がラボで過ごした時間の中で、最もプロフェッショナルにやりがいを感じた側面の一つは、自己走行車アルゴリズムを研究テーマとする博士課程の学生、Pengと密に協働したことです。 私がTritonシステムに加えたソフトウェアの改良は、彼の博士研究を支援するのに役立ちました。

Pengの研究は、自己走行車シナリオをシミュレートするために、正確で信頼性のあるマルチロボット協調が必要でした。 私が動作制御とマルチロボットシステムに加えた改良の前は、これらの実験ははるかに実施が困難でした。 ロボットは遅く、精度が低く、効果的に協調できませんでした。

私の貢献は、以下のいくつかの領域でPengの研究を支援しました:

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

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

SLAMとマッピング研究:
深度センサーの統合作業により、Pengは同時定位とマッピング(SLAM)研究のための追加データを得ることができました。 協調したセンシング機能を持つ複数のロボットを使用することで、より包括的なマッピング実験が可能になりました。

私たちの協働が特に価値あるものとなったのは、単に私が彼の研究を支援しただけでなく、真のパートナーシップだったからです。 Pengの自律走行車の理論的側面に対する理解は、私の実装に情報を提供しました。 彼のフィードバックと要件は、システムをより堅牢で有能にするよう私を駆り立てました。

私たちはラボで多くの時間を共に過ごし、シナリオのデバッグやさまざまな制御戦略の議論、Tritonプラットフォームが何を成し遂げられるかを探求しました。 Pengは同僚であり友人でもあり、彼と働くことで学術研究が実際にどのように機能するかを多く学びました。

私が構築したシステムはPengの博士論文の有用な一部となりました。 私の実践的なエンジニアリング貢献が自律走行車技術の研究を支えるのを見ることは非常に充実感がありました。 これは、堅実なエンジニアリングと研究が協働して有用な成果を生み出すことへの私の関心を強化しました。

私がラボを離れた後も、Pengとは連絡を取り続けました。 私の仕事が退職後も重要な研究に貢献し続けていると知ることは、非常にやりがいがありました。

視点:LLM以前の開発時代

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

すべてのコードは一から書かれ、すべてのアルゴリズムは学術論文や教科書を通じて調査され、すべてのデバッグセッションはプリントステートメントやデバッガ、体系的なテストといった従来の手法を伴いました。 座標変換やPIDチューニングの問題で行き詰まったとき、概念を説明したり問題のデバッグを手伝ってくれるAIアシスタントに頼ることはできませんでした。

これにより開発プロセスは大幅に困難になったものの、同時に教育的でもありました。 私は以下を行う必要がありました:

すべてを手動で調査:
PID制御理論を理解するには教科書や学術論文を読む必要がありました。 座標変換を解くには手計算で数学を処理する必要がありました。 すべての概念は実装前に完全に理解しなければなりませんでした。

AI支援なしでデバッグ:
ロボットが予期しない方向に動いたり、目標周辺で振動したりしたとき、私は論理を体系的に追跡し、デバッグ出力を追加し、仮説を一つずつ検証しなければなりませんでした。 潜在的な問題を示唆したりエラーパターンを解釈したりするAIは存在しませんでした。

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

ドキュメンテーションは重要:
後でAIにコードの説明を頼れなかったため、極めて明確なドキュメントとコメントを書く必要がありました。 この規律は、知識を他者に伝える際に計り知れない価値があることが証明されました。

振り返ってみると、現代のAIツールがあれば開発の多くの側面が加速したでしょうが、AIなしで作業することで、より深い問題解決能力と基盤システムの徹底的な理解を育むことを余儀なくされました。 今日利用可能な開発ツールがあったら、このプロジェクトがどれほど異なっていたかを考えるのは興味深いことです。

離れるという困難な決断

HCRラボでの仕事が大好きだったものの、2021年後半には多くの学生が直面する困難な決断、すなわち複数の機会と責任のバランスを取ることに直面しました。 私はeBayでフルタイムのソフトウェアエンジニアとして働きながら、Minesでコンピュータサイエンスの学位取得を終え、さらにHCRラボの研究にも貢献していました。

eBayでの機会は重要でした。 これは私にとって初めての大規模なソフトウェアエンジニアリングの役割であり、貴重な業界経験と安定した収入をもたらしました。 しかし、フルタイムの仕事を維持し、学位を取得し、研究に実質的に貢献し続けることは持続不可能でした。 何かを犠牲にせざるを得ませんでした。

私がコース負荷を減らしてラボの仕事にもっと集中できないかと張博士に相談したところ、彼は強く反対しました。 彼の理由は妥当で、学位取得を最優先すべきであり、eBayでの業界経験はキャリア開発に有益だと考えていました。 研究に集中するために授業を落とすことは魅力的ですが、長期的には最善の決断ではないかもしれないと彼は感じていました。

そこで2021年9月、ラボで約8か月の集中的な作業を経て、学位取得とeBayでの仕事に集中するために研究助手の役割から退くという困難な決断を下しました。当時、これが私が下した最も難しいプロフェッショナルな決断の一つでした。

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

振り返りと回顧

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

テーブル上のTritonsの俯瞰図

しかし、私の中には「もしも」と考える部分があります。 ロボティクスは、正直言って今でも私の真の情熱です。 物理システムと向き合い、コードが実世界の動きや振る舞いに変換されるのを見ることには、ウェブ開発やAIの仕事ではなかなか再現できない何かがあります。

私は時々、別の道を選んでいたらどうなっていたかを考えます。 もしロボティクス研究に残る方法を見つけていたら? 学部卒業後すぐに大学院に進学していたら? 業界経験よりラボの仕事を優先していたら?

しかし、すべての道にはトレードオフがあることも認識しています。 ウェブ開発とAIで培ったスキルは非常に価値があります。 業界経験は、大規模なソフトウェアエンジニアリング、ユーザーエクスペリエンス設計、そして何百万人が使用する製品を構築する実務的な課題について教えてくれました。 これらの経験は、私を全体的により優れたエンジニアにしました。

HCRラボでの仕事は、今日の問題へのアプローチに今も影響を与えています。 PID制御システムに必要な体系的思考は、ソフトウェアシステムでフィードバックループを設計する際に現れます。 私が身につけたドキュメンテーションと知識保存のスキルは、その後のすべての役割で計り知れない価値があります。 メンターや教育の経験は、ジュニア開発者と協働し、チームの知識共有に貢献する方法を形作っています。

最も重要なのは、この経験から、実世界に影響を与える挑戦的な技術課題に取り組むときに自分が最も活躍できることを学んだことです。 ロボットの動きアルゴリズムを最適化することでも、ユーザーが目標を達成できるよう支援するAIシステムを構築することでも、重要な難題を解決することから得られる満足感が原動力です。

永続的なインパクト

HCRラボでの経験を振り返ると、比較的短期間でどれだけ多くのことを成し遂げたかに驚かされます。 私が構築したシステムはTritonプラットフォームの運用方法を根本的に変え、その多くの改良は現在も使用されています。 私が作成したドキュメントリポジトリはプロジェクト全体の知識ベースとなりました。 私が築いたメンターシップ関係は、共に働いた人々に長期的な影響を与えました。

しかし、おそらく最も重要なのは、この経験が私が真に情熱を持つ問題に取り組むときに何ができるかを示したことです。その8か月間に、私は:

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

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

未来とロボティクス

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

未来が何をもたらすかは誰にもわかりません。私がAIと機械学習で培っているスキルは、ロボティクスにますます関係しています。得た業界経験は、堅牢でスケーラブルなシステムの構築方法を教えてくれました。もしかしたら、これら異なる経験の糸が予想外の形で結びつく未来があるかもしれません。

今のところ、HCRラボで過ごした時間とそこで得た経験に感謝しています。それは私の技術スキルと、最もやりがいを感じる仕事の種類に対する理解の両方を形作った形成的な期間でした。時々懐かしく思うこともありますが、学んだ教訓と築いたアプローチは、私のすべての行動に今も影響を与えていると知っています。

ロボットは依然としてそこにあり、研究者を支え、重要な仕事を可能にしています。そしてそれはとても素晴らしいことです。