Решение для удаленного управления наземными беспилотниками

Все статьи

[add_title]

16 февраля, 2022 10 минут
  • IoT

Разработка беспилотного транспорта

О проекте

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

В этом материале мы расскажем об одном из элементов системы Moses: протоколе обмена данными между узлами системы и ровером, обеспечивающем непрерывную двустороннюю доставку информации.

Цели
  • Сделать из обычной газонокосилки автоматизированную. Комплект оборудования устанавливается на обычные косилки.
  • Получить возможность удаленного управления косилками. Оператор через приложение может отправлять косилки на “миссии”.
  • Добиться высокой безопасности и доступности. Наши решения позволяют обеспечить гарантированное соединение с аппаратом.
Решение

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

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



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

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



MavLINK

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

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



MAVLink C

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

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



MavSDK

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

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

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

Вызовы

Высокие требования скорости и точности обмена

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


Недостаточно развитый инструментарий

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


Низкая надежность MavSDK

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

Цифры
  • 4000 Сообщений в секунду может обрабатывать система
  • 300+ млн. Столько сообщений в день обрабатывалось в ходе тестов.
  • <5 мс. Занимает весь путь сообщения от ровера до точки хранения.

Результат

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

Технологии

  • C++
  • MAVlink
  • RabbitMQ

Сотрудничество

2022 — ∞