Системы автопилотирования

Данная страница посвящена краткому описанию проекта, выполненного для участия в конкурсе летающих роботов компании Крок командой "Автономные аэрокосмические".

 

Команда не искала наиболее лёгких путей при реализации конкурсного задания. Целью являлось развитие своего задела по системам управления БПЛА, получения наработок по машинному зрению.

 

В процессе подготовки команда впервые для себя столкнулась с мультироторной платформой, до этого задел имели только по самолётам. Пришлось адаптировать автопилот для квадрокоптера и это оказалось не так очевидно как ожидалось :) Зато теперь можно с гордостью заявить, что мы получили первый в мире квадрокоптер, работающий всей своей навигацией и управлением в контексте операционной системы QNX :)

 

 

Задание

 

Робот должен взлететь с точки старт, пролететь по коридору и всей своей проекцией сесть в точке посадки. Затем проделать обратный маршрут да точки старта, так же сесть всей проекцией и выключить двигатели. На пути робота в случайном месте коридора устанавливается препятствие (перегородка, либо справой стены, либо слевой), которое он должен облететь.

 

 

p1.2

 

Дрон может касаться стен, но ему запрещенно касаться пола (за исключением точек старта и финиша).

 

 

 

 

 Бортовой комплекс управления

Ниже приведена структурная схема взаимодействия электронных узлов и блоков на борту БПЛА

 

  

tau ru

Управляющие машины

Центральным управляющим контроллером является автопилот АП-05. Он имеет встроенную инерциальную систему навигации (ИНС), системы воздушных сигналов (СВС), спуниковую радионавигационную систему ГЛОНАСС/GPS (СРНС). Вычислитель АП-05 - процессор семейства ARM9 с частотой 400МГц и 64 мегабайтами оперативной памяти. Работа вычислителя осуществляется под управлением операционной системы реального времени (ОСРВ) QNX Neutrino. Примечательно что навигационное решение по ориентации и контур системы автоматического управления (САУ) работают под управлением планировщика ОСРВ с частотой 200Гц.

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

В качестве вычислителя для машинного зрения был выбрана отладочная плата i.MX6Q SABRE lite на базе 4х ядерного процессора семейства Cortex-A9. Для исследований применения технологий QNX управление вычислителя машинного зрения (ВМЗ), также, основано на ОСРВ QNX Neutrino.

Связь между автопилотом и ВМЗ осуществляется по Ethernet через родной сетевой протокол QNX - qnet. Для программиста это даёт прозрачность механизмов IPC: подключение к ресурсу осуществляется unix-like - через файл, который обслуживается на удалённой машине.

 

Датчики

В качестве датчиков препятствий используются ультразвуковые дальномеры SRF08, они установлены по торцам углепластиковой защиты. Аналогичный датчик используется для измерения высоты. Датчики используют интерфейс I2C и подключены к плате i.MX6Q SABRE lite (ВМЗ) на одну шину с разными адресами (не особо логично, однако у автопилота i2c внешнего нет, так как интерфейс не помехозащищён). Процесс в ВМЗ который опрашивает датчики предоставляет эти данные через администратор ресурса /dev/fsrf, а автопилот считывает эти данные через qnet как файл /net/fmdcomp/dev/fsrf и эти данные после фильтрации поступают в контур обратной связи регулятора высоты.

При выборе видеокамеры для определения маркеров взлёта и посадки  ключевым аспектом являлась реальность обеспечения программного интерфейса. В разумный срок портировать работу web камер под QNX было не возможно. Поэтому поиск осуществлялся только среди IP камер. Была выбрана камера NC353L. Эта камера имела целый ряд интерфейсов: MJPEG over RSTP; HTTP; подкупала возможность реализации своего, низкоуровневого.

Выбор был обусловлен прозрачностью реализации сетевых протоколов передачи изображения. Кроме этого камера имеет множество настроек для оптимизации картинки, а матрица имеет более высокое качество чем у камер схожего ценового сегмента. За счёт открытости исходных кодов камеры - риски команды "промахнуться" по главному датчику машинного зрения были оценены как минимальны и оценка оправдалась.

За обсчёт машинного зрения на ВЗМ отвечает процесс fmv, который выдаёт решение как администратор ресурса /dev/fmv.

 

Машинное зрение

Поиск цели
Поиск точек старта/финиша производился при помощи сравнения цветовых гистограмм, сохраненных в памяти эталонных образов  с гистограммами полученными на каждом кадре. Цветовые гистограммы для B,R,G - каналов сравнивались соответственно, а затем вычислялась интегральная оценка по всем каналам.

Стерео-зрение
Решение задачи стерео-зрения предполагало использование метода Semi-global block matching algorithm (SGBM), который способен получить качественную карту различий (disparity map) по двум изображениям.
Применение метода SGBM, как и любого другого, требует пред обработки входных изображений и калибровки камер. С помощью матриц внутренних параметров камер была проведена ректификация изображений, так чтобы изменения положения соответствующих пикселей на левом и правом изображении находились в одной строке. Опытным путем подбирались оптимальные параметры для сцены, каждый кадр производились вычисления карты различий. Карта различий имеет такую же размерность что и входные изображения, но содержит 16-битную "глубину" сцены вместо пикселей. По глубине сцены на горизонтальной линии в центре изображения будет происходить определение нахождения препятствий слева или справа.

 

 

Конструкция мультироторного беспилотного летательного аппарата "Тау"

Все началось с проектирования конструкции будущего квадрокоптера.

 

 

 1

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

 

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

 

3  На торце каждой трубки при помощи алюминиевых кронштейнов и углепластиковой моторамы закреплен мотор. Моторы используются в комплекте с пропеллерами диаметром 12 дюймов. Моторы, контролеры моторов и пропеллеры предоставлены ребятами c Copter24.ru

 

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

 4

  

5  После проектирования конструкции началось изготовление робота. Были заформованны углепластиковые листы и трубки. Параллельно вырезались детальки из алюминия (хомуты, соединители). По готовности углепластиковых листов их поставили на станок и вырезали согласно спроектированной модели. Далее были изготовленны матрицы для формования защитного бампера и Г-образных кронштейнов. Благодарим команду 24CNC.RU за оперативную и качественную помощь в производстве.

 

Началась сборка!

Пять дней работы и мы собрали конструкцию, установили все оборудование и сделали бортовую кабельную сеть.

Результат нашей работы вы можете видеть на фотографиях ниже.

 

6 7 8

 

 

 

 

Летные испытания 

 

Когда робот был полностью собран, до начала конкурса осталось всего 10 дней. На самом деле раньше у нас была летно-испытательная платформа будующего дрона, так что в плане разработки программного обеспечения мы начали не с нуля.
Предыдущие результаты были полученны ранее при помощи прочной стекловолоконной платформы (прототипа будующего квадрокоптера). Некоторые пояснения на русском языке в следующих видео:

 

 

 

 

 

После сборки конкурсного дрона мы потратили пять дней на то, что бы он летат должным образом: сохранял высоту и удерживал заданную дистанцию от стен. Следующие пять дней мы проверяли все летные алгоритмы в сочетании с машинным зрением и реальными маркерами. Получилось несколько успешных испытаний, но все системы работали очень не стабильны. Большинство проблем было в полете. Много времени было съедено проблемами с дальномерами на i2c. Высокий ток моторов и вибрация делали потенциал "земли" нестабильным и это приводило к зависанию шины. Когда зависала шина высотомер заклинивало и двигатели выключались. Отдельная благодарность нашим инженерам и всему цеху механобработки. Из десятка падений мы только однажды сломали крепление бампера и одну посадочную ножку.

 

Алгоритм прохождения коридора классический, держись правой стены, сохраняй дистанцию от неё и молись :). Мы не делаем повороты, дрон держит рысканье, которое установленно изначально. Робота на стартовой позиции располагаем задом к правильному направлению полета. Он начинает летель задом, затем влево, затем прямо и возвращается в обратной последовательности.

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

 

 

Конкурсное видео

 

Фактически на конкурсе расстояние между стенами проёма стали 5 метров. Так что нахождение ворот стало не такой большой проблемой как оценивалось при первоначальном анализе. Обнаружения барьера в автопилоте реализовали при помощи конечного автомата. Если стерео камера (одним из своих глаз) увидила эллипс впереди, значит робот прошел ворота и вскоре должны увидить маркер при помощи камеры смотрящей вниз. Если нет, то мы возможно удерживаем расстояние от препятствия и должны сдвинуться влево.

 

Первая попытка

 

 

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

 

Вторая попытка

 

 

Здесь у нас не сработал алгоритм машинного зрения. Камера не признала маркер посадки и дрон полетел искать его в обратном направлении. Это был тупик алгоритма. 

Как всегда, чтобы сделать все правильно не хватило буквально двух дней отладки :)

 

 

 

Заключение

 

Мы не выйграли, но и не проиграли.

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