- Скачайте и установите Webots v.R2025a: https://cyberbotics.com/#download
- Клонируйте репозиторий https://git.robot.cybertech.ai/champ_bot/task1
Запустите Webots и откройте предоставленный файл мира (лабиринт).
cobra_flex_demo.wbt - основной файл мира webots
При старте мира автоматически поднимается контроллер udp_diff, который:
- слушает команды управления по адресу 127.0.0.1:5555 (UDP)
- отправляет телеметрию по адресу 127.0.0.1:5600 (TCP/UDP)
Команды для запуска webots с лабиринтом:
mac:
/Applications/Webots.app/Contents/MacOS/webots --stdout --stderr ./worlds/cobra_flex_demo.wbt
win:
"C:\Program Files\Webots\webots.exe" --stdout --stderr .\worlds\cobra_flex_demo.wbt
linux
/webots/webots --stdout --stderr ./worlds/cobra_flex_demo.wbt
или
snap run webots --stdout --stderr ./worlds/cobra_flex_demo.wbt
Каждая команда состоит из двух чисел:
- linear_x — линейная скорость (м/с), положительное значение = вперёд, отрицательное = назад.
- angular_z — угловая скорость (рад/с), положительное = поворот влево, отрицательное = вправо. Формат: два float32 (малоразмерные числа с плавающей точкой), little-endian. Размер пакета: 8 байт.
Пример на Python:
import socket, struct
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
packet = struct.pack("<2f", 0.2, 0.0) # ехать вперёд 0.2 м/с, без поворота
sock.sendto(packet, ("127.0.0.1", 5555))
Эмулятор шлёт пакеты:
- Заголовок b"WBTG". (Ранее был
WBT2❗) - 9 чисел float32 (36 байт):
- odom_x — одометрия X (м)
- odom_y — одометрия Y (м)
- odom_th — угол робота (рад)
- vx — скорость по X (м/с)
- vy — скорость по Y (м/с)
- vth — угловая скорость (рад/с)
- wx — угловая скорость по оси X (roll rate, рад/с) 🆕
- wy — угловая скорость по оси Y (pitch rate, рад/с)🆕
- wz — угловая скорость по оси Z (yaw rate, рад/с)🆕
- Кол-во точек лидара (N, uint32, 4 байта).
- N значений float32 — массив дистанций лидара (м).
b'WBT2\xd7\xa3\x00&\xd7\xa3\x00\x8b\x00\x00\x00\xa5\x00\x00\x00\x00\...xa1@U\xc4\x8e?\xf7\xb0\x88?\xcb`\x86?\xafL\x85?'
=>
(4.463096537817306e-16, -2.4775162687047967e-32, -1.1102230246251565e-16, 0.0, 0.0, 0.0)
Этот клиент отправляет команды движения <linear_x, angular_z> и получает телеметрию: одометрия, лидар, GPS, гироскоп 🆕 После подключения вы должны увидеть, как робот начинает двигаться по лабиринту, а в терминале появляются данные о его положении и сенсорах.
Ваш код должен подключаться к контроллеру через:
- UDP порт 5555 для отправки команд
- TCP порт 5600 для получения телеметрии
- Упаковать решение в Docker контейнер, который можно будет запустить на Linux-сервере: (в контейнере должны быть только файлы вашего клиента/алгоритма. Файлы лабиринта, контроллера и сам Webots в контейнер добавлять не нужно.)
После завершения разработки:
- Убедитесь, что ваше решение запускается в контейнере и управляет роботом.
- Загрузите код и Dockerfile в индивидуальный репозиторий, который вам предоставили организаторы.