Богомолов В.И.

Кибериммунное управление AlphaBot через 4Diac forte с помощью MQTT

В проекте показана возможность создания кибериммунной системы управления путем портирования среды исполнения IEC 61499, в частности Eclipse 4diac forte, на операционную систему KasperskyOS. Использование 4diac forte позволяет в значительной мере скрыть от разработчика прикладного ПО сложность работы с KasperskyOS. При этом есть возможность разрабатывать защищенные приложения, использовать разбиение задач на независимые компоненты и конфигурировать правила их взаимодействия.

1. Задачи проекта

  • Реализовать управление AlphaBot по интерфейсу GPIO, управляемому функциональной логикой, запущенной в среде исполнения IEC 61499 Eclipse 4diac forte, которая портирована на KasperskyOS.
  • Обеспечить кибериммунность системы управления, выделив сетевое MQTT-взаимодействие в отдельное приложение, которое взаимодействует с forte только по IPC.

2. Результатом работ по проекту является

Для портирования forte на KasperskyOS необходимо определить 4diac FORTE в качестве отдельной сущности. Для этого следует модифицировать исходную систему сборки 4diac forte для ее сборки в составе образа решения KasperskyOS теми средствами компиляции, что поставляются в составе SDK KasperskyOS Community Edition. Помимо сущности Forte в нашем решении также присутствует служебная сущность Einit и модуль безопасности KSM-module. За основу решения был взят образец embedded_vfs из SDK KasperskyOS. Архитектура решения представлена на рисунке 1.

Рис. 1. Архитектура проекта forte для KasperskyOS

Здесь сущность Forte слинкована с библиотеками для работы с файловой системой, сетевым стеком и драйвером GPIO.

Для демонстрации работы с вводом-выводом в KasperskyOS был разработан функциональный блок для управления моторами AlphaBot через GPIO. Контакты GPIO конфигурируются и могут выступать как в роли входа, так и в роли выхода. Фото робота AlphaBot представлено на рисунке 2.

Рис. 2. Робот AlphaBot

Интерфейс функционального блока для управления двигателями представлен на рисунке 3.

Рис. 3. Интерфейс функционального блока для управления моторами AlphaBot

Функциональность, которую содержит наш новый функциональный блок, позволяет выполнять следующие команды (значение на вход CMD):

  • остановиться;
  • двигаться вперед (оба колеса крутятся вперед);
  • двигаться назад (оба колеса крутятся назад);
  • поворот налево (правое колесо крутится вперед, а левое остановлено);
  • поворот направо (левое колесо крутится вперед, а правое остановлено);

Команды выполняются в течение заданного в миллисекундах времени (значение на вход DURATION). Реализация команд осуществляется путем выдачи команд на GPIO-порт

Рис. 4. Команды для управления моторами AlphaBot

Инициализируем нужные нам пины и включаем моторы. После этого в зависимости от поданной команды робот либо стоит на месте, либо движется вперед/назад либо поворачивает направо/налево в течении определенного количества миллисекунд, которое тоже задается. В самом конце, после выполнения всех действий, выключаем моторы и закрываем GPIO-порт.

4diac позволяет передавать команды в среду исполнения по различным сетевым протоколам. Например, может быть использован протокол MQTT, для которого есть библиотеки в SDK KasperskyOS CE. Минимальное приложение для получения команд управления (вперед, стоп, налево, направо, назад) AlphaBot в 4diac имеет вид:

Рис. 5. Программа управления для AlphaBot c возможностью получения команд по MQTT

В минимальном приложении используются разработанные нами функциональные блоки для управления моторами (AB_FORWARD, AB_LEFT, AB_RIGTH, AB_STOP для управления моторами), функциональный блок для разбора JSON-сообщения и выделения команды AB_CMDPARSER и стандартный функциональный блок SUBSCRIBER, который позволяет работать с различными протоколами. В минимальном приложении используется протокол MQTT, который есть в составе FORTE.

Кибериммунная методология разработки под KasperskyOS рекомендует разделять функциональность приложения на модули для повышения устойчивости приложения к взлому. Мы выделили сетевое взаимодействие по MQTT в отдельное приложение, которое взаимодействует с forte только по IPC. Это позволяет уменьшить вероятность взлом программы forte. Архитектура приложения 4diac в этом случае будет аналогична представленной в предыдущем случае.

Рис. 6. Управление 4Diac forte готовое к кибериммунной архитектуре решения

Чтобы проект 4diac заработал, для среды выполнения forte были добавлены новые блоки:

  • AB_COSCMD_RECEIVER — получить сообщение по каналу IPC от сущности с MQTT-клиентом.
  • AB_FORWARD — запустить двигатели AlphaBot. Он будет двигаться вперед в течение заданного времени.
  • AB_STOP — выключить двигатели AlphaBot.
  • AB_LEFT — запустить двигатели AlphaBot. Он будет двигаться влево в течение заданного времени.
  • AB_RIGHT — запустить двигатели AlphaBot. Он будет двигаться прямо в течение заданного времени.

При этом сам проект разделен на две сущности:

  • forte.Client — подписчик mqtt с сетевыми правами;
  • forte.Forte — приложение Forte для управления ботами.
Рис. 7. Общая кибериммунная архитектура решения разделенная на 2 сущности

3. Проверка работоспособности решения в проекте

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

Рис. 8. Траектория движения AlphaBot

Соответствующая программа для задания траектории движения альфабота при помощи нового функционального блока в среде разработки Eclipse 4diac IDE показана на на рисунке 9.

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

Исходный код решения доступен по ссылке https://gitflic.ru/project/slavikmai/deep-forte-on-kos-with-fboot. В этом же репозитории можно найти изображения с эталонным выводом решения на базе KasperskyOS.

Для сборки решение с управлением AlphaBot с помощью MQTT в кибериммунной архитектуре воспользуйтесь проектом https://github.com/ElPallasCat/kos_abot_mqtt. Для сборки примера и запуска полученного образа используйте скрипт cross-build.sh.

4. Дополнительная информация по проекту

Основная идея проекта и результат работ были опубликованы на Habr.com в статье «Опыт портирования Eclipse 4diac на KasperskyOS CE».