OWI 535 Robotic Arm Edge(owi535,owi 535,owi-535)是一套非常流行的五自由度机械臂套件,常见于创客改造与科研用途。
机械臂由USB通信实现控制,每个控制指令由3个字节组成,分别为Byte0
,Byte1
,Byte2
。每个字节控制特定的一部分手臂功能,同时所有的电机(和LED灯)都可以被单独控制。字节中的对应部分处于“00”状态时,一般用于停止对应电机(或LED)动作。
注意:机械臂在得到控制指令后会持续运行,直到接到下一条指令。
字节中的比特位
首先简单定义一下字节中的比特位顺序。一个字节有8个比特位,从低位到高位依次定义为0到7,如下图所示:
Byte0
第一个字节Byte0
控制Gripper(抓手)、Shoulder(肩关节电机)、Elbow(肘关节电机)还有Wrist(腕关节电机)。
Byte0
的各个比特位从低到高的控制分配如下表所示:
比特位 | 关节 | 规则 |
---|---|---|
1, 0 | 抓手 | 00-停止移动, 01-闭合, 10-张开 |
3, 2 | 腕 | 00-停止移动, 01-向上移动, 10-向下移动 |
5, 4 | 肘 | 00-停止移动, 01-向上移动, 10-向下移动 |
7, 6 | 肩 | 00-停止移动, 01-向上移动, 10-向下移动 |
比特位数值的不同组合分别实现了对不同关节电机的控制,各自之间是独立的,所以能够同步控制。
这里向上移动和向下移动可能会有些费解,因为在不同的姿态下“上”和“下”的概念是可以翻转的,所以这里只要简单地理解为控制电机朝两个方向转动就好了。
另外,也可以发现这里是没有“11”组合的。
Byte1
第二个字节Byte1
控制Base(基座)。
Byte1
的比特位分配如下:
比特位 | 关节 | 规则 |
---|---|---|
1, 0 | 基座 | 00-停止移动, 01-顺时针转动, 10-逆时针转动 |
更高位的比特被忽略,不参与机械臂控制。
Byte2
Byte2
控制抓手中间的LED灯。
Byte2
的比特位分配如下:
比特位 | 关节 | 规则 |
---|---|---|
0 | LED灯 | 0-关闭, 1-打开 |
更高位的比特被忽略,不参与机械臂控制。
通过Python发送控制指令
我整理了一份Python控制代码,封装了上面提到的机械臂基本运动控制指令,本质上是调用Python的usb库来与机械臂进行usb通信,已开源至自己的GitHub仓库。如果有帮助的话欢迎给个star⭐: )