2026-06-24 19:22:08 +03:00
2026-06-24 12:02:39 +03:00
2026-06-18 14:47:48 +03:00
2026-06-23 15:39:20 +03:00
2026-06-24 12:02:39 +03:00
2026-06-23 15:39:20 +03:00
2026-06-24 19:22:08 +03:00
2026-06-16 17:34:53 +03:00

Структура проекта

gesture_rec/
├── config.py                    # Главный файл настроек
├── main.py                      # Точка входа
├── geom_controll
│   └── arm_control.py           # Преобразование позы в скорости
├── robot/
│   ├── debug_robot.py           # Робот-заглушка (вывод в консоль)
│   └── simulated_robot.py       # Симулятор с Pygame
├── submodules/
│   ├── gesture_detection/       # Распознавание скелета, жестов, ML
│   └── robot_controller_base/   # Базовый класс робота
├── requirements.txt
├── robot.png                    # Картинка робота для симуляции
└── README.md

Установка

1. Клонирование репозитория

git clone https://git.robofob.ru/sirius/dummy_simulation.git
cd dummy_simulation

2. Инициализация подмодулей

Проект использует два внешних подмодуля:

  • robot_controller_base – базовый класс для робота
  • gesture_detection – модуль распознавания жестов (скелет, ML-детекторы)

Обновите их:

git submodule update --init --remote --recursive

3. Создание и активация виртуального окружения

python3.11 -m venv venv
source venv/bin/activate

4. Установка зависимостей

pip install --upgrade pip
pip install numpy==1.24.3
pip install pandas==2.0.3
pip install opencv-python==4.12.0.88
pip install opencv-python-headless==4.12.0.88
pip install matplotlib==3.7.5
pip install protobuf==3.20.3
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
pip install --no-deps mediapipe==0.10.11
pip install attrs
pip install scikit-learn==1.3.2
pip install joblib==1.4.2
pip install depthai==2.28.0
pip install --no-deps tensorflow==2.13.1
pip install \
    absl-py \
    astunparse \
    flatbuffers \
    gast \
    google-pasta \
    grpcio \
    h5py \
    keras==2.13.1 \
    libclang \
    opt-einsum \
    tensorboard==2.13.0 \
    tensorflow-estimator==2.13.0 \
    termcolor \
    wrapt \
    requests
pip install numpy==1.24.3
pip install scipy==1.11.0
pip install pygame==2.6.1

Если будет ошибка с "AttributeError: google..." но это потому что tensorflow подменяет версию библиотеки protobuf, выполните:

pip uninstall protobuf google protobuf
pip install protobuf==3.20.3

Примечание: если у вас слабая видеокарта или нет CUDA, используйте tensorflow-cpu вместо tensorflow.

Настройка

Все основные параметры находятся в классе Config. Перед запуском обязательно отредактируйте их под вашу конфигурацию.

Камера

  • CAMERA_ID – ID устройства (только для CAMERA_TYPE = 'web')
  • CAMERA_TYPE 'web' (обычная USB-камера) или 'oak' (OAKD)
  • MIRROR_CAMERA – зеркалировать изображение (обычно True для естественного отображения)

Детектор скелета

  • POSE_DETECTOR 'mediapipe' или 'oak' (только при CAMERA_TYPE='oak')
  • OAK_MODEL_TYPE – модель для OAK (например 'efficienthrnet1')
  • OAK_DETECTION_THRESHOLD – порог уверенности (0.0–1.0)
  • OAK_SHAVES – число SHAVE-ядер для OAK

Преобразование позы в скорости

  • ARM_CONTROL словарь:
    • linear_arm – рука для линейной скорости ('left' или 'right')
    • angular_arm – рука для угловой скорости
    • max_speed_linear – макс. линейная скорость (м/с)
    • max_speed_angular – макс. угловая скорость (рад/с)
    • dead_zone – зона нечувствительности (0.0–1.0)
    • debug – выводить отладочную информацию в консоль

Статические жесты

  • SPECIAL_GESTURE_MODE 'ml' (использует модель для предсказания) или 'geometric' (геометрический)
  • ML_GESTURE_MODEL – путь к обученной модели .pkl
  • ML_GESTURE_CLASSES – список классов (например ['dome', 'cross', 'none'])

Динамические жесты

  • DYNAMIC_GESTURE ['enabled'] включить/выключить
  • model_path – путь к модели .h5
  • classes_path – путь к файлу с классами (pickle)
  • window_size – размер окна (число кадров)
  • threshold – порог уверенности

Симуляция:

  • MAP_WIDTH, MAP_HEIGHT размеры поля
  • BORDER_THICKNESS толщина стен
  • MAP_OBSTACLES – список прямоугольных препятствий (x, y, w, h)
  • START_POS, FINISH_POS – позиции старта и финиша
  • ROBOT_RADIUS – радиус робота (пиксели)
  • ROBOT_IMAGE_PATH – путь к PNG-изображению робота (или None - тогда будет треугольник)
  • INITIAL_HP, INITIAL_FIRE_CHARGE – начальные HP и заряд для тушения
  • COLLISION_DAMAGE – урон при столкновении с препятствием
  • EXTINGUISH_RADIUS, EXTINGUISH_ANGLE – параметры конуса тушения (радиус и угол в градусах)
  • NUM_FIRES, FIRE_RADIUS, SCORE_PER_FIRE – количество очагов, их радиус и очки за тушение
  • ROBOT_MODE 'simulator' (запуск игры с Pygame) или 'debug' (вывод команд в консоль)

Пути к моделям:

Требуется указать свои абсолютные пути к используемым моделям, предобученные можно скачать отсюда, пролистайте в конец.

Запуск

Активируйте виртуальное окружение и выполните:

python main.py

Управление

Симулятор – поле с препятствиями, стартом и финишем. Робот движется согласно командам. При врезании в препятствия - получает урон. Некоторое время после урона (во время мигания) неуязвим, чтобы у вас было время вырулить.

  1. Управление скоростями
    • Линейная скорость (вперёд) – горизонтальное положение правой руки (рука вдоль тела – 0, вытянута в сторону – максимум).
    • Угловая скорость – вертикальное положение левой руки (рука на уровне плеча – 0, вверх – поворот вправо, вниз – поворот влево).

Схема управления скоростями

  1. Управление действиями
    • Включение/выключение управления скоростями – жест cross (скрещённые руки). При выключении робот останавливается.
    • Тушение пожара – жест dome (руки над головой). Если огонь попадает в конус перед роботом, он тушится. Заряд тушения тратится в любом случае.

Схема управления жестами

Закрытие окна игры или нажатие q в окне камеры – выход. При завершении игры (неважно выигрыш или проигрыш) нажмите r чтобы перезапустить симулятор.

Создание собственного контроллера скоростей

По умолчанию преобразование позы в скорости реализовано в классе ArmController (файл arm_control.py). Чтобы изменить логику управления, выполните одно из действий:

  1. Изменить метод compute_speeds в arm_control.py – он должен принимать аргумент landmarks (список из 33 точек MediaPipe) и возвращать кортеж (linear, angular) – числа с плавающей точкой.
  2. Создать свой класс-наследник от ArmController и переопределить compute_speeds. Затем в main.py заменить создание экземпляра на свой класс.

После этого не забудьте изменить параметры словаря ARM_CONTROL в Config вы можете добавлять туда свои поля и читать их в методе.

Добавление своих жестов

Подмодуль gesture_detection содержит всё необходимое для обучения собственных моделей жестов.

S
Description
No description provided
Readme
1.2 MiB
Languages
Python 95.5%
Shell 4.5%