Победитель хакатона «Управляй с KasperskyOS», Москва, Ноябрь 2022
Структура программного решения системы управления робота AlphaBot на Kaspesrsky OS показана на рисунке
Программное решение состоит из трех основных сущностей.
request src = echo.Client, dst = echo.ConfigurationServer
{
grant()
}
response src = echo.ConfigurationServer, dst = echo.Client
{
grant()
}
Сущность Клиент обеспечивает подключение по MQTT к серверу управления. Для авторизации на сервере используется логин и пароль. После подключения, Клиент высылает контрольное сообщение на указанный топик. Логин, пароль, адрес сервера управления и топик Клиент запрашивает у Сервера Конфигурации через IPC канал.
В составе модуля Клиент находятся два подмодуля — Валидатор (Validator) — проверят формат и содержание сообщения, пришедшего от сервера управления, и Маршрутизатор Команд (Comm Router) — обеспечивает посылку соответствующего сообщения на предоставленный для него IPC канал.
Клиент принимает от сервера управления два основных вида команд:
Команды принимаются в формате JSON. Шаблон команды:
{
“cmd” : “<forward, left, right, back, stop>”,
“value”: 1.4 (double),
“spd”: 0.6 (double [0, 1.0]) - optional
}
Сущность Система Навигации обеспечивает расчет текущего и оставшегося времени, направления маневра, необходимую мощность каждого из двигателей. Расчет текущего маневра происходит в отдельном потоке, с частотой опроса 100Гц. Поэтому точность остановки составляет до 1/100 секунды.
Мощность двигателя регулируется с помощью ШИМ контроллера, реализованного программными средствами. Частота работы программного ШИМ котроллера 200 Гц. ШИМ контроллер работает постоянно в выделенном потоке, просыпаясь не чаще чем 400 раз в секунду. ШИМ контроллер и расчет текущего маневра являются частью системы управления, поэтому они работают в отдельных программных потоках в рамках одной сущности Системы Навигации, а их взаимодействие реализуется с помощью общей памяти и mutex.
Политики безопасности решения настроены таким образом, что каждая сущность имеет свои права доступа к системе. Например, только сущность Система Навигации имеет доступ к GPIO:
request src=echo.NavigationController, dst=kl.drivers.GPIO
{
grant()
}
А доступ к VfsNet имеет только сущность Клиент:
request src = echo.Client, dst = kl.VfsNet
{
grant()
}
1. Установите SDK Kaspersky OS CE https://os.kaspersky.ru/development/
2. Прошейте SD-карту, которая будет использоваться в AplhaBot. Инструкция находится по ссылке: https://support.kaspersky.ru/help/KCE/1.1/ru-RU/preparing_sd_card_rpi.htm.
3. Запустите в локальной сети MQTT-брокер. Установите в нем логин и пароль.
4. Узнайте IP-адрес компьютера, на котором запущен брокер
$ ip a
5. Введите данные для доступа в сеть, указанные на точке доступа, закрепленной на верхней крышке робота AlphaBot.
6. Извлеките исходный код решения
$ git clone –recurse-submodules https://github.com/MrQuaters/kos-abot.git
7. Указажите адрес машины с MQTT-брокером, топик, логин и пароль в файле configuration_server/src/server.c
8. Соберите образ командой:
$ ./image-build
9. Скопируйте полученный образ на SD-карту. Инструкция: https://support.kaspersky.ru/help/KCE/1.1/ru-RU/running_sample_programs_rpi.htm.
10. Включите AlphaBot. Результат: на сабтопик /ctl топика, указанного в конфигурации, AlphaBot опубликует сообщение “alive”, сигнализирующее об успешном включении устройства.
11. Опубликуйте команду {“cmd”:“forward”, “value”:1.0,“spd”:0.8} на топик, указанный в конфигурации. Результат: робот должен ехать вперед 1 секунду со скоростью 80%.
12. Опубликуйте команду {“cmd”:“back”, “value”:2.0,“spd”:0.5} на топик, указанный в конфигурации. Результат: робот должен ехать назад 2 секунды со скоростью 50%.
13. Опубликуйте команду {“cmd”:“right”, “value”:1.1,“spd”:0.9} на топик, указанный в конфигурации. Результат: поворачивать направо в течение 1.1 секунды со скоростью 90%.
14. Опубликуйте команду {“cmd”:“left”, “value”:0.5} на топик, указанный в конфигурации. Результат: робот должен поворачивать налево в течение 0.5 секунд.
15. Опубликуйте команду {“cmd”:“forward”, “value”:100.0,“spd”:0.5} на топик, указанный в конфигурации. Во время выполнения этой команды опубликуйте команду {“cmd”:“stop”}. Результат: после получения команды stop робот должен остановиться.
В ноябре 2022 года проект стал победителем открытого хакатона «Управляй с KasperskyOS».
«Я создал систему управления для AlphaBot на базе KasperskyOS. Мое решение обеспечило защиту системы на всех уровнях: начиная от передачи команд с сервера роботу, заканчивая межпроцессным взаимодействием» — рассказал победитель.
Информация о хакатоне — в статье «Более 100 участников собрал совместный хакатон МАИ и „Лаборатории Касперского“».
О кооперации АО «Лаборатория Касперского» и Московского авиационного института — в статье «Как вузу запустить новое технологическое направление».