OpenPilot: беспилотные аппараты по-опенсорсному
Системы управления беспилотными аппаратами - дорогое удовольствие. Но вот появился проект, который разрабатывает открытую и общедоступную платформу для управления БПЛА.
Автор: Олег Семёнов
| Раздел: Статьи |
Дата: 23 сентября 2011 года
Kettering Bug, предшественник современных беспилотников
Интерес к беспилотным летательным аппаратам возник у людей давно. Ещё в 1910 году американский военный инженер Чарльз Кеттеринг построил и испытал несколько устройств, управляемых часовым механизмом. С тех пор разработка и применение "беспилотников" как в мирных, так и в военных целях не прекращались. Но действительно массовым это направление стало только в наши дни с появлением доступных электронных компонентов и узлов. И любители, и серьёзные компании начали создавать подобные системы.
Среди всего этого многообразия, пожалуй, стоит выделить уникальный в своем роде проект - OpenPilot. В отличие от аналогов, жертвующих функциональностью ради быстрого получения прибыли, участники OpenPilot работают над законченной программно-аппаратной платформой, одинаково пригодной для любого типа "беспилотников" - самолётов, вертолётов и других аппаратов вертикального взлёта и посадки.
Уникальность проекта можно выразить всего несколькими словами: полная открытость схемотехники и программного кода, максимальное качество продукта, простота использования и, как ни странно это звучит в наше время, полное отсутствие финансовой заинтересованности. Одной из своих целей проект ставит спасение человеческих жизней. Давайте посмотрим, что же стоит за всем этим на самом деле...
Как всё начиналось...
Что получится, если объединить купленную в ближайшем магазине летающую модель, современный микроконтроллер и несколько увлечённых общим интересом людей? Система, которая способна управлять полётом самолёта или вертолёта без помощи пилота. Именно идея создания такой платформы и лежит в основе OpenPilot.
Проект OpenPilot основали в январе 2010 года три человека, познакомившиеся друг с другом через интернет и имевшие общие устремления. Все трое хотели создать универсальную платформу для управления беспилотными летательными аппаратами (БПЛА, или UAV - Unmanned Aerial Vehicle), предназначенную для серьёзных мирных применений - поисковых и спасательных работ, аэрофотовидеосъёмки и т.п.
Попыток создать аналогичную платформу, конечно же, предпринималось немало и до того. Но все они либо были примитивными и ориентированными на любительский сектор рынка, либо очень сложными в настройке и использовании, либо сильно ограниченными по своим функциональным возможностям. Существуют, конечно, и коммерческие варианты подобных систем - стоимостью в десятки и сотни тысяч долларов. Их сфера применения, однако, обычно достаточно узка.
Беспилотник ScanEagle стоит около 100 тысяч долларов (фото Boeing)
Представьте себе лесника, наблюдающего за лесным пожаром, или сотрудника Рыбнадзора, разыскивающего браконьеров. Им бы пригодился беспилотник, и лучше не один. Но только не за 100 тысяч долларов. Такие суммы едва ли по карману бюджетным организациям, не говоря уж о любителях.
Занять эту нишу и нацелились основатели OpenPilot. Проект явился первой серьёзной попыткой создать нечто столь же качественное, как и дорогие коммерческие системы (стоимостью от 10 000 долларов и вдобавок с дорогими контрактами на техническую поддержку), но предельно простое для неопытных пользователей и доступное, в том числе и в финансовом плане. Чтобы понять уникальность проекта, следует сказать несколько слов о том, чем же в принципе можно управлять и что существовало ранее.
Какие бывают летательные аппараты?
Можно выделить три принципиально различных класса, на которые делятся все летающие модели (не считая воздушных шаров и ракет). Первый из них – это традиционные самолёты, с ними всё ясно. Модель самолёта движется с помощью тянущего или толкающего воздушного винта, крылья создают подъёмную силу, а отклоняемые рулевые поверхности позволяют управлять направлением полёта. Висеть на месте самолёт не может.
фото flickr.com/jeremiahjw
Второй класс – это модели вертолётов. Подобно настоящим вертолётам, они держатся в воздухе с помощью несущего воздушного винта. Хвостовой винт используется в том числе и для разворота, а управление направлением полёта осуществляется с помощью автомата перекоса, позволяющего вертолёту как висеть на одном месте, так и двигаться в произвольном направлении, например боком или хвостом вперёд.
фото flickr.com/jsbrownbill
Ну и, наконец, третий класс, полноценных аналогов которого не существует на сегодня среди "взрослых" систем. Это многороторные летающие аппараты, имеющие несколько воздушных винтов по периметру (обычно от трёх до восьми), раскручиваемых электромоторами. Стабилизация и управление такими аппаратами производится за счёт различной скорости вращения винтов. Огромным преимуществом таких систем является простота их механики при почти всех достоинствах вертолёта. Всего лишь несколько моторов с винтами без сложного автомата перекоса - и можно как висеть на месте, так и двигаться в любую сторону.
фото flickr.com/sidkites
Всё портит лишь один, но существенный недостаток: так как необходимо управлять каждым мотором в отдельности, эти системы фактически обречены летать на электрической тяге. Это удобно, экологически чисто, но, увы, мешает малая ёмкость батарей, так что время полёта редко превышает 10-20 минут. Этого хватает, чтобы, например, провести съёмку состояния архитектурного объекта перед началом реставрации камерой весом в 100 грамм, но явно мало для того, чтобы пролететь несколько километров и доставить полезный груз в пару килограммов для спасательных работ. Дальние миссии для многороторных аппаратов недоступны: нет возможности использовать двигатели внутреннего сгорания.
Принципы управления всеми этими типами летательных аппаратов совершенно различны, но функционально они дополняют друг друга, и в каждом конкретном случае выбор определяется поставленной задачей.
Немного о конкурентах
Вернёмся к автопилотам. Все они имеют свои недостатки: цена, возможности, сложность использования или дорогостоящая техническая поддержка. Дорогие коммерческие системы нельзя считать массовыми и доступными именно там, где они нужны для мирного применения. Ну а любительские проекты имеют свои проблемы, первая из которых - это привязка только лишь к определённым типам летательных аппаратов. Наиболее популярны проекты, управляющие мультироторными аппаратами. Да, они летают, и иногда совсем неплохо. Но, увы, только на мультироторах. Управлять самолётом или вертолётом они не могут, этого просто не было предусмотрено при их создании.
Вторая проблема любительских проектов – низкое качество программного кода и максимально упрощённая схемотехника. Можно насчитать, пожалуй, несколько десятков таких проектов. Почти в каждом из них есть что-то позаимствованное у аналогов. Аппаратная часть большинства проектов создаётся с целью максимально удешевить систему. Но очевидно, что, используя слабые по вычислительной мощности процессоры, невозможно сделать систему действительно качественной. Та же ситуация с программным кодом: большинство таких проектов начиналось с задачи минимум: научить аппарат зависать и летать. Позже появлялись дополнительные потребности: висеть не только под управлением пилота, но и автоматически, лететь по заданному маршруту, управлять подвешенной видеокамерой для аэросъёмки и так далее. Радикально менять систему не поднимается рука, а в результате новые возможности дописываются в виде заплаток, делая программный код совершенно не читаемым, а поиск ошибок в нём становится непростой задачей.
Ещё несколько проектов начинались как любительские, но постепенно переросли в коммерческие или были закрыты. Типичным примером является немецкий mikrokopter.de (MK), реализующий функции автопилота для мультироторных аппаратов. Проект начинался как открытый. Его участники публиковали схемы и исходные коды программ для повторения всеми желающими. Любой понимающий специалист или любитель мог посмотреть, как реализована та или иная функция, и либо повторить систему, либо на её основе сделать что-то своё.
Проект использовал достаточно качественное и не самое дешёвое "железо", но в силу своей открытости получил огромную популярность. Десятки, если не сотни любителей активно подключились к нему и стали предлагать свои доработки. В результате функциональность проекта резко выросла, но с этим ростом проект начал становиться всё более и более закрытым и ориентированным на получение прибыли. Часть критически важных компонентов проекта, отвечающих за функции навигации, перестала публиковаться в виде исходных текстов. Программа настройки также предлагается в виде "как есть" без возможности что-то в ней исправить. Предлагаемые для бесплатного использования "прошивки" имеют ограничения по функциям. И говорить о возможности адаптировать проект под свои цели и задачи уже не приходится.
Такая смена позиции авторов проекта привела к разочарованию и оттоку многих пользователей. Они начали искать альтернативное решение, но его не существовало... И вот тут на сцене тихо и без лишнего шума появился OpenPilot.
OpenPilot
У проекта всего три задачи. Во-первых, создать универсальную систему автопилота, применимую ко всем существующим типам летательных аппаратов: к самолётам, вертолётам и мультироторным системам.
Это явилось первым существенным отличием проекта от существующих аналогов. Причём, в отличие от некоторых неудачных попыток других проектов добавить подобную функциональность поверх существующей, OpenPilot поставил такую задачу с самого начала, не связывая себя никакими рамками или готовыми решениями.
Во-вторых, есть задача сделать это решение максимально качественным и профессиональным с точки зрения схемотехники и программного кода. Обеспечить его расширяемость в будущем без существенного изменения архитектуры системы. Добиться, чтобы по качеству оно не уступало, а то и превосходило по качеству и функциональности многие коммерческие аналоги, стоящие десятки тысяч долларов, не говоря уже о любительских разработках. И, что самое главное, решение должно стать максимально открытым, простым в использовании обычными пользователями, но при этом доступным для изучения и повторения.
Открытость проекта подчеркнута даже в самом его названии: open и есть - открытый, причём во всех смыслах. Официальная позиция проекта: вся схемотехника и всё программное обеспечение для неё есть и всегда будет полностью в открытом доступе.
Схемотехника проекта выполнена на самом высоком уровне проработанности. Выполнено множество исследовательских работ внутри проекта: изготовление макетов, плотная работа с производителями компонентов и решений, написание тестов и методик испытаний... Всё это, в отличие от многих аналогичных проектов, оставалось долгое время в тени, что привело к разговорам, будто результатов не будет уже никогда. Но на самом деле команда разработчиков просто не хотела выпускать в свет неотработанную схемотехнику, чтобы не вынуждать через месяц-другой пользователей покупать новую "исправленную и улучшенную" версию. Все эти работы финансировались за счёт личных средств одного из основателей проекта.
И последняя, но не менее важная цель проекта - сделать весь процесс разработки увлекательным и приятным занятием для участников, построить вокруг проекта сообщество столь же увлечённых этим людей, которые имеют возможность общаться через Интернет и готовы выделять личное время на это увлечение.
Практически все занятые в проекте люди имеют основную работу. Иметь какие-либо обязательства по срокам означало бы убить атмосферу дружеского общения в команде и создания качественного, а не просто "достаточно хорошего" продукта. И именно по этой причине с самого начала было объявлено, что нет и не будет определённых сроков выхода результатов, как аппаратных, так и программных. Единственный критерий готовности - это соответствие качества "железа" и программного кода высоким требованиям, предъявляемым к нему самими разработчиками, и результат будет тогда, когда он будет готов.
Состав системы
Типичная модель летательного аппарата, дистанционно управляемая пилотом с земли, состоит из корпуса или рамы с требуемой механикой и имеет в своём составе один или несколько двигателей (электрических или внутреннего сгорания – ДВС), источник энергии (топливный бак для ДВС или аккумуляторную батарею для электромотора), органы управления (рулевые машинки в случае самолётов или вертолётов, регуляторы двигателей для мультироторов), приёмник аппаратуры радиоуправления с земли и, в случае ДВС, батарею питания бортовой электроники. Пилот на земле держит в руках передатчик, позволяющий управлять полётом модели. Для получения функций автопилота между приёмником и органами управления должна быть установлена некая промежуточная система, способная заменять команды с земли собственными указаниями, как и куда лететь.
OpenPilot - это программно-аппаратный комплекс, состоящий из набора электронных плат, программного обеспечения, работающего на этих платах (так называемых "прошивок"), и программного обеспечения для персонального компьютера, используемого для настройки и контроля системы. Электроника проекта как раз является тем самым промежуточным звеном между приёмником и рулевыми машинками или регуляторами. При этом обеспечивается возможность как ручного управления, так и включения автопилота с возможностью вмешательства оператора с земли.
Наземная станция управления (GCS).
Несмотря на то что основная работа системы происходит на борту модели, пользователь имеет дело в первую очередь с наземной частью - так называемой наземной станцией управления (Ground Control Station, сокращенно GCS). С её помощью выполняется первоначальная настройка системы, а в дальнейшем может осуществляться контроль по радиоканалу с борта модели и даже управление моделью с помощью компьютерного джойстика вместо специального передатчика.
OpenPilot GCS уникальна многими своими особенностями. Например, в отличие от большинства других проектов, работающих только под Windows, GCS проекта полностью кроссплатформенная. Один и тот же исходный текст компилируется в приложения для Windows, Linux или Mac OS X. Не имеет никакого значения, какая система установлена у конкретного пользователя - OpenPilot GCS идентично выглядит и работает на всех трёх платформах. Интересно заметить, что разработка проекта также ведётся на всех трёх платформах: Windows, Linux и Mac OS X.
Более того, уже сейчас ведётся адаптация GCS для работы на портативных планшетах под управлением Linux или Android, что, очевидно, гораздо удобнее в полевых условиях. Грамотная архитектура системы позволила сделать такую адаптацию быстрой и относительно несложной.
Другой особенностью OpenPilot GCS является её модульность и гибкость настроек. Имеется несколько рабочих пространств, каждое из которых содержит набор так называемых гаджетов. Любой гаджет выполняет свою функцию и не зависит от остальных. Пользователь может создать новое рабочее пространство (или несколько) и разместить на нём в произвольном порядке нужные ему гаджеты с приборами, настройками, графиками, логами и прочим, выбираемые из предложенного списка. Ну а программист, заинтересованный в создании нового специфического инструмента для GCS, может легко добавить его, совершенно не затрагивая уже написанный код, а просто подключив свой гаджет к системе. Всё построено на основе системы uavobjects, о которой будет сказано чуть ниже.
Инерциальная навигационная система (OpenPilot INS)
Существенной частью любого автопилотного проекта является часть, обычно называемая инерциальной навигационной системой, или INS. В большинстве любительских проектов INS как таковой нет - есть некие её фрагменты, более или менее работающие.
Для того чтобы выполнять любые функции управления, нужно чётко представлять:
место нахождения объекта управления по отношению к некоей начальной точке;
ориентацию объекта по отношению к сторонам света;
скорость и направление движения объекта в трёхмерном пространстве (напомним, что вертолёты и мультироторы могут летать любой стороной, в отличие от самолётов, потому ориентация не всегда совпадает с направлением движения);
скорость вращения объекта в трёхмерном пространстве.
Задачей INS является обработка информации с множества датчиков, которая в итоге сводится к набору чисел, описывающих вышеуказанные данные. Источников первичной информации может быть несколько. В минимальном варианте таковыми являются:
три гироскопа, определяющие скорость вращения системы по трем осям;
три акселерометра, позволяющие, помимо прочего, оценивать направление к центру Земли;
трёхосевой магнитный компас, позволяющий путём использования магнитной модели Земли точно знать ориентацию модели, а также корректировать значения гироскопов;
барометр, позволяющий путём измерения атмосферного давления вычислять высоту объекта над уровнем моря или точкой старта;
приёмник системы спутникового позиционирования GPS, дающий абсолютные координаты объекта в трёхмерном пространстве, а также данные о скорости и направлении движения.
Дополнительно могут также использоваться и другие источники информации:
ультразвуковой датчик высоты, аналогичный парктроникам автомобилей, дающий значения абсолютной высоты над уровнем поверхности Земли на малых высотах;
лазерные высотомеры, используемые для той же цели;
датчик воздушной скорости, которая при наличии ветра может отличаться от скорости, измеряемой системой GPS;
видеокамеры системы распознавания образов, позволяющие осуществлять точную привязку к точке местности;
радиомаяки и другие датчики.
OpenPilot INS представляет собой отдельную электронную схему с выделенным под эти задачи мощным тридцатидвухразрядным микропроцессором и набором датчиков. Данные с датчиков собираются вместе и преобразуются в готовые углы, расстояния, скорости и координаты, далее используемые системами управления, стабилизации и навигации в готовом виде.
В отличие от множества аналогичных проектов OpenPilot INS способна также выполнять функцию Dead Reckoning. Упрощённо говоря, это означает предсказание данных о нахождении и скорости модели даже при временной потере сигнала GPS. При этом используются акселерометры и остальные датчики для примерной оценки, которая вновь будет уточнена при восстановлении приёма сигнала GPS. Такой функцией не может похвастаться ни один любительский проект.
Основная плата (OpenPilot Pro). Вторым аппаратным компонентом является основная плата OpenPilot Pro. Имея на борту столь же мощный микропроцессор, она выполняет функции управления, стабилизации и навигации. На вход платы поступает сигнал с приёмника, к выходам подключены рулевые машинки или регуляторы моторов. Также к ней подключена плата INS.
Задачами данной схемы являются:
приём сигналов управления с приёмника аппаратуры управления;
чтение данных для стабилизации и навигации с платы INS;
микширование сигналов управления и стабилизации и формирование сигналов, управляющих рулевыми машинками и моторами;
поддержка канала телеметрии со станцией наземного управления.
Одно из интересных решений, которое можно отметить, - это встроенный интерпретатор языка программирования Python. На нём можно написать полётный план, после чего аппарат по команде приступит к его выполнению. Например, можно потребовать пролететь по заданному маршруту вокруг памятника архитектуры и сфотографировать его со всех сторон. Можно запрограммировать долететь до точки, где требуется помощь спасателей, спуститься на заданную высоту, сбросить груз (медикаменты, радиостанцию), подняться и автоматически вернуться домой. И всё это можно делать, не являясь специалистом по программированию. Такого на сегодняшний день также нет ни в одном из любительских проектов.
фото с openpilot.org
Другие аппаратные компоненты. Помимо перечисленных, в рамках проекта разрабатывается также набор других компонентов цельной системы. Это модуль GPS с оптимизированными под летательные аппараты алгоритмами, построенными в результате тесного сотрудничества с производителем GPS модуля. Это собственный радиомодем для поддержки телеметрического канала контроля и управления между моделью и наземной станцией. Это собственный регулятор для электромоторов, оптимизированный для многороторных летательных аппаратов и многое другое.
Кроссплатформенное программное обеспечение и большая вычислительная мощность процессоров в сравнении с большинством похожих проектов – это лишь одна сторона медали. Вторая, но не менее важная часть заключается в уникальном внутреннем устройстве алгоритмов, использующих специализированный протокол UAVTalk для обмена информацией и уровень абстракции PiOS для моделирования поведения системы. Об этом пойдёт речь во второй части статьи.