此内容根据文章生成,仅用于文章内容的解释与总结
购买了一款云台摄像头,你可以在淘宝搜这个关键词知道它长什么样子。
它默认能通过 RS232 协议控制云台转动,但是现在新的主板已经没有这种圆形的接口了,基本都是 USB。
他也可以通过遥控器控制,但是我想尝试自己编写逻辑代码通过键盘控制。
效果是通过监听键盘上下左右等事件,调用对应云台运动 的指令,运动到合适角度之后可以按下空格停止云台运动,按下 ESC 退出控制程序。
也可以按下某个按键如数字1,直接运动到预设角度。
咨询商家后,商家提供了 RS232 协议的指令集,所以这里通过 python 的 serial 库尝试通过 USB 口对其云台调用。
RS232 协议说明书
Command | Command Packet | Comments |
---|---|---|
Stop | 8x 01 06 01 VV WW 03 03 FF | VV: Pan Speed |
Left | 8x 01 06 01 VV WW 01 03 FF | WW: Tilt Speed |
Right | 8x 01 06 01 VV WW 02 03 FF | YYYY: Pan Position |
Up | 8x 01 06 01 VV WW 03 01 FF | ZZZZ: Tilt Position |
Down | 8x 01 06 01 VV WW 03 02 FF | |
UpLeft | 8x 01 06 01 VV WW 01 01 FF | |
UpRight | 8x 01 06 01 VV WW 02 01 FF | |
DownLeft | 8x 01 06 01 VV WW 01 02 FF | |
DownRight | 8x 01 06 01 VV WW 02 02 FF | |
Absolute Position | 8x 01 06 02 VV WW 0Y 0Y 0Y 0Y 0Z 0Z 0Z 0Z FF | |
Relative Position | 8x 01 06 03 VV WW 0Y 0Y 0Y 0Y 0Z 0Z 0Z 0Z FF | |
Home | 8x 01 06 04 FF | |
Reset | 8x 01 06 05 FF |
这里有一些复合指令,譬如 UpRight:向上的同时向右,如果是手柄控制比较好,键盘控制比较鸡肋,所以这里我们实现:上下左右、暂停、复位、绝对定位这几个能用到与可能会用到的。
基数转换
这里的绝对定位和相对定位部分,出现了0Y 0Y 0Y 0Y
和 0Z 0Z 0Z 0Z
,我希望传入一个 10 进制的角度,譬如0、90、180,怎么映射到其中呢?这就体现我们学完二进制之后的敏感度了,把 20 转成 2 进制的过程是:
20 ÷ 2 = 10 余数: 0
10 ÷ 2 = 5 余数: 0
5 ÷ 2= 2 余数: 1
2 ÷ 2=1 余数: 0
1 ÷ 2= 0 余数: 1
按余数倒序排列: 10100