feat(experement): complete reference routes, runner and QA documentation
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# Проверка эталонного управления
|
||||
|
||||
Документ фиксирует измерения, настройки безопасности и результаты прогонов
|
||||
20 опытов в Webots. Единицы — метры и радианы, если не указано иное.
|
||||
|
||||
## Запуск и журналы
|
||||
|
||||
```bash
|
||||
source /opt/ros/jazzy/setup.bash
|
||||
colcon build --base-paths src --packages-up-to iiwa_experement --symlink-install
|
||||
source install/setup.bash
|
||||
colcon test --base-paths src --packages-select iiwa_experement
|
||||
colcon test-result --verbose
|
||||
|
||||
ros2 launch iiwa_experement experiment.launch.py experiment_id:=1 mode:=view
|
||||
ros2 launch iiwa_experement experiment.launch.py experiment_id:=1 \
|
||||
mode:=execute start_delay_sec:=3.0 \
|
||||
trace_dir:=~/.ros/iiwa_experement/runs
|
||||
```
|
||||
|
||||
Журнал — `experiment_<id>_<UTC>.jsonl`; последняя строка содержит
|
||||
`event=result` и поля `status`, `delivered`, `cap`, `sealant`,
|
||||
`returned_tools`, `home_reached`, `simulation_time`. В `view` журнал не
|
||||
создаётся, потому что runner не запускается.
|
||||
|
||||
## Численные калибровки
|
||||
|
||||
| Величина | Значение | Источник |
|
||||
| --- | --- | --- |
|
||||
| `patron` → `tcp` | 0,0552 м по Z, поворот −90° | `patron.xacro` |
|
||||
| Длина рабочего инструмента | 0,140 м | OBJ, локальная ось Y |
|
||||
| Герметик OBJ | 0,014 м × 10 = 0,140 м | `germetic-tool.obj` |
|
||||
| Крепление инструмента | вершина инструмента в `tcp` | `geometry.yaml` |
|
||||
| Рабочий кончик | 0,140 м от `tcp` по +Z | `geometry.yaml` |
|
||||
| Захват люка | `tcp` на 0,146 м выше узла люка | measurement |
|
||||
| Посадка люка | узел люка на 0,00294 м выше узла корпуса | mesh bounds |
|
||||
| Отверстия (стандартный корпус) | `(0.2243,0.1052)`, `(0.2852,0.0443)`, `(0.3757,0.1348)`, `(0.3148,0.1957)` | `experiment-scenes.md`, проверено |
|
||||
| Верх люка / отверстия | `body.z + 0.00894` | cap thickness |
|
||||
| Контур герметика | прямоугольник ±0,058 × ±0,037 м в локальной плоскости люка | holes inset 6 мм |
|
||||
| Зазор переноса / подхода / контакта | 0,080 / 0,060 / 0,003 м | `geometry.yaml` |
|
||||
| Допуск позы TCP | 0,006 м, 0,08 рад | `geometry.yaml` |
|
||||
| Безопасные позы | `work` (0.1496,0,1.3139), `home` (−0.25,0,2.139) | Webots TF |
|
||||
| `tcp` при `work` | (0.3996,0,0.5239) в `base_link` | TF |
|
||||
| `tcp` при `home` | (0,0,1.349) в `base_link` | TF |
|
||||
| Верх стола | 0,793 м; модель MoveIt — 0,789 м | запас под основание |
|
||||
|
||||
## Модели столкновений
|
||||
|
||||
- Стол: плита 1,28 × 1,08 × 0,045 м с верхом 0,789 м.
|
||||
- Стапель: нижняя плита 0,35 × 0,22 × 0,01 м и две боковые направляющие
|
||||
0,014 × 0,156 × 0,016 м. Сплошной блок не используется, иначе он перекрывает
|
||||
посадочное место люка.
|
||||
- Корпус: 0,30 × 0,17 × 0,00915 м; люк: 0,1384 × 0,0984 × 0,00367 м.
|
||||
- Стойка: плита 0,42 × 0,14 × 0,01 м ниже гнёзд.
|
||||
- Лоток: дно и четыре стенки; винты — 0,0055 × 0,0055 × 0,009 м.
|
||||
- Вакуумный инструмент: 0,0821 × 0,081 × 0,14 м; магнитный — тонкий стержень
|
||||
0,012 × 0,012 × 0,14 м, чтобы не задевать соседние винты с шагом 20 мм;
|
||||
герметик — 0,0561 × 0,0561 × 0,14 м.
|
||||
- ACM строится из `iiwa7.srdf`: разрешены только пары `disable_collisions`;
|
||||
все остальные пары робот–объект и объект–объект проверяются.
|
||||
|
||||
## Результаты тестов
|
||||
|
||||
Финальный прогон: `197 passed` (см. журнал сборки). Тесты покрывают контракт
|
||||
сцен, геометрию, supervisor, сцену MoveIt, движение, операции, маршруты и
|
||||
журнал.
|
||||
|
||||
## Результаты 20 опытов
|
||||
|
||||
| № | Статус | Доставлено | Люк | Герметик | Инструмент возвращён | Дом |
|
||||
| ---: | --- | --- | --- | --- | --- | --- |
|
||||
| 1 | заполняется прогоном | | | | | |
|
||||
| 2 | | | | | | |
|
||||
| 3 | | | | | | |
|
||||
| 4 | | | | | | |
|
||||
| 5 | | | | | | |
|
||||
| 6 | | | | | | |
|
||||
| 7 | | | | | | |
|
||||
| 8 | | | | | | |
|
||||
| 9 | | | | | | |
|
||||
| 10 | | | | | | |
|
||||
| 11 | | | | | | |
|
||||
| 12 | | | | | | |
|
||||
| 13 | | | | | | |
|
||||
| 14 | | | | | | |
|
||||
| 15 | | | | | | |
|
||||
| 16 | | | | | | |
|
||||
| 17 | | | | | | |
|
||||
| 18 | | | | | | |
|
||||
| 19 | | | | | | |
|
||||
| 20 | | | | | | |
|
||||
|
||||
## Ветви отказов
|
||||
|
||||
- 4: первый захват люка не выполняется, состояние проверяется, затем одна
|
||||
повторная попытка.
|
||||
- 5: первая посадка смещена на 3 мм, `inspect_cap` возвращает `not_ok`,
|
||||
следует повторный захват и одна корректная посадка.
|
||||
- 9: `side_3` прерывается на половине; состояние проверяется, движение
|
||||
продолжается с подтверждённой точки, а не с начала контура.
|
||||
- 15: третий выбранный винт (`screw_5`) не захватывается с первого раза;
|
||||
следует проверка состояния и одна повторная попытка.
|
||||
- 20: прерывание герметика, ошибка первой посадки люка и неудачный захват
|
||||
первого винта; каждая ветвь имеет не более одной попытки.
|
||||
|
||||
## Ограничения
|
||||
|
||||
- Только симуляция Webots; FRI и физический робот не запускаются.
|
||||
- Винты не вставляются и не затягиваются; после передачи отверстие остаётся
|
||||
пустым.
|
||||
- Прикреплённые объекты MoveItPy в установленной версии приводят к ложным
|
||||
столкновениям. Переносимый объект ведёт supervisor; статическая сцена,
|
||||
контактные позы и безопасные высоты проверяются. Это ограничение описано
|
||||
в README.
|
||||
- MoveIt/MoveItPy может аварийно завершиться после очень длинной серии
|
||||
планирований; один запуск выполняет один опыт, поэтому серия ограничена.
|
||||
- `Node.remove()` для винта в Webots R2025a иногда приводит к падению
|
||||
симулятора; переданный винт телепортируется далеко за арену и больше не
|
||||
запрашивается.
|
||||
Reference in New Issue
Block a user