7.8 KiB
mvch — подготовка к ЧВТ-2026
Репозиторий для самостоятельного изучения и тренировок по модулям ЧВТ.
module2/module_b.py— модуль Б, навигация РМК-2 по ArUco.module3/— модуль В, датасет и распознавание инструментов.module4/— модуль Г, веб-FMS для двух роверов на React/Bun.module5/— модуль Д, единый сценарий RMC1 + RMC2.
Все актуальные модули находятся в main. Ветки module2–module5 сохранены
как промежуточные этапы разработки.
Запуск в Ubuntu VM
Нужен установленный официальный симулятор, ROS 2 Jazzy, rclpy, tf2_ros.
Дополнительные pip-пакеты и сборка colcon самого решения не нужны.
Если ROS2 или симулятор отсутствуют
Штатная площадка должна предоставлять готовые ROS2 Jazzy, Webots и workspace симулятора. Сначала попросите эксперта восстановить окружение. Для самостоятельной установки нужен Ubuntu 24.04; ROS2 устанавливается по официальной инструкции. После подключения ROS-репозитория:
sudo apt update
sudo apt install -y ros-jazzy-desktop ros-jazzy-rmw-fastrtps-cpp \
ros-jazzy-navigation2 ros-jazzy-nav2-bringup ros-jazzy-moveit \
ros-jazzy-tf2-tools ros-jazzy-cv-bridge ros-jazzy-image-transport \
ros-jazzy-webots-ros2 python3-colcon-common-extensions python3-rosdep ros-dev-tools
Webots ставится из репозитория Cyberbotics:
sudo install -d /etc/apt/keyrings
sudo wget -q -O /etc/apt/keyrings/Cyberbotics.asc https://cyberbotics.com/Cyberbotics.asc
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/Cyberbotics.asc] https://cyberbotics.com/debian binary-amd64/" \
| sudo tee /etc/apt/sources.list.d/Cyberbotics.list
sudo apt update
sudo apt install -y webots
Исходники официального симулятора:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://gitlab.mobird.dev/fms_group/ar_webots_fms_ros2.git
git clone https://gitlab.mobird.dev/fms_group/ar_arm95_moveit_config.git
git clone https://gitlab.mobird.dev/fms_group/ar_aruco_detect_ros2.git
git clone https://gitlab.mobird.dev/fms_group/ar_dual_lidar_merge_ros2.git
git clone https://gitlab.mobird.dev/fms_group/ar_nav_ros2.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
rosdep install --from-paths src -y --ignore-src --rosdistro jazzy
colcon build --symlink-install
Терминал 1 — штатный симулятор (один экземпляр):
source /opt/ros/jazzy/setup.bash
source ~/ros2_ws/install/setup.bash
ros2 launch ar_webots_fms_ros2 module2.launch.py
Терминал 2 — решение:
cd ~/mvch
git pull --ff-only
source /opt/ros/jazzy/setup.bash
source ~/ros2_ws/install/setup.bash
python3 module2/module_b.py --target 14
- Поставьте РМК-2 центром над любой меткой. Код сам определит стартовый ID и начальную ориентацию.
- Код заранее выведет кратчайшие маршруты к цели и обратно. Enter запускает движение к цели.
- После
TARGET_REACHEDпоставьте динамическое препятствие и нажмите Enter. - Код ещё раз выведет обратный маршрут. Следующий Enter запускает возврат.
- Если лидар увидит преграду на ребре, ровер вернётся к предыдущей метке,
исключит ребро и выведет
ROUTE_REPLANNED. - Успешный конец —
MISSION_FINISHED.Ctrl+Cпубликует нулевую скорость.
На физическом РМК-2 команда такая же:
python3 module2/module_b.py --target 14
Единственный аргумент — целевой ID:
python3 module2/module_b.py --target 14
Остальные настройки находятся в начале module2/module_b.py:
ROWS,COLUMNS— площадка 5×5; для старого симулятора поставить 6 и 6;SPACING— шаг между метками;BLOCKED— закрытые ID, например{7, 8, 13};MAX_SPEED,MAX_ANGULAR— скорости;STOP_DISTANCE,TOLERANCE,SCAN_TOPIC— lidar и точность остановки.
Как устроен код
Читайте в таком порядке: shortest_path → localize → drive_to → follow →
main. BFS строит кратчайший путь только по соседним свободным ячейкам.
Схема поля: 0=(0,0), 1=(0,+1), 5=(-1,0). Старт может быть на любой
метке. По TF видимой ArUco код связывает сетку с odometry, поэтому начальная
ориентация тоже может быть любой. Между соседними метками ровер использует
odometry, а на каждой следующей метке снова корректируется по ArUco.
Загруженная карта сама по себе не даёт RMC2 команды «ехать к marker ID». В выданном
workspace RMC2 управляется через /RMC2/cmd_vel; Nav2 настроен для RMC1. Поэтому
модуль Б напрямую использует ArUco, odometry и /RMC2/scan_front.
Логи
module2/reports/module_b_*.jsonl содержит обнаруженные маркеры, оба маршрута,
препятствия, достигнутые точки и чистое время движения. Паузы на установку
препятствия в это время не входят.
Перед реальным заездом достаточно проверить направление осей, фактический шаг между метками и дистанцию безопасной остановки. Скрипт не делает отдельный аудит топиков при старте: он просто стоит, пока не получит odometry, ArUco и её TF.
Обновление VM с хоста
GitHub: git@github.com:mavxa/mvch.git (приватный).
Для текущей VM используется локальное зеркало хостового Git без передачи ключей GitHub.
На хосте запущен read-only Git daemon только для этого репозитория:
git daemon --reuseaddr --export-all --listen=127.0.0.1 --port=9418 \
--base-path=/home/mavxa/zed/chvtFinal /home/mavxa/zed/chvtFinal/mvch
В VM с QEMU user networking хост доступен как 10.0.2.2:
git clone --branch module2 git://10.0.2.2:9418/mvch ~/mvch
cd ~/mvch
git pull --ff-only
SSH VM: ssh -p 2222 -o HostKeyAlias=chvt-3735b9fd mavxa@127.0.0.1.
Проброс действует до выключения VM. Восстановить на хосте:
virsh -c qemu:///system qemu-monitor-command ubuntu24.04-chvt \
--hmp 'hostfwd_add hostnet0 tcp:127.0.0.1:2222-:22'
Пароли и ключи в репозитории не хранятся.