AndroSot Workspace - ROS2 проект для автономной игры в гуманоидный робофутбол в лиге AndroSot с роботами Roki-4.
Из основных особенностей лиги можно выделить:
- Использование внешних камер: роботы не имеют бортового зрения, используются две боковые камеры
- Централизованное управление роботами: для игры нужен один ноутбук, который управляет сразу всей группой роботов
- Отсутствие GameController: каждая команда может реализовать свой интерфейс для управления состояниями игры, которые можно отправлять вручную по сигналу рефери
Основные особенности робота Roki-4:
- Принимает команды по Bluetooth: любое удалённое управление подразумевает отправку скорости и/или команды при помощи BLE-модуля
- Имеет камеру OpenMV: в AndroSot её может использовать вратарь
- Движок ходьбы реализован на ЗУБР-контроллере: изменять прошивку робота можно только при помощи специальной программы IronArt
Проект состоит из нескольких основных частей:
- configs: здесь хранятся все общие конфигурационные файлы
- docker: здесь хранится Docker-образ, предназначенный для упрощения развертывания проекта
- docs: здесь хранится документация по разным аспектам работы с роботами и проектом
- external: здесь хранятся все внешние зависимости проекта
- src: здесь хранится исходный код проекта, ROS2-пакеты
На данный момент реализованы следующие ROS2 пакеты:
- androsot_bringup: пакет для централизованного запуска нескольких модулей проекта. Сам по себе не содержит кода кроме launch-файлов и файлов конфигурации
- androsot_description: пакет, содержащий конфигурационные файлы и модели всех устройств, необходимых для участия в AndroSot
Для того, чтобы начать работу с проектом, необходимо выполнить следующие действия:
- Шаг 1: клонировать репозиторий проекта
git clone https://wavegit.mipt.ru/starkit/androsot_workspace.git --recursive # клонируем репозиторий и все submodulesДанное действие перенесёт все файлы проекта на Ваше устройство. Обратите внимание, что для успешного выполнения команды необходимо быть зарегистрированным на WaveGit и иметь роль в группе Starkit не ниже Developer
- Шаг 2: docker build
cd androsot_workspace
./androsot.py --build # или ./androsot.py -bДанное действие запустит процесс сборки контейнера по файлу образа. Используйте данную команду, если в процессе разработки Вам необходимо пересобрать контейнер для установки необходимых зависимостей.
На данный момент существуют следующие опции запуска контейнера:
- Запуск терминала для разработки:
./androsot.py --run-terminal # или ./androsot.py -tДанное действие создаст Docker-контейнер и запустит терминал внутри этого контейнера, где можно выполнять различные команды.
Данная команда в первую очередь необходима при разработке проекта.
Для того, чтобы начать работу с проектом в терминале, в первую очередь необходимо выполнить сборку проекта. Для этого в терминале контейнера выполните команду:
cd workspace # переходим в рабочую директорию
./workspace_build # выполняем сборку ROS2 проекта
source install/setup.bash # автоматически задаём в контейнере пути до исполняемых файлов проекта и библиотекДалее можно выполнять запуск любых нод и launch-файлов проекта.
На данный момент существуют следующие launch-файлы:
- androsot_ble_bridge : robot_control.launch.py - запускает BLE коннектор (старый) и ноду для связи с этим коннектором.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- androsot_bringup : camera.launch.py - ноды, необходимые для работы с камерой. В результате будет запущен процесс передачи изображения и CameraInfo через топики.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- androsot_bringup : camera.test.launch.py - запускает camera.launch.py вместе с нодой rviz2 для проверки работы камеры
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- androsot_bringup : localization.launch.py - запускает ноду локализации роботов с одной камерой и её калибровкой.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- team_id: идетификатор команды роботов для локализации. По-умолчанию: team_red
- androsot_bringup : localization.test.launch.py - запускает ноду локализации роботов с одной камерой и её калибровкой в Debug режиме с rviz2 для проверки.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- team_id: идетификатор команды роботов для локализации. По-умолчанию: team_red
- androsot_bringup : localization.double.launch.py - запускает ноду локализации роботов с двумя камерами и калибровкой.
Аргументы:
- camera_id_1: первая подключаемая камера. По умолчанию: camera_1
- device_id_1: идентификатор первой камеры в Ubuntu. По-умолчанию: /dev/video2
- camera_id_2: вторая подключаемая камера. По умолчанию: camera_2
- device_id_2: идентификатор второй камеры в Ubuntu. По-умолчанию: /dev/video4
- team_id: идетификатор команды роботов для локализации. По-умолчанию: team_red
- androsot_bringup : localization.double.test.launch.py - запускает ноду локализации роботов с двумя камерами и калибровкой в Debug режиме с rviz2 для проверки.
Аргументы:
- camera_id_1: первая подключаемая камера. По умолчанию: camera_1
- device_id_1: идентификатор первой камеры в Ubuntu. По-умолчанию: /dev/video2
- camera_id_2: вторая подключаемая камера. По умолчанию: camera_2
- device_id_2: идентификатор второй камеры в Ubuntu. По-умолчанию: /dev/video4
- team_id: идетификатор команды роботов для локализации. По-умолчанию: team_red
- androsot_bringup : vision_tf.launch.py - запускает ноду калибровки камеры (вычисление экстринсиков) с камерой.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- androsot_bringup : vision_tf.test.launch.py - запускает ноду калибровки камеры (вычисление экстринсиков) в Debug режиме с камерой и rviz2 для проверки.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- device_id: идентификатор камеры в Ubuntu. По-умолчанию: /dev/video2
- androsot_bringup : vision_tf.double.launch.py - запускает ноду калибровки (вычисление экстринсиков) с двумя камерами.
Аргументы:
- camera_id_1: первая подключаемая камера. По умолчанию: camera_1
- device_id_1: идентификатор первой камеры в Ubuntu. По-умолчанию: /dev/video2
- camera_id_2: вторая подключаемая камера. По умолчанию: camera_2
- device_id_2: идентификатор второй камеры в Ubuntu. По-умолчанию: /dev/video4
- androsot_bringup : vision_tf.double.test.launch.py - запускает ноду калибровки (вычисление экстринсиков) с двумя камерами в Debug режиме и rviz2 для проверки.
Аргументы:
- camera_id_1: первая подключаемая камера. По умолчанию: camera_1
- device_id_1: идентификатор первой камеры в Ubuntu. По-умолчанию: /dev/video2
- camera_id_2: вторая подключаемая камера. По умолчанию: camera_2
- device_id_2: идентификатор второй камеры в Ubuntu. По-умолчанию: /dev/video4
- androsot_description : cube.launch.py - запускает robot_state_publisher для ArUco-куба. Не рекомендуется использовать без дополнительных нод.
- androsot_description : cube.test.launch.py - запускает cube.launch.py вместе с нодой rviz2, сконфигурированной для просмотра публикации tf куба.
- androsot_vision_tf : runtime_vision_tf.launch.py - запускает ноды, необходимые для работы калибровки (поиска экстринсиков). Невозможно использовать без камеры, предварительно запустите дополнительные ноды.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
- androsot_vision_tf : runtime_vision_tf.debug.launch.py - запускает runtime_vision_tf.launch.py с нодой детекции ArUco и rviz2 для тестирования и отладки. Невозможно использовать без камеры, предварительно запустите дополнительные ноды.
Аргументы:
- camera_id: подключаемая камера. По умолчанию: camera_1
Задачи разработчиков описаны в разделе Issues на WaveGit. В процессе работы над своей задачей необходимо создать новую ветку с названием в формате <task_tag>/<task_name>, где <task_tag> - это назначение задачи, а <task_name> - её короткое название(например, feature/ble_protocol_build или fix/ball_detection).
Когда работа над задачей завершена, необходимо сделать Merge Request (создать его можно на WaveGit), после чего дождаться Code-Review и Approve на слияние ваших разработок.