Объединение беспилотных летательных аппаратов (БПЛА) и беспилотных наземных транспортных средств (БНТС) в единую систему и разработка программного обеспечения для дистанционного управления устройствами. Нестандартная задача, решаемая нами в рамках реализуемого нашей компанией проекта Moses.  В качестве БНТС выступает парк машин-газонокосилок для покоса травы на полях, оборудованных автопилотом и возможностью задавать собственную программу движения.

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

Какие цели стояли перед нашей командой

  • Превратить обычную газонокосилку в дистанционно управляемый наземный транспортный

  • Реализовать возможность управления устройством с помощью приложения

  • Обеспечить беспрерывное соединение устройства с системой по Wi-Fi

Решение

Выбор протокола

Для реализации проекта команда рассматривала все возможные протоколы взаимодействия с беспилотными аппаратами, включая UranusLink и UAVCAN. Однако, выбор мы остановили на одном из популярных протоколов MavLINK. Данная технология позволяет обмен данные между беспилотным транспортом и наземной станцией управления (GCS — Ground Control Station).  Весомым преимуществом данного протокола низкая задержка передачи пакетов и возможность масштабирования системы.

Брокер сообщений

Архитектура проекта строится на множестве узлов, в которых промежуточным звеном является MAVLink, которое принимает высокоуровневые команды от других систем и передает их на беспилотник. Обмен информацией между узлами осуществляется через брокер сообщений. С его помощью полученные пакеты данных от одной системы, отправляются в очередь на передачу пакета получателю. В качестве брокера сообщений мы выбрали RabbitMQ на основе стандарта AMQP. Он полностью подходит для решения задач проекта так как протокол нетребовательный к ресурсам и обеспечивает минимальные задержки времени при передаче.

MAVLink

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

Несмотря на выбор MAVLink в качестве протокола, предстояло решить, как именно формировать и отправлять сообщения. Мы рассмотрели два инструмента, которые решают эту задачу.

MAVLink C

MAVLink C — это мощная и гибкая библиотека с открытым исходным кодом, предоставляющая реализацию протокола MAVLink на языке C. Однако, следует учитывать следующие потенциальные недостатки при использовании данной библиотеки:

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

  2. Для эффективной работы с MAVLink C необходимо следить за соблюдением определенных стандартов, например, отправка периодических heartbeat-сообщений на наземную станцию для сигнализации о присутствии системы в сети.

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

При выборе MAVLink C важно внимательно оценить эти факторы и решить, соответствует ли данная библиотека требованиям проекта, учитывая затраты на разработку и сложности, связанные с ее использованием.

MavSDK

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

Несмотря на удобный программный интерфейс, библиотека имеет несколько недостатков. Отсутствие возможности точной настройки маршрутов у газонокосилок стало одной из проблем MavSDK. Библиотека автоматически добавляет пакеты смены скорости, управлениями лезвиями. Такое решение нам не подходило, поскольку для нас была крайне важна точность в постановке маршрутов. Чтобы обойти это ограничение пришлось запрограммировать собственную надстройку над MavSDK, прибегнув к помощи MAVLink C.

Еще одной проблемой была не правильная отправка сообщений в последних версиях библиотеки, что приводило к случайной потере пакетов данных. Выявление причины потери пакетов оказалось сложной задачей. Мы анализировали код и исключали влияние внешних факторов, таких как операционная система, другие программы и сетевые протоколы. При изучении передаваемых битов данных стало очевидно, что проблема связана с формированием пакетов данных. Решение оказалось неоднозначным. Мы перешли на более старую версию MavSDK, чтобы избежать проблемы с формированием пакетов. Однако, это привело к новой проблеме: более ранние версии не поддерживали отправку RTK-корректировок, которые обеспечивают сантиметровую точность с помощью GPS. Мы изучили протокол MAVLink в отношении отправки RTK-сообщений и реализовали обмен данными с использованием библиотеки MAVLink C.

Вызовы

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

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

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

Цифры

  • 4000 Сообщений в секунду может обрабатывать система

  • 300+ млн.Столько сообщений в день обрабатывалось в ходе тестов.

  • <5 мс. Занимает весь путь сообщения от ровера до точки хранения.

Результат

  • 4 месяца потрачено на реализацию всей инфраструктуры проекта Moses, включая изучение, разработку и тестирование.

  • Удаленная передача команд, позволяет контролировать газонокосилку от и до: как она поедет, под каким углом и на какое расстояние будут выдвинуты её лезвия.

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

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

Комментарии (0)