随着汽车的普及, 为了提高喷漆的效率, 人们对喷漆机器人的轨迹进行了大量的研究. 传统工业机器人大多采用人工示教法[1], 由于汽车曲面复杂难以精确控制喷枪轨迹, 影响喷漆质量. 为了克服这种不足, 2005年, Sheng等人[2]使用优化目标函数的方法优化复杂曲面的喷漆轨迹, 为复杂曲面喷枪轨迹规划奠定基础. Chen等人[3]采用三角网格划分法对工件进行分片, 优化了相邻轨迹的喷涂距离, 得到了喷枪的轨迹, 此方法对曲率变化较小区域的喷涂轨迹有较好的功效. 缪苏毅等人[4]对于曲面的CAD模型的快速轨迹生成提供了思路, 提出喷枪轨迹可以通过自由曲面的点云数据得到. 由于构建待喷工件的CAD模型的过程繁琐, 并且使用CAD软件操作员的熟练程度会影响模型的精度, 直接影响喷涂效率和质量. 孙义东[5]提出采用曲面分割的方法并对曲面拟合简化了喷涂轨迹所用到的模型. 但是曲面分割得到的面片边界具有不规则性, 虽然可以通过曲面拟合得到规则面片, 不过仍存在轨迹长度不一致的情况, 在交界处的轨迹也具有不规则性. 由于工件表面的喷枪轨迹是由一系列等距路径构成, 对点云数据进行均匀切片处理, 可以获得等距的切片轮廓. 因此本文采用点云切片技术, 直接对工件的点云数据进行计算, 自动生成喷枪的轨迹.
2 汽车的三维点云重建与数据处理汽车曲面空间跨度大, 机械臂的运动空间有限. 若使用对所有车型曲面打点进行轨迹规划, 就存在坐标定位、任务接续、奇异点等问题. 所以本文采用对汽车三维点云建模的方法, 对整个曲面进行统一的路径规划, 能够完成补漆操作.
2.1 基于运动恢复法SFM的汽车三维重建本文是基于运动恢复法SFM[6]对汽车进行三维重建, 该算法可以基于各种收集到的无序图片进行三维重建. 本文采用大疆精灵4无人机对汽车分为上中下3层进行10度间隔环绕拍照, 再用运动恢复法得到汽车的点云数据. 效果如图1所示.
2.2 曲面路径生成
补漆时大多数情况下只需要对汽车某个曲面喷漆, 因此需要将整车按曲面分割, 得到每个曲面的三维点云数据. 以汽车前引擎盖为例, 如图2所示.
通过三维建模获得的点云数据分布不均匀且无序, 但是机械臂的喷漆运动轨迹要求是有序的, 如“弓”字形或“之”字形, 因此需要对点云数据预处理, 将无序点云数据转为有序轨迹点, 并提取出三维曲面点云的关键轮廓曲线.
1) 首先确定三维点云中曲面的起始点: 对于右边缘且闭合的点云曲面, 通过计算每两个点之间的欧几里得距离, 然后选择距离最大两个点中的一个点设为起始点P0.
2) 八邻域法提取轮廓: 点P确定为边缘点后, 通过点P找出点云边缘轮廓起始点, 得到点云的有序数据. 以P点为球心, 求解包含八邻域点在内的半径最小的球, 由于点云不均匀分布, 点云的疏密程度会影响球的半径, 且直接影响边缘点的求解.
采用如下定义邻域: 在点云中随机选取N个点, 在每个点Pi邻近的8个点中计算距离Pi最远的点与Pi的距离di. 对所有的di求平均得到点云邻域半径的平均值. 再计算di的标准差, 最终得到点云的邻域半径
$\bar R = \frac{1}{N}\mathop \sum \limits_{i = 1}^{N} {{{d}}_i}$ | (1) |
$\partial = \sqrt {\frac{1}{N}\sum\limits_{i = 1}^N {{{\left( {{d_i} - \bar {{R}} } \right)}^2}} } $ | (2) |
半径是一个统计平均值, 考虑到点云的疏密程度不同, 为了减少这种不均匀的影响, 所以对半径额外叠加一个标准差, 确保在这个半径下, 多数点的邻域内有8个点. 确定邻域半径后, 以起始点为圆心, 以为半径求出圆内的所有点. 假设三维空间中, 点与点之间存在像“弹簧”一样的拉力[7], 那么每个点受到邻域内其他点的拉力的合力会有大小和方向, 边缘上的点只有一边有其他点, 所以受拉力的合力较大, 而非边缘上的点受到周围其他点的拉力, 所以受拉力的合力较小. 即可以用某点所受周围点拉力的合力大小判断该点是否为边缘点. 非边缘点与边缘点的受力情况如图3所示.
由于点云分布散乱且不均匀, 因此点与点之间的距离的长度会不同, 因此只考虑点与点之间的受力而不考虑点与点之间的距离判断一个点是否为边缘点是不准确的. 因此我们将每个点对圆心点的拉力进行了归一化之后再累加, 再取平均值, 能很有效的消除点云之间不均匀带来的影响. 公式如下:
$ {{F}} = \frac{1}{{{k}}}\left| {\mathop {\mathop \sum \limits^{{k}} }\limits_{i = 1} \frac{{\mathop {{P_0}{P_i}}\limits^ \rightharpoonup }}{{|\mathop{{P_0}{P_i}}\limits^ \rightharpoonup |}}} \right|$ | (3) |
当通过起始点作为边缘种子店P0提取边缘时, 将该种子点邻域中拉力最大的一个点作为下一个种子点, 循环此过程直到提取完毕. 算法流程如图4所示.
通过上面的算法, 以汽车前引擎盖为例, 得到外圈轮廓, 然后删除最外圈, 继续使用上述算法, 可以得到整个的有序数据. 如图5是最外圈轮廓.
3) 生成曲面轨迹: 目前最常用的喷漆机器人喷涂轨迹规划方法分为光栅形和回字形两种. 回字形路径规划方法在路径规划中易出现奇异点, 所以本文采用光栅形的轨迹规划.
通过对物体进行三维建模得到物体的三维点云, 然而现实中的物体表面大多是不规则的曲面, 所以本文采用了基于切片法的轨迹规划方法[8]. 本文将点云曲面用C表示, 切面用L、Lr和L1表示, 切距用δ表示, 如图6所示[9].
以下为轨迹生成的具体步骤:
步骤1. 首先确定切片的方向, 切片的方向决定着轨迹的走向. 一般的, 优先选择投影面积最大曲面进行规划, 然后将曲面的最大长宽计算出来, 选择从长度较小的地方开始切, 这样能够使机器人可能一次性走完一条路径. 在进行切片时, 先插入切面L, 然后在平行平面L分别向左和向右移动δ/2的位置插入切片L1和Lr, 此时, 将L1切面和L切面之间的点放入集合Q1中, 将L切面和Lr切面之间的点放入集合Qr中, 此时完成一次切片. 每次处理好切片数据后只需要将切面L向左或者向右移动δ并重复插入切面L1和Lr操作, 直到点云中的数据被全部切完. 如图7所示.
步骤2. 通过步骤1将得到切片好的数据, 接下来进行匹配处理, 这一步是最重要的一步, 如图7所示, Q1和Qr分别代表切面L左侧和右侧的点的集合. 这一步的具体步骤如下:
步骤2.1. 从集合Q1开始, 一次遍历每个点P1i, 通过立方体包盒法求出在Qr中距离P1i最近的点记为Pri_min. 立方体包盒法能够快速判断点是否在盒子内, 如果在盒子外就不需要计算距离, 这样节约了很多时间. 立方体包盒法的方法如下: 以遍历点为盒子中心, 盒子的初始边长
步骤2.2. 同样的, 依次遍历Qr中的点Pri, 通过立方体包盒法遍历找出Q1中距离Pri最近的点记为P1i_min. 如果P1i对应的最近点为Pri_min, 且将Pri_min作为Pri, 其对应的P1i_min与P1i为同一点, 则称P1i与Pri构成匹配点对, 并将这两点分别存入链表ListL和ListR中, 并且从集合Q1和Qr中去掉.
步骤2.3. 重复步骤2.1和步骤2.2, 直到Q1中的数据遍历完结束.
步骤3. 匹配后的点需要解方程组, 求出每组点对直线相连与切面L的交点, 交点为轨迹上的点. 设交点Pi的坐标为(xi, yi, zi), 计算方程如下:
$\frac{{{{X}} - {{{X}}_{ri}}}}{{{X_{li}} - {X_{ri}}}} = \frac{{Y - {Y_{ri}}}}{{{Y_{li}} - {Y_{ri}}}} = \frac{{Z - {Z_{ri}}}}{{{Z_{li}} - {Z_{ri}}}}$ | (4) |
若切面沿X轴方向, 则交点的解为:
$\left\{ \begin{array}{l} {X_i} = {X_{\min }} + \left( {0.5 + k} \right)\delta \\ {Y_i} = t\left( {{Y_{li}} - {Y_{ri}}} \right) + {Y_{ri}} \\ {Z_i} = t\left( {{Z_{li}} - {Z_{ri}}} \right) + {Z_{ri}} \\ \end{array} \right.$ | (5) |
其中, Xmin表示全部数据坐标X分量的最小值, k为对应切面.
通过上述算法, 以汽车前引擎盖为例, 得到了前引擎盖的光栅轨迹, 如图8所示.
3 补漆机器人系统设计
在硬件方面, 本文采用了龙门式运动平台吊装6轴机械臂的方案[10]. 平台模型图如图9所示.
机械臂是由6个RJS系列机器人关节模组组成, 机械臂基座悬挂式安装在龙门框架的桁架滑台上, 在机械臂末端安装喷涂装置, 喷涂装置包括喷枪、喷壶和连接件. 控制箱安装在喷漆房外面, 由电源、控制元件和气动元件组成. 控制元件包括机械臂的控制元件和框架电机的控制元件, 将机械臂信号与框架电机信号进行了串联.
软件框架采用QT作为集成开发平台, 包括了QT、Matlab、TwinCat3和Visual Studio (VS)的联合开发. QT用来编写人机交互界面, 由于QT是C++图形用户界面应用程序的开发框架, 在VS中调用QT, 只需要在VS中安装一个VS的QT插件, 就可以在VS中创建和管理QT项目. Matlab用来实现机械臂的仿真实验, 采用的是调用Matlab引擎的方式实现机器人的仿真. TwinCat3是机械臂的运动控制软件, 基于VS平台开发. 所以本文以VS作为集成开发平台.
4 倍福运动控制系统设计本系统采用的是串联的8轴机器人, 只需要通过一根总线就可以与PC端连接, 需要控制9台电机, 在Y轴桁架上是两个电机控制[11]. 为了控制NC轴, 需要在TwinCat3中建立9个虚拟轴, 建立9个虚拟轴与NC轴的联系. 在PLC程序中, 在全局变量中建立9个轴变量“Axis_REF”对应9个电机, 这样就通过PLC程序控制轴的位置状态和运行状态. PLC中有上下使能功能、运动控制功能和手动示教功能, 其中最主要的功能是运动控制功能, 在运动控制模块中包含了27个数组变量, 其中9个数组是用来接收机械臂的位置数据, 9个数组是用来接收机械臂的速度数据, 还有9个数组是用来接收机械臂的加速度数据. 为了实现将本地的轨迹数据下发到PLC程序, 本文使用了倍福公司定义的一种专门协ADS[12]. ADS用于TwinCat3设备之间的非周期性通信. ADS通信是基于TCP/IP之上的应用协议, 所以当它用于控制器之间与TwinCat3设备通信时, 保证控制器之间的TCP/IP通信正常, 安装TwinCat3的网卡. ADS通信支持有线和无线连接. ADS通信具有实时性, 应用程序与TwinCat3在用一台IPC或者EPC上, 响应时间为3个任务周期[13]. ADS通信是基于C++开发的[14], 在TwinCat3中支持C++编程, 可以很好地将通信模块集成在TwinCat3的工程中. 轨迹规划完成后, 将数据保存在本地的文本文档中, 每行有8个点, 每个点对应1个轴. PC端编写C++程序读取文本数据, 通过ADS协议将, 通过ADS协议将数据写入到PLC中对应的数组. 本文采用了TwinCat3 ADS通讯方式中的同步方式, 其优点在于能及时返回结果. 同步方式通讯分为两种, 即为读操作和写操作, 针对读和写操作分别分为两种方式, 即按变量名进行读写和按照地址进行读写. 本文采用的是按照变量名对PLC进行读写操作. 在TwinCat3的PLC程序中每个变量都有一个句柄, 在对变量进行操作之前, 首先要通过相关路径得到变量的句柄, 然后进行读写操作, 操作完毕后对句柄进行释放. 数据通信如图10所示.
本文采用了PTP的运动模式, MC2.lib库中提供了命令堆栈的功能, NC轴在执行运动指令的时候, 最多允许再有一个指令排队等候, 所以在编写运动控制模块时, 每次读取两个点, 一个是正在运行的指令, 另一个点是等候指令. 其速度的运动模式取决于BufferMode的设置, 本文采用了MC_Buffered模式, 此模式即等前动作执行完成, 停稳后再执行后动作. 为了使八轴联动时平稳不抖动, 就需要计算每个指令的速度和加速度, 本文采用Matlab机器人工具箱中的LSPB函数[15]求得各个轴的速度和加速度. 每个轴的运行时间如图11所示.
5 测试与分析
本实验环境主要分为建模环境、PC电脑环境和运动环境. 建模环境是在一个平行光源的封闭环境下, 使用大疆的手持云台拍照建模, 尽量减少人为抖动造成的误差, 本实验对汽车前引擎盖为实验对象, 实际建模效果基本达到了实验的要求. PC端硬件环境是一台搭载了CUP为i7 9700k和GPU为2080ti的台式主机. 软件环境包括了建模环境、仿真环境和系统框架环境. 其中建模和切割使用Contest Capture和Cloud Compare软件, 仿真环境使用了Matlab的机器人工具包, 系统框架环境是部署在Visual Studio 2017, 在VS中安装了QT插件Visual Studio Add-in和倍福的TwinCat3. 运动环境包括了三轴龙门式运动平台、六轴机械臂和控制箱. 本文以汽车前引擎盖实验对象, 通过拍照建模的方法对汽车前引擎盖建模, 得到前引擎盖的三维点云数据, 使用算法对数据预处理, 将三维无序数据进行有序化, 得到满足实验要求的数据. 应用切片法得到光栅型的轨迹, 使用Matlab建立的机械臂模型对光栅轨迹仿真, 验证轨迹的可行性. 最后通过ADS传输协议将轨迹下发到PLC控制中, 调用运动程序完成对实验对象的喷涂工作. 以汽车前引擎盖为例实际效果如图12.
6 结语
本文主要介绍了通过TwinCat3和Visual Studio设计了一个基于点云的喷漆机器人的运动控制系统. 首先利用SFM算法为汽车建立三维模型; 其次为了满足整车喷漆需求, 设计了机械臂的运动平台, 平台设计采用了龙门式结构; 然后对汽车三维点云进行了切割, 将点云数据进行有序化处理, 利用切片法计算出喷枪的轨迹. 在PLC中编写机械臂的运动控制程序, 包含手动示教模式和点对点运动模式, 最后编写了TwinCat3的ADS通信协议将轨迹数据下发到PLC程序中, 包括运动轨迹点数据、速度和加速度数据3部分.
通过实验验证了曲面轨迹数据和联动方法. 由于汽车曲面各不相同, 本方法能够对汽车各个曲面进行喷枪的轨迹规划, 使得机械臂能够完成各个不同曲面的喷漆任务.
本文下一步的工作是改善汽车三维建模环境, 采用更加精准的建模设备, 减少建模时的误差. 调整机械臂运动时的速度和加速度, 使机械臂运动时更平稳减少抖动, 提高运动精度.
[1] |
殷际英, 何广平. 关节型机器人. 北京: 化学工业出版社, 2003. 165–167.
|
[2] |
Sheng WH, Chen HP, Xi N, et al. Tool path planning for compound surfaces in spray forming processes. IEEE Transactions on Automation Science and Engineering, 2005, 2(3): 240-249. DOI:10.1109/TASE.2005.847739 |
[3] |
Chen HP, Sheng WH, Xi N, et al. CAD-based automated robot trajectory planning for spray painting of free-form surfaces. Industrial Robot: An International Journal, 2002, 29(5): 426-433. DOI:10.1108/01439910210440237 |
[4] |
缪苏毅. 基于点云切片技术的喷枪轨迹获取方法研究[硕士学位论文]. 镇江: 江苏大学, 2009.
|
[5] |
孙义东. 基于曲面分割的喷漆轨迹规划方法研究[硕士学位论文]. 哈尔滨: 哈尔滨工业大学, 2018.
|
[6] |
李德元, 曹鹏, 孙朝犇, 等. 基于多视角立体影像匹配三维建模技术的研究. 经纬天地, 2020(2): 71-74. DOI:10.3969/j.issn.1673-7563.2020.02.021 |
[7] |
韩玉川, 侯贺, 白云瑞, 等. 一种基于边缘系数的闭合点云边缘提取算法. 激光与光电子学进展, 2018, 55(11): 111003. |
[8] |
周峰, 卢章平, 戴立玲, 等. 采用点云切片技术的喷漆机器人轨迹生成. 工程图学学报, 2009, 30(6): 61-65. |
[9] |
李明珠. 形状混合的理论与应用研究[硕士学位论文]. 镇江: 江苏大学, 2007.
|
[10] |
李萍. 龙门式双驱动系统同步运动控制方法研究[博士学位论文]. 武汉: 华中科技大学, 2019.
|
[11] |
张炜岸. 基于TwinCAT的机器人控制系统设计[硕士学位论文]. 武汉: 武汉纺织大学, 2019.
|
[12] |
靳海平, 赵强. 基于Ads协议的ZL29滤棒成型机通讯模块的设计与实现. 通讯世界, 2019, 26(7): 69-70. DOI:10.3969/j.issn.1006-4222.2019.07.042 |
[13] |
庞党锋, 杜慧起, 崔健. 基于TwinCAT的机电传动控制实验平台设计. 科技与创新, 2020(18): 130-131. |
[14] |
李宪华, 张军, 阮学云. LSPB轨迹规划方法在模块化机械器人手臂运动中的应用研究. 安徽省机械工程学会成立50周年论文集. 合肥: 安徽省机械工程学会, 2014. 402–405.
|
[15] |
张根华. 实时以太网EtherCAT网络研究及在多轴运动中的应用[硕士学位论文]. 南昌: 南昌航空大学, 2012.
|