feat: launch grant experiment by id

This commit is contained in:
Даниил Грабарь
2026-11-08 10:52:22 +10:00
parent 814922f8ca
commit 568696d7b5
6 changed files with 610 additions and 0 deletions
+121
View File
@@ -0,0 +1,121 @@
# iiwa_experement
Пакет запускает один из двадцати детерминированных опытов в Webots. Один
запуск создаёт один свежий мир: шаблон `worlds/grant/iiwa-grant.wbt` копируется
во временную директорию, в копии заменяются пути к PROTO, затем существующий
`iiwa_bringup` запускает Webots, робота iiwa 7, контроллеры и камеры. После
этого `scene_spawner` добавляет объекты выбранного сценария.
Реализована только начальная сцена. Захват, вставка инструмента в `patron`,
нанесение герметика, установка и затяжка винтов в пакет не входят.
## Сборка
```bash
source /opt/ros/jazzy/setup.bash
colcon build --base-paths src --packages-up-to iiwa_experement --symlink-install
source install/setup.bash
```
## Запуск
Обязательный параметр `experiment_id` принимает только целое число от 1 до 20:
```bash
ros2 launch iiwa_experement experiment.launch.py experiment_id:=1
```
Проверенные примеры:
```bash
ros2 launch iiwa_experement experiment.launch.py experiment_id:=6
ros2 launch iiwa_experement experiment.launch.py experiment_id:=11
ros2 launch iiwa_experement experiment.launch.py experiment_id:=16
ros2 launch iiwa_experement experiment.launch.py experiment_id:=19
ros2 launch iiwa_experement experiment.launch.py experiment_id:=20
```
`experiment_id:=0`, `21`, `abc` или пустое значение останавливают launch до
запуска Webots. Для другого опыта завершите текущий запуск (`Ctrl-C`) и
запустите команду с новым номером: мир каждый раз создаётся заново.
Дополнительные параметры:
| Параметр | По умолчанию | Значение |
| --- | --- | --- |
| `rviz` | `false` | `true` запускает RViz вместе с Webots |
| `scene_config` | установленный `config/scenes.yaml` | другой манифест сценариев |
| `base_setting` | установленный `iiwa_config/config/setting.yaml` | базовые настройки для временной копии |
Временные `iiwa-grant.wbt` и `setting.yaml` создаются в отдельной директории
запуска и удаляются при его завершении.
## Готовность сцены
Сервис доступен с момента старта ноды, но сообщает успех только после
последнего успешного вызова supervisor:
```bash
ros2 service call /iiwa_experement/scene_ready std_srvs/srv/Trigger {}
```
Успешный ответ содержит `success: true` и сообщение вида
`experiment 11: 17 objects spawned`. Пока объекты добавляются или если спавн
завершился ошибкой, `success` остаётся `false`, а в `message` находится причина
и имя последнего объекта.
## Состав сцен
| Опыты | Люк | Лоток и винты | Рабочие инструменты |
| --- | --- | --- | --- |
| 1–5 | свободный | нет | присоска |
| 6–9 | отсутствует | нет | герметик |
| 10 | свободный | нет | герметик, присоска |
| 11–13 | установлен | 10 винтов | магнитный |
| 14–15 | установлен | 10 винтов | магнитный, затяжной |
| 16–20 | свободный | 10 винтов | присоска, магнитный, герметик, затяжной |
Во всех опытах `patron` уже находится на роботе: он включён в URDF через
`urdf/tools/tool_active.xacro`. Рабочие инструменты лежат отдельно в четырёх
гнёзах стойки. Свободный люк имеет физику; установленный люк зафиксирован.
Винты и инструменты в начальной сцене статичны: будущий исполнитель должен
освободить их перед захватом. Это исходное положение, а не реализованный
механизм захвата.
Координаты и наборы объектов заданы только в `config/scenes.yaml`; генератор
не выбирает случайные позы. В опытах 11–20 всегда ровно десять винтов, даже
если сценарий использует один, два или четыре. В опыте 19 лоток и все десять
винтов смещены вместе.
## Ресурсы
- Шаблон мира и код: `src/iiwa_experement/`.
- OBJ/MTL: `src/iiwa_description/objects/grant/`; они не копируются.
- PROTO стола и ограждений: `src/iiwa_description/resource/protos/`.
- Спецификации: `doc/experements.md`, `doc/experiment-scenes.md`.
Старые `body_hatch*.wbt` и `GrantToolRack.proto` не восстанавливаются и не
используются. Стойка собрана из `tool-magizine.obj` и отдельных объектов
инструментов.
## Проверки
```bash
colcon test --base-paths src --packages-select iiwa_experement
colcon test-result --verbose
```
Тесты пакета проверяют:
- установку мира, YAML, launch и документации;
- все 20 сценариев, включая 10 винтов в опытах 11–20;
- уникальные имена, позы и существование OBJ/MTL;
- отказы при неверном ID, неизвестном инструменте, 9/11 винтах, повторяющемся
имени, винте вне лотка и несовпадении корпуса со стапелем;
- отсутствие повторного вызова supervisor при тайм-ауте;
- замену локальных PROTO на установленные абсолютные пути, отключение старого
случайного `object_spawner` и сохранение `patron` в URDF.
Старый `src/iiwa_utils/test/test_body_hatch_worlds.py` относится к удалённым
`worlds/grant/body_hatch*.wbt` и `GrantToolRack.proto`; это не тест нового
пакета.