Написать нам

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

Все статьи

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

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 — ∞

IT-агентство Delaweb
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.