دليل إعداد BrainCo Revo II
إعداد خطوة بخطوة لليد الإلكترونية BrainCo Revo II - بدءًا من اتصال USB أو اتصال BLE وحتى المعايرة والتحكم في الوضع وتكامل النظام الأساسي.
اتصال 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
اتصال بلوتوث منخفض الطاقة (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())
أوامر الوضعية الأولى (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 وتسلسلات الضغط على البيانو دون أي جهاز فعلي.
تسلسل موجة المعايرة
تحدد المعايرة حدود السفر لكل إصبع في البرنامج الثابت. قم بتشغيل هذا بعد الاتصال الأول وبعد أي تعديل ميكانيكي.
تسلسل المعايرة (تلقائي)
- جميع الأصابع مفتوحة لإغلاق 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
ال 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())