docs: add real ROS hardware fallback guide
This commit is contained in:
@@ -42,6 +42,21 @@ cd ~/scripts/mvch-docs
|
|||||||
./setup/check_environment.sh
|
./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-терминале:
|
В каждом новом ROS-терминале:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -162,6 +177,82 @@ ros2 topic echo /RMC2/scan_front --once
|
|||||||
|
|
||||||
Точный список топиков зависит от активного launch-файла. Если `scan_front` отсутствует, сначала посмотрите `ros2 topic list | sort`, а не меняйте код вслепую.
|
Точный список топиков зависит от активного 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. Во время самой контрольной попытки код
|
||||||
|
и интерфейс уже нельзя исправлять.
|
||||||
|
|
||||||
## Запуск модулей
|
## Запуск модулей
|
||||||
|
|
||||||
| Модуль | Решение | Основной запуск |
|
| Модуль | Решение | Основной запуск |
|
||||||
|
|||||||
Reference in New Issue
Block a user