а в результате новые возможности дописываются в виде заплаток, делая программный код совершенно не читаемым, а поиск ошибок в нём становится непростой задачей.
Ещё несколько проектов начинались как любительские, но постепенно переросли в коммерческие или были закрыты. Типичным примером является немецкий mikrokopter.de (MK), реализующий функции автопилота для мультироторных аппаратов. Проект начинался как открытый. Его участники публиковали схемы и исходные коды программ для повторения всеми желающими. Любой понимающий специалист или любитель мог посмотреть, как реализована та или иная функция, и либо повторить систему, либо на её основе сделать что-то своё.
Проект использовал достаточно качественное и не самое дешёвое «железо», но в силу своей открытости получил огромную популярность. Десятки, если не сотни любителей активно подключились к нему и стали предлагать свои доработки. В результате функциональность проекта резко выросла, но с этим ростом проект начал становиться всё более и более закрытым и ориентированным на получение прибыли. Часть критически важных компонентов проекта, отвечающих за функции навигации, перестала публиковаться в виде исходных текстов. Программа настройки также предлагается в виде «как есть» без возможности что-то в ней исправить. Предлагаемые для бесплатного использования «прошивки» имеют ограничения по функциям. И говорить о возможности адаптировать проект под свои цели и задачи уже не приходится.
Такая смена позиции авторов проекта привела к разочарованию и оттоку многих пользователей. Они начали искать альтернативное решение, но его не существовало... И вот тут на сцене тихо и без лишнего шума появился 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 как таковой нет — есть некие её фрагменты, более или менее работающие.
Для того чтобы выполнять любые функции управления, нужно чётко представлять:
место нахождения объекта управления по отношению к некоей начальной точке;
ориентацию объекта по отношению к странам света;
скорость и направление движения объекта в трёхмерном пространстве (напомним, что вертолёты и мультироторы могут летать любой стороной, в отличие от самолётов, потому ориентация не