Файлы
  • ardupilot
  • docs
  • API.md
  • ARCHITECTURE.md
  • ASSESSMENT.md
  • AUTOPILOT.md
  • COMPETITION.md
  • DIAGNOSTICS.md
  • FAQ.md
  • HWASSEMBLE.md
  • QUALIFICATION.md
  • QUICK_START.md
  • TOOLS.md
  • scheme.jpg
  • scheme2.jpg
  • scheme3.jpg
  • scheme4.jpg
  • scheme5.jpg
  • scheme5.plantuml
  • scheme6.jpg
  • scheme6.plantuml
  • scheme7a.jpg
  • scheme7b.jpg
  • firmware
  • kos
  • orvd
  • planner
  • tests
  • .gitignore
  • Dockerfile
  • Doxyfile
  • LICENSE
  • Makefile
  • README.md
  • docker-compose-offline-multi.yml
  • docker-compose-offline-obstacles.yml
  • docker-compose-offline.yml
  • docker-compose-online-multi.yml
  • docker-compose-online-obstacles.yml
  • docker-compose-online.yml
  • install_dependencies.sh
  • orvd.Dockerfile
  • orvd.conf.docker
  • run.sh
API.md строк 175 10 KB

Программный интерфейс компонента безопасности

Оглавление:

Структура полетного контроллера KOS

Компонент безопасности или полётный контроллер состоит из 7 модулей:

  • autopilot_connector
  • credential_manager
  • navigation_system
  • periphery_controller
  • server_connector
  • logger
  • flight_controller

Участникам соревнований предлагается вносить изменения в программный код модуля flight_controller (Находится в папке kos/flight_controller). Взаимодействие с остальными модулями выполняется посредством IPC-сообщений; внесение изменений в эти модули не рекомендуется.

IPC-сообщения

Папка shared содержит файлы с функциями-обертками, облегчающими отправку IPC-сообщений. Файлы соответствуют модулям, для которгго предназачены сообщения. Все функции-обертки возвращают цифровое значение: 1 в случае успешной отправки и получении ответа, 0 в ином случае.

ipc_messages_initialization

Содержит универсальное сообщение, воспринимаемое модулями AutopilotConnector, CredentialManager, Logger, NavigationSystem, PeripheryController и ServerConnector.

int waitForInit(const char* connection, const char* receiverEntity)

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

ipc_messages_autopilot_connector

Cодержит сообщения для модуля AutopilotConnector, выполняющего взаимодействие с автопилотом через UART-порт.

int waitForArmRequest()

Переходит в режим ожидания arm-запроса от автопилота. Не завершится, пока не получит сообщение от автопилота.

int permitArm()

Передает в автопилот сообщение о разрешении на arm. Данная команда не заставляет автопилот произвести arm, лишь выводит его в лог.

int forbidArm()

Передает в автопилот сообщение о запрете на arm. Данная команда выводит сообщение в лог, но не предотвращает дальнейшие попытки автопилота произвести arm.

int pauseFlight()

Передает в автопилот запрос на приостановку полета. Автопилот запомнит текущую миссию, остановит ее и выполнит посадку в текущем местоположении. Команда сработает только во время активной миссии.

int resumeFlight()

Передает в автоплиот запрос на возобновление полета. Автопилот возобновит ранее остановленную миссию. Команда сработает только во время приостановленного полета.

int abortMission()

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

int changeSpeed(int32_t speed)

Передает в автоплиот запрос на изменение скорости. Скорость указывается в см/с.

int changeAltitude(int32_t altitude)

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

int changeWaypoint(int32_t latitude, int32_t longitude, int32_t altitude)

Передает в автопилот запрос на изменение текущей точки миссии. Высота указывается в см относительно высоты дома; широта и долгота - в градусах * 10^7.

int setMission(uint8_t* mission, uint32_t missionSize

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

ipc_messages_credential_manager

Содержит сообщения для модуля CredentialManager, отвечающего за RSA-шифрование сообщений для сервера.

int signMessage(char* message, char* signature)

Производит вычисление RSA-подписи сообщения message и возвращает ее в signature.

int checkSignature(char* message, uint8_t &authenticity)

Производит проверку аутентичности сообщения, поданного в формате “сообщение#подпись”. Результат проверки аутентичности возвращается в authenticity.

ipc_messages_logger

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

int logEntry(char* entry, char* entity, LogLevel level)

Выполняет запись сообщения в лог с указанием модуля, отправившего сообщение, и уровня логирования. Логирование выводит сообщение в консоль и записывает его в файл лога на карте памяти.

ipc_messages_navigation_system

Содержит сообщения для модуля NavigationSystem, работающего с GPS и барометром модуля безопасности.

int getCoords(int32_t &latitude, int32_t &longitude, int32_t &altitude)

Возвращает текущие координаты дрона. Значения долготы и широты - в градусах * 10^7, высоты - в см.

int getGpsInfo(float& dop, int32_t &sats)

Возвращает значение DOP (снижение точности) и число наблюдаемых спутников (sats).

int getEstimatedSpeed(float& speed)

Возвращает скорость (в м/с), определенную модулем GNSS.

ipc_messages_periphery_controller

Содержит сообщения для модуля PeripheryController, выполняющего взаимодействие с периферией через GPIO.

int enableBuzzer()

Включает зуммер. Звук будет автоматически отключен через 2 секунды.

int setKillSwitch(uint8_t enable)

Регулирует подачу питания на двигатели. При 1 использование моторов возможно, при 0 - нет.

int setCargoLock(uint8_t enable)

Регулирует подачу питания на мотор сброса груза. При 1 сброс груза возможен, при 0 - нет.

ipc_messages_server_connector

Содержит сообщения для модуля ServerConnector, выполняющего общение я сервером ОРВД.

int getBoardId(char* id)

Возвращает ID дрона, соответствующий MAC-адресу интерфейса “en0”.

int sendRequest(char* query, char* response)

Отправляет на сервер запрос, возвращая в response значимое содержание полученного ответа.

int publishMessage(char* topic, char* publication)

Публикует сообщение с указанной темой посредством протокола MQTT. Ответ от сервера ОРВД не ожидается.