- Регистрация
- 23 Янв 2019
- Сообщения
- 1,351
- Баллы
- 0
- Общие продажи
- 0$
- Общие покупки
- 0$
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нашими основными инструментами будут среда разработки приложений для робототехники и программный симулятор . Их используют, чтобы тестировать алгоритмы в симуляционной среде и разбивать при этом как можно меньше техники. И ROS, и Gazebo работают в Linux — мы будем работать в Ubuntu 16.04.
Дроны бывают разные. По конструкции различают несколько типов дронов:
Потребительские, как ты понимаешь, — это те, которые можно купить в магазине и использовать как летающую камеру. DJI Phantom и Mavic — хорошие модели. Есть и менее дорогие, но они определенно уступают по качеству. Такие квадрокоптеры используют для съемки разных мероприятий, зданий, исторических объектов. Например, с беспилотника можно сделать серию фотографий здания или памятника, а затем создать из них 3D-модель объекта методом фотограмметрии.
Как правило, такие дроны летают на ручном управлении, реже по миссии в автономном режиме по GPS-координатам. Рынок потребительских квадрокоптеров больше чем наполовину принадлежит одной компании — . С ней очень сложно конкурировать, поскольку там делают реально крутой продукт: доступный, функциональный, удобный. Хотя в области квадрокоптеров для селфи DJI начинает теснить компания со своим дроном R2. Фишка этого дрона в том, что он может летать автономно, например за мотоциклистом в лесу. При этом беспилотник видит все препятствия и прокладывает автономный безопасный маршрут в реальном времени так, чтобы человек всегда оставался в кадре. Реально крутая штука.
Коммерческие дроны используются в компаниях для решения определенной задачи. Дроны следят за состоянием сельхозполей, летая над ними регулярно и делая фотографии, другие дроны умеют распылять удобрения точечно. Их используют на стройках, в карьерах. Каждый день они облетают строительный объект, делают фотографии, по которым создается 3D-модель в облаке, и уже она помогает отслеживать ежедневные изменения.
Пример российской компании, которая активно работает с этой технологией на рынке США, — .
Другой способ применения — осмотр трубопроводов дронами. Это особенно актуально для России: у нас газовые трубопроводы тянутся на тысячи километров, и надо контролировать утечки и врезки.
Ну и конечно, у всех на слуху доставка товаров дронами. Не знаю, заработает ли когда-нибудь сервис , но уже сейчас компания доставляет товары в Цюрихе и некоторых городах США, а компания давно отправляет медикаменты в полет над просторами Африки. В России успехов тут пока намного меньше, недавно была новость про , а Сбербанк тестирует .
Компании и уже имеют летающие прототипы такси, а компания с российскими корнями разрабатывает летающий байк.
В помещениях тоже есть задачи для коммерческих дронов, но пока они не сильно распространены, в этой области идут интенсивные R&D-исследования. Возможные применения для такого вида дронов:
Кадр из фильма «Бегущий по лезвию 2049»
Автономная навигация
Коммерческое применение дронов обычно требует автономного полета, а не ручного управления. Связано это с тем, что часто коммерческие полеты надо выполнять регулярно в одном и том же месте и по одному и тому же полетному плану, который можно запрограммировать и снизить издержки на пилота.
Для автономного управления дрону надо как минимум знать с высокой точностью свои координаты в пространстве. На открытом пространстве можно использовать GPS — точность достигается в несколько метров. Дополнительная наземная станция и технология увеличат точность до нескольких сантиметров. Но наземную станцию не всегда возможно использовать, и это очень дорого. Обычного GPS хватает для задания маршрута полета над сельхозполями, стройками, трубопроводами, и дроны в этих случаях летают автономно. Эта функция есть у любого современного дрона, который можно найти в продаже.
В таком режиме безопасно летать только в открытом небе без препятствий. Если речь идет об обследовании зданий, трубопроводов или применении внутри помещений, то тут не обойтись без дополнительных сенсоров, определяющих расстояние до объектов. Тут используют одномерные сонары, лидары, двумерные лидары, 3D-лидары и камеры глубины. На борту дрона должен быть установлен дополнительный вычислитель, который в реальном времени будет считывать данные с этих сенсоров, строить 3D-модель окружающего пространства и планировать в нем безопасный маршрут.
Есть еще одна важная проблема: если мы летаем в замкнутом пространстве или между высокими зданиями, то сигнал GPS будет недоступен и необходимо иметь другой источник координат дрона в пространстве. Можно определять свои координаты на борту, обрабатывая видеопоток с бортовых камер — лучше использовать стереокамеры или камеры глубины. Такой алгоритм называется SLAM (Simultaneous Localization and Mapping).
В потоке кадров с камеры алгоритм ищет особые точки (features), которыми могут быть маленькие уголки, какие-то неоднородности. Точкам присваиваются дескрипторы таким образом, что, если мы найдем эту же точку в последующих кадрах, когда камера уже успела переместиться в пространстве, ей будет присвоен такой же дескриптор и алгоритм сможет сказать: «Вот на этом кадре есть такая же точка, что и на предыдущем».
Алгоритм не знает 3D-координаты особых точек и координаты камеры в моменты съемок кадров — эти параметры ему как раз и надо вычислить. Он отслеживает изменения пиксельных координат особых точек между кадрами и пытается подобрать такие параметры, чтобы, если спроецировать особые точки в плоскость кадра, получались наблюдаемые или измеренные пиксельные координаты.
В итоге получается оценка перемещения камеры в пространстве. Обычно алгоритм SLAM очень требователен к вычислительным ресурсам, но есть камера Intel RealSense T265 с микросхемой, реализующей вычисления SLAM на аппаратном уровне.
Для организации автономного управления дроном необходимо решить три задачи.
Практика
Поскольку мы хотим затестить простую программу управления дроном в автономном режиме и при этом ничего не разбить, воспользуемся эмулятором. Нам понадобится следующий софт.
Полетный контроллер
Непосредственно вращением моторов и полетом дрона управляет полетный контроллер, представляющий собой плату с процессором ARM на борту и прошивкой под названием . Сам программный код PX4 можно скомпилировать в режиме software in the loop как раз для тестирования на персональном компьютере на Intel x84 CPU. Софт PX4 в этом режиме думает, что он работает на реальном железе полетного контроллера, хотя на самом деле он выполняется в симуляционной среде на ПК и получает подменные данные с сенсоров.
Robot Operating System
Нам потребуется много разных программных модулей. Одни будут работать с сенсорами, другие будут реализовывать SLAM, третьи — строить 3D-карту, четвертые — планировать в ней безопасный маршрут. Для создания этих модулей мы используем Robot Operating System (ROS) — распространенный фреймворк для разработки приложений робототехники. Приложение для ROS представляет собой набор взаимодействующих пакетов, каждый экземпляр которых называется узел, или node.
Один из узлов называется мастер (master node) и отвечает за регистрацию остальных узлов приложения. Каждый узел представляет собой отдельный процесс Linux. ROS предоставляет механизм передачи и синхронизации сообщений между узлами. Существуют как стандартные сообщения, так и определенные программистом. В качестве сообщений выступают данные с сенсоров, видеокадры, облака точек, команды управления и передачи параметров.
Узлы ROS могут быть запущены на разных машинах — в этом случае взаимодействуют они через сетевой интерфейс. В составе ROS есть специальный узел rviz, он служит для графической визуализации передаваемых в ROS сообщений. Например, можно посмотреть, как БПЛА видит мир вокруг себя, отобразить траекторию его движения и видеопоток с камеры.
Для создания пакетов ROS предоставляет возможность использовать языки C++ и Python.
Программный симулятор реального мира Gazebo
Все эти программные средства должны брать данные с сенсоров и управлять чем-то. Программе неважно, работать ли с реальными или симуляционными датчиками и актуаторами, поэтому все алгоритмы можно сначала протестировать на компьютере, в мире Gazebo.
Gazebo симулирует взаимодействие робота с окружающим пространством. Качественная трехмерная графика здесь позволяет увидеть мир и робота как в компьютерной игре. Есть встроенная модель физики мира и возможность использовать разные физические датчики, видеокамеры, дальномеры. Набор существующих сенсоров можно при желании дополнять своими, создавая плагины. Измерения сенсоров моделируются с задаваемым уровнем шума.
В Gazebo есть готовые окружения и примеры заданий и, конечно же, можно создавать свои. Помимо плагинов-сенсоров, можно делать и программные. Например, ты можешь описать в виде программы модель работы мотора, которая задаст зависимость между сигналом контроллера и тягой двигателя.
Образ Docker
Чтобы развернуть у себя на компьютере описанную среду симуляции, надо поставить большое количество программных пакетов, и могут возникнуть проблемы с зависимостями. Чтобы сэкономить тебе время, я создал образ Docker с уже настроенными пакетами и нужным нам софтом для первого теста дрона в Gazebo.
Найти контейнер можно — заходи и скачивай.
Как работает софт управления
В нашем простейшем примере дрон будет летать очень примитивно.
Запуск софта
Собираем образ.
Посмотрим на код
Мой репозиторий Fast Sense основан на материалах команды, которая разработала PX4 — самый популярный опенсорсный полетный контроллер в мире.
У этих ребят есть своя , а на их гитхабе ты найдешь , который я перенес в , чтобы все находилось в одном месте.
Код управления на Python совсем небольшой, я уверен, ты сможешь в нем разобраться самостоятельно. Я лишь скажу, что начинать надо с чтения функции test_posctl(self). В ней описана логика полета:
дрон переводится в режим OFFBOARD, затем армится, взлетает и начинает полет по точкам (0, 0, 0), (5, 5, 2), (5, -5, 2), (-5, -5, 2), (0, 0, 2)).
После чего садится и дисармится.
Дроны бывают разные. По конструкции различают несколько типов дронов:
- мультироторный — коптеры;
- самолетный — fixed wing;
- гибридный — он взлетает вертикально, потом использует крылья.
Потребительские, как ты понимаешь, — это те, которые можно купить в магазине и использовать как летающую камеру. DJI Phantom и Mavic — хорошие модели. Есть и менее дорогие, но они определенно уступают по качеству. Такие квадрокоптеры используют для съемки разных мероприятий, зданий, исторических объектов. Например, с беспилотника можно сделать серию фотографий здания или памятника, а затем создать из них 3D-модель объекта методом фотограмметрии.
Как правило, такие дроны летают на ручном управлении, реже по миссии в автономном режиме по GPS-координатам. Рынок потребительских квадрокоптеров больше чем наполовину принадлежит одной компании — . С ней очень сложно конкурировать, поскольку там делают реально крутой продукт: доступный, функциональный, удобный. Хотя в области квадрокоптеров для селфи DJI начинает теснить компания со своим дроном R2. Фишка этого дрона в том, что он может летать автономно, например за мотоциклистом в лесу. При этом беспилотник видит все препятствия и прокладывает автономный безопасный маршрут в реальном времени так, чтобы человек всегда оставался в кадре. Реально крутая штука.
Коммерческие дроны используются в компаниях для решения определенной задачи. Дроны следят за состоянием сельхозполей, летая над ними регулярно и делая фотографии, другие дроны умеют распылять удобрения точечно. Их используют на стройках, в карьерах. Каждый день они облетают строительный объект, делают фотографии, по которым создается 3D-модель в облаке, и уже она помогает отслеживать ежедневные изменения.
Пример российской компании, которая активно работает с этой технологией на рынке США, — .
Другой способ применения — осмотр трубопроводов дронами. Это особенно актуально для России: у нас газовые трубопроводы тянутся на тысячи километров, и надо контролировать утечки и врезки.
Ну и конечно, у всех на слуху доставка товаров дронами. Не знаю, заработает ли когда-нибудь сервис , но уже сейчас компания доставляет товары в Цюрихе и некоторых городах США, а компания давно отправляет медикаменты в полет над просторами Африки. В России успехов тут пока намного меньше, недавно была новость про , а Сбербанк тестирует .
Компании и уже имеют летающие прототипы такси, а компания с российскими корнями разрабатывает летающий байк.
В помещениях тоже есть задачи для коммерческих дронов, но пока они не сильно распространены, в этой области идут интенсивные R&D-исследования. Возможные применения для такого вида дронов:
- ;
- ;
- ;
- .
Кадр из фильма «Бегущий по лезвию 2049»
Автономная навигация
Коммерческое применение дронов обычно требует автономного полета, а не ручного управления. Связано это с тем, что часто коммерческие полеты надо выполнять регулярно в одном и том же месте и по одному и тому же полетному плану, который можно запрограммировать и снизить издержки на пилота.
Для автономного управления дрону надо как минимум знать с высокой точностью свои координаты в пространстве. На открытом пространстве можно использовать GPS — точность достигается в несколько метров. Дополнительная наземная станция и технология увеличат точность до нескольких сантиметров. Но наземную станцию не всегда возможно использовать, и это очень дорого. Обычного GPS хватает для задания маршрута полета над сельхозполями, стройками, трубопроводами, и дроны в этих случаях летают автономно. Эта функция есть у любого современного дрона, который можно найти в продаже.
В таком режиме безопасно летать только в открытом небе без препятствий. Если речь идет об обследовании зданий, трубопроводов или применении внутри помещений, то тут не обойтись без дополнительных сенсоров, определяющих расстояние до объектов. Тут используют одномерные сонары, лидары, двумерные лидары, 3D-лидары и камеры глубины. На борту дрона должен быть установлен дополнительный вычислитель, который в реальном времени будет считывать данные с этих сенсоров, строить 3D-модель окружающего пространства и планировать в нем безопасный маршрут.
Есть еще одна важная проблема: если мы летаем в замкнутом пространстве или между высокими зданиями, то сигнал GPS будет недоступен и необходимо иметь другой источник координат дрона в пространстве. Можно определять свои координаты на борту, обрабатывая видеопоток с бортовых камер — лучше использовать стереокамеры или камеры глубины. Такой алгоритм называется SLAM (Simultaneous Localization and Mapping).
В потоке кадров с камеры алгоритм ищет особые точки (features), которыми могут быть маленькие уголки, какие-то неоднородности. Точкам присваиваются дескрипторы таким образом, что, если мы найдем эту же точку в последующих кадрах, когда камера уже успела переместиться в пространстве, ей будет присвоен такой же дескриптор и алгоритм сможет сказать: «Вот на этом кадре есть такая же точка, что и на предыдущем».
Алгоритм не знает 3D-координаты особых точек и координаты камеры в моменты съемок кадров — эти параметры ему как раз и надо вычислить. Он отслеживает изменения пиксельных координат особых точек между кадрами и пытается подобрать такие параметры, чтобы, если спроецировать особые точки в плоскость кадра, получались наблюдаемые или измеренные пиксельные координаты.
В итоге получается оценка перемещения камеры в пространстве. Обычно алгоритм SLAM очень требователен к вычислительным ресурсам, но есть камера Intel RealSense T265 с микросхемой, реализующей вычисления SLAM на аппаратном уровне.
Для организации автономного управления дроном необходимо решить три задачи.
- Определить координаты дрона в пространстве. Использовать для этого GPS-приемник или вычислять на борту координаты, обрабатывая видеопоток алгоритмом SLAM. А лучше использовать оба подхода, чтобы знать как глобальные, так и локальные координаты дрона
- Построить 3D-карту окружения дрона с помощью сенсоров типа стереокамер, камер глубины, лидаров.
- Добавить софт для планирования маршрута с учетом цели полета, текущих координат и карты окружения.
Практика
Поскольку мы хотим затестить простую программу управления дроном в автономном режиме и при этом ничего не разбить, воспользуемся эмулятором. Нам понадобится следующий софт.
Полетный контроллер
Непосредственно вращением моторов и полетом дрона управляет полетный контроллер, представляющий собой плату с процессором ARM на борту и прошивкой под названием . Сам программный код PX4 можно скомпилировать в режиме software in the loop как раз для тестирования на персональном компьютере на Intel x84 CPU. Софт PX4 в этом режиме думает, что он работает на реальном железе полетного контроллера, хотя на самом деле он выполняется в симуляционной среде на ПК и получает подменные данные с сенсоров.
Robot Operating System
Нам потребуется много разных программных модулей. Одни будут работать с сенсорами, другие будут реализовывать SLAM, третьи — строить 3D-карту, четвертые — планировать в ней безопасный маршрут. Для создания этих модулей мы используем Robot Operating System (ROS) — распространенный фреймворк для разработки приложений робототехники. Приложение для ROS представляет собой набор взаимодействующих пакетов, каждый экземпляр которых называется узел, или node.
Один из узлов называется мастер (master node) и отвечает за регистрацию остальных узлов приложения. Каждый узел представляет собой отдельный процесс Linux. ROS предоставляет механизм передачи и синхронизации сообщений между узлами. Существуют как стандартные сообщения, так и определенные программистом. В качестве сообщений выступают данные с сенсоров, видеокадры, облака точек, команды управления и передачи параметров.
Узлы ROS могут быть запущены на разных машинах — в этом случае взаимодействуют они через сетевой интерфейс. В составе ROS есть специальный узел rviz, он служит для графической визуализации передаваемых в ROS сообщений. Например, можно посмотреть, как БПЛА видит мир вокруг себя, отобразить траекторию его движения и видеопоток с камеры.
Для создания пакетов ROS предоставляет возможность использовать языки C++ и Python.
Программный симулятор реального мира Gazebo
Все эти программные средства должны брать данные с сенсоров и управлять чем-то. Программе неважно, работать ли с реальными или симуляционными датчиками и актуаторами, поэтому все алгоритмы можно сначала протестировать на компьютере, в мире Gazebo.
Gazebo симулирует взаимодействие робота с окружающим пространством. Качественная трехмерная графика здесь позволяет увидеть мир и робота как в компьютерной игре. Есть встроенная модель физики мира и возможность использовать разные физические датчики, видеокамеры, дальномеры. Набор существующих сенсоров можно при желании дополнять своими, создавая плагины. Измерения сенсоров моделируются с задаваемым уровнем шума.
В Gazebo есть готовые окружения и примеры заданий и, конечно же, можно создавать свои. Помимо плагинов-сенсоров, можно делать и программные. Например, ты можешь описать в виде программы модель работы мотора, которая задаст зависимость между сигналом контроллера и тягой двигателя.
Образ Docker
Чтобы развернуть у себя на компьютере описанную среду симуляции, надо поставить большое количество программных пакетов, и могут возникнуть проблемы с зависимостями. Чтобы сэкономить тебе время, я создал образ Docker с уже настроенными пакетами и нужным нам софтом для первого теста дрона в Gazebo.
Найти контейнер можно — заходи и скачивай.
Как работает софт управления
В нашем простейшем примере дрон будет летать очень примитивно.
- Источник координат дрона — не SLAM, а симулированный сигнал GPS.
- Дрон в симуляторе не строит карту окружающего пространства.
- Дрон летает по заранее заданной траектории.
Запуск софта
Собираем образ.
Посмотрим на код
Мой репозиторий Fast Sense основан на материалах команды, которая разработала PX4 — самый популярный опенсорсный полетный контроллер в мире.
У этих ребят есть своя , а на их гитхабе ты найдешь , который я перенес в , чтобы все находилось в одном месте.
Код управления на Python совсем небольшой, я уверен, ты сможешь в нем разобраться самостоятельно. Я лишь скажу, что начинать надо с чтения функции test_posctl(self). В ней описана логика полета:
дрон переводится в режим OFFBOARD, затем армится, взлетает и начинает полет по точкам (0, 0, 0), (5, 5, 2), (5, -5, 2), (-5, -5, 2), (0, 0, 2)).
После чего садится и дисармится.