Руководство по установке BrainCo Revo II
Пошаговая настройка бионической руки BrainCo Revo II — от подключения USB или BLE до калибровки, управления позой и интеграции платформы.
USB-CDC-соединение
Установите зависимости Python
pip install pyserial websockets
Подключитесь и определите порт
Подключите Revo II через USB. В Linux устройство обозначается как /dev/ttyACM0 (или ttyACM1, если присутствуют другие устройства ACM). В Windows проверьте диспетчер устройств COM-порта.
ls /dev/ttyACM* # Linux — find the device # Windows: check Device Manager → Ports (COM & LPT)
Исправить разрешения в Linux
Если вы получаете сообщение об ошибке «отказано в разрешении», добавьте своего пользователя в dialout группу, затем выйдите из системы и снова войдите:
sudo usermod -aG dialout $USER
# Log out and back in for the change to take effect
Соединение Bluetooth с низким энергопотреблением (BLE)
Тот же командный протокол JSON работает через BLE GATT. Используйте этот путь для беспроводных развертываний.
Установите библиотеку BLE.
pip install bleak
Сканируйте Revo II
import asyncio
from bleak import BleakScanner
async def scan():
devices = await BleakScanner.discover(timeout=5.0)
for d in devices:
print(d.address, d.name)
asyncio.run(scan())
# Look for a device named "BrainCo" or similar — note its address
UUID БЫЛ ПРИНЯТ
- Услуга:
0000ffe0-0000-1000-8000-00805f9b34fb - Напишите характеристику:
0000ffe1-0000-1000-8000-00805f9b34fb - Характеристика уведомления:
0000ffe2-0000-1000-8000-00805f9b34fb
Подключитесь и отправьте команду через BLE
import asyncio, json from bleak import BleakClient WRITE_CHAR = "0000ffe1-0000-1000-8000-00805f9b34fb" ADDRESS = "AA:BB:CC:DD:EE:FF" # replace with your device address async def main(): async with BleakClient(ADDRESS) as client: # Close all fingers to 50% cmd = json.dumps({"cmd": "set_pose", "positions": [50,50,50,50,50]}) await client.write_gatt_char(WRITE_CHAR, cmd.encode("utf-8"), response=False) await asyncio.sleep(1.0) # Open all fingers cmd2 = json.dumps({"cmd": "set_pose", "positions": [0,0,0,0,0]}) await client.write_gatt_char(WRITE_CHAR, cmd2.encode("utf-8"), response=False) asyncio.run(main())
Команды первой позы (USB)
Значения позиции в протоколе JSON представляют собой целые числа от 0 до 100 (процент закрытия). Python SDK использует нормализованные числа с плавающей запятой 0,0–1,0 и выполняет внутренние преобразования.
Необработанные последовательные команды
import serial, json, time
port = serial.Serial("/dev/ttyACM0", baudrate=115200, timeout=1.0)
def set_pose(positions):
pcts = [int(p * 100) for p in positions]
cmd = json.dumps({"cmd": "set_pose", "positions": pcts}) + "\n"
port.write(cmd.encode("utf-8"))
# Open all fingers
set_pose([0.0, 0.0, 0.0, 0.0, 0.0])
time.sleep(1.0)
# Point with thumb extended, close others
set_pose([0.0, 0.8, 0.8, 0.8, 0.8])
time.sleep(1.0)
# Fist
set_pose([1.0, 1.0, 1.0, 1.0, 1.0])
time.sleep(1.0)
# Open again
set_pose([0.0] * 5)
port.close()
Отображение индексов пальцев
- 0 — Большой палец (2 степени свободы: сгибание + вращение = сгибание × 0,4)
- 1 — Индекс (1 степень сгибания)
- 2 — Средний (сгибание 1 ГРИП)
- 3 — Кольцо (1 степень изгиба)
- 4 — Пинки (сгибание 1 ГРИП)
Установить один палец
# Set index finger to 75% closure
cmd = json.dumps({"cmd": "set_finger", "finger": 1, "position": 75}) + "\n"
port.write(cmd.encode("utf-8"))
python brainco_revo_agent.py --mock --session test --self-test использовать все методы API и последовательности нажатия фортепиано без какого-либо физического устройства.
Калибровочная волновая последовательность
Калибровка устанавливает ограничения на перемещение каждого пальца в встроенном программном обеспечении. Запустите это после первого подключения и после любой механической регулировки.
Последовательность калибровки (автоматическая)
- Все пальцы открыты до закрытия 0%.
- Подождите 300 мс для механического урегулирования.
- Для каждого пальца (большой → указательный → средний → безымянный → мизинец):
- Закрытие близко к 90 % — подождите 120 мс.
- Открытие до 0% закрытие — ожидание 120 мс
- Все пальцы фиксируются в положении наведения (закрытие 15%).
- Отправлять
{"cmd": "calibrate"}заблокировать ограничения прошивки
Запустите калибровку через SDK
import asyncio
from brainco_revo_agent import BrainCoReVoController
async def calibrate():
ctrl = BrainCoReVoController(mock=False)
await ctrl.connect("/dev/ttyACM0")
await ctrl.calibrate() # runs full wave then sends calibrate cmd
print("Calibration complete")
await ctrl.disconnect()
asyncio.run(calibrate())
Интеграция платформы Teleop
The brainco_revo_agent.py соединяет Revo II с платформой RoboticsCenter через WebSocket, обеспечивая удаленное управление, мониторинг положения пальцев и сбор демонстрационных данных из браузера.
Запустить агент
# Real hardware (USB) python brainco_revo_agent.py \ --backend wss://your-backend.run.app \ --session YOUR_SESSION_ID \ --device /dev/ttyACM0 # Real hardware (BLE) python brainco_revo_agent.py \ --backend wss://your-backend.run.app \ --session YOUR_SESSION_ID \ --ble AA:BB:CC:DD:EE:FF # Mock mode — no hardware required python brainco_revo_agent.py \ --backend ws://localhost:8000 \ --session test-session \ --mock
Режим фортепиано через платформу
Запускайте нажатие клавиш пианино с телеоп-панели браузера. При каждом нажатии выполняется 4-фазная последовательность: выдвижение (20 мс) → движение (30 мс) → удержание → втягивание (20 мс). Поддерживаются одновременные нажатия пальцев.
Высокоуровневый API SDK
import asyncio
from brainco_revo_agent import BrainCoReVoController
async def main():
ctrl = BrainCoReVoController(mock=False)
await ctrl.connect("/dev/ttyACM0")
# Set all fingers to 60% closure
await ctrl.set_hand_pose([0.6, 0.6, 0.6, 0.6, 0.6])
await asyncio.sleep(0.5)
# Read current state
snap = await ctrl.snapshot()
print(snap["positions_dict"]) # {"thumb":0.6, "index":0.6, ...}
await ctrl.disconnect()
asyncio.run(main())