バイオニック ハンド - USB および BLE コントロール
BrainCo Revo II セットアップガイド
USB または BLE 接続からキャリブレーション、姿勢制御、プラットフォーム統合まで、BrainCo Revo II バイオニック ハンドの段階的なセットアップ。
1
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
ボーレート
Revo II は正確に通信します。 115200ボー。 それ以外のレートでは、読み取り不能な出力が生成されます。 コマンドは、改行で終了する UTF-8 JSON 文字列です。
2
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())
3
最初のポーズコマンド (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 メソッドとピアノの押下シーケンスを実行します。
4
校正波形シーケンス
キャリブレーションにより、ファームウェアで指ごとの移動制限が確立されます。 最初の接続後、および機械的な調整後にこれを実行します。
校正シーケンス(自動)
- すべての指を開いて 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())
5
プラットフォーム テレオペの統合
の 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())