Skip to content

Repository files navigation

Инструкция по подключению к симуляции робота

1. Установка зависимостей

  1. Скачайте и установите Webots v.R2025a: https://cyberbotics.com/#download
  2. Клонируйте репозиторий https://git.robot.cybertech.ai/champ_bot/task1

2. Запуск симуляции

Запустите 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

3. Формат взаимодействия

Отправка команд

Каждая команда состоит из двух чисел:

  • 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))

Приём телеметрии

Эмулятор шлёт пакеты:

  1. Заголовок b"WBTG". (Ранее был WBT2❗)
  2. 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, рад/с)🆕
  3. Кол-во точек лидара (N, uint32, 4 байта).
  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)

Пример

Для удобства можете ознакомиться с готовым примером demo.py

Этот клиент отправляет команды движения <linear_x, angular_z> и получает телеметрию: одометрия, лидар, GPS, гироскоп 🆕 После подключения вы должны увидеть, как робот начинает двигаться по лабиринту, а в терминале появляются данные о его положении и сенсорах.

4. Задача участника

Ваш код должен подключаться к контроллеру через:

  • UDP порт 5555 для отправки команд
  • TCP порт 5600 для получения телеметрии
  • Упаковать решение в Docker контейнер, который можно будет запустить на Linux-сервере: (в контейнере должны быть только файлы вашего клиента/алгоритма. Файлы лабиринта, контроллера и сам Webots в контейнер добавлять не нужно.)

5. Сдача результата

После завершения разработки:

  • Убедитесь, что ваше решение запускается в контейнере и управляет роботом.
  • Загрузите код и Dockerfile в индивидуальный репозиторий, который вам предоставили организаторы.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages