完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本系统利用上位机识别图像对图像进行处理,然后将轨迹信息通过串口发送给下位机,下位机接受到点的坐标,通过这些坐标计算出步进电机转动所需要的pwm信号和en信号dir信号和抬笔舵机所需信号。绘图机器人的整体系统设计框架如下。
1 上位机程序设计 上位机程序采用 C++编写,使用OpenCV视觉处理库进行图像处理一共有四种画图方法: (1)将图片二值化后直接轮廓化。 (2)也可以采用Canny算子对二值图像进行边沿检测后寻找轮廓。 (3)或者将二值化的图像进行细分后轮廓化。 (4)除此之外,还可以通过描点来直接绘制图画,这总方式画出来的图像是最漂亮的,但花费的时间比较长。 无论哪种绘图方法最终的图像信息都是转化为区域链码后发送给下位机器,下位机将数据存储进缓冲区,再将缓冲区的数据绘制成图,不断执行。直到最后一个子图执行完毕。 1.1 二值化寻找轮廓 读取图片对原图像转化为灰度图像,选择合适的二值化分割值,设置对应点为黑色(R 值 为 0,G 值为 0,B 值为 0)。经过二值化算法后我们得到了二值图像(非黑即白),为了得到轮廓图,们需要经过图像的轮廓化算法对图像进行处理。对二值化的图像进行遍历,如果该点为黑色且上下左右都为黑色(只比较 R 的值即可),那么就将对应点置为白色,否则,对应点色值不变。以下是经过分割值 value 下的二值化图像以及轮廓图像。之后将轮廓的区域链码获取后发送到单片机即可。 1.2 Canny算子 Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory ofedge detection),解释了这项威廉希尔官方网站 是如何工作的。Canny边缘检测算法以Canny的名字命名,被很多人推崇为当今最优的边缘检测的算法。 将灰度图像二值化后,直接进行Canny边沿检测如下。 1.3 细化算法 为了得到文字的骨架,从而实现文字的书写,上位机采用细化算法来实现,细化过程中要根据每个像素的八个相邻点的情况来判断该点是否可以剔除或保留,其实质类似于腐蚀操作。 如上图除了c图和e图,其余的点都不能移除,通过遍历所有的像素点后就可以得到图像细化的骨架了。 1.4 描点画图 前面几总方法都是使用轮廓画图,描点画图就是将图像一个个点点出来,通过遍历所有二值化后的像素点,由上至下,从左到右检测黑白跳变,确定笔的起点和终点,最后发送边界链码至下位机运行。 1.5 获取区域链码 由前面算法得到的边沿数组,通过遍历所有边沿坐标,记录下的一个坐标后,将后一个坐标与前一个坐标相比较得到坐标的插值用0-7表示八个方向然后发送给下位机运行,为了让代码的适应性更强,本系统将长度大于500的边界切割成多条边界,这样分别发送给下位机,保证了上下位机不会丢失通讯信息。 2 下位机程序设计 2.1步进电机模块程序设计 4988控制逻辑简单,主要分为睡眠、正反转、复位、使能、细分等模式控制。 (1)睡眠模式:Sleep管脚电平置0,进入睡眠模式,驱动器输出待机模式;Sleep管脚置1,驱动器处于正常工作状态; (2)正反转模式:正转模式DIR管脚置0或1,反转模式置1或0; (3)复位模式:复位模式下容易消耗能量,产生的冲击电流较大。直接RESET管脚置1,在不影响系统工作时RESET管脚置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 控制算法程序设计 本系统通过由上位机传来的八方向边界链码来对步进电机进行控制,在控制步进电机的过程中同样将将笔尖移动的方向设为八个方向,这两样带来了两个好处:
串口通信设计上设置波特率为115200,为了保障数据的安全性、真实性、可靠性,本系统设置了自己的通信协议,包括帧头和帧尾校验位来传输数据。帧格式说明如下[以下数据是十六进制的]:
3.1 实物效果 实物的整体图片如下 写字台的机械结构如下 3.2上位机测试 上位机的调试界面如上通过滑条调整好相应参数后,键盘输入开始绘图。 3.3功能测试 3.3.1素描画测试 下图是绘画前的原图与采用二值化描点和Canny边沿检测绘画后的图片的对比。 3.3.2 汉字测试 原图与机器书写空心字和实心字的对比。 |
||
|
||
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1848浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
610浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
504浏览 3评论
508浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
489浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:42 , Processed in 0.481808 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号