Первоначальная настройка
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# KUKA iiwa в Genesis World
|
||||
|
||||
Standalone Python-приложение: стол, iiwa7 и одна или две RGB-D камеры.
|
||||
ROS 2 не используется. Рабочие описания — обычные URDF с локальными meshes.
|
||||
|
||||
## Установка и запуск
|
||||
|
||||
Все Python-зависимости устанавливает uv:
|
||||
|
||||
```bash
|
||||
uv sync --locked
|
||||
uv run python run_scene.py --config configs/scene.yaml
|
||||
```
|
||||
|
||||
Для машины без NVIDIA можно выбрать CPU-сборку PyTorch. Сохраняйте `--extra cpu`
|
||||
и в следующих вызовах `uv run`, чтобы uv не переключил окружение обратно:
|
||||
|
||||
```bash
|
||||
uv sync --extra cpu --locked
|
||||
uv run --extra cpu python run_scene.py --headless --steps 4 --save-frames
|
||||
uv run --extra cpu pytest
|
||||
```
|
||||
|
||||
В `configs/scene.yaml` переключите `scene.mode` между `without_gripper` и
|
||||
`with_gripper`. Второй режим автоматически выбирает URDF с инструментом и
|
||||
добавляет камеру на нём. Верхняя камера присутствует всегда. Отдельно менять
|
||||
путь URDF или `enabled` не требуется; выбор режима имеет приоритет над этими
|
||||
устаревшими полями из первоначального плана.
|
||||
|
||||
```bash
|
||||
uv run python run_scene.py --viewer
|
||||
uv run python run_scene.py --headless --steps 120 --save-frames
|
||||
uv run --extra cuda python run_scene.py --backend gpu --viewer
|
||||
uv run pytest
|
||||
IIWA_GENESIS_SMOKE=1 uv run pytest tests/test_genesis_smoke.py
|
||||
```
|
||||
|
||||
Headless по умолчанию выполняет 120 шагов, viewer работает до закрытия окна,
|
||||
Ctrl+C или Q/Esc в окне кадров. `output.preview` включает окна RGB и глубины.
|
||||
30 FPS — частота по времени симуляции; реальная скорость зависит от оборудования.
|
||||
Headless всё равно требует рабочий OpenGL/EGL для RGB. Используется EGL, если
|
||||
`PYOPENGL_PLATFORM` не задан пользователем. GPU требует совместимого драйвера;
|
||||
`backend: cpu` выбран для переносимого первого запуска. Системный драйвер и
|
||||
библиотеки OpenGL предоставляются ОС, их uv не устанавливает.
|
||||
Обычные тесты проверяют URDF, конфигурацию и математику; opt-in smoke-тесты
|
||||
реально строят оба мира и сохраняют RGB-D на CPU/EGL. Первичная компиляция
|
||||
Genesis может занимать несколько минут. Launcher игнорирует унаследованные
|
||||
Python overlays, а pytest не загружает внешние плагины автоматически.
|
||||
|
||||
## Конфигурация и координаты
|
||||
|
||||
Положения задаются в метрах, углы `euler` — в градусах, суставы и
|
||||
`horizontal_fov` — в радианах. Начальные суставы проверяются по URDF limits.
|
||||
Верх столешницы находится на 0,800 м, верх монтажной пластины — на 0,815 м;
|
||||
поэтому основание iiwa по умолчанию расположено на `[-0.263, 0, 0.815]`.
|
||||
При перемещении стола настройте положение робота согласованно.
|
||||
|
||||
Параметры верхней камеры заданы в мировой системе. Параметры камеры инструмента
|
||||
заданы относительно `camera_optical_frame`: вперёд +Z, вверх изображения -Y.
|
||||
Трансформы крепления сохранены из исходного описания. Направление оптической
|
||||
оси можно уточнять через локальные `lookat` и `up` без правки URDF.
|
||||
Нулевая гравитация удерживает выбранную позу без контроллера: v1 предназначена
|
||||
для осмотра сцены и получения изображений, а не динамического управления.
|
||||
|
||||
## Камеры и запись
|
||||
|
||||
Это **приближение D455**, использующее профиль из согласованного плана:
|
||||
640×480, 30 FPS, HFOV 75°, диапазон 0,01–6 м, квантование глубины 1 мм.
|
||||
RGB и depth используют одинаковую идеальную pinhole-калибровку. Не моделируются
|
||||
ИК-проектор, стереосопоставление, IMU, реальные искажения и индивидуальная заводская
|
||||
калибровка D455. Исходный Xacro задавал другую нижнюю границу depth — 0,52 м;
|
||||
выбранные 0,01 м следуют утверждённому плану и изменяются через YAML.
|
||||
|
||||
Каждая камера имеет RGB-сенсор Genesis и DepthCamera raycaster. Дальность по
|
||||
лучу преобразуется в optical Z. Пропуски и значения вне диапазона дают depth=0
|
||||
и valid=false. Depth использует геометрию raycaster; упрощения мешей/коллизий
|
||||
могут отличаться от RGB. Gaussian noise задаётся отдельно для RGB (доля 255)
|
||||
и глубины (метры), выключен по умолчанию и использует фиксированный seed.
|
||||
|
||||
`--save-frames` или `output.save_frames` сохраняет в уникальную папку запуска:
|
||||
|
||||
- `overhead_000000.png` — RGB;
|
||||
- `overhead_000000.npz` — float32 depth в метрах и маска valid;
|
||||
- `overhead_000000.json` — intrinsics, обе extrinsics, время симуляции и профиль.
|
||||
|
||||
Камера инструмента использует префикс `tool`. При `output.pointcloud: true`
|
||||
NPZ содержит также `xyz_optical`; невалидные точки равны NaN. Центры пикселей
|
||||
располагаются в `(u+0.5, v+0.5)`, оси optical: X вправо, Y вниз, Z вперёд.
|
||||
Относительный `output.directory` разрешается относительно YAML-файла.
|
||||
Каждый запуск создаёт отдельный каталог, существующие записи сохраняются.
|
||||
|
||||
Genesis закреплён на 1.4.1, версии остальных зависимостей фиксирует `uv.lock`.
|
||||
Xacro явно исключён из транзитивных зависимостей через `tool.uv.exclude-dependencies`.
|
||||
Genesis 1.4.1, однако, импортирует его безусловно. Модуль приложения `runtime.py`
|
||||
при импорте Genesis убирает этот единственный импорт из AST модуля загрузки URDF
|
||||
и заменяет `load_xacro` явной ошибкой. Это адаптация в памяти, ограниченная
|
||||
версией 1.4.1: файлы установленного Genesis не меняются, заглушка Xacro не создаётся.
|
||||
Обновление Genesis требует пересмотра адаптации и повторного smoke-теста.
|
||||
Экспорт описаний также выполнен без Xacro; runtime читает только plain URDF.
|
||||
|
||||
Документация: [Genesis cameras](https://genesis-world.readthedocs.io/en/latest/user_guide/sensing/camera_sensors.html),
|
||||
[raycaster](https://genesis-world.readthedocs.io/en/latest/user_guide/sensing/raycaster.html),
|
||||
[uv exclusions](https://docs.astral.sh/uv/concepts/resolution/#dependency-exclusions).
|
||||
Reference in New Issue
Block a user