Пример программы
Рассмотрим взаимодействие участника с программами SSL-Vision, GrSim и Game Controller. Для удобства, будем рассматривать уже готовый пример, созданный бразильской командой RobôCIn специально для новых команд в лиге. Ниже будет разбираться актуальный (на момент декабря 2024) код в данном репозитории. Вы можете самостоятельно собрать проект по инструкции из описания репозитория и убедиться в том, что всё работает.
В файле src/main.cpp реализована основная программа, она:
- получает от SSL-Vision/GrSim координаты мяча и роботов, а также геометрические размеры поля
- выводит их пользователю
- отправляет команды управления на синих роботов.
По регламенту лиги, взаимодействие между программами в общей сети осуществляется с помощью протокола Google Protobuf. Стандартные адреса и порты, а также содержание передаваемых пакетов можно посмотреть тут.
Также вы можете ознакомиться с нашей реализацией - программой LARCmaCS.
Получение данных от SSL-Vision
В данном репозитории за получение данных отвечает класс RoboCupSSLClient, функционал которого описан в файле .../robocup_ssl_client.cpp.
Формат получаемых данных
packet
(инициализируется на строке 31) - пакет, содержащий информацию о поле, полученный от SSL-Vision/GrSim.
Далее программа проверяет, есть ли в этом пакете данные о захваченном с поля (detection, проверяется на строке 42) или геометрические размеры поля (строки 101-143).
В первом случае, программа выводит информацию о работе SSL-Vision (строки 47-59), обрабатывает данные о мяче (строки 64-79) и о роботах (строки 81-99).
Все передаваемые параметры detection можно найти в файле .../messages_robocup_ssl_detection.proto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
В директории include/ssl-client/protobuf-files/pb/proto/ можно найти аналогичные списки параметров для всех стандартных пакетов. Тоже самое находится на официальном сайте лиги.
Управление роботом в симуляторе
Тут же (строки 86-90) посылаются команды на синих роботов, чтобы показать, что зрение работает:
1 2 3 4 5 |
|
sendCommand(velX, id) - простая функция, которая отправляет на робота с индексом id, скорость движения вперед:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Видно, что функция забивает нулями все неиспользуемые параметры, передаваемые на робота.
Получение команд от Game Controller
Получение команд от судей не показано в файле main.cpp
, но реализовано в файле .../referee_ssl_client.cpp. Работает аналогично с получением пакетов от SSL Vision
Для того чтобы подробнее узнать о коммуникации внутри сети в лиге RoboCup SSL, изучите исходный код описанного репозитория. Если остались вопросы, не стесняйтесь связываться любым удобным способом с нами и спрашивать лично, будем рады помочь!
Спасибо за проявленный интерес к лиге!