Дополнение 01. Управление Joy-Con в Robosuite (Windows)
# Создать окружение conda
conda create -n py310-robosuite python=3.10
conda activate py310-robosuite
# Установить robosuite
git clone https://github.com/box2ai-robotics/robosuite-joycon.git
cd robosuite-joycon
pip3 install -r requirements.txt
pip3 install -r requirements-extra.txt
# Установить joycon-robotics
cd ..
git clone https://github.com/box2ai-robotics/joycon-robotics.git
cd joycon-robotics # нужно изменить setup.py
pip install -e .
# sudo apt install dkms
# make install
---
cd ..
cd robosuite-joycon
pip install -r robosuite-joycon/requirements-extra.txt
# По умолчанию — управление с клавиатуры
python robosuite/demos/demo_device_control.py
sudo apt install libhidapi-dev
# Один Joy-Con (R)
python robosuite/demos/demo_device_control_joycon_single.py
# Два Joy-Con (двуручный режим)
python robosuite/demos/demo_device_control_joycon_bimanual.py
Схема управления с клавиатуры
Управление концевым эффектором (захватом) манипулятора
Положение (Position)
- Движение вперёд и назад (ось X):
- ↑ (стрелка вверх): движение по отрицательной оси X (вперёд)
- ↓ (стрелка вниз): движение по положительной оси X (назад)
- Движение влево и вправо (ось Y):
- ← (стрелка влево): движение по отрицательной оси Y (влево)
- → (стрелка вправо): движение по положительной оси Y (вправо)
- Движение вверх и вниз (ось Z):
- . (точка): движение по отрицательной оси Z (вниз)
- ; (точка с запятой): движение по положительной оси Z (вверх)
Ориентация (Rotation)
- Крен (Roll):
- e: поворот вокруг положительного направления оси X
- r: поворот вокруг отрицательного направления оси X
- Тангаж (Pitch):
- y: поворот вокруг положительного направления оси Y
- h: поворот вокруг отрицательного направления оси Y
- Рыскание (Yaw):
- o: поворот вокруг отрицательного направления оси Z
- p: поворот вокруг положительного направления оси Z
Управление захватом (Gripper)
- Пробел: переключение состояния захвата. Одно нажатие — захват закрывается, второе — открывается.
Управление симуляцией и окружением
- Ctrl + q: сброс текущей среды симуляции.
- s: (работает только в средах с несколькими руками) переключение управляемой руки.
- =: (работает только в средах с несколькими роботами) переключение управляемого робота.
- b: (работает только для роботов с мобильной базой) переключение режима «рука / база».
После запуска скрипта убедитесь, что окно симуляции активно: только тогда ввод с клавиатуры будет получен программой.
sudo snap install bun-js
Поиск и устранение неисправностей
1. Не хватает зависимостей
Python-пакет hid (он же hidapi) не может найти системную библиотеку, которую он вызывает.
Проблема состоит из двух уровней:
- Пакет Python (
hid): установлен в окруженииmicromamba. Сам по себе он не общается с устройством, а служит «переводчиком» или «пультом». - Системная библиотека (
libhidapi-*.so): установлена в операционной системе как библиотека на языке C. Именно она отвечает за связь с USB HID-устройствами, например Joy-Con.
Сообщение Unable to load any of the following libraries: libhidapi-hidraw.so ... означает, что Python не нашёл «двигатель», с которым может работать.
Решение 🛠️
Нужно установить недостающую библиотеку hidapi для вашей операционной системы.
1. Установите библиотеку разработки hidapi
Имя пакета отличается в разных дистрибутивах Linux. Откройте терминал и выполните:
-
Debian / Ubuntu (в том числе Ubuntu в WSL):
sudo apt update sudo apt install libhidapi-devВерсия
-devобычно тянет за собой и библиотеки времени выполнения (libhidapi-hidraw0и др.), а также заголовочные файлы для сборки. Это самый надёжный вариант. -
Arch Linux:
sudo pacman -S hidapi -
Fedora / CentOS:
sudo dnf install hidapi-devel
2. (Важно) Настройте правила udev
После установки библиотеки обычно нужно выдать права на устройство Joy-Con. Иначе обычный пользователь не сможет к нему обратиться, и программа не подключится к контроллеру, даже если библиотека найдена.
-
Создайте файл правил udev: команда даёт всем пользователям права на чтение и запись для всех устройств Nintendo (Vendor ID
057e):echo 'SUBSYSTEM=="hidraw", ATTRS{idVendor}=="057e", MODE="0666"' | sudo tee /etc/udev/rules.d/99-joycon.rules -
Перезагрузите правила udev, чтобы они сразу начали работать:
sudo udevadm control --reload-rules sudo udevadm trigger
3. Переподключите Joy-Con 🎮
Отключите Bluetooth-соединение Joy-Con и подключите его заново, чтобы новые правила udev применились к устройству.
4. Запустите Python-программу ещё раз
После этих шагов вернитесь в окружение micromamba и снова запустите скрипт. Теперь модуль hid должен импортироваться и находить устройство.
python /home/user/17robo/robosuite-joycon/robosuite/demos/demo_device_control_joycon_bimanual.py
2. Не установлен mujoco
Установить mujoco очень просто: достаточно выполнить pip в окружении py310-robosuite.
Команда pip install mujoco в активном окружении Python установит пакет. По выводу установка прошла успешно.
Дальше нужно вернуться к шагам 2 и 3 решения: найти mujoco.dll и скопировать его в нужное место.
Путь к mujoco.dll (найден скриптом):
C:\\Users\\user\\micromamba\envs\py311\Lib\site-packages\mujoco\mujoco.dll
Файл скопирован в каталог, где его ждёт robosuite:
C:\\Users\\user\\17robo\robosuite-joycon\robosuite\utils\
Теперь основная проблема с зависимостями должна быть решена. Запустите команду ещё раз:
python robosuite/demos/demo_device_control.py
Если возникнут другие проблемы, задайте вопрос.