BrainCo Revo II セットアップガイド
USB または BLE 接続からキャリブレーション、姿勢制御、プラットフォーム統合まで、BrainCo Revo II バイオニック ハンドの段階的なセットアップ。
USB-CDC接続
Python の依存関係をインストールする
pip install pyserial websockets
ポートを接続して識別する
Revo II を USB 経由で接続します。 Linux では、デバイスは次のように列挙されます。 /dev/ttyACM0 (他の ACM デバイスが存在する場合は ttyACM1)。 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 Low Energy (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
GATT 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 DOF: 屈曲 + 回転 = 屈曲 × 0.4)
- 1 — インデックス (1 自由度の屈曲)
- 2 — 中央 (1 自由度の屈曲)
- 3 — リング (1 自由度の屈曲)
- 4 — 小指 (1 自由度の屈曲)
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())
プラットフォーム テレオペの統合
の brainco_revo_agent.py WebSocket を介して Revo II を RoboticsCenter プラットフォームにブリッジし、ブラウザからのリモート操作、指の位置の監視、デモンストレーション データの収集を可能にします。
エージェントを起動する
# 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
プラットフォーム経由のピアノモード
ブラウザーのテロップ パネルからピアノ キーの押下をトリガーします。 押すたびに、伸長 (20 ミリ秒) → 駆動 (30 ミリ秒) → 保持 → 収縮 (20 ミリ秒) の 4 段階のシーケンスが実行されます。 指の同時押しがサポートされています。
高レベルの SDK API
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())







