从零制作视觉抓取机械臂实物系列:一、让机械臂实物动起来(3)

键盘遥控机械臂运动

  • 建立PC与机械臂的通讯
    • 硬件接线
    • 串口通讯控制
  • 写代码让机械臂自己动起来
  • 键盘遥控机械臂

建立PC与机械臂的通讯

硬件接线

机械臂组装时要开机再组装,
硬件接线
可用串口或者蓝牙,
从零制作视觉抓取机械臂实物系列:一、让机械臂实物动起来(3)_第1张图片

串口通讯控制

  1. 单个舵机控制指令:
#000P1500T1000!

说明:#与P 之间代表舵机ID,位数必须是3 位,对于PWM 舵机范围000~005,对于总线
设备000~254;P 与T 之间代表位置,位数必须是4 位,范围0500~2500;T 与!之间代表时间,
单位ms,位数必须4 位。
2. 多个舵机控制指令

{#000P1500T1000!#001P1500T1000!#002P1500T1000!}

说明:多个单舵机指令的组合体,注意两边的大括号。

写代码让机械臂自己动起来

github搜索代码,下载前点赞是最基本的程序员礼仪,这个代码比较小,可以直接下载,老步骤,解压,拖到文件夹,打开项目,设置编译器,安装包,这里安装包又出现了导入时名称与安装名称不一致的情况,conda install pyserial
运行起来,连上机械臂,选择串口号,打开串口,发送测试指令,嘿,nice
来,我们来品品人家这个代码
找到发送按钮,发送按钮的命令,查看代码,修改代码

data="{#000P1000T1000!#001P1500T1000!#002P1500T1000!}\n"

在init函数中加入

self.angle0=1500
self.angle0=self.angle0+100
if self.angle0>2500:
	self,angle0=2500
data="{#000P"+str(self.angle0)+"T1000!#001P1500T1000!#002P1500T1000!}\n"

键盘遥控机械臂

需求分析:添加一个按钮,点击这个按钮就可以进入键盘遥控事件,键盘的上下键能控制机械臂运动,再次点击按钮结束遥控。
第一步:我们需要添加一个开始遥控按钮:

spacelabel = tk.Label(optionframebottom, width=5, height=1)
spacelabel.pack()
self.controlbutton = tk.Button(optionframebottom, text='开始遥控', \
                            width=20, height=1, command=self.controlbuttoncmd)
self.controlbutton.pack()

第二步:修改按钮命令

def controlbuttoncmd(self):
    if self.controlbutton['text'] == '开始遥控':
        self.controlbutton['text'] = '结束遥控'
    else:
        self.controlbutton['text'] = '开始遥控'

第三步:开启键盘监听事件

def controlbuttoncmd(self):
    if self.controlbutton['text'] == '开始遥控':
        self.root.bind("", self.func)
        self.controlbutton['text'] = '结束遥控'
    else:
        self.root.unbind("")
        self.controlbutton['text'] = '开始遥控'
def func(self,event):
    print("事件触发键盘输入:{event.keysym},对应的ASCII码:{event.keycode}")

第四步:修改键盘监听事件

if event.keycode==38:
    self.angle0+=100
    if self.angle0>=2500:
        self.angle0=2500
    # data="{#000P"+str(self.angle0)+"T1000!#001P1500T1000!#002P1500T1000!}\n"
    data = "{#000P" + str(self.angle0) + "T1000!#001P"+str(self.angle1)+"T1000!#002P1500T1000!}\n"
    self.serial.write(data[0:-1].encode(self.encoding))
    time.sleep(1)
elif event.keycode == 40:
    self.angle0 -= 100
    if self.angle0<=500:
        self.angle0=500
    # data = "{#000P" + str(self.angle0) + "T1000!#001P1500T1000!#002P1500T1000!}\n"
    data = "{#000P" + str(self.angle0) + "T1000!#001P" + str(self.angle1) + "T1000!#002P1500T1000!}\n"
    self.serial.write(data[0:-1].encode(self.encoding))
    time.sleep(1)

elif event.keycode==37:
    self.angle1+=100
    if self.angle1>=2500:
        self.angle1=2500
    data = "{#000P" + str(self.angle0) + "T1000!#001P"+str(self.angle1)+"T1000!#002P1500T1000!}\n"
    self.serial.write(data[0:-1].encode(self.encoding))
    time.sleep(1)
elif event.keycode == 39:
    self.angle1 -= 100
    if self.angle1<=500:
        self.angle1=500
    data = "{#000P" + str(self.angle0) + "T1000!#001P"+str(self.angle1)+"T1000!#002P1500T1000!}\n"
    self.serial.write(data[0:-1].encode(self.encoding))
    time.sleep(1)

该教程的视频与源码:包括机械臂系统从上到下的梳理、机械臂的硬件、通讯与控制

你可能感兴趣的:(从零制作视觉抓取机械臂实物系列,#让机械臂动起来,人工智能)