docs: add real ROS hardware fallback guide

This commit is contained in:
2026-09-09 16:37:09 +03:00
parent f48465dfb1
commit 19d08523eb
+91
View File
@@ -42,6 +42,21 @@ cd ~/scripts/mvch-docs
./setup/check_environment.sh
```
Если на площадке недоступен GitHub, подготовлены отдельные зеркала на Gitea:
- код модулей: [`mavxa/chvt-bak`](https://git.vihrev.com/mavxa/chvt-bak);
- документация: [`mavxa/chvt-docs`](https://git.vihrev.com/mavxa/chvt-docs).
```bash
mkdir -p ~/scripts
git clone ssh://git@git.vihrev.com:2222/mavxa/chvt-bak.git ~/scripts/mvch
git clone ssh://git@git.vihrev.com:2222/mavxa/chvt-docs.git ~/scripts/mvch-docs
```
SSH-доступ к обоим серверам проверьте заранее. Помимо удалённых репозиториев,
держите готовые копии каталогов на флешке: блокировка сети может затронуть и
GitHub, и внешний Gitea.
В каждом новом ROS-терминале:
```bash
@@ -162,6 +177,82 @@ ros2 topic echo /RMC2/scan_front --once
Точный список топиков зависит от активного launch-файла. Если `scan_front` отсутствует, сначала посмотрите `ros2 topic list | sort`, а не меняйте код вслепую.
## Если на реальном ровере другие датчики или ROS API
Успешный запуск Python-процесса ещё не означает, что ровер готов ехать. Текущие
решения специально не начинают движение без обратной связи:
- нет `odometry` — ROS-нода запустится, но навигация останется в ожидании датчиков
или завершит предварительную проверку с ошибкой;
- нет `scan`/`scan_front` — движение блокируется, потому что невозможно проверить
препятствие и тормозной путь;
- нет `aruco_id` или TF `aruco_<ID>` — невозможно привязать odometry к полю и
подтвердить точное прибытие на маркер;
- нет подписчика на `cmd_vel` — программа будет публиковать команды, но платформа
не поедет;
- имя совпало, но тип сообщения или QoS отличается — publisher и subscriber не
соединятся.
Это безопасное поведение. Не отключайте проверки датчиков и не заменяйте odometry
движением «скорость × несколько секунд» на физическом роботе.
### Что снять в день настройки оборудования
Сначала сохраните фактический ROS API, пока ничего не движется:
```bash
mkdir -p ~/equipment-audit
ros2 node list | tee ~/equipment-audit/nodes.txt
ros2 topic list -t | tee ~/equipment-audit/topics.txt
ros2 topic info /RMC2/cmd_vel -v | tee ~/equipment-audit/cmd_vel.txt
ros2 topic info /RMC2/odometry -v | tee ~/equipment-audit/odometry.txt
ros2 topic info /RMC2/scan_front -v | tee ~/equipment-audit/scan_front.txt
ros2 topic info /RMC2/aruco_id -v | tee ~/equipment-audit/aruco_id.txt
timeout 5 ros2 topic hz /RMC2/odometry
timeout 5 ros2 topic hz /RMC2/scan_front
ros2 topic echo /RMC2/odometry --once
ros2 topic echo /RMC2/aruco_id --once
ros2 run tf2_ros tf2_echo RMC2/odom RMC2/base_link
ros2 run tf2_ros tf2_echo RMC2/odom aruco_0
ros2 run tf2_tools view_frames
mv frames.pdf ~/equipment-audit/ 2>/dev/null || true
```
Для RMC1 повторите команды с пространством имён `RMC1`. Номер в `aruco_0`
замените меткой, над которой реально стоит робот. Если ожидаемого топика нет,
сначала найдите аналог через `ros2 topic list -t`, а не создавайте пустой топик с
нужным названием.
### Как адаптировать решение
| Ситуация | Что делать |
| --- | --- |
| Данные те же, отличается только имя топика | Заменить имя в конфигурации/константах до контрольной попытки. В `basic/drive_to_aruco.py` для лидара есть `--scan-topic`. |
| Топик есть, но сообщения не приходят | Проверить активный launch, namespace, `ROS_DOMAIN_ID`, `RMW_IMPLEMENTATION`, сеть и QoS через `ros2 topic info -v`. |
| Вместо `LaserScan` выдаётся другой `LaserScan`-топик | Подставить его имя и проверить `frame_id`, направление нулевого угла, `range_min/max` и сектор перед роботом. |
| Вместо `LaserScan` доступен только `PointCloud2` | Нужен штатный преобразователь облака в scan или отдельная обработка `PointCloud2`; простой rename топика не поможет. |
| `aruco_id` имеет другой формат | Исправить тип подписки и callback. Если публикуется только изображение, сначала нужен штатный ArUco-детектор. |
| ID метки есть, но нет её относительной позы/TF | Одного ID недостаточно для точного центрирования. Найти топик позы метки либо настроить TF из штатного детектора. |
| Нет `/RMC2/odometry`, но есть TF `RMC2/odom -> RMC2/base_link` | Положение можно читать из TF вместо сообщения `Odometry`; потребуется небольшая замена источника позы в скрипте. |
| Есть только энкодеры колёс | Использовать штатный драйвер/локализатор, который формирует odometry и TF. Самостоятельное интегрирование допустимо только после проверки кинематики и масштаба. |
| Нет ни odometry, ни TF, ни позы относительно меток | Безопасная координатная навигация текущим алгоритмом невозможна. Зафиксировать отсутствие интерфейса и сразу сообщить эксперту. |
| Команды движения имеют другой тип, сервис или action | Нужен адаптер к реальному драйверу; публикация `Twist` в новый топик проблему не решит. |
После подключения данных сначала запустите только наблюдение:
```bash
python3 basic/watch_robot.py --robot RMC2
```
Затем проверьте аппаратный STOP и короткую команду на минимальной скорости. Только
после этого запускайте движение между соседними ArUco. До контрольной попытки
также измерьте шаг сетки, направления осей, габариты корпуса, безопасную скорость,
тормозной путь и реальные положения lidar. Во время самой контрольной попытки код
и интерфейс уже нельзя исправлять.
## Запуск модулей
| Модуль | Решение | Основной запуск |