Mobot#

Статья: Cosku Acay, Edwin Cho, Kenneth Li и Nishant Pol. PDF.

Описание проекта#

На соревновании Mobot Университета Карнеги-Меллона роботы должны пройти через серию из 14 ворот, расположенных вдоль изогнутой белой линии длиной 255 футов на уличном тротуаре. Трасса включает два крутых пандуса и зону точки принятия решения, где робот должен выбрать правильный маршрут, чтобы пройти 14 ворот в последовательном порядке. Поскольку линия находится на улице и подвержена погоде Питтсбурга, робот должен функционировать в различных условиях. В этом году в день соревнования было дождливо и ветрено. Больше информации можно найти на http://www.cs.cmu.edu/mobot/mobot.html

Mobot Mobot

Mobot (full size)Mobot (full size)

Решение с CMUcam4#

Мы решили подойти к задаче следования по линии с использованием CMUcam4, потому что она требовала минимального оборудования и имела интерфейс, хорошо подходящий для отслеживания линии.

Mobot hardware Mobot hardware (full size)

CMUcam4 захватывает изображение линии со скоростью 30 кадров в секунду и подаёт изображение отслеживания цвета на Arduino Mega через одну из трёх последовательных линий. Затем Arduino Mega обрабатывает это изображение (см. описание программного обеспечения ниже) и передаёт команды скорости и поворота двигателей на ПИД-контроллер через другую последовательную линию. ПИД-контроллер, в свою очередь, предоставляет Arduino Mega показания энкодеров для правого и левого колёс, что позволяет нам отслеживать наше положение и курс относительно ворот 0.

ПИД-контроллер (MD-25) производится компанией Robot-Electronics в Великобритании. Он управляет двумя редукторными коллекторными двигателями постоянного тока с магнитными энкодерами на валу двигателя. ЖК-экран предназначен для отладки. У нас было две шины питания: 12 В для двигателей и 5 В для логики, с общей землёй, обе питаются от одной перезаряжаемой батареи 12 В.

Изначально мы планировали сделать прототип из деревянной основы, чтобы быстро перейти к фазе программирования, а затем работать над более быстрой и надёжной основой, такой как радиоуправляемая машина. Однако мы обнаружили, что прототип был очень надёжным и удобным в работе, поэтому мы оставили его для окончательной конструкции. Гидроизоляция корпуса состояла из слоя целлофановой плёнки под слоем упаковочной ленты. Однако дождь просачивался через упаковочную ленту, но, к счастью, не через целлофановую плёнку. Камера была накрыта квадратом пластика из пакета Ziploc, поскольку мы обнаружили, что этот «фильтр» улучшал способность камеры игнорировать небольшие участки линии, которые для камеры выглядели как фоновый бетон.

Описание алгоритма#

Общие сведения#

Мы используем CMUcam4 в режиме отслеживания цвета с включённым режимом YUV, что даёт нам бинарное представление изображения линии. Программное обеспечение камеры отфильтровывает всё, что не является белым (т. е. фон), и помещает «включённый» пиксель там, где есть линия (где она белая). Мы используем режим YUV, чтобы отслеживание цвета было нечувствительно к интенсивности света, чтобы наш робот мог функционировать в самых разных условиях, включая помещения и улицу.

Следование по линии#

CMUcam4 предоставляет нашему чипу Arduino бинарное изображение 80 на 60. Мы выбираем 10 равноотстоящих строк пикселей из изображения и вычисляем центроид «включённых» пикселей (см. здесь: https://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points). Затем мы предполагаем, что линия лежит на центроиде. Делая это на 10 разных строках изображения, мы получаем хорошее приближение линии, соединяя точки. Затем мы можем использовать эти данные, находя, насколько далеко каждая точка на линии находится от вертикальной линии, лежащей в центре изображения, чтобы получить значение, представляющее, насколько изогнута линия. Это можно рассматривать как нечто вроде нахождения площади между касательной линией и кривой и использования этой площади для определения того, насколько нам нужно повернуть. Знак определяет, будет ли поворот влево или вправо, а величина определяет, насколько нам нужно повернуть, чтобы следовать по линии. Как и следовало ожидать, если мы измерили нулевую площадь, то линия находится прямо перед роботом и является прямой линией. Если величина площади велика, то роботу нужно повернуть, чтобы попытаться минимизировать величину этой площади.

Точки принятия решений#

Чтобы определить, находится ли робот в точке принятия решения, мы берём данные, которые камера собирает при следовании по линии, и проверяем, сколько усреднённых центральных точек появляется в чёрном пространстве. Это работает на основе предположения, что усреднённая точка между двумя линиями не должна находиться ни на одной из линий, если только линии не являются одной и той же линией. Если робот обнаруживает несколько усреднённых точек в чёрном пространстве, он может заключить, что здесь должно быть две линии. Затем он выбирает соответствующий поворот и смещает своё поворачивание в этом направлении, пока не увидит только одну линию.

Пожалуйста, перейдите на https://github.com/cacay/Mobot, чтобы увидеть упрощённую версию нашего кода, или сюда для локальной копии.