- PVSM.RU - https://www.pvsm.ru -
Мы продолжаем разговор о том, как самостоятельно сделать автономный летающий аппарат. В прошлый раз [1] речь шла об элементной базе, механике и управлении, также мы оснастили свое устройство зайчатками разума на основе библиотеки OpenCV. Время двигаться дальше — нам нужно научить наш гаджет более тонким и замороченным вещам, другими словами — повысить его интеллектуальность.
Во второй статье цикла наш коллега из Intel Paul Guermonprez предлагает сменить платформу и посмотреть, чего может добиться дрон на основе компьютера Intel Edison и главное — как это сделать. Ну а в самом конце поста предложение для тех, кто загорелся идеей воплотить все сказанное на практике. Уверяем вас, при определенных условиях получить бесплатно от Intel аппаратную платформу для экспериментов вполне реально!
Гражданские дроны достигают неплохих результатов в записи видео высокой четкости и в стабилизации полета. Можно даже планировать на планшете маршруты автоматических полетов. Но по-прежнему существует серьезная проблема: как предотвратить столкновение небольших дронов, находящихся в полете, с людьми и со зданиями? Крупные дроны оборудованы радарами и приемопередатчиками. Они летают в контролируемых зонах, вдали от препятствий. Ими дистанционно управляют пилоты с помощью камер. Но мелкие гражданские дроны должны находиться рядом с землей, где много препятствий. А пилоты не всегда могут получить видеоизображение или могут отвлечься от управления полетом. Поэтому необходимо разработать системы предотвращения столкновений.
Итак, однолучевой сонар идеально подходит для измерения расстояния до земли на малой высоте. Такие датчики, как RealSense, хороши для малой дальности. Но что, если нужно видеть и анализировать объемные объекты, находящиеся впереди? Нужно компьютерное зрение и искусственный интеллект!
Для обнаружения объемных объектов можно либо получать объемную картинку, используя два изображения с двух расположенных рядом веб-камер (стереоскопическое зрение), либо использовать последовательные изображения, снятые при движении.
В нашем проекте мы используем камеру Intel-Creative Senz3D [2]. Это устройство включает двухмерный датчик расстояния (с разрешением 320 x 240), обычную веб-камеру, два микрофона и акселерометры. Мы используем датчик расстояния для обнаружения предметов на малой дальности и веб-камеру — для большой дальности.
В этой статье мы рассматриваем главным образом компьютерное зрение большой дальности, а не двухмерную информацию о глубине малой дальности. Поэтому такой же код можно запустить с дешевой пятидолларовой веб-камерой с Linux вместо мощной многоцелевой Senz3D. Но если нужны и компьютерное зрение, и данные о глубине, то камера Senz3D просто идеальна.
В качестве встроенной платформы дрона мы выбрали Intel Edison. В предыдущем проекте [1] мы использовали в качестве встроенной вычислительной платформы полнофункциональный смартфон с 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 [3].
Это бинарный драйвер, но доступна версия, скомпилированная для процессоров Intel. Используя Intel Edison, можно скомпилировать на месте с помощью gcc или Intel Compiler, но также можно получить двоичные файлы, скомпилированные для Intel, и развернуть их без изменений. В таких ситуациях важным преимуществом является совместимость с Intel. После решения нескольких проблем с зависимостями и компоновкой наш драйвер готов и запущен. Теперь мы можем получать изображение с камеры.
Данные датчика. Данные о глубине очень просты, их легко получить от датчика и легко анализировать. Это матрица информации о глубине, ее разрешение — 320 x 240. Глубина кодируется как оттенки серого. Черные пиксели — близко, белые — далеко. Видеокомпонентом датчика является обычная веб-камера. С точки зрения разработчика, датчик дает нам 2 веб-камеры: одна — черно-белая, она возвращает данные о глубине, другая — цветная, дает обычное видеоизображение.
Мы будем использовать видеоизображение для обнаружения препятствий на расстоянии. Нужен только свет, а расстояние не ограничивается. Информация о глубине будет использоваться для обнаружения препятствий на очень близком расстоянии от дронов, не более 2–3 м.
Уведомление о безопасности. По фотографиям видно, что мы работаем в лаборатории и моделируем полет дрона. Предлагаемый алгоритм еще весьма далек от готовности, поэтому не следует запускать дрон в полет, особенно когда рядом люди. Прежде всего, в некоторых странах это совершенно справедливо запрещено. Но еще важнее, что это попросту опасно! Очень многие снятые дронами видеоролики, которые вы видите в Интернете (снятые как в помещениях, так и на улице), на самом деле очень опасны. Мы тоже отправляем дроны в полет на улице, но в совершенно других условиях, чтобы соблюдать все требования законодательства Франции и избегать происшествий.
Итак, у нас два датчика. Один возвращает данные о глубине. Для обработки этих данных вам не нужна наша помощь: черное — близко, белое — далеко. Датчик очень точный (погрешность порядка 1–3 мм) и работает с крайне низкими задержками. Как мы уже говорили выше, это все прекрасно, но дальность маловата.
Второй датчик — обычная веб-камера. И здесь у нас новое затруднение. Как получить объемную информацию с веб-камеры? В нашем случае дрон летит по относительно прямой траектории. Поэтому можно анализировать два последовательных изображения, чтобы обнаруживать различия между ними.
Мы получаем все важные точки на каждом изображении и пытаемся соотнести разницу между положениями этих точек, чтобы получить векторы. На фото результат, когда дрон находится на кресле и медленно движется по лаборатории.
Маленькие векторы — зеленые, длинные векторы — красные. Это означает, что если между двумя последовательными снимками положение какой-либо точки изменяется быстро, то она красная, а если медленно, то она зеленая. Понятно, что ошибки еще остались, но результат уже вполне приемлем.
Это как в фильме «Звездный путь». Помните, как там «растягивается» звездное небо, когда корабль движется быстрее скорости света? Звезды, находящиеся близко, превращаются в длинные белые векторы. Звезды, находящиеся дальше, образуют короткие векторы.
Затем мы фильтруем векторы. Если векторы (любые: и большие, и малые) находятся сбоку, риска столкновения нет. На тестовом фото мы обнаруживаем два черных чемодана сбоку, но летим прямо между массами. Риска нет.
Если же вектор прямо перед вами, это означает, что возможно столкновение. Короткий вектор означает, что у вас еще есть время. Длинный вектор значит, что времени уже нет.
Пример. На предыдущем фото чемоданы были близко, но сбоку, что безопасно. Объекты на заднем планы были впереди, но далеко, тоже безопасно. На втором снимке объекты уже прямо перед нами, с большими векторами: это уже опасно.
Скачать материалы проекта можно отсюда [4].
На описанном выше наборе оборудования мы продемонстрировали 4 тезиса.
Теперь о том, как бесплатно получить набор для экспериментов от Intel. Компания продолжает академическую программу Intel Do-It-Yourself Challenge [5] и сейчас у нас есть 10 наборов, которыми мы с радостью с вами поделимся — при соблюдении определенных условий. А именно:
В этом случае вам необходимо сформулировать свою идею, кратко рассказать о своем творческом коллективе и выслать получившийся текст на английском или французском языке на имя Paul Guermonprez [6].
Автор: saul
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/82314
Ссылки в тексте:
[1] прошлый раз: http://habrahabr.ru/company/intel/blog/230299/
[2] Intel-Creative Senz3D: http://us.creative.com/p/web-cameras/creative-senz3d
[3] SoftKinetic DepthSense 325: http://www.softkinetic.com/products/depthsensecameras.aspx
[4] отсюда: http://intel-software-academic-program.com/courses/diy/Intel_Academic_-_DIY_-_Drone/IntelAcademic_IoT_White_Paper_-_Intel_Edison_for_smart_drones.zip
[5] Intel Do-It-Yourself Challenge: http://habrahabr.ru/company/intel/blog/200336/
[6] на имя Paul Guermonprez: mailto:paul.guermonprez@intel.com
[7] Intel Software Academic Program: http://intel-software-academic-program.com/pages/courses#drones
[8] Intel Real Sense: http://www.intel.com/content/www/us/en/architecture-and-technology/realsense-overview.html
[9] Источник: http://habrahabr.ru/post/249603/
Нажмите здесь для печати.