Глава моего исследования в области робототехники
Table of Contents
Этот пост рассказывает о моем пути в робототехнике, начиная с открытия своей страсти к робототехнике в FRC во время старшей школы в 2015 году и заканчивая моим временем в качестве научного ассистента в Лаборатории человекоцентрированной робототехники (HCR) Колорадского университета с февраля 2021 по сентябрь 2021 года. Обратите внимание, что с конца 2022 года HCR Lab переехала из Колорадского университета в Университет Массачусетса в Амхерсте, а также ее сайт переехал с hcr.mines.edu на hcr.cs.umass.edu.
Предыстория
Я начал свою учебу в бакалавриате в Колорадском университете в семестре осени 2018 года. Моя специальность была “Компьютерные науки” с акцентом на робототехнику и интеллектуальные системы. Я закончил учебу весной 2022 года.
Мне повезло рано найти свою страсть в жизни. Во время старшей школы я потратил много времени, чтобы понять, что мне нравится и в чем я могу быть хорош. После некоторых проб и ошибок я смог понять, что моя страсть - это компьютерные науки. Но именно в это время я также обнаружил, что у меня есть непреодолимая любовь к созданию через код.
В университете я получил возможность работать в Лаборатории человекоцентрированной робототехники (HCR) под руководством доктора Хао Чжана. Я впервые встретил доктора Чжана весной 2020 года на его курсе “Человекоцентрированная робототехника” (CSCI473), и после хаоса, вызванного COVID и учебной работой, я начал работать в его лаборатории в начале весны 2021 года.
Класс человекоцентрированной робототехники (CSCI473)
Класс человекоцентрированной робототехники (CSCI473) был одним из немногих курсов в моем колледже, который оказал на меня глубокое влияние. Курс преподавал доктор Хао Чжан. Наша оценка за курс состояла всего из трех проектов, каждый из которых представлял собой сложную задачу, вводящую основные концепции робототехники. Эти проекты состояли из:
- Изучение операционной системы роботов (ROS)
- Обучение с подкреплением для следования робота за стеной
- Понимание роботом человеческого поведения с использованием представлений на основе скелета
Изучение операционной системы роботов (ROS)
Это был первый проект, который нам был назначен. Проект состоял из трех задач:
- Настройка среды разработки
- Понимание симулятора Gazebo
- Написание “Hello World” на ROS
Для задач 1 и 2 нам нужно было просто настроить нашу среду разработки и пройти вводный курс по Gazebo. Это включало:
- Настройку ROS Melodic, которую я сделал на своем ноутбуке HP 2011 года, который был достаточно хорош
- Установку и настройку ROS и Gazebo
- Прохождение учебника gazebosim и учебника e-manual.
Задача 3, с другой стороны, была настоящим вызовом. Задача заключалась в том, чтобы использовать turtlesim и заставить черепашку нарисовать логотип “M” университета:
![]() |
![]() |
Эта задача, хотя и звучала просто, была сложнее, чем казалось. Этот проект в конечном итоге познакомил меня с концепцией открытых и закрытых систем. Для полного описания проекта ознакомьтесь с csci473-p1.pdf или вы можете узнать больше об этом проекте и моем решении на странице проекта ROS Move Turtle.
Обучение с подкреплением для следования робота за стеной
Это был второй проект, который нам был назначен, и это был один из самых сложных проектов, над которыми я когда-либо работал в колледже. Описание проекта было следующим:
В этом проекте студенты разработают и реализуют алгоритмы обучения с подкреплением, чтобы научить автономного мобильного робота следовать за стеной и избегать столкновений с препятствиями. Студенты будут использовать симуляцию Gazebo в ROS Melodic для моделирования мобильного робота с омнинаправленным движением по имени Тритон и использовать карту окружающей среды, которая предоставляется вам. Студенты будут использовать лазерный дальномер на роботе для выполнения сенсорных и обучающих задач, где робот управляется с помощью команд управления и скорости. Студенты должны программировать этот проект на C++ или Python в ROS Melodic, работающем на Ubuntu 18.04 LTS (т.е. той же среде разработки, что и в проекте 1). Также студенты должны написать отчет в соответствии с форматом стандартных конференций по робототехнике IEEE, используя LATEX.
Для алгоритма обучения с подкреплением нам было предписано использовать Q-обучение. Мы также использовали Stingray симуляционную среду Gazebo, предоставленную курсом. Stingray состоял из модели Тритона и физической логики. Нам также была предоставлена лабиринт, по которому должен следовать робот. В целом, среда выглядела так:
Я никогда не публиковал свое решение на GitHub или в интернете, потому что оно было не очень хорошим и сильно ошибочным. Кроме того, запуск кода в правильной среде довольно сложен и раздражает. Тем не менее, у меня есть демонстрационное видео, которое я представил классу, показывающее мое решение. Вы можете посмотреть его здесь:
Для полного описания проекта ознакомьтесь с csci473-p2.pdf
Понимание роботом человеческого поведения с использованием представлений на основе скелета
Для третьего проекта описание проекта было следующим:
В этом проекте студенты реализуют несколько представлений на основе скелета (Доставляемое 1) и используют машины опорных векторов (SVM) (Доставляемое 2) для классификации человеческого поведения с использованием общедоступного набора данных о деятельности, собранного с помощью сенсора Kinect V1. Кроме того, студенты должны написать отчет в соответствии с форматом стандартных конференций по робототехнике IEEE, используя LATEX в Доставляемом 3.
Этот проект был сложным, но не таким трудным, как второй проект. Основная цель заключалась в использовании данных сенсора Kinect V1 из MSR Daily Activity 3D Dataset и машин опорных векторов для классификации определенных человеческих действий/поведения. Для полного описания проекта ознакомьтесь с csci473-p3.pdf или вы можете узнать больше об этом проекте и моем решении в блоге Предсказание человеческих действий с использованием LIBSVM.
Заключение CSCI473
CSCI473 - это один из, если не лучший курс, который я проходил во время учебы в бакалавриате в Mines. Все эти проекты многому меня научили и позволили мне иметь классный каталог проектов, на которые я мог бы ссылаться в своем резюме. Это также был первый курс, на котором я почувствовал себя в своей стихии, так как я никогда не был хорош в сдаче экзаменов, но преуспевал в выполнении проектов. Именно на этом курсе я встретил доктора Хао Чжана, который в конечном итоге помог мне получить должность научного ассистента в Лаборатории человекоцентрированной робототехники (HCR) университета.
Летняя сессия по CS (лето 2020)
Летом 2020 года, между завершением CSCI473 и присоединением к HCR Lab, я прошел курс CSCI370 или “Расширенная разработка программного обеспечения” в рамках своей программы бакалавриата по компьютерным наукам в Колорадском университете. CSCI370 - это курс, который заставляет студентов разрабатывать, реализовывать и документировать решения, связанные с программным обеспечением, для компании. Он позволяет студентам применять свои знания к реальным проблемам в области компьютерных наук. Вы можете узнать больше о курсе здесь.
На курсе вы можете решить, над каким проектом/компанией будете работать. Курс предоставил PDF-файлы с подробностями о каждом проекте и компании. В конечном итоге я решил работать над проектом, размещенным компанией Lunar Outpost, под названием “Обнаружение проскальзывания колес в реальном времени и коррекция ошибок для улучшенной навигации на Луне”. Поскольку название длинное, давайте дадим проекту псевдоним “Обнаружение проскальзывания колес”.
Проблема
Lunar Outpost - это стартап, который пытается создать автономные луноходы. На Луне много лунной пыли, известной тем, что вызывает много проскальзывания колес. Это не идеально, потому что проскальзывание колес может привести к тому, что автономные системы потеряют след своего реального местоположения. На Земле это решается с помощью данных GPS для коррекции любого смещения, вызванного проскальзыванием колес. Но проблема с GPS заключается в том, что он работает только при наличии 30+ навигационных спутников, постоянно вращающихся вокруг Земли на орбите и передающих уникальные сигналы, которые позволяют компьютерам вычислять свое местоположение. Но на Луне в настоящее время нет ничего подобного GPS. Учитывая это, необходимо использовать другой метод, помимо GPS, для обнаружения проскальзывания колес. Более подробный отчет о проблеме проекта можно просмотреть здесь.
Команда
Этот проект не был простым, поэтому его нужно было выполнять в команде. Команда состояла из пяти студентов Колорадского университета:
Этот проект не был простым, поэтому его нужно было выполнять в команде. В эту команду входили Мехмет Йылмаз (я), Кейн Брюс, Брейдон О’Каллаган, Лиам Уильямс и Кевин Грант.
Проект требовал от нас знаний в области ROS, C++, Python, Linux, Raspberry Pi и Arduino. Большинство из нас имели опыт работы с одной или несколькими из этих технологий, но я был единственным, кто имел опыт работы с ROS, так как использовал ROS на своем курсе человекоцентрированной робототехники (CSCI473) в семестре весны 2020 года. Из-за этого я с самого начала помогал всем освоить ROS и как разрабатывать для него.
Проблемы
В этом проекте было много вызовов. Но самым большим вызовом, с которым мы столкнулись, было отсутствие доступа к реальному роботу для тестирования. Это было связано с тем, что COVID сделал все удаленным и помешал нам работать в лаборатории/зданиях Лунного аванпоста. Из-за этого нам пришлось использовать симуляции.
Кроме того, мы изучили некоторые академические исследования из Лаборатории навигации WVU, чтобы получить представление о том, как можно решить проблему скольжения колес для случая использования Лунного аванпоста, что для нас, как студентов второго и третьего курсов, оказалось сложнее, чем мы ожидали.
Еще одной проблемой, с которой мы столкнулись, было количество времени, которое у нас было для работы над этим проектом. CSCI370 — это курс на один месяц. Но сама проблема является масштабной, и многие компании и ученые пытались решить/усовершенствовать ее на протяжении десятилетий. Поэтому одного месяца явно недостаточно, чтобы решить эту проблему. Но, несмотря на все эти трудности, мы справились и убедились, что выполнили задачу.
Заключение
После работы над всем исследованием и разработкой мы пришли к выводу, что практически невозможно цифровым образом смоделировать правильную физику Луны, поэтому действительно тестировать этот алгоритм в симуляции не имеет смысла и не даст никаких значимых результатов в обнаружении скольжения колес в космосе и на Луне. Мы пришли к выводу, что создание правильной тестовой среды с использованием чего-то вроде песка и реального оборудования, такого как робот Husky, гораздо важнее для такого рода исследований. Мы обновили код обнаружения скольжения колес, чтобы он работал как узел ROS, и он функционировал правильно и мог легко быть импортирован в реальное оборудование для тестирования. Этот проект позволил мне занять лидерскую позицию, обучить своих сверстников разработке ROS и получить опыт работы с Python, ROS и Gazebo, решая сложную проблему, с которой я никогда не сталкивался ранее. Что наиболее важно, этот опыт еще больше укрепил мою страсть к робототехнике и усилил мое желание заниматься исследованиями в этой области, подготовив почву для того, что должно было произойти дальше в моем пути в робототехнике.
Начало в лаборатории HCR
После завершения CSCI473, моего полевого семестра по компьютерным наукам летом 2020 года и семестра осенью 2020 года, я решил заняться исследованиями в области робототехники. У меня были такие замечательные впечатления как от CSCI473, так и от полевого семестра, что я решил, что хочу заниматься исследованиями в лаборатории HCR. Поскольку я встретил доктора Чжана годом ранее, я решил написать ему электронное письмо и спросить о любых возможностях, которые могут быть в лаборатории в январе 2021 года. Примерно через 2 недели доктор Чжан выразил интерес, представил мне варианты исследований и предложил мне роль в лаборатории. Я начал работать в лаборатории в феврале 2021 года.
Вводное видео
Вот мое вводное видео, которое я записал через несколько месяцев после начала работы в лаборатории HCR. Оно было записано в мае 2021 года и охватывает исследования, на которых я сосредоточусь в лаборатории HCR летом 2021 года:
Мой проект
На протяжении всего времени в лаборатории HCR я в основном сосредоточился на проекте Triton. Проект Triton — это мобильный робот, разработанный Лабораторией человекоцентрированной робототехники в Колорадском университете в Минесоте. Это треугольный робот с омни-колесами, работающий на NVIDIA Jetson Nano.
Triton, в общем, состоял из следующих частей:
- NVIDIA Jetson Nano
- Плата-носитель NVIDIA Seed Studio A205
- Arduino Mega
- 64 ГБ Micro SD карта
- Индивидуально напечатанный на 3D-принтере корпус
- 3 механум-колеса
- 1 AR батарея
- Индивидуальные схемы для оптимизированного распределения энергии и проводки
- Камера Intel Realsense D435
- Несколько светодиодов
Он был спроектирован, построен и изготовлен примерно в 2018-2020 годах как робот для образовательных целей. К моменту моего присоединения Triton был довольно хорошо установлен, и лаборатория рассматривала возможность создания новой версии. Однако главной проблемой Triton было его программное обеспечение. Triton мог двигаться, заряжаться и функционировать в базовом смысле, но не делал ничего умного. У него даже не было возможности выполнять более сложные движения.
![]() |
![]() |
![]() |
![]() |
Чтобы начать решать эту проблему, лаборатория создала зону, где мы могли отслеживать Triton. Для этого они создали область размером 2 метра на 2 метра с 8 камерами Optitrack Flex (инфракрасные) в квадратной форме на высоте около 6-7 футов от пола.
![]() |
![]() |
Помимо создания этой зоны, к каждому Triton были прикреплены три серые шарообразные метки на верхней части их корпуса.
С этой настройкой мы фактически построили собственную маломасштабную GPS-систему, которая позволила нам получить точные координаты в метрах для Triton в нашей области интереса. Используя инфракрасные камеры Optitrack и серые сферы Optitrack в треугольной форме, мы могли точно определить координаты Triton в нашей области. Это позволило нам применить замкнутую систему для повышения точности движения.
Система Optitrack предоставляла данные о положении и ориентации с частотой около 120 Гц с субмиллиметровой точностью при правильной калибровке. Три отражающих маркера каждого Triton образовывали уникальный треугольный узор, который система могла отслеживать как жесткое тело. Координатная система была откалибрована так, чтобы (0,0) находилось в центре области отслеживания, а оси X и Y были выровнены по геометрии комнаты. Но, несмотря на эти точные данные о позиционировании, Triton все еще испытывал трудности с движением.
С этой настройкой одной из основных функций, которую мы хотели предоставить Triton, была возможность перемещаться к конкретной координате. Пользователь или их программное обеспечение могли предоставить координату (x, y) в пределах их области интереса. Затем робот должен был перемещаться к этой координате как можно быстрее, точнее и плавнее. Когда я присоединился, эта функция существовала, но работала не очень хорошо. Вот простая анимация, показывающая, как работала оригинальная логика движения:
Я не записал оригинальное решение в действии, поэтому я создал эту простую анимацию, показывающую вам старую логику движения в действии. Зная это, какие проблемы были с этим методом?
- Он действительно медленный
- Он заставляет робота занимать много места, просто чтобы добраться до конкретной точки. Это затрудняло использование этого решения, когда несколько Triton перемещались вокруг.
Так почему же такое поведение происходило? Проблема заключалась в том, что Triton сначала поворачивался, изменяя свой альфа-угол, пока не указывал на целевую точку в пределах определенной погрешности. Затем он мчался вперед, и после того, как его тета отклонялась от цели на определенное значение, он останавливался и снова начинал поворачиваться, пока альфа не находился в пределах допустимого диапазона для целевой цели. Затем он снова мчался и продолжал делать это, пока не добирался до точки. Кроме того, по мере приближения к целевой точке скорость поворота и спринта значительно замедлялась, чтобы убедиться, что он не перескочит. Это приводило к тому, что Triton имел неестественное движение, тратил много времени на достижение целевой точки и требовал много пространства, чтобы добраться до конкретной целевой точки. Таким образом, с учетом всех этих проблем и учитывая, насколько важна эта функция для разработки проекта Triton, когда я начал работать в лаборатории HCR, моей первой задачей было разработать более эффективные решения, которые позволили бы Triton лучше ориентироваться на целевую точку.
Зная это, я потратил много времени на исследование наилучшего способа решения этой проблемы. Иронично, но я проходил курс под названием Введение в системы управления с обратной связью (EENG307) в Минесоте. В начале этого курса мы узнали о концепции Открытых систем управления и Закрытых систем управления. Зная это, и после некоторых обсуждений с профессором этого курса и моим умным соседом по комнате, стало ясно, что эта цель — довести Triton до целевой точки — является задачей замкнутой системы.
Теперь, после обширного тестирования и исследований, я разработал два различных подхода к контроллерам для Triton:
Метод 1: Контроллер расстояния-тета
Этот подход использовал два отдельных пропорциональных контроллера, работающих одновременно:
- Контроллер расстояния: рассчитывал евклидово расстояние до цели и применял пропорциональный коэффициент для определения скорости вперед/назад
- Контроллер тета: рассчитывал угловую ошибку между текущим направлением робота и желаемым направлением к цели, применяя отдельный пропорциональный коэффициент для угловой скорости
Алгоритм постоянно рассчитывал евклидово расстояние до цели и угловую ошибку между текущим направлением робота и желаемым направлением. Два отдельных пропорциональных коэффициента применялись для генерации линейных и угловых скоростей соответственно.
Это привело к тому, что Triton естественным образом поворачивал к цели, одновременно двигаясь вперед, создавая плавные кривые пути. Ключевым преимуществом было то, что робот всегда держал свою переднюю часть ориентированной на пункт назначения, что было критически важно для приложений на основе камер.
Метод 2: Контроллер координат X-Y
Этот подход рассматривал робота как 2D плоттер, с независимым управлением движением по осям X и Y:
- Контроллер X: Непосредственно управлял движением на восток-запад на основе ошибки по координате X
- Контроллер Y: Непосредственно управлял движением на север-юг на основе ошибки по координате Y
Реализация рассчитывала ошибки по координатам X и Y независимо, применяла отдельные пропорциональные коэффициенты и затем преобразовывала эти глобальные компоненты скорости в локальную систему координат робота с использованием матриц вращения. Это преобразование было необходимо, потому что привод с омни-колесами робота требовал скоростей в своей собственной системе отсчета, а не в глобальных координатах. Этот метод обеспечивал наиболее прямые пути к целям и был значительно быстрее, но направление робота могло дрейфовать, так как не было явного управления ориентацией.
Для метода #1 я подробно описал этот метод в моем блоге Move Turtle (TurtleSim). Я настоятельно рекомендую вам прочитать этот блог, чтобы получить все детали о том, как работают PID контроллеры в общем, а также о том, как работает метод #1. Я разработал метод #1, используя TurtleSim от ROS, а затем перенес этот код на Triton и обновил его с учетом более реальной среды.
Метод #2 использовал совершенно другой, но столь же эффективный подход. Вместо того чтобы думать об ориентации робота и расстоянии до цели, этот метод рассматривает движение как задачу на координатной плоскости. Контроллер непрерывно рассчитывает ошибку в обоих направлениях X и Y отдельно. Например, если роботу нужно переместиться из (0,0) в (2,3), он видит это как необходимость исправить ошибку в 2 метра по X и 3 метра по Y. Два пропорциональных контроллера работали одновременно: один регулировал скорость робота в направлении X на основе ошибки по X, в то время как другой управлял движением в направлении Y на основе ошибки по Y. Это создавало более прямой путь к цели, аналогично тому, как движется головка 3D-принтера, и позволяло осуществлять плавные диагональные движения. Роботу не нужно было явно поворачиваться, чтобы смотреть на свою цель, что делало этот метод особенно эффективным в ограниченных пространствах или когда требуется точное позиционирование.
Оба метода оказались значительно быстрее и надежнее, чем оригинальный подход. Чтобы увидеть эти новые методы в действии, посмотрите плейлист Tritons in Action, который показывает всех Tritons в действии с новыми методами.
То, что раньше занимало 30-45 секунд для простого перемещения от точки к точке, теперь занимало около 8-12 секунд. Более того, Triton теперь мог более эффективно перемещаться в ограниченных пространствах, что стало полезным для наших сценариев с несколькими роботами.
Проблемы разработки и отладки
Реализация этих контроллеров не была простой и включала несколько значительных проблем с отладкой:
Преобразования системы координат: Одним из самых сложных аспектов было правильное выполнение преобразований координат. Система Optitrack предоставляла данные в своей системе координат, у робота была своя локальная система координат, и мне нужно было точно преобразовывать между ними. На ранних этапах реализации роботы двигались в неправильных направлениях, потому что я перепутал расчеты матриц вращения.
Реальное поведение против идеального: Самой большой проблемой было учитывать реальные факторы, которые не появляются в теории управления из учебников. Колеса робота имели разные характеристики трения, моторы не реагировали одинаково, и всегда имелась некоторая задержка в цепочке связи от Optitrack к программному обеспечению управления к Arduino робота. Я потратил недели на настройку пропорциональных коэффициентов и добавление фильтров мертвых зон, чтобы учесть эти физические реалии.
Проблемы с колебаниями и стабильностью: Мои первые реализации страдали от проблем с колебаниями, когда роботы превышали свои цели и качались взад и вперед. Это научило меня важности производных членов в PID контроллерах и необходимости правильной настройки коэффициентов. В конечном итоге я остановился на преимущественно пропорциональном управлении с тщательно настроенными коэффициентами, а не на полном PID, так как внутреннее демпфирование системы было достаточным для большинства приложений.
Взаимодействие нескольких роботов: Когда несколько роботов работали одновременно, я обнаружил неожиданные паттерны вмешательства. Роботы иногда “боролись” за одно и то же пространство или создавали ситуации взаимной блокировки, когда они блокировали друг друга на неопределенный срок. Это привело меня к реализации механизмов координации и алгоритмов избежания столкновений.
Система управления Multi-Triton
Как только я решил проблему движения одного Triton, следующей задачей лаборатории стало заставить несколько Tritons работать вместе одновременно. Это стало одной из моих основных областей внимания и в конечном итоге стало значительным вкладом в проект.
Оригинальная система могла контролировать только один Triton за раз, что сильно ограничивало возможности исследований. Лаборатория хотела смоделировать сценарии, в которых несколько автономных транспортных средств должны были координировать свои движения, как автомобили с автопилотом, общающиеся друг с другом для оптимизации потока движения и создания лучших карт SLAM (одновременная локализация и картографирование).
Чтобы решить эту задачу, я реализовал подход с многопроцессорной обработкой, используя библиотеку multiprocessing Python. Каждый Triton получил свой собственный выделенный процесс, который мог работать независимо, оставаясь при этом координированным центральной системой управления. Это позволило нескольким Tritons двигаться одновременно, не мешая друг другу в циклах управления.
Проектирование архитектуры многороботной системы
Архитектура системы, которую я разработал, состояла из нескольких ключевых компонентов:
Основной контроллер процесса: Это служило центральным координатором, обрабатывающим взаимодействия с пользовательским интерфейсом, планирование маршрутов и высокоуровневую координацию между роботами. Он поддерживал глобальное состояние и распределял команды отдельным процессам роботов.
Индивидуальные процессы роботов: Каждый Triton имел свой собственный выделенный процесс Python, который обрабатывал:
- Расчеты PID управления в реальном времени на частоте ~50 Гц
- Связь с аппаратным обеспечением робота (Arduino/Jetson)
- Выполнение локального пути и избегание препятствий
- Отчет о состоянии обратно в основной контроллер
Общая память для связи: Я использовал multiprocessing.shared_memory и объекты Queue Python для обеспечения эффективной связи между процессами. Это позволяло осуществлять координацию в реальном времени без накладных расходов на сетевую связь.
Механизмы синхронизации: Чтобы предотвратить конфликты, когда нескольким роботам нужно было координироваться (например, избегать столкновений), я реализовал семафоры и блокировки, которые позволяли роботам запрашивать эксклюзивный доступ к определенным областям рабочего пространства.
Задачей было обеспечить, чтобы все роботы могли независимо управлять своими циклами управления, сохраняя при этом глобальную координацию. Каждый процесс робота выполнял свои собственные расчеты PID и отправлял команды моторам непосредственно на аппаратное обеспечение, в то время как основной процесс обрабатывал координацию более высокого уровня, такую как избегание столкновений и планирование маршрутов.
![]() |
![]() |
Система multi-Triton открыла совершенно новые возможности для исследований. Теперь мы могли моделировать:
- Сценарии связи “транспортное средство-транспортное средство”
- Координированное планирование маршрутов с избеганием препятствий
- Поведение рой-роботов
- Многопользовательское SLAM-картографирование
- Управление формацией и поведение следования
Вот как выглядела лабораторная установка с несколькими Tritons, работающими одновременно:
![]() |
![]() |
Я также разработал удобный интерфейс, который позволял исследователям визуально определять пути для каждого Triton. Вы могли буквально нарисовать путь, который вы хотели, чтобы каждый робот следовал, и они выполняли бы эти пути с идеальной координацией. Это было невероятно полезно для настройки сложных экспериментов без необходимости вручную кодировать каждое движение.
Система могла обрабатывать до 5 Tritons одновременно, каждый из которых работал со своими собственными PID контроллерами, координируясь через центральную систему управления. Производительность была впечатляющей, все роботы сохраняли свою индивидуальную точность, работая вместе как команда.
Вот плейлист, показывающий Tritons в действии, от управления одним роботом до координации нескольких роботов: Tritons in Action Playlist
Интеграция датчиков глубины и коррекция координат
Еще одним значительным достижением, над которым я работал, было использование камер глубины Intel RealSense D435, установленных на каждом Triton. Хотя система Optitrack предоставляла нам невероятно точные данные о позиционировании, я хотел исследовать, как роботы могут использовать свои встроенные датчики для улучшения своей пространственной осведомленности и коррекции ошибок координат.
Идея заключалась в том, что Tritons могли использовать свои датчики глубины для обнаружения других Tritons в их окрестности и перекрестной проверки своих позиций. Это служило нескольким целям:
-
Коррекция ошибок: Если у системы Optitrack была какая-либо дрейф калибровки или временная окклюзия, роботы могли использовать визуальное подтверждение позиций друг друга для поддержания точных систем координат.
-
Улучшенный SLAM: Имея несколько роботов с датчиками глубины, работающих вместе, мы могли создавать гораздо более богатые карты окружающей среды с избыточными данными.
-
Избежание столкновений: Датчики глубины в реальном времени позволили бы роботам обнаруживать и избегать друг друга, даже если центральная система управления имела бы задержки в связи.
Я начал экспериментировать с алгоритмами, которые позволили бы Тритонам:
- Обнаруживать других Тритонов, используя их характерную треугольную форму и отражающие сферические маркеры
- Вычислять относительные позиции и ориентации, используя данные глубины
- Сравнивать эти измерения с данными Optitrack для выявления несоответствий
- Потенциально корректировать свою систему координат в реальном времени для поддержания точности
Эксперименты с компьютерным зрением
Я потратил значительное время на эксперименты с конвейером компьютерного зрения, который работал в несколько этапов:
![]() |
![]() |
![]() |
![]() |
![]() |
Обработка данных глубины: Intel RealSense D435 предоставил как RGB, так и потоки данных глубины. Я в основном работал с данными глубины, которые поступали в виде массива расстояний 640x480 с частотой 30 Гц. Первой задачей было фильтровать эти шумные данные глубины, чтобы извлечь значимую геометрическую информацию.
Попытки обнаружения объектов: Я экспериментировал с многоступенчатыми алгоритмами обнаружения. У меня был некоторый успех в сегментации изображения глубины для идентификации объектов на уровне пола (фильтруя стены, потолок и т. д.) и поиска объектов с правильными размерными характеристиками, примерно 0,3x0,3 метра. Я пробовал использовать обнаружение краев и геометрический анализ для идентификации характерного профиля Тритона, с переменным успехом.
Эксперименты по распознаванию маркеров: Три отражающие сферы на каждом Тритоне казались наиболее многообещающей особенностью для обнаружения. Я экспериментировал с алгоритмами обнаружения пятен, чтобы идентифицировать характерный треугольный узор из трех ярких точек на изображении глубины. У меня были многообещающие результаты в контролируемых условиях освещения, хотя это не было постоянно надежным.
Исследование слияния координат: Я исследовал подходы к слиянию оценок положения на основе зрения с данными Optitrack, включая базовые реализации фильтра Калмана. Концепция заключалась в том, чтобы придавать больше веса данным Optitrack, когда они доступны, но возвращаться к зрению, когда это необходимо, хотя я не успел полностью реализовать это до окончания моего времени в лаборатории.
Проблемы с производительностью: Запуск всей этой обработки в реальном времени вместе с контрольными петлями робота оказался сложной задачей. Я экспериментировал с подходами к оптимизации, чтобы запускать алгоритмы на частоте около 10-15 Гц, не перегружая вычислительные возможности Jetson Nano.
К сожалению, мне пришлось покинуть лабораторию, прежде чем я смог полностью завершить эту работу по компьютерному зрению. Хотя у меня были некоторые многообещающие ранние результаты и я многому научился о обработке данных с датчиков глубины, я не смог довести систему до полностью надежного состояния. Это оставалось интересным направлением исследований, на основе которого другие могли бы потенциально строить.
Вот видео, на котором я тестирую алгоритмы компьютерного зрения:
Вот как выглядел вид с датчика глубины во время моих экспериментов:
Хотя я не завершил работу по интеграции датчика глубины, концепция показала многообещающие перспективы для приложений, таких как моделирование сценариев автономных автомобилей, где транспортные средства должны быть осведомлены друг о друге, не полагаясь исключительно на внешнюю инфраструктуру. Направление исследований, которое я начал исследовать, могло бы потенциально способствовать будущей работе в лаборатории.
Документация и сохранение знаний
Одним из моих самых важных вкладов в лабораторию HCR, и, возможно, тем, чем я горжусь больше всего, было организация и сохранение всей проектной документации. Когда я присоединился к лаборатории, знания о проекте Тритон были разбросаны по нескольким платформам и форматам. Критическая информация была разбросана по:
- Разным аккаунтам Google Drive, принадлежащим различным студентам, которые уже закончили
- Старым электронным письмам, затерянным в почтовых ящиках
- Случайным папкам Dropbox
- Нескольким репозиториям GitHub
- Репозиториям GitLab с непоследовательной организацией
- Ручным записям, которые могли интерпретировать только определенные люди
Эта фрагментированная документация была огромной проблемой. Новые студенты тратили недели, просто пытаясь разобраться, как начать, и ценная информация постоянно терялась, когда люди заканчивали учебу или покидали лабораторию.
Я взял на себя задачу систематически решить эту проблему. Я провел бесчисленные часы, отслеживая каждую часть документации, кода, видео и заметок, связанных с проектом Тритон. Затем я организовал все это в централизованный репозиторий GitLab с четкой, логичной структурой.
![]() |
![]() |
Централизованная документация включала:
- Руководства по сборке: Пошаговые инструкции по сборке Тритонов с нуля
- Настройка программного обеспечения: Полные руководства по настройке среды разработки
- Документация кода: Хорошо прокомментированный код с четкими объяснениями
- Технические характеристики оборудования: Подробные списки деталей, схемы подключения и проекты печатных плат
- Руководства по устранению неполадок: Общие проблемы и их решения
- Видеоуроки: Я создал и загрузил обучающие видео на YouTube, включая подробные руководства по калибровке Optitrack:
Я также установил стандарты документации, чтобы гарантировать, что будущие вклады будут организованы и доступны. Структура репозитория, которую я создал, стала основой для всей последующей работы в лаборатории.
Помимо простой организации существующей документации, я создал несколько оригинальных руководств и учебных пособий, которые заполнили критические пробелы в базе знаний. К ним относились подробные инструкции по настройке для новых членов лаборатории, комплексные руководства по устранению неполадок и видеопроходы по сложным процедурам.
Влияние было немедленным и долговременным. Новые студенты могли быстро освоиться за дни, а не за недели. Документационный репозиторий, который я создал, до сих пор используется лабораторией, годы спустя после моего ухода. Он стал единственным источником правды для проекта Тритон и сэкономил бесчисленные часы/дни для будущих исследователей.
Наставничество и передача знаний
Одним из самых приятных аспектов моего времени в лаборатории HCR была возможность наставлять других и делиться знаниями, которые я приобрел. По мере того как моя работа продвигалась и я становился более опытным в системах Тритона, я взял на себя все большую ответственность за обучение новых членов команды.
Наставничество преемников лаборатории
Когда я готовился покинуть лабораторию, чтобы сосредоточиться на завершении своей степени и работе в eBay, я убедился, что тщательно обучил двух человек, которые возьмут на себя проект Тритон после моего ухода. Дело было не только в том, чтобы показать им, как все работает, но и в том, чтобы убедиться, что они действительно понимают основные принципы, чтобы они могли продолжать инновации.
Я провел недели, работая с ними в тесном сотрудничестве, проходя через:
- Математические основы систем управления PID
- Архитектуру многопроцессорной координации нескольких роботов
- Интеграцию датчиков глубины и алгоритмы компьютерного зрения
- Систему документации и как ее поддерживать
- Техники отладки и общие режимы отказа
Передача знаний была невероятно тщательной. Мы вместе проходили реальные сессии отладки, я заставлял их модифицировать и расширять существующий код, и я убедился, что они могут независимо настраивать новые Тритоны с нуля.
Программа наставничества для старшеклассников
Возможно, еще более полезным был мой опыт наставничества старшеклассника через программу по связям с общественностью лаборатории. Это была отличная возможность познакомить кого-то с робототехникой, информатикой и исследованиями на формирующем этапе их образования.
Я разработал комплексную учебную программу, которая охватывала:
Основы информатики:
- Программные концепции с использованием Python в качестве основного языка
- Введение в объектно-ориентированное программирование
- Понимание алгоритмов и структур данных
Концепции робототехники:
- Как работают датчики и как с ними взаимодействовать
- Управление актуаторами и моторными системами
- Основы автономных систем и обратного управления
ROS (Операционная система роботов):
- Понимание системы обмена сообщениями publish/subscribe
- Создание узлов и сервисов
- Работа с файлами запуска и серверами параметров
Практическая проектная работа:
- Мы сотрудничали в создании ROS-сервиса, который управлял светодиодной системой на голове Тритона
- Она научилась писать чистый, документированный код, который интегрировался с нашими существующими системами
- Сервис управления светодиодами, который она создала, стал постоянной частью кодовой базы Тритона
Что сделало это наставничество особенно особенным, так это наблюдение за ее прогрессом от практически нулевых знаний о программировании до внесения значимого кода в активный исследовательский проект. Она прошла путь от вопросов “Что такое переменная?” до независимой отладки проблем связи ROS и написания собственных реализаций сервисов.
Система управления светодиодами, которую она разработала, позволила исследователям легко изменять цвета и узоры светодиодов на голове Тритона с помощью простых команд ROS. Это может показаться простым, но требовало понимания архитектуры ROS, взаимодействия с оборудованием и правильных шаблонов проектирования программного обеспечения. Ее вклад до сих пор используется в лаборатории.
Менторство было для меня таким же образовательным, как и для нее. Это заставило меня разбить сложные концепции на усваиваемые части и действительно задуматься о фундаментальных аспектах того, что мы делали. Обучение кого-то другого сделало меня лучшим инженером и исследователем.
Сотрудничество с исследованием PhD
Одним из самых профессионально вознаграждающих аспектов моего времени в лаборатории было тесное сотрудничество с Пэном, аспирантом, чье исследование было сосредоточено на алгоритмах для автономных автомобилей. Программные улучшения, которые я внес в систему Тритон, помогли поддержать его докторское исследование.
Исследование Пэна требовало точной и надежной координации нескольких роботов для моделирования сценариев автономных автомобилей. До моих улучшений в управлении движением и системах многороботной координации эти эксперименты было гораздо сложнее проводить. Роботы были медленнее, менее точными и не могли работать вместе так эффективно.
Мои вклады помогли исследованию Пэна в нескольких областях:
Исследования управления перекрестками: С улучшенными ПИД-контроллерами и многороботной координацией Пэн смог смоделировать сценарии перекрестков, где несколько “транспортных средств” (Тритонов) должны были координировать свои движения. Улучшенное время и позиционирование помогли сделать эти исследования более осуществимыми.
Связь между транспортными средствами: Мультипроцессорная структура, которую я разработал, позволила Пэну реализовать и протестировать протоколы связи между смоделированными транспортными средствами. Каждый Тритон мог принимать решения, одновременно координируясь с другими, подобно тому, как автономные автомобили могут работать.
Исследования SLAM и картографирования: Работа по интеграции датчиков глубины предоставила Пэну дополнительные данные для его исследований по одновременному определению местоположения и картографированию. Наличие нескольких роботов с координированными возможностями сенсоров позволило проводить более комплексные эксперименты по картографированию.
Что сделало наше сотрудничество особенно ценным, так это то, что это было не просто мое содействие его исследованию, а искреннее партнерство. Понимание Пэном теоретических аспектов автономных транспортных средств помогло информировать мои практические реализации. Его отзывы и требования подтолкнули меня сделать системы более надежными и способными.
Мы провели много часов в лаборатории вместе, отлаживая сценарии, обсуждая различные стратегии управления и исследуя, что платформа Тритон может достичь. Пэн стал как коллегой, так и другом, и работа с ним научила меня многому о том, как на самом деле работает академическое исследование.
Системы, которые я построил, стали полезной частью диссертационной работы Пэна. Видеть, как мои практические инженерные вклады поддерживают исследования в области технологий автономных транспортных средств, было действительно удовлетворительно. Это укрепило мой интерес к тому, как надежная инженерия и исследования могут работать вместе для создания полезных результатов.
Даже после того, как я покинул лабораторию, Пэн и я оставались на связи. Знание того, что моя работа продолжала способствовать важным исследованиям даже после моего ухода, было крайне вознаграждающим.
Перспектива: Эра разработки до LLM
Стоит отметить, что вся эта работа была выполнена в эпоху разработки программного обеспечения до LLM. Все это происходило с 2020 по 2021 год (в основном в 2021), до появления ChatGPT, Claude, Perplexity или инструментов разработки на основе ИИ, таких как Cursor IDE.
Каждая строка кода была написана с нуля, каждый алгоритм исследовался через академические статьи и учебники, а каждая сессия отладки включала традиционные методы, такие как операторы вывода, отладчики и методическое тестирование. Когда я сталкивался с проблемой преобразования координат или настройки ПИД, я не мог просто попросить ИИ-ассистента объяснить концепцию или помочь отладить проблему.
Это сделало процесс разработки значительно более сложным, но также более образовательным. Мне пришлось:
Исследовать все вручную: Понимание теории ПИД-контроля означало чтение учебников и академических статей. Разобраться с преобразованиями координат требовало ручного решения математических задач. Каждая концепция должна была быть полностью понята перед реализацией.
Отлаживать без помощи ИИ: Когда роботы двигались в неожиданных направлениях или колебались вокруг целей, мне приходилось методично прослеживать логику, добавлять отладочные выводы и тестировать гипотезы одну за другой. Не было ИИ, чтобы предложить потенциальные проблемы или помочь интерпретировать шаблоны ошибок.
Учиться с нуля: Без возможности быстро спросить “как реализовать многопроцессорность в Python для робототехники?” мне пришлось глубоко понять основные концепции. Это заставило меня построить прочную основу в параллельном программировании, системах управления и компьютерном зрении.
Документация была критически важна: Поскольку я не мог полагаться на ИИ, чтобы объяснить код позже, мне пришлось писать крайне четкую документацию и комментарии. Эта дисциплина оказалась бесценной при передаче знаний другим.
Оглядываясь назад, хотя современные инструменты ИИ ускорили бы многие аспекты разработки, работа без них заставила меня развить более глубокие навыки решения проблем и более тщательное понимание основных систем. Удивительно думать, насколько иначе этот проект мог бы выглядеть с доступными сегодня инструментами разработки.
Трудное решение уйти
Насколько бы мне ни нравилась работа в лаборатории HCR, к концу 2021 года я столкнулся с трудным решением, с которым сталкиваются многие студенты: балансировка нескольких возможностей и обязанностей. Я одновременно работал полный рабочий день как инженер-программист в eBay, завершал свою степень в области компьютерных наук в Mines и вносил вклад в исследования в лаборатории HCR.
Возможность в eBay была значительной; это была моя первая крупная роль в программной инженерии, она предоставила бесценный опыт в индустрии и обеспечила мне стабильный доход. Однако попытка поддерживать работу на полный рабочий день, завершать свою степень и вносить значимый вклад в исследования была просто неустойчива. Что-то должно было измениться.
Когда я обратился к доктору Чжан с просьбой о возможном снижении нагрузки, чтобы сосредоточиться больше на работе в лаборатории, он настоятельно не рекомендовал этого. Его доводы были разумными: завершение моей степени должно быть приоритетом, а опыт работы в индустрии в eBay будет ценным для моего карьерного развития. Он считал, что отказ от занятий, чтобы сосредоточиться на исследованиях, хотя и заманчиво, может не быть лучшим долгосрочным решением.
Таким образом, в сентябре 2021 года, после примерно 8 месяцев интенсивной работы в лаборатории, я принял трудное решение отступить от своей роли научного ассистента, чтобы сосредоточиться на завершении своей степени и работе в eBay. Это было одно из самых трудных профессиональных решений, которые мне пришлось принять на тот момент.
Даже после официального ухода из лаборатории я продолжал оказывать поддержку, когда кто-то нуждался в помощи с системами, которые я построил. Я обновлял документацию по мере необходимости, отвечал на вопросы о отладке и помогал удаленно решать проблемы. Связи, которые я установил, и инвестиции, которые я сделал в успех проекта, не исчезли просто потому, что я больше не был официальной частью команды.
Размышления и оглядываясь назад
Теперь, в 2025 году, через четыре года, я нахожусь в раздумьях о том времени с комплексными эмоциями. Мой карьерный путь привел меня глубоко в веб-разработку и инженерное дело в области ИИ/МЛ, области, которые были невероятно вознаграждающими и предоставили огромные возможности для роста и влияния.
Тем не менее, есть часть меня, которая задается вопросом “что если”. Робототехника была, и честно говоря, все еще является моей истинной страстью. Есть что-то в работе с физическими системами, видеть, как ваш код переводится в реальные движения и поведение, что веб-разработка и даже работа с ИИ не могут в полной мере воспроизвести.
Иногда я задумываюсь, что могло бы произойти, если бы я выбрал другой путь. Что если бы я нашел способ остаться в исследовании робототехники? Что если бы я поступил в аспирантуру сразу после окончания бакалавриата? Что если бы я решил отдать приоритет работе в лаборатории над опытом в индустрии?
Но я также признаю, что у каждого пути есть свои компромиссы. Навыки, которые я развил в веб-разработке и ИИ, были невероятно ценными. Опыт работы в индустрии научил меня о программной инженерии в масштабе, дизайне пользовательского опыта и практических проблемах создания продуктов, которые используют миллионы людей. Эти опыты сделали меня лучшим инженером в целом.
Работа, которую я выполнил в лаборатории HCR, продолжает влиять на то, как я подхожу к проблемам сегодня. Систематическое мышление, необходимое для систем управления ПИД, проявляется в том, как я проектирую обратные связи в программных системах. Навыки документации и сохранения знаний, которые я развил, были бесценными в каждой роли с тех пор. Опыт наставничества и обучения сформировал то, как я работаю с младшими разработчиками и вношу вклад в обмен знаниями в команде.
Самое главное, этот опыт научил меня тому, что я процветаю, работая над сложными техническими проблемами, которые имеют реальное влияние. Будь то оптимизация алгоритмов движения роботов или создание ИИ-систем, которые помогают пользователям достигать своих целей, удовлетворение приходит от решения сложных проблем, которые имеют значение.
Долговременное влияние
Оглядываясь на опыт в лаборатории HCR, я поражен тем, сколько я достиг за относительно короткое время. Системы, которые я построил, кардинально изменили работу платформы Тритон, и многие из этих улучшений все еще используются сегодня. Документационный репозиторий, который я создал, стал базой знаний для всего проекта. Отношения наставничества, которые я сформировал, оказали долговременное влияние на людей, с которыми я работал.
Но, возможно, самое значительное, этот опыт показал мне, на что я способен, работая над проблемами, которые меня действительно увлекают. За эти восемь месяцев я:
- Улучшена система управления движением робота, которая ограничивала платформу
- Построена система координации нескольких роботов с нуля
- Интегрированы возможности компьютерного зрения и слияния датчиков
- Создана комплексная документация и система управления знаниями
- Наставлял несколько человек и помогал с передачей знаний
- Поддерживал исследования на уровне PhD в области автономных транспортных средств
Однако это было не только о технических достижениях, хотя они были для меня значимыми. Дело было в том, что с настойчивостью и системным мышлением можно внести полезный вклад, даже будучи студентом бакалавриата.
Будущее и робототехника
Хотя моя карьера привела меня в другие направления, моя страсть к робототехнике не угасла. Я по-прежнему слежу за развитием в этой области, мне интересно, что происходит в области обучения роботов и автономных систем, и время от времени я работаю над личными проектами в области робототехники в свободное время.
Кто знает, что принесет будущее? Навыки, которые я развиваю в области ИИ и машинного обучения, становятся все более актуальными для робототехники. Опыт, который я приобрел в индустрии, научил меня, как строить надежные и масштабируемые системы. Возможно, есть будущее, где эти разные направления моего опыта соединятся неожиданными способами.
Пока что я благодарен за время, проведенное в лаборатории HCR, и за те опыты, которые она мне предоставила. Это был формирующий период, который сформировал как мои технические навыки, так и понимание того, какой вид работы я считаю наиболее удовлетворительным. Хотя иногда я скучаю по этому, я знаю, что уроки, которые я усвоил, и подходы, которые я разработал, продолжают влиять на все, что я делаю.
Роботы Тритон все еще там, все еще служат исследователям, все еще позволяют проводить важную работу. И это довольно замечательно.

















