杜 明,王中宝
(吉林电子信息职业技术学院,吉林 吉林 132021)
弦丝画发源于19世纪末,被称为“数字与艺术的舞蹈”,其制作方式是在一个钉满钉子的木板上,按照图案的明暗交接用绕线的方式组成图案轮廓,然后用线在钉子之间缠绕,组成几何图形或画,因其上手简单又极具艺术美感,使得弦丝画手工艺品越发流行。2018年,维也纳某科研团队研发了一种计算机算法,利用该算法能够让机器人用绕线的形式重新创造出各种图案。与国外相比,国内虽然存在能够生成绕线顺序的软件,但尚未见到自动绕线的机器。现有的绘制流程地解算需要付费使用,且代码不开源,应用受限。另外,采用人工方式进行绘制,消耗时间长,容易出错。综上所述,本文设计了一套能够自动绕线的绘画机器人,具有自动识图、解算及绘制功能[4]。
弦丝画控制系统主要由上位机与下位机两个部分组成。上位机负责弦丝画步骤的解算、绘制步骤的储存。下位机则是绘制部分的机械平台,由3个步进电机进行驱动,分别构成X轴、Y轴以及Z轴3个方向。系统流程与系统结构如图1和图2所示。
图1 系统流程
图2 系统结构
传动系统主要由下位机控制实现,通过STM32F10 3C8T6单片机接收上位机发送的位置信息,控制各步进电机进行绕线。各轴步进电机传动控制结构如图3所示。
图3 步进电机传动控制结构
首先通过一张1 000×1 000像素的空白图片,用来模拟弦丝画的背景板。以点O(X0,Y0)为圆心,以R为半径,坐标如图4所示。
由图4可得圆周上某点的极坐标方程为:
图4 圆的极坐标
(1)
可见,根据公式(1)可以求出圆上任意一点的位置,推导出公式(2):
(2)
式中:n为弦丝画上总的钉子数,ni为从角度位置到时钉子的排序。
在作图时,由于像素点的原因不能求出小数,所以,需要对求得的坐标(X,Y)取整最后绘图得到坐标生成效果,如图5所示。
图5 坐标生成效果
使用OpenCV中cv2.imread()函数加载图片,该函数的形式如式(3)所示:
cv2.imread(Path,Flags)
(3)
式(3)中输入参数Path是图片的路径;Flags是图片的加载方式。cv2.cvtColor()方法用于将图像从一种颜色空间转换为另一种颜色空间。该函数的形式如式(4)所示:
cv2.cvtColor(Stc,Code
[,Dst[,DstCn]])
(4)
式(4)中输入参数Stc是需要转化空间颜色的图像;Code是色彩空间转换代码;Dst是与Src图像大小和深度相同的输出图像;DstCn是目标图像中的频道数。
使用公式img = cv2.imread(‘XSH.png’,0)加载图片,img_gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)将所加载的图片转化为灰度图。灰度图转化形式如式(5)所示:
gray(x,y)=0.299×r(x,y)+
0.587×g(x,y)+0.114×
b×(x,y)
(5)
使用OpenCV读取图片的时候,默认使用的是BGR来读取图片,原始读取的图片是3通道的,经过转换之后变成了单通道。灰度图对应8位灰度取值,有256种取值,0表示黑色,255表示白色[5-6]。
采用Brezenham算法,Bresenham的输入为两个点A(X1,Y1),B(X2,Y2)。根据这两个点能够计算出两点之间的“距离”。
(6)
根据y=kx+b
则有
(7)
Δyx-Δxy-C=0
(8)
在上述公式中
(9)
设直线的斜率为k,当|k| <=1时,x方向为主步进方向;当|k| >1时,y方向为主步进方向。
上位机部分使用python3.8版本的编译环境,调用tkinterUi设计模块,OpenCV-python 4.4.0版本的计算机视觉库,numpy 1.18.1版本的科学计算库以及pyserial 3.4版本的通信模块等。上位机界面如图6所示。
图6 上位机界面
下位机采用STM32F103单片机作为主控模块,3个Tb6600步进电机驱动器分别对应X,Y,Z轴的驱动部分,实现3个维控制。绘制结果如图7所示。
图7 绘制结果
针对弦丝画装置的需求研发了弦丝画机器人,系统采用上、下位机结构,上位机负责图像处理、期望位置坐标生成,下位机负责位置控制。经过仿真实验和实际运行,验证了设备运行稳定、定位精确、绘制图案美观,生产效率高,可满足弦丝画工艺的需求,具有良好的工程应用价值。