在本教程中,我将完整演示如何制作一个具备两个运动自由度的脑控外骨骼手臂。首先,我将详细讲解该系统的脑机接口(BCI)部分。
在该原型系统中,核心机制是对用户当前的专注状态与放松状态进行分类识别。根据检测到的实时状态,BCI 装置会向外骨骼控制系统发送相应的指令信号,进而驱动电机执行动作。在此版本中,我们将专注状态映射为“握拳(闭合)”动作,而将放松或非专注状态映射为“张开”动作。
为了简化配置流程,本教程直接调用 OpenBCI GUI 中已有的专注度组件(Focus Widget)。当前系统并未直接从后端提取脑电图(EEG)的专注数值,而是通过读取屏幕上该组件的显示颜色来进行状态判断。这种方法虽然属于原型阶段的权宜之计,而非完整的信号处理流水线,但极大地降低了开发门槛。当然,如果你希望在编程阶段直接提取 EEG 专注数值,可以使用 Brain Flow 库,该库内置了非常实用的函数,能够自动完成相关计算。
相关代码已上传至附件中的 GitHub 仓库,文件名为 state_detector.py。该脚本使用了 Python 的 tkinter库,用于检测屏幕特定坐标点的 HEX 色值。由于 OpenBCI 的专注度组件会根据检测结果动态变色,脚本会将光标定位至该组件区域并持续读取当前显示的色彩。在此设置中,组件主要使用蓝色和绿色,对应的 HEX 代码分别为 #3f67a0和 #c0db79。通过追踪当前显示的颜色,程序即可判断用户处于专注还是放松状态。
关于 OpenBCI GUI 专注度组件的具体样式,请参考下图。

OpenBCI GUI 专注度组件示意图
补充说明:OpenBCI 的专注功能基于 EEG 脑电活动分析,通常利用 Alpha 波与 Beta 波频段之间的关联性。一般来说,Beta 波活动相对于 Alpha 波占优时,通常与注意力集中或警觉状态相关;反之,Alpha 波相对于 Beta 波占优时,则更多对应放松状态。但需注意,这仍属于一种估算指标,并非对注意力的完美测量。
完成 BCI 系统搭建后,接下来进入机械部分的制作——即外骨骼手臂的构建。由于外骨骼需要实现五指独立可控,我决定采用腱驱动执行系统(Tendon-Driven Actuation System),即在每根手指内穿入一根粗线,并通过 MG995R 位置伺服电机对其进行牵引控制。
我首先在 CAD 软件(Fusion 360)中完成了手臂的设计建模,并根据自身手指和手臂的精确尺寸进行了适配调整,随后使用 3D 打印机(Adventurer 5M Pro)完成了所有部件的打印。
我在 GitHub 目录中提供了名为 “3D Printable Files (STL)” 的文件夹。如果你拥有 3D 打印机,可以直接打印这些文件;否则,请确保你能接触到相关设备以推进项目。此外,在切片(Slicing)时,请务必根据打印机的具体规格进行参数设置。下图记录了本项目 3D 打印的全过程。


外骨骼手臂组件
完成 3D 打印后,需要对机械手进行组装。这一步耗费了大量的 UHU 强力胶!组装完成后,我开始进行穿线工作,确保每根牵引线都穿过正确的孔洞,且预留长度合理,以避免后续出现故障。

手臂组装完毕后,重点转向硬件控制系统的搭建。这包括将舵盘牢固安装在电机上,因为牵引线将缠绕并锁紧在舵盘上以实现动力传输。下图展示了伺服电机的固定方式,以及配套的 Arduino(用于供电)、面包板(便于线路整理)和舵机测试仪(作为手臂的主要临时控制器)。

通过下方 GIF 动图及其他图片,可以查看完整手臂的最终形态:


现在两部分系统均已就绪,让我们按照以下流程将它们作为一个完整的流水线运行起来:
在计算机上打开 OpenBCI GUI,并确保专注度组件清晰可见(建议使用分屏模式)。
使用命令 python3 main.py运行主脚本。
脚本启动后会预留 3 秒钟的时间供你选择 OpenBCI GUI 窗口,请迅速将光标移动至专注度组件区域。
同时,确保并行运行 sender.py和 receiver.py脚本。
上述第二个脚本负责通过 IP 通信 在网络上发送“张开”或“闭合”指令。鉴于外骨骼手臂由 树莓派(Raspberry Pi) 控制,树莓派端也必须运行对应的接收脚本。该脚本负责监听传入信号并触发手臂动作。树莓派端的代码同样位于 GitHub 仓库中,文件名为 receiver.py。
整体系统的工作流如下:
OpenBCI 头戴设备 → OpenBCI GUI 专注度组件 → Python 颜色检测脚本 → IP 信号发送至树莓派 → 外骨骼手臂执行动作

你可以观看此处附带的视频,了解我的系统在实时运行中的实际表现。
视频演示截图
