andresjjn/alpha1s-sdk

GitHub: andresjjn/alpha1s-sdk

通过逆向工程蓝牙协议,为已停产的 UBTECH Alpha 1S 人形机器人提供完整的 Python 编程控制接口,使其重获可控性。

Stars: 0 | Forks: 0

# alpha1s **用于 UBTECH Alpha 1S 人形机器人的 Python SDK。** 2016年,UBTECH 销售了 Alpha 1S —— 一款配备 16 个 servo 的爱好者级人形机器人。随着公司业务转移,官方应用早已停止维护,成千上万的机器人因此沦为了架子上的摆设。本 SDK 通过逆向工程破解了机器人的 Bluetooth 协议,让你的机器人能够重获新生。 ``` from alpha1s import Alpha1s, poses with Alpha1s() as robot: print(robot.battery()) # {'mv': 8012, 'percent': 85, 'charging': False} robot.servo_write_all(poses.init) # stand in the calibrated neutral pose robot.play_action("Hug") # trigger a factory action stored on the robot ``` ## 安装 ``` pip install alpha1s # core (protocol + API) pip install "alpha1s[rfcomm]" # + classic Bluetooth backend (Linux — most reliable) pip install "alpha1s[ble]" # + BLE backend via bleak (cross-platform) ``` ## 协议(有趣的部分) 没有人完整地记录过 Alpha 1S 的通信协议,因此它是通过抓包和逆向工程得出的。每一个数据帧,无论是发送还是接收方向: ``` FB BF LEN PAYLOAD... CHK ED │ │ │ │ └─ fixed tail │ │ │ └─ (LEN + Σ payload) % 256 │ │ └─ command opcode + parameters │ └─ 4 + len(payload) └─ fixed 2-byte header ``` - 传输层:经典 Bluetooth **RFCOMM,通道 6**(BLE 取决于固件版本)。 - 最核心的 opcode 是 `0x23`:**一帧控制全部 16 个 servo** —— 可以实现约 2.5 Hz 的流畅全身关键帧动画。 - 该连接未加密且未经过身份验证。这对于 hacking 来说非常棒,但也请牢记这一点。 - 完整的 opcode 表位于 [`src/alpha1s/protocol.py`](src/alpha1s/protocol.py)。 ## 你将获得 | | | |---|---| | `Alpha1s` | 高级客户端:遥测、servo、动作、声音、LED | | `poses` | 硬件校准的姿势和步态(`init`、`hands_up`、`walk`、`turn`)—— 附带文档化的 servo ID 映射表 | | `protocol` | 纯粹的组帧层(compose/verify/extract)—— 无需连接机器人即可进行单元测试 | | backends | `rfcomm` (PyBluez) 和 `ble` (bleak) 统一封装在一个 `Transport` 接口下 | | safety | `battery()` 会在电量 ≤20% 时自动关闭 servo 电源,确保在行走过程中绝不会发生电压骤降 | ## 架构 ``` Alpha1s (robot.py) — what you call └── protocol.py — framing: compose / verify / extract (pure, tested) └── Transport (backends) — rfcomm.py | ble.py, picked by backend="auto" ``` Servo 映射表 (ID 0–15): ``` 0 Shoulder R Roll 1 Shoulder L Roll 2 Arm R Pitch 3 Arm L Pitch 4 Elbow R 5 Elbow L 6 Hip R Pitch 7 Hip L Pitch 8 Hip R Roll 9 Hip L Roll 10 Knee R 11 Knee L 12 Ankle R Pitch 13 Ankle L Pitch 14 Ankle R Roll 15 Ankle L Roll ``` ## 运行测试(无需机器人) ``` pip install -e . python -m unittest discover tests -v # or: PYTHONPATH=src python -m unittest discover tests ``` 组帧层和高级 API 均通过模拟的 transport 进行了测试,其中包含了从真实连接中抓取的已知正确数据帧。 ## 诚实的局限性 - 步态关键帧是在**我的**机器人上校准的;由于 servo 的磨损和装配公差,你的设备可能需要进行几度的微调(`poses.py` 中记录了该映射表)。 - 在某些固件版本上,`leds()`(opcode `0x08`)仍需与官方协议 PDF 进行比对验证。 - 通过 PyBluez 实现的经典 RFCOMM 仅支持 Linux;这是机器人原生的通信链路,也是最可靠的途径(使用 Raspberry Pi 是完美的选择)。 ## 相关项目 - [ubtech-alpha1s-distributed-ai](https://github.com/andresjjn/ubtech-alpha1s-distributed-ai) —— 完整的现代化改造方案:唤醒词 → Whisper STT → 本地 LLM 任务规划 → TTS + 同步动作手势,分布式部署在 Raspberry Pi 5 和边缘 GPU 上。 - [alpha1s-ros2-twin](https://github.com/andresjjn/alpha1s-ros2-twin) —— Alpha 1S 的 ROS 2 / Gazebo 数字孪生(URDF,17 个关节,18 个网格)。 ## 许可证 MIT © Andrés Felipe Jején Tabares
标签:Python SDK, 云资产清单, 机器人, 物联网, 硬件控制, 蓝牙通信, 逆向工具, 逆向工程