Обменивайтесь Данными для Микросервисов MAVLink как Протокол Протокола и Параметра Миссии Используя Simulink

В этом примере показано, как реализовать микросервисы MAVLink как протокол Миссии и протокол Параметра с помощью Сериализатора MAVLink, и MAVLink Deserializer блокируется в Simulink®.

Этот пример использует:

  • MATLAB®

  • Simulink®

  • UAV Toolbox™

  • Stateflow™

  • Instrument Control Toolbox™

  • DSP System Toolbox™

Микросервис протокола Миссии в MAVLink позволяет Станции наземного управления (GCS) связываться с беспилотником, чтобы отправить и получить информацию о миссии, должен был выполнить миссию. Микросервис протокола Миссии позволяет вам:

  • Загрузите миссию от GCS до беспилотника

  • Загрузите миссию от беспилотника

  • Установите текущий элемент миссии

Микросервис протокола Параметра в MAVLink позволяет вам обмениваться параметрами, представляющими важную конфигурационную информацию между беспилотником и GCS. Параметры представлены как пары "ключ-значение".

Этот пример объясняет как:

  • Загрузите миссию, состоящую из 10 waypoints от GCS до беспилотника, эмулированного в Simulink. Используйте QGroundControl (QGC) в качестве GCS. Если вам не установили QGC на хосте - компьютере, загрузите его отсюда.

  • Читайте и запишите данные к списку 28 параметров от QGC и беспилотника.

Модель проекта

Чтобы начать, выполните эти шаги:

1. Откройте exampleHelperMAVLinkMissionAndParamProtocol файл в MATLAB и нажмите Run. Это создает переменные рабочей области, требуемые инициализировать данные в Simulink и загрузить параметры автопилота на QGC.

2. Запустите модель в качестве примера в Simulink путем нажатия на Open Model наверху этой страницы. Можно также использовать следующую команду, чтобы запустить модель в любое время после того, как вы нажали кнопку Open Model однажды:

open_system('MissionAndParameterProtocolUsingMAVLink.slx');

Модель Simulink состоит из:

1. Setup модели: Эта область в модели состоит из двух блоков подсистемы - Инициализируют Хранилища Функциональных и Глобальных данных. Эти блоки используются, чтобы инициализировать данные, которые будут использоваться в модели от сигналов, сгенерированных в базовом рабочем пространстве.

2. Протокол Rx: Эта область в модели состоит из receive_udp блок подсистемы, который используется, чтобы получить данные о UDP из QGC. Подсистема содержит функцию Simulink, которая считывает данные MAVLink по UDP от QGC в каждом шаге симуляции. Полученные данные MAVLink передаются диаграмме Stateflow для декодирования и парсинга.

3. Протокол миссии: Эта область в модели состоит из двух блоков подсистемы, которые отправляют запросы миссии и подтверждения миссии к QGC. Эти функции вызваны от диаграммы Stateflow, которая реализует микросервис миссии.

4. Миссия и Протокол Параметра: диаграмма Stateflow, которая реализует миссию и логику параметра в модели.

Полученные данные MAVLink десериализовываются в process_udp Функция Simulink и затем передала логике Stateflow, которая выполняет четыре задачи:

a. ReceivingMission: Эта субдиаграмма Stateflow получает миссию от QGC и декодирует waypoints в миссии. Это реализует протокол микросервиса Миссии, который загружает миссию от QGC, чтобы гудеть, как описано в Загрузке Миссия к Транспортному средству.

b. SendingParams: Эта субдиаграмма Stateflow загружает параметры, созданные в базовом рабочем пространстве к QGC следующим протокол параметра, как описано в Чтении Все Параметры.

c. SendSingleParams: Эта субдиаграмма Stateflow задает, как отправить один параметр от беспилотника к QGC, как описано в Чтении Один Параметр.

d. WriteSingleParam: Эта субдиаграмма Stateflow задает, как обновить значения параметров от QGC и видеть их на беспилотнике, как описано в Параметрах Записи.

5. Логика, чтобы считать полученный waypoints и параметры: Stateflow реализует эти два протокола и выводит полученный waypoints и загруженные значения параметров.

Следующий раздел объясняет, как загрузить миссию от QGC до беспилотника.

Загрузите миссию от QGC, чтобы гудеть и запустить модель Simulink

1. Запустите QGC и перейдите к Представлению Плана.

2. Предварительно запланированная миссия, MissionProtocol.plan, доступна с этим примером. Нажмите Open Model наверху этой страницы, чтобы сохранить файл плана к вашему компьютеру. После того, как вы сохранили .plan файл, запускаете QGC и нажимаете File> Open, чтобы загрузить план на QGC.

После того, как вы загрузите план, миссия отображается в QGC.

3. Запустите модель Simulink. Модель Simulink отправляет сообщение HEARTBEAT по MAVLink к QGC, и таким образом установите связь с QGC.

4. Нажмите Upload в правом верхнем из интерфейса QGC, чтобы загрузить миссию от QGroundControl.

5. Заметьте, что значения широты и долготы от первых двух waypoints загруженной миссии отображаются в Simulink.

6. Измените waypoint1 и waypoint2 в QGC путем перетаскивания waypoints в другое место в плане. Загрузите модифицированную миссию путем нажатия на Upload Required.

7. Наблюдайте модифицированные значения Широты/Долготы для waypoint 1 и 2 в Simulink.

Измените параметры в QGC и отправьте их в Simulink

Когда вы запускаете exampleHelperMAVLinkMissionAndParamProtocol файл в командном окне MATLAB, переменная рабочей области apParams создается, который является массивом 28 параметров рейса.

Когда вы запускаете модель Simulink, она соединяется с QGC, и QGC читает параметры из Simulink.

Параметры могут визуализироваться и изменяться в QGC:

1. Перейдите к панели Setup Транспортного средства в QGC. Выберите вкладку Parameters.

2. Во вкладке Parameters выберите Other, чтобы перечислить все параметры что QGC, считанный из Simulink.

3. Модель отображает значения для GDNC_TSTAR и параметров GDNC_TURN_LEAD. Нажмите GDNC_TSTAR и параметры GDNC_TURN_LEAD и измените их соответствующие значения в QGC.

4. QGC пишет значения этих модифицированных параметров с помощью микросервиса протокола параметра для Simulink. Наблюдайте значения параметров, изменяемые в Simulink.

Другие Вещи попробовать

Диаграммы Stateflow, объясненные в этом примере, не реализуют следующий сценарий:

  • Если связь между беспилотником и QGC прерывается в какой-то момент и снова соединяется, загрузка протокола миссии должна возобновиться после waypoint, от которого у беспилотника были передаваемые данные перед разъединением.

Можно изменить диаграммы Stateflow, так, чтобы, даже когда коммуникация привязывается, Stateflow помнил последний переданный waypoint.