fix: align modules with physical rover API

This commit is contained in:
2026-09-10 22:06:08 +03:00
parent 0a8894f3b2
commit cb5e751d15
14 changed files with 474 additions and 96 deletions
+21 -7
View File
@@ -61,9 +61,21 @@ python3 module2/module_b.py --target 14 --sim --auto --return-delay 10
python3 module2/module_b.py --xy -2 2 --target-yaw 1.57 --sim
```
На физическом роботе `--sim` не указывать. Перед переносом обязательно проверить
размеры корпуса, тормозной путь, TF, шаг и ориентации графа, датчики и аппаратную
аварийную остановку. Испытания в Webots не подтверждают готовность к реальному полю.
На физическом роботе `--sim` не указывать:
```bash
python3 module2/module_b.py --target 14
```
Тогда используется подтверждённый документацией профиль: поле 5×5 (ID 0–24),
ArUco `/RMC2/camera_bottom/aruco_id`, TF `/RMC2/tf` и `/RMC2/tf_static`, габарит
RMC2 до 0.870 м. С `--sim` остаётся прежний профиль Webots 6×6 (ID 0–35),
`/RMC2/aruco_id` и глобальные `/tf`/`/tf_static`.
Перед физическим заездом всё равно проверить частоту топиков, имена frame_id, шаг
сетки, тормозной путь и аппаратную аварийную остановку. Документ не сообщает шаг
между маркерами и точные имена TF-фреймов. Испытания в Webots не подтверждают
готовность к реальному полю.
У штатного Webots-драйвера нет таймаута последней команды: при SIGKILL/обрыве питания
процесса программная остановка не гарантируется; остановить симулятор вручную.
@@ -74,7 +86,8 @@ python3 module2/module_b.py --xy -2 2 --target-yaw 1.57 --sim
Читайте в таком порядке: `Field.route` → `localize` → `scan_points` → `plan` → `drive` → `tick`.
Координаты штатного поля: `0=(0,0)`, `6=(-1,0)`, `1=(0,1)`.
Координаты реального поля: `0=(0,0)`, `5=(-1,0)`, `1=(0,1)`; в Webots 6×6:
`0=(0,0)`, `6=(-1,0)`, `1=(0,1)`.
Поворот `yaw` каждой метки — ориентация её TF-системы относительно поля.
Измеренное положение метки в odom сравнивается с её известным положением на поле;
так получаем преобразование `map_from_odom`. Между метками движение идёт по одометрии.
@@ -88,13 +101,14 @@ python3 module2/module_b.py --xy -2 2 --target-yaw 1.57 --sim
к предыдущему маркеру по своему ребру и публикует новый маршрут `ROUTE_REPLANNED`.
Если отступить безопасно нельзя, он стоит и завершает попытку по таймауту.
Размеры сетки, шаг и известные занятые клетки задаются константами `ROWS`, `COLS`,
`MARKER_SPACING`, `BLOCKED_MARKERS` в начале скрипта. Все длины — метры.
Профили сетки находятся в `REAL_FIELD` и `SIM_FIELD`, известные занятые клетки —
в `BLOCKED_MARKERS`. Все длины — метры.
## Проверки и логи
```bash
python3 module2/module_b.py --target 14 --dry-run
python3 module2/module_b.py --target 14 --dry-run # реальное поле 5x5
python3 module2/module_b.py --target 35 --sim --dry-run # Webots 6x6
```
`reports/module_b_*.jsonl` содержат маршрут, движение, ошибки, препятствия,