机械臂自20世纪50年代开始发展,现已广泛应用于工业生产、军事、航天及医疗中。机械臂写字系统可以应用于工业中的数控雕刻中,也可以用于机器人教学中。机械臂写字系统需要进行精确的轨迹规划,本文研究了六自由度机械臂的轨迹规划算法,并使用REbot-V-6R工业机械臂完成了汉字书写实验。
目前主要有3种方法提取字符及汉字的数据信息:1) 对写有汉字的图像进行阈值化[1-4],将图像转化为二值图像,对汉字进行细化,细化为单像素值的汉字,按顺序记录笔画中点的坐标;2)使用AutoCAD软件提取文字笔画的点坐标信息[5],用编程软件实现与CAD的信息交互;3)利用Windows的API函数读取Windows系统的TTF矢量字库的轮廓信息[6-10]。
对于基于视觉的方法,2011年何薇等[1]研究了基于机器视觉的机器人写字技术,以六自由度DENSOVP6242机器人、信捷机器视觉和PC机为实验平台,通过机器视觉获取字符的图像信息,将图像传给PC机,利用图像处理得到字符坐标信息控制机器人的多轴联动,完成字符的书写;同年Guohua Gao和Yaping Dai[2]研究了双目视觉机械臂的写字问题,使用四自由度的双目视觉机械臂GRB3044,写字的数学模型基于运动学正逆解,另外提出了几何算法来补偿机械臂写字的误差。基于视觉的方法可以写出图像中的任意字体的文字,图像中也可以是手写的文字,这种方法虽然写出的字可以灵活多变,但是获取字体的位置信息的过程较复杂,并且需要制定完善的笔画书写规则。
对于基于AutoCAD的方法,2011年张传剑等[5]设计了MOTOMAN-UP6机器人的写字功能,采用VB编程设置文字式样并输入目标文字,利用CAD的扩展工具将目标文字分解成线,然后提取各多线段的顶点坐标,使用机器人实际进行书写。这种方法也可以实现任意字体的书写,但是在CAD软件中输入文字并提取点的位置信息,然后在编程软件中编程实现机械臂的控制,过程复杂不灵活,如果更改文字时,需要不断的在CAD与编程软件中切换。
基于TTF矢量字库的轮廓提取方法可以实现字体的任意放大及快速变形,也可以随意改变字库中任意字体的高度、宽度及倾斜角度,字库丰富且易实现,效果较好。宮晓博[6]研究了IRB140型工业机器人连续轨迹控制的汉字绘制方法,采用基于TTF矢量字库的方法,但是其研究重点在字体轮廓提取方面,没有研究机械臂的控制机理,直接使用厂商提供的RAPID编程语言进行控制,轨迹规划完成后,运动过程中不允许更改位置,本文在提取文字的轮廓信息后,对REbot-V-6R机械臂的控制方法进行研究,实现了机械臂的位置控制,在运动过程中可根据实际需要实时调整位置,使机械臂平稳的完成写字实验。本文提出的运动过程中可实时调整位置的控制结构也适用于需要对位置进行实时调整的力/位置混合控制结构。
1 整体方案本文为实现机械臂精确的轨迹规划与实时轨迹跟踪控制,设计了基于TTF矢量字库的汉字书写系统。机械臂的写字流程如图 1所示。
2 文字轮廓提取本文利用TTF矢量字库进行文字信息提取,TTF矢量字库是由Apple和微软公司合作推出的文字文件格式,可以显示汉字、数字、字母等,使用二次贝塞尔曲线来描述字形,并且渲染速度比较快,可以平滑且美观的显示。
2.1 TTF的字体结构每个TTF字符是由多个轮廓组成的,每个轮廓的开始是TTPOLYGONHEADER数据结构,存储轮廓的字节数、轮廓类型及轮廓起始点;其后是多个TTPOLYCURVE数据结构,存储描述字符轮廓的线型和像素点数据。
2.2 轮廓提取在VC6.0平台下构建MFC基于对话框的程序,调整字体的高度、宽度和倾斜角度。调用CFont类的CreateFont函数创建需要使用的字体,其中,nHeight和nWidth分别表示所需字符的高度和宽度,lpszFace指向指定字体的字样名的的字符串指针。
HFONT CreateFont(
int nHeight,int nWidth,int nEscapement ,
int nOrientation,int fnWeight,DWORD fdwItalic ,
DWORD fdwUnderline ,DWORD fdwStrikeOut ,
DWORD fdwCharSet,DWORD fdwOutputPrecision,DWORD fdwClipPrecision,DWORD fdwQuality,DWORD fdwPitchAndFamily ,LPCTSTR lpszFace );
将创建的字体置于设备上下文中,在当前DC下调用GetGlyphOutline函数,获得字符的轮廓:
DWORD GetGlyphOutline (
HDC hdc,UINT uChar,UINT uFormat ,
LPGLYPHMETRICS lpgm,DWORD cbBuffer,
LPVOID lpvBuffer,CONST MAT2 *lpmat2);
其中,hdc指定设备的环境句柄,uChar指定被返回数据的字符,uFormat指定函数取得的数据的格式,当需要获得字符的轮廓信息时,uFormat应该设为GGO_NATIVE,lpvBuffer为指向缓冲区的指针,缓冲区用于存放点的位置信息。
将字的所有线段轮廓点位置信息循环遍历保存在数组中,由于提取的位置点为POINTFX类型的整数,需要将像素点坐标根据式(1)转化为机械臂末端的执行器的位置坐标。
(1) |
式中:Ppos为机械臂末端执行器的位置坐标值;PFirstPos为起始点的像素坐标值;Ppoint为像素点的坐标值;R为转换系数;Pmax为末端位置的上限位。
2.3 生成文本数据文件采用MFC文件类的基类CFile类的派生类CStdioFile类生成文本文件,可以对文件进行流式的操作,利用其子函数WriteString (LPCTSTR lpsz)向文件中写入字符串。使用file.Open函数指明文件的类型及名称,然后将转化为机械臂末端执行器坐标的位置信息通过WriteString()函数写入文本文件中,生成的机械臂可以执行的写字文件如图 2所示,其中第一列为坐标x,第二列为坐标y。
3 轨迹规划算法 3.1 直角空间轨迹规划TTF字库将字体的轮廓分为直线和二次样条曲线,使用GetGlyphOutline函数提取的轮廓位置点只有关键点,机械臂不能直接根据这些信息平滑运动,需使用插补算法在直角空间进行轨迹规划,获得精确的机械臂末端位置信息。
轮廓线为直线和二次样条曲线时的插补方式不同:当轮廓线为直线时,在线段的起点和终点间插入n个点,将直线等分成n+1个线段,将中间插值点的坐标存入数组中;当轮廓线为二次样条曲线时,使用二次抛物线函数对曲线进行拟合,并进行二次样条插值。如图 3所示,利用三切线定理构造抛物线函数[4],根据已知的轮廓线上的A、B、C这3个点的位置坐标得到抛物线的函数P(t),保证每两个插值点之间的弦长恒定,计算所需的时间t,将时间t代入抛物线公式,即可得到插补点的坐标,然后将位置坐标存入数组中,对“心”字插值前后的字体轮廓如图 4所示。
3.2 机械臂逆运动学算法使用逆运动学算法将机械臂笛卡尔空间的位置坐标转化为关节空间6个轴的关节角进行空间控制。
首先根据D-H参数建立机械臂的运动学模型,REbot-V-6R机械臂的D-H参数表如表 1所示。
关节 | αi-1/(°) | ai-1/mm | θi/(°) | di/mm |
1 | 90 | 100 | θ1 | 136.5 |
2 | 0 | 290 | θ2+90 | 0 |
3 | 90 | 121 | θ3 | 0 |
4 | -90 | 0 | θ4 | 310 |
5 | -90 | 0 | θ5-90 | 0 |
6 | 0 | 0 | θ6 | -321 |
表中,αi-1为连杆长度,是轴i-1和轴i的公垂线的长度;ai-1为连杆转角,是关节轴i-1和i的夹角;di为连杆偏距,是沿相邻连杆公共轴线方向的距离;θi为关节角,是相邻两杆公共轴线旋转的角度。连杆变换矩阵ii-1T的一般形式为
(2) |
根据D-H参数表可计算机械臂末端相对于基坐标的连杆变换矩阵,即正运动学模型:
(3) |
该机械臂的后3个关节轴相交于一点,满足Pieper准则[12],一定存在封闭解。将逆运动学求解分为两步[13]:首先根据机械臂腕部点的坐标采用平面几何法求解前3个关节角;然后根据已知的前3个关节角和给定的机械臂末端姿态矩阵采用欧拉角变换法求出后3个关节角,最后得到关节角的最优解θ。
利用平面几何法解出前3个关节角:将机械臂分别向垂直于第二、第三个关节轴的竖直平面和水平面投影,通过几何关系计算出各关节角的值。
采用欧拉角变换法求取后3个关节角:机械臂末端姿态矩阵EER与其他旋转矩阵有:
(4) |
式中:EERxyz为欧拉角变换矩阵,66R|θ4=θ5=θ6=0为第四关节到第六关节的转换,前提是后3个关节角均为0,可计算得到θ4、θ5和θ6。
4 机械臂控制方法 4.1 位置控制系统设计为实现对机械臂末端位置的控制,将笛卡尔空间的期望位置通过逆运动学转换为关节空间的期望关节角,将期望关节角转化为期望的关节脉冲,控制DMC运动控制卡,控制机械臂运动,通过编码器实时读取关节脉冲值,转化为实际位置值,与期望位置相比较,直到机械臂到达期望位置,如图 5所示。
图中,x为机械臂末端期望位置,P为轨迹规划的期望位置,y为机械臂末端实际位置。
4.2 运动方式本文使用REbot-V-6R六自由度机械臂,使用运动控制卡DMC-2143,提供了多种运动方式,包括定位控制、位置跟踪控制、直线插补控制、JOG运动和电子凸轮运动等,用户可以利用现有的运动方式根据控制要求写应用程序。
直线插补控制方式可以根据提前给定的轨迹运动,不需要人为进行直线插值,机械臂沿着直线到达期望点,但是这种方式只能在机械臂轨迹已知的情况下使用,不能实时更改期望的位置坐标,且只能进行直线插补,不能进行曲线插补,本文不采用这种控制方法,运动过程中可以实时改变期望位置坐标。
将提取到的末端执行器的位置坐标作为机械臂的期望位置,采用位置跟踪的运动方式。位置跟踪运动模式可以随时指定目标位置,也可以指定速度、加速度和减速度。首先通过PT控制指令开启位置跟踪模式,并通过指令SP、AC和DC分别指定运动的速度、加速度和减速度,指令PA指定目标位置,控制机械臂开始运动,当检测到机械臂的关节位置脉冲到达期望的关节位置脉冲时,发送下一个目标位置指令,实现位置的连续运动,直到完成一个完整轮廓的绘制,然后绘制下一个轮廓,直至所有轮廓绘制完成,机械臂回到初始位置,停止运动。
5 实验及结果分析使用getline()函数读取存放在文本文件中的文字轮廓信息,然后存入数组,在机械臂运动时实时读取数组中的期望的位置坐标,并读取线段的起点与终点位置,在起点处,机械臂末端落下与纸面接触,在终点处,机械臂末端抬起,运动到下一轮廓线的起点。
将笔固定在机械臂的末端执行器上进行实验,机械臂绘制汉字过程如图 6所示。机械臂沿着给定的期望位置运动,绘制汉字的轮廓线,期望的写字效果如图 7(a)、8(a)所示,实际写字效果如图 7(b)、8(b)所示。
可以看出,机械臂可以连续写多个汉字,并且字体的轮廓与期望轮廓图基本一致,在字体轮廓的转折处变化平滑,关键的位置点均与期望位置一致,基本满足要求。但是该设计仍然存在以下不足:不能精确获得接触面的实际位置,写字时的接触力不能控制,当接触力较大时,笔尖不能跟随机械臂末端执行器做同步运动,影响写字效果。
6 结论本文使用六自由度机械臂通过VC6.0编程实现了汉字书写系统设计,通过实验验证了如下内容:
1) 基于TTF字库的汉字轮廓提取及直线与二次样条的精确轨迹规划。
2) 设计了机械臂控制结构图,结合使用DMC的位置跟踪控制模式实现了实时位置跟踪控制,此结构也适用于需要实时改变期望位置的力/位置混合控制系统中。
3) 机械臂汉字书写实验,实验结果显示机械臂绘制的汉字符合期望的写字效果。
本系统可以用于工业机械臂汉字书写、雕刻、喷涂等领域,具有良好的应用价值。
[1] | 何薇, 钱增磊, 唐超, 等. 基于机器视觉的机器人写字技术的设计[J]. 江南大学学报: 自然科学版 , 2011, 10 (5) : 513-517 |
[2] | GAO Guohua, DAI Yaping. Research and implementation of writing function of binocular vision manipulator[C]//Proceedings of International Conference on Multimedia Technology (ICMT). Hangzhou, China: IEEE, 2011: 449-453. http://cn.bing.com/academic/profile?id=1999541131&encoded=0&v=paper_preview&mkt=zh-cn |
[3] | SYAMLAN A T, NURHADI H, PRAMUJATI B. Character recognition for writing robot control using ANFIS[C]//Proceedings of 2015 International Conference on Advanced Mechatronics, Intelligent Manufacture, and Industrial Automation (ICAMIMIA). Surabaya, Indonesia: IEEE, 2015: 46-48. http://cn.bing.com/academic/profile?id=2488140408&encoded=0&v=paper_preview&mkt=zh-cn |
[4] | CHAO Fei, CHEN Fuhai, SHEN Yuhang, et al. Robotic free writing of Chinese characters via human-robot interactions[J]. International journal of humanoid robotics , 2014, 11 (1) : 1450007-1 DOI:10.1142/S0219843614500078 |
[5] | 张传剑, 李春梅, 韩军. MOTOMAN-UP6机器人写字功能设计与实现[J]. 机械制造与自动化 , 2011, 40 (2) : 119-121 |
[6] | 宫晓博. 基于IRB140型工业机器人连续轨迹控制的汉字绘制[D].合肥: 中国科学技术大学, 2009. http://cdmd.cnki.com.cn/article/cdmd-10358-2010019188.htm |
[7] | 谢凤芹. 基于矢量字库的数控雕刻走刀轨迹规划算法的研究[D]. 青岛: 山东科技大学, 2003. http://cdmd.cnki.com.cn/article/cdmd-10424-2003124068.htm |
[8] | 汪涛, 黄继武, 余进, 等. Windows95中字符轮廓线的提取和显示[J]. 微计算机应用 , 1999, 20 (2) : 86-88 |
[9] | 贺云凯. 基于六轴工业机器人的矢量图形及字符绘制的应用研究[D].太原: 太原理工大学, 2015. http://epub.cnki.net/kns/detail/detail.aspx?QueryID=32&CurRec=1&recid=&FileName=1015604046.nh&DbName=CMFD201502&DbCode=CMFD&pr= |
[10] | 王光建, 廖志勇, 陈雪华. 机器人写字技术及其运动参数[J]. 重庆大学学报 , 2003, 26 (12) : 6-9 |
[11] | CRAINIC M F, PREITL S, SANDRU L A, et al. Secure handwriting using a robot arm for educational purpose[C]//Proceedings of the 19th International Conference on Methods and Models in Automation and Robotics(MMAR). Miedzyzdroje, Poland: IEEE, 2014: 58-63. http://cn.bing.com/academic/profile?id=2025192172&encoded=0&v=paper_preview&mkt=zh-cn |
[12] | CRAIG J J. 机器人学导论[M]. 贠超, 译. 北京: 机械工业出版社, 2006. |
[13] | 朱齐丹, 王欣璐. 六自由度机械臂逆运动学算法[J]. 机器人技术与应用 , 2014 (2) : 12-18 |