Мы продолжаем разговор о том, как самостоятельно сделать автономный летающий аппарат. В прошлый раз речь шла об элементной базе, механике и управлении, также мы оснастили свое устройство зайчатками разума на основе библиотеки OpenCV. Время двигаться дальше — нам нужно научить наш гаджет более тонким и замороченным вещам, другими словами — повысить его интеллектуальность.
Во второй статье цикла наш коллега из Intel Paul Guermonprez предлагает сменить платформу и посмотреть, чего может добиться дрон на основе компьютера Intel Edison и главное — как это сделать. Ну а в самом конце поста предложение для тех, кто загорелся идеей воплотить все сказанное на практике. Уверяем вас, при определенных условиях получить бесплатно от Intel аппаратную платформу для экспериментов вполне реально!
Карты и измерения
Гражданские дроны достигают неплохих результатов в записи видео высокой четкости и в стабилизации полета. Можно даже планировать на планшете маршруты автоматических полетов. Но по-прежнему существует серьезная проблема: как предотвратить столкновение небольших дронов, находящихся в полете, с людьми и со зданиями? Крупные дроны оборудованы радарами и приемопередатчиками. Они летают в контролируемых зонах, вдали от препятствий. Ими дистанционно управляют пилоты с помощью камер. Но мелкие гражданские дроны должны находиться рядом с землей, где много препятствий. А пилоты не всегда могут получить видеоизображение или могут отвлечься от управления полетом. Поэтому необходимо разработать системы предотвращения столкновений.
- Можно использовать однолучевой сонар. Простые дроны часто оборудованы вертикальным сонаром, чтобы поддерживать стабильную высоту полета на небольшом расстоянии от земли. Данные сонара крайне просты в интерпретации: вы получаете расстояние в миллиметрах от датчика до препятствия. Схожие системы существуют и в больших самолетах, но направлены горизонтально: они служат для обнаружения препятствий, находящихся впереди. Но одной лишь этой информации недостаточно для полета. Недостаточно знать, есть ли какое-либо препятствие прямо впереди или нет. Это все равно что вытянуть перед собой руку в темноте.
- Можно использовать усовершенствованный датчик. Луч сонара дает информацию об одном расстоянии, как 1 пиксель. При использовании радара горизонтального обзора вы получаете полную информацию: 1 расстояние со всех направлений. Развитием одномерного датчика является двухмерный датчик. В этом семействе датчиков вы, возможно, знаете Microsoft Kinect. В Intel есть Intel® RealSense. От такого датчика вы получаете двухмерную матрицу расстояний. Каждый пиксель является расстоянием. Выглядит это как черно-белый точечный рисунок, где черные пиксели — близкорасположенные объекты, а белые точки — объекты, расположенные далеко. Поэтому работать с такими данными очень легко: если в определенном направлении вы видите группу темных пикселей, значит, там объект. Дальность действия таких систем ограничена: датчики размером с веб-камеру обладают дальностью в 2–3 метра, более крупные датчики — до 5 метров. Поэтому такие датчики могут быть полезны на дронах для обнаружения препятствий на небольшом расстоянии (и при движении с небольшой скоростью), но они не позволят обнаружить препятствия на расстоянии 100 м. Образцы таких дронов были показаны на выставке CES: .
Итак, однолучевой сонар идеально подходит для измерения расстояния до земли на малой высоте. Такие датчики, как RealSense, хороши для малой дальности. Но что, если нужно видеть и анализировать объемные объекты, находящиеся впереди? Нужно компьютерное зрение и искусственный интеллект!
Для обнаружения объемных объектов можно либо получать объемную картинку, используя два изображения с двух расположенных рядом веб-камер (стереоскопическое зрение), либо использовать последовательные изображения, снятые при движении.
Наш проект автономного дрона
В нашем проекте мы используем камеру Intel-Creative Senz3D. Это устройство включает двухмерный датчик расстояния (с разрешением 320 x 240), обычную веб-камеру, два микрофона и акселерометры. Мы используем датчик расстояния для обнаружения предметов на малой дальности и веб-камеру — для большой дальности.
В этой статье мы рассматриваем главным образом компьютерное зрение большой дальности, а не двухмерную информацию о глубине малой дальности. Поэтому такой же код можно запустить с дешевой пятидолларовой веб-камерой с Linux вместо мощной многоцелевой Senz3D. Но если нужны и компьютерное зрение, и данные о глубине, то камера Senz3D просто идеальна.
В качестве встроенной платформы дрона мы выбрали Intel Edison. В предыдущем проекте мы использовали в качестве встроенной вычислительной платформы полнофункциональный смартфон с Android, но Edison компактней и дешевле.
Edison — это не столько процессор, сколько полнофункциональный компьютер с Linux: двухъядерный процессор Intel Atom, оперативная память, WiFi-модуль, Bluetooth и много чего еще. Нужно только еще подобрать к нему плату расширения, опираясь на требования к вводу-выводу, и подключить ее. Нам в данном случае нужно подключить интерфейс USB-камеры Senz3D, поэтому мы используем большую плату расширения. Но существуют крошечные платы только с необходимыми вам компонентами, и вы можете без труда создать нужную плату самостоятельно. Это ведь всего лишь плата расширения, а не системная плата.
Установка
ОС. Мы распаковали Edison, обновили микропрограмму и сохранили ОС Yocto Linux. Доступны и другие разновидности Linux со множеством уже скомпилированных пакетов, но нам нужно установить простое программное обеспечение с как можно меньшим числом зависимостей, поэтому Yocto нас вполне устроит.
Программное обеспечение. Мы настраиваем WiFi и получаем доступ к плате через ssh. Редактировать файлы исходного кода и компилировать их мы будем прямо на плате через ssh. Также можно скомпилировать на ПК с Linux и передать двоичные файлы. Если вы компилируете код для 32-разрядной архитектуры i686, он будет работать на платформе Edison. Достаточно лишь установить цепочку инструментов gcc и ваш любимый редактор исходного кода.
Камера. Первое затруднение заключается в использовании камеры PerC с Linux. Эта камера была разработана для использования с ОС Windows. К счастью, компания, которая выпустила сам датчик, предоставляет драйвер для Linux: SoftKinetic DepthSense 325.
Это бинарный драйвер, но доступна версия, скомпилированная для процессоров Intel. Используя Intel Edison, можно скомпилировать на месте с помощью gcc или Intel Compiler, но также можно получить двоичные файлы, скомпилированные для Intel, и развернуть их без изменений. В таких ситуациях важным преимуществом является совместимость с Intel. После решения нескольких проблем с зависимостями и компоновкой наш драйвер готов и запущен. Теперь мы можем получать изображение с камеры.
Данные датчика. Данные о глубине очень просты, их легко получить от датчика и легко анализировать. Это матрица информации о глубине, ее разрешение — 320 x 240. Глубина кодируется как оттенки серого. Черные пиксели — близко, белые — далеко. Видеокомпонентом датчика является обычная веб-камера. С точки зрения разработчика, датчик дает нам 2 веб-камеры: одна — черно-белая, она возвращает данные о глубине, другая — цветная, дает обычное видеоизображение.
Мы будем использовать видеоизображение для обнаружения препятствий на расстоянии. Нужен только свет, а расстояние не ограничивается. Информация о глубине будет использоваться для обнаружения препятствий на очень близком расстоянии от дронов, не более 2–3 м.
Уведомление о безопасности. По фотографиям видно, что мы работаем в лаборатории и моделируем полет дрона. Предлагаемый алгоритм еще весьма далек от готовности, поэтому не следует запускать дрон в полет, особенно когда рядом люди. Прежде всего, в некоторых странах это совершенно справедливо запрещено. Но еще важнее, что это попросту опасно! Очень многие снятые дронами видеоролики, которые вы видите в Интернете (снятые как в помещениях, так и на улице), на самом деле очень опасны. Мы тоже отправляем дроны в полет на улице, но в совершенно других условиях, чтобы соблюдать все требования законодательства Франции и избегать происшествий.
Код
Итак, у нас два датчика. Один возвращает данные о глубине. Для обработки этих данных вам не нужна наша помощь: черное — близко, белое — далеко. Датчик очень точный (погрешность порядка 1–3 мм) и работает с крайне низкими задержками. Как мы уже говорили выше, это все прекрасно, но дальность маловата.
Второй датчик — обычная веб-камера. И здесь у нас новое затруднение. Как получить объемную информацию с веб-камеры? В нашем случае дрон летит по относительно прямой траектории. Поэтому можно анализировать два последовательных изображения, чтобы обнаруживать различия между ними.
Мы получаем все важные точки на каждом изображении и пытаемся соотнести разницу между положениями этих точек, чтобы получить векторы. На фото результат, когда дрон находится на кресле и медленно движется по лаборатории.
Маленькие векторы — зеленые, длинные векторы — красные. Это означает, что если между двумя последовательными снимками положение какой-либо точки изменяется быстро, то она красная, а если медленно, то она зеленая. Понятно, что ошибки еще остались, но результат уже вполне приемлем.
Это как в фильме «Звездный путь». Помните, как там «растягивается» звездное небо, когда корабль движется быстрее скорости света? Звезды, находящиеся близко, превращаются в длинные белые векторы. Звезды, находящиеся дальше, образуют короткие векторы.
Затем мы фильтруем векторы. Если векторы (любые: и большие, и малые) находятся сбоку, риска столкновения нет. На тестовом фото мы обнаруживаем два черных чемодана сбоку, но летим прямо между массами. Риска нет.
Если же вектор прямо перед вами, это означает, что возможно столкновение. Короткий вектор означает, что у вас еще есть время. Длинный вектор значит, что времени уже нет.
Пример. На предыдущем фото чемоданы были близко, но сбоку, что безопасно. Объекты на заднем планы были впереди, но далеко, тоже безопасно. На втором снимке объекты уже прямо перед нами, с большими векторами: это уже опасно.
Скачать материалы проекта можно отсюда.
Результаты
На описанном выше наборе оборудования мы продемонстрировали 4 тезиса.
- Платформа Intel Edison обладает достаточной мощностью для обработки данных со сложных двухмерных датчиков и веб-камер с интерфейсом USB. Можно даже реализовать поддержку компьютерного зрения на самой плате, и с ней удобно работать, поскольку это полноценный компьютер с Linux. Да, можно добиться более высокой производительности на ватт, если использовать выделенный процессор изображений, но разработка простейшего программного обеспечения для него займет несколько недель, а то и месяцев. Создание прототипов с использованием Intel Edison очень просто.
- Анализ данных с одной веб-камеры обеспечивает обнаружение объемных объектов на базовом уровне, с частотой 10–20 раз в секунду на платформе Intel Edison без оптимизации. Этого достаточно для обнаружения объемных объектов на большом расстоянии и для соответствующей корректировки траектории.
- Такое же сочетание оборудования и программного обеспечения может поддерживать двухмерный датчик объема для работы со сверхнизкими задержками и получения точной трехмерной карты. С помощью Intel Edison и Senz3D можно решить задачу предотвращения столкновений и на низкой скорости/малом расстоянии, и на высокой скорости/большом расстоянии.
- Предлагаемое решение отличается дешевизной, малым весом и низким потреблением электричества. Это практичное решение для небольших потребительских дронов и профессиональных дронов.
Время действовать!
Теперь о том, как бесплатно получить набор для экспериментов от Intel. Компания продолжает академическую программу Intel Do-It-Yourself Challenge и сейчас у нас есть 10 наборов, которыми мы с радостью с вами поделимся — при соблюдении определенных условий. А именно:
- Вы являетесь студентом или сотрудником российского ВУЗа;
- Совместно со своими коллегами вы обладаете достаточными знаниями для начала проекта;
- Вашей исследовательской группой руководит профессор или преподаватель ВУЗа;
- Вы понимаете сложность задачи и готовы уделять работе над ней достаточно времени;
- Ваш проект не связан с военной тематикой.
В этом случае вам необходимо сформулировать свою идею, кратко рассказать о своем творческом коллективе и выслать получившийся текст на английском или французском языке на имя Paul Guermonprez.
Справочные материалы и ресурсы
Автор: saul