Программная архитектура КРОКовского дрона
На картинке схема программной архитектуры нашего робота.
Как уже упомянул ранее, она основана на ROS.
Все, что есть на схеме, это node’ы в терминах ROS и сообщения между ними - кроме ПО наземной станции.
Что такое ROS и node’ы - лучше читать тут - www.ros.org/wiki/.
GCS - ground control station - наземная станция. Задачи: команда на запуск беспилотника, телеметрия. Возможно список задач расширится.
Navi Node - узел ROS для навигации беспилотника на поле. На входе получает позицию робота в пространстве, имеет доступ к представлению карты в пространстве, координаты посадочной площадки, данные со сканирующего лазерного дальномера. На выходе – последовательность положений беспилотника в пространстве, чтобы достичь целевой позиции. State – текущее состояние алгоритма – взлет, поиск точки для посадки и т.д.
Controller Node – узел ROS, реализующий ПИД регулятор для поддержания беспилотника в заданном состоянии. На входе- текущая позиция беспилотника в пространстве, целевая позиция, состояние алгоритма. На выходе формируются команды управления для “родного” аппаратно-программного обеспечения дрона.
Serial_Copter IMU & Control - узел ROS, преобразующий команды управления от Controller Node в вид, согласно протоколу обмена информации с “родным” аппаратно-программным обеспечением дрона. Также этот узел считывает информацию с IMU беспилотника.
Hokuyo Node- узел ROS, считывающий информацию с LIDAR’а, и выдающего его в виде массива расстояний.
Laser Scan Matcher Node - узел ROS, реализующий локализацию позицию дрона на плоскости (вертикальная проекция на поле). На входе получает информацию с инерциального измерительного устройства, массив расстояний. Показания IMU нужны для корректировки массива расстояний, так как LIDAR может измерить их не в горизонтальной плоскости, в которой он будет локализовываться.
Laser Height Node или Sonar Node – узел ROS, определяющий высоту, на которой находится дрон. В нем реализованы алгоритмы формирования наиболее вероятной высоты, так как сонар работает с меньшей частотой, чем замыкается контур обратной связи по высоте. На выходе получаем высоту беспилотника.
3D-Position Node - узел ROS, собирающий информацию с инерциального измерительного устройства, высоту и положение дрона на плоскости и формирующий кадр с положением робота в пространстве.
OpenCV Node – узел ROS, реализующий алгоритм распознавания площадки для посадки и расчета координат этой площадки. На входе получает картинку с камеры, положение робота в пространстве. На выходе рассчитывает координаты точки для посадки.