Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Notice: Undefined index: HTTP_ACCEPT in /home/n/newavtjc/radiocopter.ru/public_html/wp-content/plugins/realbig-media/textEditing.php on line 823

Макетные платы с IMU

Для ряда применений небольшого ARM на борту недостаточно (даже если это М4). Чуть выше уже упоминалась плата Gumstix на OMAP3530 (Cortex-A8) в связке с NavStik. Было бы странно ели бы Gumstix сам не сделал что-то подобное самостоятельно.

Плата расширения Gumstix AeroCore. Другая популярная «макетка» BeagleBone c SOC от TI. Под неё тоже есть подходящая платка:

На фотографии BeagleBone IMU Cape

И, наконец, Intel со своим Edison. Под него платы расширения пока нет, но кто-то сомневается, что будет?

Следует заметить, что перечисленные платформы с трудом проходят по критерию «открытости», вся надежда была на I.MX6, ввиду полноты документации, но его родной SabreLight не подходит по форм фактору, а остальные реализации не имеют должной популярности (сугубо моё мнение). Так что ждем обещанного I.MX6 cо встроенным Cortex-M4 и новой подходящей макеткой.

К отряду макетных плат отнесу так же различные MiniPC на базе Android. Привлекательные, прежде всего, своей ценой. На примере Mk808 за 40$ имеем:

  1. RK3066 2 x Cortex-A9 1.6GHz;
  2. 1Гб ОЗУ;
  3. 8Гб Flash;
  4. WiFi;
  5. SD разъем;
  6. UART на плате;
Смотрите про коптеры:  Улучшите свои впечатления от дронов с помощью собранных дронов FPV


Есть и более современные устройства на RK3288, но вопросс наличия порта Linux требует дополнительного изучения.

Подобный miniPC прикрученный через UART к любому описанному здесь автопилоту расширяет его возможности вплоть до VSLAM ( SLAM на основе технического зрения ).

Становится возможным вместо описанных здесь «микро ОС» для МК использовать полноценные ОС с надстройками в виде ROS или даже Simulink.

Наконец добрались до Pixhawk. Многие видели красивые ролики с квадрокоптерами играющими с мячиком для настольного тенниса, выполняющими акробатические трюки, стаей дружно что-то стоящие. Основной поставщик этого Контента — ETH Zurich (Swiss Federal Institute of Technology Zurich). Pixhawk это их разработка

. Благодаря академичности проект имеет красивую архитектуру, как в аппаратной части, так и программной. С аппаратной и начнем. Благодаря открытости приобрести клон можно на Alliexpress, что я и сделал:

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Комплектность:

  1. сам автопилот;
  2. GPS модуль с антенной, батарейкой и магнитометром;
  3. кнопка со встроенным светодиодом;
  4. DC/DC преобразователь с датчиком тока;
  5. переходник USB->UART/I2C;
  6. разветвитель I2C.

Итого: 185$ (6500р… эх, было время).


Первый вопрос который возникает: насколько китайский клон «китайский». Что же, вскроем и посмотрим.

А теперь – о самом полетном контроллере

После такого вступления стало понятно, что написать полетный контроллер на таких могучих инструментах – совершенно просто. И действительно, если разобраться, то ничего сложного.

Структурная схема управляющего ПО показана на рисунке

Как видно из рисунка, ПО состоит из двух частей:

Так как тратить много времени не хотелось, то драйвер для USB в STM32 был взят прямо нативный и при помощи Interop был слинкован с оберткой на Ada.

Плата оказалась оснащена минимальным количеством периферийных устройств: 

Полетный контроллер реализован по простой схеме и «крутит» 2 цикла:

  1. внешний

  2. внутренний

Внешний цикл это цикл опроса периферии (CMD task на рисунке) в ожидании команд с радиопередатчика. Если команды нет, он передает признаки «сохраняем высоту, держим горизонт». Если команда с пульта есть, передаем ее – целевой угол наклона, целевую мощность на пропеллеры. Частота внешнего цикла 20 Гц.

Внутренний цикл – цикл опроса гиро-акселерометра и распределения мощности на двигатели. Цикл оборудован 3 PID-регуляторами, и математикой Махони для расчета текущего положения по сигналам с гироскопов. В расчетах внутри используем кватернионы, для генерации управляющего сигнала – углы Эйлера. Частота размыкания внутреннего цикла – 200 Гц. Да, Ада без проблем успевает диспетчеризировать с такой скоростью.

Так как у нас нет ни баровысотомера, и другого способа измерить высоту, то для грубого удержания высоты используем интеграцию вертикальной скорости.

Внутренний цикл реализует опрос PID и стабилизацию аппарата:

Забавно, что большинство опен-сорсных реализаций Махони (для Arduino и не только) – на Cи и Wiring оказались содержащими разнообразные баги. Это мешало системе заработать. После того, как было выпито пол-ящика лимонада и съедена корзина круассанов, алгоритм воссоздали с нуля по описанию из [MHN], и система тут же заработала.

Данная схема, как и любая упрощенная модель, испытывает сложности при приближениях параметров к предельным. Здесь это 90 по крену и тангажу – при их превышении для безопасности реализовано отключение двигателей (disarm).

Кроме этого, управление по углу рыскания выполнено сквозным, а PID там используется только для контроля сильных отклонений между выданным и расчетным углами. Это связано с тем, что пилот по скорости, крену и тангажу ожидает реакцию коптера в виде наклона, пропорционального отклонению стиков, а по рысканию — в виде скорости вращения, пропорциональной отклонению.

Но для первого приближения вышло отлично, хотя и совсем не подходит для акробатического квадрокоптера.

Статья получилась неожиданно длинная, поэтому придется разбить ее на две части.  Мы в первой части постарались познакомить вас с инструментами предков, которые на удивление неплохи: по крайней мере, мы сделали выводы, что дальнейшие проекты для эмбеддед хочется делать на Ada, а не на Си.

Итог на текущий момент

Квадрокоптер с прошивкой на Ada/SPARK прошел тесты на подпружиненном стенде и полетах в закрытом помещении, собираются логи, схема стабилизации работает в соответствии с ожиданиями, но в рамках ограничений на углы маневров, как описано выше.

Мы в R&D продолжаем познавать верификацию ПО и с нетерпением ждем схода снега в Москве, чтобы в следующей статье поделиться результатами испытаний, подгонки и видео тестовых полётов ПО в уличных условиях, которое, кажется, статически проверено на то, что не содержит ошибок.

И конечно, на время испытательных полетов все runtime-проверки все равно останутся включены, хотя конечный итоговый результат – проверки не нужны, так как заведомо известно, что они выполняются.

Для себя мы сделали вывод, что для embedded будем стараться писать только на Ada.

Автономная зарядка

Как можно видеть в готовых вариантах выше, существует несколько подходов к подготовке автономного дрона к следующему полету: зарядка аккумулятора через контактные площадки, бесконтактная индукционная зарядка и механизированная замена аккумулятора с последующей его зарядкой на станции.


У каждого метода есть свои плюсы и минусы, о них я напишу отдельно, но в любом случае, для их функционирования дрон должен уметь приземляться в нужную точку практически с сантиметровой точностью.

Аккумулятор

Для выбора аккумулятора нужно знать какой он должен отдавать ток.

На полном ходу двигатели будут “есть” 30А (7,5А * 4 мотора), а электроника примерно 0,45А (10 Ватт). С учетом небольшого запаса округлим минимальный рабочий ток аккумулятора в 35А. Для Li-Po батарей с высокой токоотдачей в 30С минимальная емкость будет равна 1,2 Ач (35/30), а для более легких Li-Po и Li-Ion с токоотдачей в 10С минимальная емкость 3,5 Ач (35/10).

Как вариант, сборка 6S2P из Li-Ion Sony VTC6 с BMS весит примерно 630 г (при емкости 6 Ач). С этим аккумулятором дрон будет весить 2031 г, что больше оптимального на 135 г, но в пределах максимального. Теперь посчитаем на какое время коптер сможет зависнуть при идеальных условиях.

При общем весе в 2031 г на каждый мотор приходится 508 г. Взглянем на характеристики мотора и найдем потребляемый ток при такой тяге. Он примерно будет равен 1,6А. 4 мотора и электроника дадут в сумме 6,85A (1,6 * 4 0,45). С учетом разрядки аккумулятора до 20% получится (6 Ач * 80% / (6,85 A)) = 0,7 часа или 42 минуты.

Аппаратная часть

Основной блок устройства представляет собой небольшую коробочку со множеством разъемов.

Материал корпуса — полупрозрачный темный поликарбонат.

Корпус состоит из двух половин. Половинки корпуса скрепляются при помощи четырех саморезов ввинчивающихся в пенечки на верхней половинке корпуса. Для упрощения сборочно/разборочных операций саморезы были сразу заменены на кусок черной изоленты видимый на первой фотографии.

В левом нижнем углу виден небольшой отсек охватывающий датчик давления на плате. До самой платы стенки отсека не доходят. По данным Vooon в родном устройстве в отсеке помещается кусок поролона, но в клоне он почему-то забыт, надо будет исправить самому.

Основные компоненты смонтированны снизу платы.

Сверху располагаются интерфейсные разъемы, разъем microSD и несколько индикаторных светодиодов.
К качеству монтажа претензий нет — все ровно, флюс отмыт (кроме батарейки, она, очевидно, паялась вручную после печки). Кстати, у конкурентов батарейки нет (значит нет и часов реального времени, точнее нет пока не пойман GPS).
Пластиковые разъемы имеют соответствующие отверстия в верхней половинке корпуса. Возле каждого разъема есть подпись. Ответные разъемы входят с некоторым усилием. Для отключения категорически нельзя тянуть за провод (оторвется). Действовать следует так:
На столе операция не вызывает затруднений, а в поле в -15С можно применить хак:
Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4
Имеет смысл сразу запастись запасными кабелями на случай неудачи.

GPS модуль идущий в комплекте совмещает в себе приемник СНС с батарейкой и антенной и магнитометр.

Необходимость выносить магнитометр вместе с GPS антенной возникает так как его желательно располагать подальше от силовых проводников и магнитных материалов. Для примера на DJI это сделано так:

Все входы/выходы выведенные на разъемы имеют защиту от статики, ограничительные резисторы. По цепям питания установлены проходные конденсаторы и защитные диоды.

Для наглядности вот фотография с разметкой части деталей обеспечивающих защиту.

В итоге: к китайскому производству претензий нет, плату можно осторожно покрыть лаком и в полет! А если дополнить металлическим корпусом с выведенными разъемами то устройство будет смотреться и на фоне гораздо более дорогих коммерческих автопилотов.

А теперь вспомним конкурентов из начала статьи у которых ноги МК напрямую подключены к разъемам. Самые крупные детали на плате это два МК. Большой STM32F427 (168МГц, 256КБ ОЗУ, 2МБ FLASH) и поменьше STM32F103 выполняющий функции failsafe контроллера (управление аппаратом при отказе основного алгоритма автопилота). Т.е.

Мы видим ту же архитектуру что и в Paparazzi 2008года, но на современной элементной базе. Здесь можно отметить что в современных SOC есть тенденция встраивать небольшие МК (ядра) для решения вспомогательных задач (а также задач жесткого реального времени), но здесь поступили проще — поставили отдельный МК. Установленные датчики/выведенные интерфейсы подробно расписывать не буду, все есть на странице проекта.

Бокс для зарядки

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Бокс для зарядки будет сделан из алюминиевого профиля, крепежной фурнитуры и алюминиевых сендвич-панелей. В нем будут установлены роутер, компьютер, погодные датчики и камера с видом на посадочную зону. Я решил сделать покатую крышу из двух створок, чтобы зимой на ней не скапливался снег и не мешал открыванию. Механизм открывания створок до конца еще не продуман, а также не определена система зарядки (нуждаюсь в подсказках).

В следующей статье я расскажу как настроить и запустить дрон через интернет с помощью GUI или командной строки, про варианты систем зарядки из которых я сейчас выбираю, ПО для управления коптером и анализа снимков и почему мой первый полет через интернет продлился так недолго:

Продолжение следует…

Часть 2 про ПО.

Висеть, как вкопанный

Чтобы дрон умел висеть на одном месте и не “плавать”, одного только GPS не достаточно. К сожалению, из-за состояния атмосферы координаты с приемников GPS могут плавать в пределах десятков метров и для сантиметровой точности нужно использовать корректирующие системы

. Эта система использует наземную неподвижную станцию, как эталон отклонений координат, и радиосвязь с бортом, чтобы отправить туда значения этих отклонений. Такая штука обязательно нужна для съемки фотопланов с последующей склейкой в большие карты, а для целей висения на месте я пока ограничусь оптическим датчиком

Работает он по такому же принципу, как и оптическая мышь. В отличие от IR-Lock, он не распознает конкретный образ и в Ardupilot они работают в разных полетных режимах. Изображение с камеры анализируется на смещение 400 раз в секунду, а вычисленные значения смещения могут быть прочитаны контроллером по протоколу I2C. Датчик (

) весит 15 грамм и имеет все необходимое у себя на плате: процессор 168 MHz Cortex M4F CPU (128 64 KB RAM), оптический сенсор 752×480 MT9V034 и 3-х осевой гироскоп L3GD20. Для его нормальной работы также рекомендуется использовать лазерный дальномер, вместо ультразвукового. Хотя на самом модуле предусмотрен разъем как раз для УЗ датчика.

Выбор полетного контроллера

Так как мне нужно транслировать видео и телеметрию через интернет, то сразу приходит на ум поставить на дрон микрокомпьютер с 4G модемом и камерой, и сделать из этого комплекта web-трансляцию. Нашлись вот такие решения:

. Это обычные одноплатники с внешним USB 4G модемом и камерой. Для кодирования и трансляции видео используется

. Но эти штуки сами по себе дроном управлять не умеют, их нужно использовать совместно с полетным контроллером.

Полетный контроллер — это мозг дрона. Он следит за состоянием датчиков положения (гироскоп, акселерометр, компас), GPS-координатами, положением ручек на пульте управления и, исходя из этих данных, управляет моторами, чтобы висеть в одной точке или куда-то лететь.

Полетный контроллер нужно будет как-то связать с бортовым компьютером, чтобы можно было загрузить полетное задание или указать произвольную точку куда лететь и когда включать камеру. В продаже можно найти много разных контроллеров сильно отличающихся друг от друга по цене и функционалу.

С Ardupilot я игрался еще на 8-битных атмегах, в которых не было USB-bootloader’а, а прошивались они на программаторе. С тех пор с ним не сталкивался и был приятно удивлен, когда узнал, что сейчас он может работать на 64-битных компьютерах с Linux, у него огромное сообщество пользователей как хобби, так и профи, длинный список поддерживаемых “из коробки” датчиков и расписанные планы на 2023-2023 годы. За это время он успел перерасти в проект DroneCode, а потом и отсоединиться от него.

На первый взгляд в нем как раз реализованы все необходимые функции: автоматический взлет и посадка, загрузка полетных заданий, есть desktop и мобильные приложения под все основные семейства ОС. Программы управления (GCS — Ground Control Station) общаются с бортовым контроллером короткими сообщениями по открытому протоколу MAVLink через комплект радиомодемов (дрон шлет телеметрию, GCS шлет команды управления). Подозреваю, что эти сообщения получится пустить через интернет.

Взглянем на список поддерживаемых контроллеров и что-нибудь подберем. Вариантов там полтора десятка от мала до велика и с разными характеристиками.

Из всего того многообразия контроллеров мне понравилось несколько вариантов:


Самый легкий комплект (84 г) получается из микрокомпьютера

(9 г), контроллера

(15 г), родного внешнего GNSS модуля (46 г) и дополнительного

(14 г).

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Рабочий процессор в этом комплекте один — на Raspberry Pi. На нем висит управление ШИМ регуляторов моторов, считывание показаний датчиков, ОС Linux со всеми потрохами и декодирование видео с камеры. Так как в Pi Zero не предусмотрены USB порты, то в этом варианте приходится использовать внешний концентратор. IMU датчики и вход питания без резервирования.

Следующий комплект (97 г) от гонконгской компании с русскими фамилиями в команде разработчиков — контроллер Emlid Edge (59 г) с GNSS модулем (38 г). GNSS модуль работает по протоколу UAVCAN и дополнительно оснащен магнитометром и датчиком воздушного давления. За ШИМ здесь отвечает отдельный процессор ARM Cortex-M3, ОС Linux крутится на основном ARM Cortex-A53 quad-core.

В контроллере имеется HDMI видеовход, что позволяет подключить к нему напрямую любую камеру с таким выходом, например GoPro 4 или 5. Относительно высокая стоимость объясняется дальнобойными wifi-приемопередатчиками в комплекте (до 2 км с трансляцией HD-видео).

Следующий вариант (98 г) состоит из знаменитого микрокомпьютера Raspberry Pi 3 (45 г) с контроллером-шилдом Navio 2 (23 г) от той же Emlid и внешней GNSS-антенны (30 г). На контроллере стоит отдельный процессор Cortex-M3 для управления ШИМ на 14 каналах и расшифровки входящих SBUS и PPM сигналов от приемника. Он, в свою очередь, управляется через драйвер в ядре ОС Linux, которая крутится на Raspberry.

Контроллер оснащен парой раздельных IMU датчиков (акселерометр, гироскоп, магнитометр) MPU9250 и LSM9DS1, одним датчиком воздушного давления и GNSS-модулем U-blox NEO-M8N, который видит GPS, Глонасс и BeiDou с внешней антенной через разъем MCX.

Дополнение. cсылки на коммерческие автопилоты для бпла:

  1. NAZA-M-V2 автопилот от DJI;
  2. Micropilot — один из первых коммерческих производителей;
  3. UAVOS — белорусско/швейцарская платформа;
  4. SWIFT AI — отечественная платформа для автопилота с упором на FPV;
  5. АЭРОБ — отечественная платформа от соучастника Сколково;
  6. АВАКС-ГеоСервис АП-05 — отечественная платформа с
  7. блэкджеком QNX, резервированием и RS-485;

  8. RUAV STA3x — отечественная платформа с Simulink подобный визуальным редактором. «Коробочный продукт» с документацией.

Заметка о полетном контроллере flip32 mini / блог им. zxczxcs / сообщество

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Начал делать первые шаги в коптеростроительстве, после экспериментов с MultiWii и Arduino Pro Micro решил заказать мелкую легкую платку с STM32. По моему скромному опыту, из датчиков достаточно датчика угловых скоростей, акселерометра и барометра. Порывшись в интернетах нашел дешевую платку Flip32 Mini за $22.

Краденое в интернетах изображение Flip32 Mini

На борту STM32F103CBT6, CP2102, MPU6050 и MS6511. Получил посылку, подключил к USB. Конфигуратор Baseflight-а сразу подключился и начал отображать данные с датчиков. Данные были нестабильные постоянно плыли, причину долго искать не пришлось — значительный нагрев платы. Плата маленькая и точно определить источник нагрева тяжело, где-то в районе процессора. Снял феном процессор — потребление тока упало с ~100 мА до ~4 мА.

Подумав, что бракованный процессор, запаял на его место STM32F103C8T6, ROM у него 64 кБ, но мы-то знаем… Прошивка размером ~86 кБ отлично влезла и работала, но все равно плата грелась. Попутно заменил токоограничивающие резисторы светодиодов со 100 Ом на 5 кОм для синего и 1 кОм для остальных. После этого значительно приятнее стало смотреть в сторону платы и потребление тока снизилось на 20 мА. Несколько раз феном отпаивал процессор — искал КЗ. Ничего не нашел. Подключил ST-link по SWD и начал дебаг. Потребление резко возрастало после этой строчки:

#ifndef CJMCU if (spiInit() == SPI_DEVICE_MPU && hw_revision == NAZE32_REV5) hw_revision = NAZE32_SP;
#endif

В функции spiInit() настраивается ножка PB13 на выход для работы SPI с активным низким уровнем.

// MOSI SCK as output
gpio.mode = Mode_AF_PP;
gpio.pin = Pin_13 | Pin_15;
gpio.speed = Speed_50MHz;
gpioInit(GPIOB, &gpio);

По схеме этот вывод подключен к выходу прерывания MPU6050.

Схема Flip32

STM32 тянет к питанию, а MPU6050 тянет к земле так как настроено прерывание по окончанию преобразования:

// Data ready interrupt configuration
mpu.write(MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 1 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_RD_CLEAR_DIS, I2C_BYPASS_EN
mpu.write(MPU_RA_INT_ENABLE, 0x01); // DATA_RDY_EN interrupt enable

Самый простой способ решить проблему для меня — закоментировать функцию поиска SPI-периферии, так как SPI-девайсов на этой плате нет, но тогда при обновлении прошивки через конфигуратор из репозитория опять будет проблема. Жизнь заставила поступить жестко — отломал PB13 (вывод 26), совсем. Можно было акуратно перезать дорожку. Судя по коду и схеме такая проблема должна быть на всех подобных платах (Flip32, Naze32 и др.), но в интернетах ничего не нашел по этому поводу.

По итогу потребление снизилось, но из-за многократного нагрева феном стал чудить датчик угловых скоростей. Сначала показания появлялись после некоторого времени, а потом — сразу после включения только шум. Пришлось перепаять. В процессе выяснился косяк китайцев не читающих даташит, в котором написано, что термал пад в MPU6050 это не термал пад и паять его не надо, а то появятся механические напряжения вызывающие дополнительную погрешность измерения.

В конечном итоге впечатление от железки двоякое, с одной стороны — маленькая дешевая, с другой — косячная и требует обработки напильником. Изначально хотел сам разработать нормальную плату и заказать на том же seeedstudio, но экономически целесообразней посчитал заказать готовый вариант и, похоже, зря. Скорее всего, придется делать и заказывать.

Иной подход

Иной подход это верификация ПО. Обычно при этих словах люди начинают думать об абстрактных монадах и академических манускриптах, сложно читаемых и плохо применимых на практике. Но оказалось, что не все так плохо.

Прежде всего, верификация НЕ является гарантией того, что программа не содержит ошибок, а является только проверкой, что программа гарантирует некоторые свойства. А уже дело программиста таким образом обеспечить контроль свойств, чтобы получить нужные результаты.

В случае с SPARK, верификация базово предоставляет нам гарантии:

Для описания инвариантов в языке SPARK предусмотрены специальные расширяющие конструкции языка, описывающие контракты процедур, структур данных, и даже циклов. Контрактом можно указать, например, что данная функция не может обращаться к глобальным переменным, или модифицировать глобальное состояние.

SPARK также учитывает ограничения на типы, которые описаны в Ada. В случае обычного исполнения ошибка несоответствия типов упадет в Runtime; SPARK же позволяет статически доказать, что ограничения на типы не могут быть нарушены никаким потоком исполнения.

Например:

Или другой пример:

Компилятор и верификатор не дадут создать такой код, который приведет к присвоению значений, нарушающих ограничения и предикаты.

Отдельный плюс SPARK в том, что система позволяет “натягивать” гарантии на программу поэтапно, то есть программа может быть частично верифицированной. То есть часть модулей можно объявить верифицируемыми, а часть – (пока) нет.

Сам SPARK делит верификацию на уровни: от “каменного” (Stone level) через “Бронзовый” и “Серебряный” уровни до “Золотого” (Gold) и “Платинового”. Каждый из уровней усиливает гарантии:

Мы остановились на уровне Gold, потому что наш квадрокоптер все-таки не Boeing 777 MAX. 

Как работает верификация в SPARK: прувер собирает описание контрактов и типов, на их основе генерирует правила и ограничения, и далее передает их в солвер (SMT – Z3), который проверяет выполнимость ограничений. Результат решения прувер привязывает к конкретным строкам, в которых возникает невыполнимость.

Более подробно можно почитать в [SUG]

Иной язык

Несмотря на то, что сейчас “рулят” си-подобные ECMA-языки, мы нормально отнеслись к тому, что от этого придется отказаться. Более того, кажется, что чем больше программа, тем больше вредит укорочение ключевых слов и конструкций. Что касается Rust, то он – субъективно – в отношении минимализма издалека сильно напоминает Perl, к сожалению.

И наоборот, по ощущениям, пространные, многобуквенные конструкции раздражают, когда разум летит вперед, но не мешают, когда во главу угла ставится надежность, понятность, и легкость чтения. В этом смысле Ada (а SPARK это подмножество Ada) вполне хорош. Теперь давайте посмотрим, что же язык Ada может дать embedded-разработчику.

 Профили

Сам язык и стандартная библиотека позволяет определять и использовать так называемые “профили”. Профиль это набор ограничений, выполнение которых контролирует компилятор. Например, можно определить ограничение “нельзя использовать динамическую память”.

Мы используем профиль Ravenscar, специально для embedded-разработки. Он включает пару дюжин ограничений, которые делают вашу разработку для микроконтроллеров более удобной и верифицируемой: нельзя на ходу переназначать приоритеты задач-потоков, переключать обработчики прерываний, сложные объекты из stdlib-ы и такое.

Вот ограничения профиля Ravescar, для примера

 Runtime

Когда в embedded необходимо создать более-менее сложное приложение, там всегда заводится RTOS, и ее выбор и интеграция это отдельная песня. В случае с Ada с этим больше нет сложностей – сама Ada включает в себя минимальную исполняемую среду с вытесняющим планировщиком потоков (в Ada это tasks, задачи), с интегрированными в сам язык средствами синхронизации (семафоры, рандеву, называются entries) и даже средствами избегания дедлоков и инверсии приоритетов. Это оказалось очень удобно для квадрокоптера, как станет понятно ниже.

Для embedded-разработчика доступны на выбор также разные рантаймы:

Вот пример описания пустой задачи

Хочется обратить внимание, что эти задачи – это по сути легковесные green threads, так как под ними нет никаких настоящих потоков не существует. Поэтому мы не страдаем от отсутствия корутин, ведь задачи не тяжелее них, зато встроены в язык.

Кроме этого, в Ada есть достаточно мощная stdlib для ядра STM32, включая полную реализацию рантайма. Возможно, и для вашей архитектуры она тоже есть.

Почему не “rustRustRUST”!

Когда мы говорим, про гарантии в языках программирования, сразу вспоминается Rust и его гарантии относительно указателей. Почему тут не он? Нам кажется, что Spark мощнее.

Ada не очень любит указатели – там они называются access types, и в большинстве случаев там они не нужны, но если нужны, то – в Spark также есть проверки владения, как в Rust. Если вы аллоцировали объект по указателю, то простое копирование указателя означает передачу владения (которую проконтролирует компилятор/верификатор), а передачу во временное владение (или доступ на чтение) верификатор также понимает и контролирует.

В общем, концепция владения объектом по указателю, и уровень доступа через этот указатель – есть не только в Rust, и его преимуществами можно пользоваться и в других инструментах, в частности, в Ada/SPARK. Подробно можно почитать в [UPS]

Вот пример кода с владением

Почему мы пишем, что в Ada/SPARK не нужны указатели? В отличие от Си, где базовым инструментом является указатель (хочешь ссылку – вот указатель, хочешь адрес в памяти – вот указатель, хочешь массив – вот указатель – ну вы поняли?), в Ada для всего этого есть строгий тип.

Если уже и этого мало, есть интероп с СИ – то есть код можно компилировать совместно, и слинковать на этапе сборки. Но в этом случае гарантии поведения модуля как черного ящика остаются на разработчике. Для интеропа используются атрибуты – вот так, например, мы оборачиваем функцию на Си в доступ для Ada.

Для соблюдения нужного layout или битности в коде также не нужны указатели: Ада при необходимости позволяет детально описать, как именно структура будет располагаться в памяти. Минус ошибки на конвертации из логического в физическое представления и обратно – прощайте битовые сдвиги, сложения на кольце, арифметика указателей.

IDE

Для работы доступна вполне приятная и удобная IDE, но всегда можно использовать и VSCode с плагинами, и другие текстовые редакторы.

О производительности и надежности

Вполне валидным аргументом может быть вопрос с эффективностью ПО. Что касается эффективности, то в интернете доступно свежее исследование [EFF], из которого хочется привести табличку, показывающую, что “старичок» Ada еще огого:

Если говорить о надежности, то SPARK/Ada известен как один из языков с наименьшим количеством ошибок. В планируемом на 21 запуске кубсатов [LIC] полетное ПО планируется реализовывать на Ada, предыдущий спутник BasiLEO тоже на Ada был единственным среди 12, кому удалось приступить к планируемой миссии.

Комплект поставки

Комплект для установки на квадрокоптер – AuroraRC C2, включает в себя: полетный контроллер на базе процессора F4; плату регулятора оборотов бесколлекторных электромоторов; шлефы для подключения камеры, приёмника и регулятора; комплект крепления к раме квадрокоптреа с демпфирующими вставками; электролитические конденсаторы – 2200µ/25В и 470µF/16В; пигтейл – MMCX/SMA.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Компоновка

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Пока я выбирал подходящую раму и думал как все это на ней размещать и чем крепить, пришел к выводу, что проще будет нарисовать несколько деталей и заказать 3D-печать из пластика и фрезеровку из карбона. Пару готовых железок и крепеж можно заказать на Алиэкспрессе.

Немного поэкспериментировав с компоновкой и центром тяжести, получилась вот такая рама:

Она состоит из карбоновых трубок и пластин, деталей из алюминия и крепежа из титана. Расчетный вес рамы получился 350 г при диагонали 700 мм. 3D-модель рамы и список деталей.

Полностью собранная модель (без проводов):

Общий вес коптера с электроникой, аккумулятором Li-Ion 6S2P и проводами должен получится 1931 г.

Да, мне тоже показалось, что дрон получился слишком голым для автономного варианта и мелкий дождик легко намочит бортовую электронику. Поэтому добавил немного пластика:

3D-модель рамы. Список деталей рамы.3D-модель в сборе. Список компонентов.

Вес пустой рамы с корпусом 384 г, общий вес 2020 г, расчетное время висения на одной зарядке (разряд аккумулятора до 20%): 44 минуты.

Минимальный комплект электроники


Вот, что собралось:

Общий вес получается 199 г. Все компоненты работают от 5 Вольт и потребляют в режиме трансляции видео почти 2 Ампера (10 Ватт).

В наборе присутствует ультразвуковой датчик расстояния, который будет смотреть вперед на предмет препятствий. Стереозрение и круговые лидары я оставил на потом, если в них возникнет реальная необходимость.

Моторы и пропеллеры

На многих профессиональных дронах я видел моторы и пропеллеры компании

. Видимо, не спроста. В документации Ardupilot они также

как силовая установка для профессиональных дронов. Поэтому, поищем подходящие моторы у них.

Чтобы дрон летал долго, нужны моторы с максимальным КПД. Эффективность связки мотора и пропеллера измеряется количеством тяги в граммах на 1 Ватт затраченной электроэнергии. Чтобы узнать какой мотор самый подходящий, нужно знать общий вес полностью собранного дрона с учетом рамы, аккумулятора и самих моторов с винтами.

Слишком много неизвестных, поэтому воспользуюсь онлайн калькулятором для квадрокоптеров E-calc.

Поигравшись в калькулятор, я выбрал моторы Antigravity 4004 KV300 (53 г) с винтами 15х5 (27 г). В оптимальном режиме при напряжении питания 24 Вольта такой комплект тянет 474 грамма при токе 1,4 А. Эффективность получается 14.

11 г/Ватт, отношение тяги к собственному весу = 5.9:1. На полном ходу тяга составляет 1311 грамм при токе 7,5 А. Коптер будет с четырьмя моторами, то есть квадро. Оптимальный взлетный вес = (474 г * 4 мотора) = 1896 г, максимальный (с учетом тяговооруженности 2:1) = (1311 г * 4 мотора) / 2 = 2622 г.

Моторы управляются регуляторами оборотов. Напряжение питания моторов = 24 Вольта, максимальный рабочий ток = 7,5 А, поэтому нужен регулятор под такое напряжение и с рабочим током, с учетом запаса, минимум 10А. У T-Motor самый легкий регулятор (7 г без проводов) под такое напряжение — это FPV 35A-32bit 3-6S.

Подитог:

ВМГ (винто-моторная группа), состоящая из моторов, пропеллеров и регуляторов (по 4 шт каждого) весит 346 г.

Вместе с электроникой и полезной нагрузкой (346 505) получается 851 г. С учетом крепежа, проводов и разъемов (прикинем 100 г) = 951 г.

При оптимальном весе, на раму и аккумулятор остается (1896 — 951) = 945 г. При максимальном (2622 — 951) = 1671 г.

Настройка

Прошивать полётный контроллер необходимо таргетом – OMNIBUS4SD. По умолчанию контроллер был прошит старой прошивкой 3.2.2 OMNIBUS4SD. Я обновил прошивку до стабильной версии 3.5.0.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Для работы приёмника по шине SBUS активируем Serial RX на UART6. Для UART3 устанавливаем IRC Tramp – удалённое управление настройками передатчика.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Если нет желания летать в режиме стабилизации, то отключаем акселерометр и устанавливаем максимально возможную частоту работы для процессора полётного контроллера.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


Для облёта настройки PID регулятора в программе оставил по умолчанию, единственное что добавил немного экспонент на основные каналы управления.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Устанавливаем полётные режимы на ваши любимые переключатели. Естественно, надо настроить ARM (активация коптера).

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

В настройках Betaflight OSD располагаем необходимые нам параметры на экране в соответствии с предпочтениями.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Несколько слов скажу про удалённое управление параметрами видеопередатчика через OSD меню Betaflight. Для входа в меню необходимо дизармить коптер, установить стик газа в положение 50%, стик PITCH вверх (UP), YAW LEFT и мы попадаем в экранное меню Betaflight.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Общая информация о комплекте

Комплект AuroraRC C2 состоящий, из полетного контроллера на базе процессора F4 и комбинированного регулятора оборотов 4 в одном, предназначен для установки на рамы, рассчитанные на использование пяти дюймовых пропеллеров.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4Параметры платы полетного контроллера.Отверстия для крепления: 30.5×30.5мм
Размер: 36×36 мм
Вес: 9г
Процессор: STM32F4
Датчик: MPU6000
Прошивка: betaflight_3.2.0_OMNIBUSF4SD
OSD: AT7456E
VTX: Интегрированный видео передатчик 5.8G, 48 каналов, 25/100/200/400/600mW
Антенный интерфейс: MMCX
Поддержка приемников: DSMX, IBUS, PPM, SBUS
Поддержка логов на карту памяти: Есть
BEC: 5V/3A
Питание: 2-6S (7.4V-25.6V)
Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4Параметры платы регуляторов.Отверстия для крепления: 30.5×30.5мм
Размер: 45×47 мм
Вес: 26г (в описании указано 15.4г)
Питание: 2-6S (7.4V-25.6V)
Пиковый ток: 45А (10 секунд)
Датчики тока: Есть
Интегрированный BEC: Нет
Поддерживаемые протоколы: DSHOT1200, DSHOT600, DSHOT300, DSHOT150, Oneshot125, Multishot, PWM
Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

На регулятор уже были припаяны провода 14AWG и разъём XT60 для подключения аккумулятора. Длина проводов 100 мм.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Питание

Для питания всей электроники необходимы источники на 5 Вольт (минимум 2,2 Ампера) и 12 Вольт (минимум 1 Ампер). С учетом резервного питания полетного контроллера, нужно два независимых источника на 5 Вольт. Сделать систему питания можно из отдельных модулей подходящего номинала или найти готовый “3 в 1”, например

(24 г, макс входное напряжение до 28 Вольт, выходы по 3А). К нему будет подключен

(22 г), чтобы была возможность измерять расход мАч на аккумуляторе.

Комплект электроники камера подвес система питания весят 505 г.

Полезная нагрузка

Так как родная камера от Raspberry делает средние по качеству фото, а также не умеет захватывать фото одновременно с видео, то она будет использоваться только для web-трансляции, а в качестве основной камеры нужна подходящая для выявления дефектов на ЛЭП. Для большей части позиций из списка выявляемых дефектов подойдут

, мультиспектральная

, двойная

и инфракрасная

. Каждая из них весит около 100 г.

Для стабилизации камеры с целью улучшения качества снимков в нагрузку с ней полетит 2х или 3х осевой подвес.

Простые 3-х осевые подвесы весят около 160 г и питаются от 12 Вольт, имеют рабочий ток при таком напряжении около 50 мА и максимальный ток 700 мА при заклинивании моторов.

Полет

И вот что в итоге получилось. Вес без аккумулятора составил 352 грамм. Аккумуляторы я использовал — Giant Power Dinogy 1300mAh 14.8V 4S 65C. Для «неспешных» полётов самое-то в соотношении цена/качество. Для облёта квадрика установил двух лопастные пропеллеры — Kingkong 5045, чтобы не сильно нагружать моторы и регулятор.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

На представленном ниже DVR, можно оценить качество видеопередатчика. Передающая антенна – клевер. Антенны на приёмнике – клевер и пагода. Но OSD выведены параметры: общий ток; напряжение аккумулятора; мощность; температура платы ПК; положение стика газа.

Я был приятно удивлён практически полному отсутствию помех от регулятора при резкой работе стиком газа. Несколько слов про температуру полётного контроллера. При работе видеопередатчика плата очень сильно нагревается, до 70℃. В полете она обдувается потоком воздуха от пропеллеров и её температура выше 35℃ не поднималась. Запись DVR велась на очки Skyzone SKY02S V .

Квадрик полетел. Не плохо на стоковых настройках. Не судите строго FPV пилот из меня пока так себе, тренируюсь. Ниже приведу видео полета с камеры – xiaomi yi. Летать пришлось в сильный порывистый ветер до 12 м/c, квадрик немного сносило, но в целом результатом я доволен.

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Полётный контроллер

Сразу хочу предупредить, так как на полётный контроллер интегрирован видеопередатчик, подключать его следует только с установленным пигтейлом и подключенной к разъёму SMA антенне. В противном случае возможен выход передатчика из строя. Данный ПК (ПК — полётный контроллер) по сути, один из многочисленных клонов OMNIBUS4SD, на который установили видеопередатчик.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

На полётном контроллере применена вполне стандартная для таких изделий связка. Процессор STM32F4 и сенсор MPU-6000.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

На плате присутствуют контактные площадки для подключения пищалки и габаритной светодиодной подсветки.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


Рядом с антенным разъёмом расположены две кнопки управления видеопередатчиком. Кнопка FR переключает частотную сетку и канал, кнопка POW – мощность.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Для индикации установленной частотной сетки, канала и мощности видеопередатчика применены SMD светодиоды, расположенные в трёх группах, POW, CH, FR.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Короткое нажатие кнопки FR переключает каналы, длительное нажатие (2 секунды) переключает частотную сетку. Однократное нажатие на кнопку POW регулирует мощность –25mW, 100mW, 200mW, 400mW, 600mW.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


Для подключения к ПК и настройкам в программе betaflight на полётном контроллере установлен порт – micro usb.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Контроллер оборудован слотом для карточек памяти формата micro sd. При активации логов в прошивке betaflight, становиться доступным запись полётных параметров на карту памяти. Но обычно данной опцией никто не пользуется.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

ESC – порт для подключения полётного контроллера к регулятору. САМ – порт для подключения курсовой камеры.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


PPS/S – для подключения приёмников по шине SBUS. DSM/T – порт для приёмников spectrum.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Контактные площадки портов периферии. Эти порты могут управлять дополнительным оборудованием на коптере, например, камерой – Runcam Split.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

В качестве чипа OSD на данном полётном контроллере применена микросхема AT7456E.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


Распиновка полётного контроллера:

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Качество пайки и изготовления контроллера на приемлемом уровне, хотя в некоторых местах я наблюдал остатки неотмытого флюса.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Посадка “в точку”

Для точной посадки можно использовать стандартную камеру бортового компьютера, визуальные маркеры и OpenCV для их распознавания. Вот

решения, который можно нагуглить.

свежий появился, когда я писал эту статью. Но распознавание образов достаточно трудоемкий процесс для Raspberry, и без особой необходимости загружать его не хочется. Также качество распознавания будет сильно зависеть от материала из чего сделан маркер и условий освещенности.

Программная часть


Проект базируется на

. NuttX представляет собой небольшую posix ОС. Система имеет поддержку ROMFS что позволяет часть настроек производить через конфигурационные файлы при работе системы (сравните со сборкой через конфигурационные xml у paparazzi).

Алгоритмы БИНС основаны на EKF и доступны в виде отдельного проекта InertialNav. Есть варианты реализации под различные наборы датчиков: на 21, 22, 23 и 24 переменных состояния. Код фильтра хорошо документирован и частично получен автоматической генерацией из MATLAB. В проекте имеются исходные MATLAB файлы, архивы с данными — полный набор для опытов.

Работа с устройством «на столе» крайне проста: при подключении к USB в системе появляется новый виртуальный COM порт который можно использовать для связи с автопилотом (в реальном устройстве вместо USB будет подключаемый по UART радиоканал).

Проект совместим с кодом наземной станции управления QgroundControl. Взаимодействи происходит через открытый протокол MAVLink.

Станция управления позволяет настроить автопилот под конкретный летательный аппарат, задать полетное задние и управлять ходом его выполнения, т. е. все что нужно пользователю.

Для пользователя достаточно, но мы пойдем дальше…

Установка среды разработки и загрузка проекта осуществляется в два клика даже из-под windows:

  1. качаем toolchain
  2. запускаем PX4_Software_download.bat — происходит скачивание проекта;
  3. импортируем проект в Eclipse.

Все, имеем Eclipse c проектом:

Кому приходилось настраивать Eclipse для работы с ARM оценит простоту.

Теперь остается прикрутить ST-LINK и можно начинать отладку… но будет это в следующей статье которая появится только после накопления и осознания соответствующего опыта.

Регулятор оборотов 35a 4in1

Плата регулятора интегрирует в себя четыре 32-х битных регулятора с поддержкой DSHOT1200. К плате регуляторов можно подключать аккумуляторные батареи 3-6S. Пиковый кратковременный ток нагрузки – 45А (10 секунд) для каждого из четырёх регуляторов. На плате нет никаких надписей, которые могли бы пролить свет на её происхождение. На странице товара она значится как – Roptor BLHeli_32 35A ESC.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Изначально место пайки питающих проводов было залито чёрным компаундом. После его снятия под ним оказалась вполне приличная пайка. Если нет необходимости укорачивать провода, можно оставить как есть.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Мозгом регуляторов являются четыре 32-х битных процессора

– красный контур. В качестве драйверов регуляторов применены четыре

– синий контур. Зелёным контуром отмечены датчики тока, четыре датчика на каждый из регуляторов и один общий по шине питания.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


Силовые мосфеты – M3100M. К сожалению, никакой информации, про них я не нашёл. Подозреваю, что они рассчитаны на 30В и пиковые токи около 100А.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Распиновка регулятора:

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Качество сборки и пайки регулятора неплохое. Видимых огрехов и дефектов я не обнаружил.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Сборка квадрокоптера

Для сборки квадрика я использовал раму – Realacc XS220. Нижняя часть рамы выполнена из карбона 4,3 мм, все остальные карбоновые элементы толщиной 2,7 мм. Моторы – DYS SE2205 PRO 2300KV. Камера – Foxeer HS1177 V2. Приёмник – Frsky XM Micro D16 для аппаратуры TARANIS. Защита моторов (можно не ставить) – KINGKONG Universal Motor Cover Protection.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Процесс сборки подобных коптеров абсолютно стандартный. Единственное на чём хочу акцентировать внимание это защита регулятора оборотов от влаги. Это особенно актуально, когда вы летаете там, где есть густая трава и утром на ней скапливается большое количество росы. Падение в такую траву может привести к короткому замыканию и как следствие выгоранию регулятора оборотов.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Для защиты электронных компонентов от влаги я использую 4–5 слоёв лака ПЛАСТИК 71, после этого покрываю регуляторы двухкомпонентным силиконовым герметиком К-68.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


До начала процесса полимеризации герметик очень текучий, его можно наносить кисточкой. Промазываем герметиком плату регулятора с обеих сторон.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Припаял комплектный конденсатор на 2200µF, и «одел» его в термоусадку.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Чтобы не плодить лишних проводов, пищалку припаял непосредственно к контактам на полётном контроллере.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4


К комплектным шлейфам подключил камеру и передатчик.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Теперь можно подключать полётный контроллер к регулятору оборотов. Ещё раз все проверяем на работоспособность и заканчиваем сборку рамы.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Результат двух часов работы (основное время ушло на сушку лака):

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Из за установленного электролита, доступ к кнопкам настройки видеопередатчика затруднён. Эту проблему вполне можно решить, используя обычную спичку.

Собираем и настраиваем квадрокоптер на базе комплекта – AuroraRC C2 Flytower OMVT F4

Так как же быть иначе?

После быстрого совещания возникли вот такие мысли:

В качестве нового подхода решили, что лучше всего опираться на возможность верификации ПО – до необходимого уровня, без злоупотреблений. Но для языка типа С доступных промышленных зрелых решений не существует, только прототипы [FC] и рекомендации.

При выборе языка мы поставили себе вот какие требования:

Оказалось, что из практических инструментов в эти требования хорошо подходит один очень старый, незаслуженно забытый инструмент. Да, это Ada. А точнее, его модерновое, регулярно обновляемое ядро SPARK. В [SRM] описаны основные отличия SPARK от Ada, их не так много.

Что такое SPARK, будет ясно дальше, мы покажем, как именно оно было применено, почему Ада понравилась больше, чем С, как работает прувер, и почему мы при этом ничего не потеряли, а только приобрели. И почему мы не взяли Rust.

Требования к бпла

А также два противоречащих друг другу требования:

Степень автономности в идеале хочется фантастическую: дрон сам летает по заранее спланированному маршруту, загружает фото на сервер, ПО на сервере выявляет дефекты по фото и формирует заявку ремонтной бригаде с координатами мест проведения работ. Сам дрон не должен требовать к себе внимания человека до окончания рабочего ресурса какой-нибудь детали, например, аккумулятора или подшипников.

Понятно, что эта задача не на один год, но я начну, а кто-нибудь, может быть, подхватит и продолжит.

Для примера, готовые промышленные варианты автономных комплексов: раз, два, три, четыре, пять, шесть, семь, восемь, девять, десять, одиннадцать, двенадцать, тринадцать, четырнадцать.

Оцените статью
Радиокоптер.ру
Добавить комментарий