دليل إعداد BrainCo Revo II

إعداد خطوة بخطوة لليد الإلكترونية BrainCo Revo II - بدءًا من اتصال USB أو اتصال BLE وحتى المعايرة والتحكم في الوضع وتكامل النظام الأساسي.

1

اتصال USB-CDC

تثبيت تبعيات بايثون

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
معدل الباود يتصل Revo II بالضبط 115200 باود. أي معدل آخر سوف ينتج مخرجات غير قابلة للقراءة. الأوامر عبارة عن سلاسل UTF-8 JSON منتهية بسطر جديد.
2

اتصال بلوتوث منخفض الطاقة (BLE).

يعمل نفس بروتوكول أوامر JSON عبر BLE GATT. استخدم هذا المسار لعمليات النشر اللاسلكية.

قم بتثبيت مكتبة بليه

pip install bleak

البحث عن ريفو 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

بلي جات UUIDs

  • خدمة: 0000ffe0-0000-1000-8000-00805f9b34fb
  • خاصية الكتابة: 0000ffe1-0000-1000-8000-00805f9b34fb
  • خاصية الإخطار: 0000ffe2-0000-1000-8000-00805f9b34fb

الاتصال وإرسال الأمر عبر بليه

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 انثناء DOF)
  • 2 - الأوسط (1 انثناء DOF)
  • 3 - الحلقة (انثناء DOF واحد)
  • 4 - الخنصر (انثناء DOF واحد)

تعيين إصبع واحد

# 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

تسلسل موجة المعايرة

تحدد المعايرة حدود السفر لكل إصبع في البرنامج الثابت. قم بتشغيل هذا بعد الاتصال الأول وبعد أي تعديل ميكانيكي.

تسلسل المعايرة (تلقائي)

  1. جميع الأصابع مفتوحة لإغلاق 0٪
  2. انتظر 300 مللي ثانية للتسوية الميكانيكية
  3. لكل إصبع (الإبهام → السبابة → الأوسط → الحلقة → الخنصر):
    • إغلاق قريب من 90% — انتظر 120 مللي ثانية
    • مفتوح حتى الإغلاق بنسبة 0% — انتظر 120 مللي ثانية
  4. جميع الأصابع تستقر عند موضع التحويم (إغلاق بنسبة 15%)
  5. يرسل {"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

التكامل مع منصة Teleop

ال 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

وضع البيانو عبر المنصة

يتم الضغط على مفتاح البيانو من لوحة Teleop في المتصفح. تنفذ كل ضغطة تسلسلًا مكونًا من 4 مراحل: تمديد (20 مللي ثانية) ← القيادة (30 مللي ثانية) ← تعليق ← تراجع (20 مللي ثانية). يتم دعم مكابس الإصبع المتزامنة.

واجهة برمجة تطبيقات 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())
← العودة إلى النظرة العامة المواصفات الكاملة →

هل تحتاج إلى مساعدة في الإعداد؟

قم بزيارة منتدى المجتمع أو اتصل بدعم SVRC.