You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Eliza Moscovskaya fe1a6c5b71 remove ram control to gesture lib 4 weeks ago
images upd readme 4 weeks ago
robot new fire sim working fine 1 month ago
submodules remove ram control to gesture lib 4 weeks ago
.gitignore simple works, needs damage and range 1 month ago
.gitmodules simple works, needs damage and range 1 month ago
README.md remove ram control to gesture lib 4 weeks ago
config.py upd readme 4 weeks ago
install_deps.sh add bash install 4 weeks ago
main.py remove ram control to gesture lib 4 weeks ago
robot.png simple works, needs damage and range 1 month ago

README.md

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

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

В будущем, чтобы подтянуть в сабмодулях изменения последнего коммита:

git submodule update --remote --recursive

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

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

Если у вас не скачен питон этой версии, сначала выполните:

sudo apt install python3.11 python3.11-venv

Если у нас не устанавливается питон 3.11, то это потому что он отсутствует в официальных репозиториях по умолчанию, надо добавить репозиторий перед скачиванием:

sudo apt update && sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update

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

4.1. Способ 1

Сделайте bash скрипт исполняемым и запустите последовательность установки:

chmod +x install_deps.sh
./install_deps.sh

4.2. Способ 2

Вручную:

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

Типичные проблемы во время установки:

Важно: красные предупреждения о нехватке зависимостей для tensorflow будут, но можно их игнорировать, т.к. эти модули не используются в данном проекте, а их установка мешает зависимостям MediaPipe.

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

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

  1. Если будет проблема с функцией cv2.imshow() то, переустановите cv2 без заголовков:
pip uninstall opencv-python pip install opencv-python-headless
pip install opencv-python==4.12.0.88
  1. Если будет ошибка с PIL, попробуйте обновить библиотеку:
pip upgrage pillow
  1. Внимание: если вам пришлось делать после основной установки какие-то дополнительные, обязательно зафиксируйте еще раз версию numpy!
pip install numpy==1.24.3

Настройка

Все основные параметры находятся в классе 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.01.0)
  • OAK_SHAVES число SHAVE-ядер для OAK

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

  • ARM_CONTROL словарь:
    • linear_arm рука для линейной скорости ('left' или 'right')
    • angular_arm рука для угловой скорости
    • max_speed_linear макс. линейная скорость (м/с)
    • max_speed_angular макс. угловая скорость (рад/с)
    • dead_zone зона нечувствительности (0.01.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 чтобы перезапустить симулятор.

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

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