本系统通过上位机识别图像处理图像后,将轨迹信息通过串口发送给下位机,下位机接收点的坐标,根据这些坐标计算出步进电机旋转所需的pwm信号、en信号dir信号和舵机所需的信号。 绘图机器人的整体系统设计框架如下。
1上位机程序设计上位机程序由c编写,使用OpenCV视觉处理库进行图像处理共有4种绘制方法。
)1)将图像二值化并直接轮廓化。
)2)也可以使用Canny运算符对2值图像进行边缘检测后,寻找轮廓。
)3)或者将二值化的图像细分轮廓化。
)4)除此之外,还可以直接用点划线画画。 用这种方法画的图像最好看,但需要时间。
无论哪种绘制方法,最终的图像信息都要转换成区域链代码发送到下位机,下位机将数据存储在缓冲区,并对缓冲区的数据进行绘图和执行。 直到最后一个子图被执行。
1.1将二值化配置文件检索图像原始图像转换为灰度图像,选择适当的二值化分割值,将对应点设定为黑色(r值0,g值0,b值0 )。 经过二值化算法得到二值图像(非黑即白),为了得到轮廓图,需要经过图像的轮廓化算法对图像进行处理。 扫描二值化的图像,如果该点为黑色,且上下左右为黑色,则将对应的点设为白色。 否则,对应点的色值不会改变。 以下为分割值value下的二值化图像及轮廓图像。 然后获取轮廓的区域链码发送给单片机即可。
1.2 Canny算子Canny边缘检测算子是John F.Canny于1986年开发的多级边缘检测算法。 更重要的是,Canny创立了边缘检测计算理论(computationaltheoryofedgedetection ),说明了该技术是如何工作的。 Canny边缘检测算法以Canny命名,被很多人推荐为目前最好的边缘检测算法。
将灰度图像二值化后,直接进行Canny边缘检测,如下所示。
1.3细线化算法得到字符的框架,为了实现字符的书写,上位机用细线化算法实现。 在细线化过程中,根据每个像素的八个相邻点的情况,判断该点是否可以删除或保留。 其本质类似于腐蚀操作。
上图除了c图和e图外,其余的点不能去除。 通过扫描所有的像素点,可以得到图像细化的骨架。
1.4点绘画前几种方法都是用轮廓绘画。 点画是指逐点取出图像,扫描所有二值化的像素点,从上到下、从左到右检测黑白跳跃,确定笔的起点和终点,最后将边界链码发送给下位机执行。
1.5获取区域链码前一个算法得到的边缘数组,通过遍历所有边缘坐标,记录下一个坐标后,将下一个坐标与前一个坐标比较得到的坐标插值以0-7表示8个方向发送给下位机执行。 本系统为了提高代码的适应性,将长度超过500的边界切割为多个边界,分别发送给下位机,使上下的比特机不会丢失通信信息。
2下位机程序设计2.1步进电机模块编程4988的控制逻辑简单,主要分为休眠、正反转、复位、使能、细分等模式控制。
)1)休眠模式) Sleep引脚电平设置为0进入休眠模式,驱动器输出待机模式; Sleep针脚设置为1,驱动器工作正常;
)2)正转模式)正转模式DIR引脚为0或1,反转模式为1或0;
)3)复位模式)在复位模式下容易消耗能量,产生较大的冲击电流。 直接重置管脚设置为1,如果不影响系统行为,则重置管道
脚置0复位。一旦驱动芯片复位,系统将回归到原始A4988 I/O端口控制状态;(4)使能模式:使能模式控制系统是否开始工作,ENBALBE管脚置0开始工作,置1停止工作;
(5)细分模式:通过MS1、MS2、MS3控制细分系数,A4988细分为1/16细分为最小,通过计算角度值可得最小细分角度为全步进角度的1/16。A4988驱动逻辑控制如表所示。
控制步进电机得PWM由定时器2产生,通过设定目标位置来对PWM得脉冲次数进行控制,通过设置定时器2的中断时间来实现对PWM的频率进行控制,从而控制电机速度。
2.2 控制算法程序设计本系统通过由上位机传来的八方向边界链码来对步进电机进行控制,在控制步进电机的过程中同样将将笔尖移动的方向设为八个方向,这两样带来了两个好处:
绘制同样大小的图片的数据量大大减小,该系统最大可以绘制3500*3500个像素大小的图片,如果直接发送坐标数据笔尖挪动一个位置至少需要四个字节的数据,但是如果使用八方向边界链码,只需要发送起始坐标,之后笔尖挪动一个位置都只需要3bit的数据,大大减少了数据量的传输,增强了系统的实时性。控制精度大大提升,代码量大大减少。由于直接使用坐标可能会需要控制X,Y两个轴的步进电机以不同的速度运行,这样频繁的修改PWM的频率容易导致步进电机丢步,但在使用八方向边界链码后,虽然在微观上PWM频率没变,但宏观上电机的速度发生了变化,这样间接的控制的电机的速度,而且使用该方法比传统使用两点确定一条线段的控制方法代码量大大减少,给出两点后需要STM32 通过插值算法计算出其间的各个点,再通过前后两点的位置关系完成绘图任务,这样浪费了时间和资源还不利于代码书写。2.3 通信模块程序设计串口通信设计上设置波特率为115200,为了保障数据的安全性、真实性、可靠性,本系统设置了自己的通信协议,包括帧头和帧尾校验位来传输数据。帧格式说明如下[以下数据是十六进制的]:
数据位
数据
功能
Byte 0
A5
帧起始字节1
Byte 1
5A
帧起始字节2
Byte 2
本帧包含的字节数,除了起始字节外,每组数据至少20000个数据000*3/8=7500 两位数据就够低位在前
Byte 3
Byte 4
00
帧功能:
01:开启绘图:数据位无
02:绘图起始坐标:数据为绘图起始位置 32位,低位在前
03:绘图长度:后面传输数据的长度 16位
04:放大倍数:8位
05:绘图数据:三位 低位在前
06:结束绘图:数据位无
Byte 5
01
数据值[范围0-255] 8*3 =24一个数据包含8个像素点的数据
Byte 6
02
Byte 7
03
Byte n
AA
帧结束。
为了增强系统的实时性和容错率,尽可能的让传输的数据少,我们将三个字节的数据作为一组数据8*3 =24一组数据包含8个像素点的数据,以此来达到系统目的。
3.1 实物效果实物的整体图片如下:
写字台的机械结构如下:
硬件电路板如下:
3.2上位机测试
上位机的调试界面如上通过滑条调整好相应参数后,键盘输入开始绘图。
3.3功能测试
3.3.1素描画测试
下图是绘画前的原图与采用二值化描点和Canny边沿检测绘画后的图片的对比。
3.3.2 汉字测试
下面是原图与机器书写空心字和实心字的对比。