丁杰月,张延兵,谈英姿
(1.东南大学自动化学院,江苏 南京 210096)(2.江苏省特种设备安全监督检验研究院南通分院,江苏 南通 226000)
进入21世纪后机器人产业得到迅速发展,机器人种类繁多,表现形式各种各样。其中爬壁机器人在各行各业也开始大放异彩。爬壁机器人的研制在国内起步较晚,哈尔滨工业大学机器人研究所是国内最早研制爬壁机器人的科研机构,其代表性爬壁机器人是多功能履带式罐壁喷涂检测磁吸附爬壁机器人[1]。此外国内其他高校如清华大学、上海交通大学、东南大学、大连海事大学及宁波大学等都在研发爬壁机器人,但各自应用场景不同[2]。
机器人包括机械结构和控制系统两部分,本文研究的爬壁机器人主要应用于罐体检测,采用永磁吸附、双电机驱动,因此其机械结构部分复杂度较小,研究的重点在控制系统部分,主要的难点在控制系统的鲁棒性和通用性[3]。永磁吸附爬壁机器人属于移动机器人的一种,其控制系统应该具有一定的决策能力,通过获取环境变量可以实现与用户的实时交互,搭载检测传感器完成检测任务。本文主要介绍了机器人控制系统硬件构成和软件系统的实现方法。以工控机、视觉传感器、姿态传感器和高精度里程计为硬件基础,实现了机器人稳定运行和空间定位功能,并基于Qt5.0和Android3.0设计了多平台的操控端。
检测要求:机器人能够在垂直壁面稳定移动,能够检测壁面温度、壁面障碍物和机器人本体的姿态。
定位要求:在不改变现场环境的情况下,机器人要能够实现本体的空间定位,且定位精度在厘米级别。
通信要求:服务器和操作端能够同时互相传输图像和控制指令,且图像传输时延应在0.3s之内。服务器端和传感器之间的通信误码率应低于0.1%。
交互需求:操作人员能够远程遥控机器人,包括设定机器人的运动模式、设定机器人的运动速度、设定机器人的检测任务等,通过设计的操作端能够监测机器人的运行状态。
安全需求:机器人能够实现电池电量自检测及电量过低报警、温度监控异常报警等。
控制系统由服务器端、传感器网络、驱动机构、通信模块、操作端组成。其中服务器端、传感器网络、驱动机构之间通过RS-485总线进行通信。服务器端和操作端之间通过TCP/IP、UDP协议进行通信。系统的整体架构如图1所示。
机器人本体硬件系统是机器人运动的基础平台,一个好的硬件系统可以极大地提升机器人控制系统的稳定性。本文中控制系统硬件设计采用模块化设计方式[4]。系统硬件主要包括电源模块、控制器模块、传感器模块、通讯模块、运动模块等。硬件系统整体设计如图2所示。
图1 系统整体架构
图2 硬件系统整体设计
电源模块在整个控制系统中的作用非常重要,它直接决定整个系统的稳定性。机器人硬件系统使用24V锂电池供电,虽然大容量且小体积的锂电池成本高,但其输出电压稳定,自放电小,没有记忆效应,工作温度范围宽,可快速充放电,使用寿命长、污染小[5]。电源模块采用多级降压方式,通过直流降压模块将24V电压转换成12V、6~7V、5V、3V多种输出电压。其中12V转换模块额定功率为80W,主要给控制器模块、视觉模块、路由器、运动模块中的驱动器模块供电;6~7V电源模块额定功率为40W,主要给机器人二次运动模块中的舵机供电;5V、3V电源模块主要给传感器网络提供电源。由于电源系统采用多级降压稳压,前级电源产生的干扰信号很有可能对下级电源模块产生干扰,为保证各级电源可靠工作,必须强化各级电源的前、后滤波,使干扰降到最小[6],因此在前、后级电源模块之间增加了滤波电容。
机器人本体控制器采用ADVANTECH2236-j1900控制器。该款控制器有丰富的外设接口如SATA、mSATA、RJ45、USB、RS-485、VGA、HDMI、HD Audio等。控制器可以搭载Ubuntu16.04操作系统,配合多线程机制可以轻松实现图像处理、控制运算和数据传输等功能,处理器性能完全能满足控制要求。
传感器模块分为两个部分。第一部分与感知、运动有关,主要包括四通道超声波传感器、非接触式测温传感器、红外测距传感器、6轴姿态仪、网络摄像头、高精度编码器、接近开关等;第二部分与罐体壁面检测有关,该部分主要包括测厚仪、焊缝检测仪、探伤仪等。
运动模块由两个直流电机和电机驱动器组成。电机的最大输出功率是实际负载的1.5倍,设计时选用了体型较小的MAXON电机,驱动器选择Motec HIPPO驱动器,最大输出功率可达500W,具有一定的余量。
控制器、传感器、运动机构之间使用RS-485总线通信。使用RS-485总线可以将多个传感器构成一个传感器网络,节约外设接口资源。综合考虑传输质量、距离和抗干扰性能及数据量,RS-485总线使用9 600波特率[7]。机器人本体控制器和操作端之间使用TCP/IP和UDP协议通信。在网络连接正常情况下,TCP/IP协议传输质量远远的高于UDP协议,而UDP的传输速率却远高于TCPSocket,所以控制指令使用TCP/IP协议进行传输,图像传输则使用UDP协议。
机器人控制系统的软件系统包括本体控制系统和远程操控系统,软件系统使用C/S架构、MVC设计模式。机器人本体控制系统作为服务器端,可实现多操作端同时登录、同时操控。在MVC模式中,M为数据层(model),主要包括传感器数据和机器人状态信息;C 为控制层(controller),主要负责控制算法的实现、数据转发、实时报警、操作端管理等[8];V为View层,该层负责实现与用户的交互、实时数据图像显示。MVC各层的功能如图3所示。
爬壁机器人作为移动平台,除了搭载其他设备还要能够按照指定的路径移动,且能够实现空间定位。为了弥补传统定位的缺陷,本研究通过融合姿态仪和里程计的方式实现了空间定位。
图3 MVC各层功能
机器人本体控制系统使用了多线程技术。系统包括1个主线程和5个子线程,通过使用共享内存的方式在多个线程之间传递数据。此外系统中还使用了指令缓冲队列的方法,即所有线程共享一个指令队列,当接收到控制指令时将指令存入到指令队列中,当执行完成一条指令后将该指令从指令队列中删除[9]。如果指令队列长时间为空状态,则部分线程进入休眠状态,让出系统CPU资源给其他线程。
主线程主要执行全局对象的初始化、子线程的开启和关闭、服务器端UI的维护、本体运动控制以及检测运动控制。主线程程序流程图如图4所示。
图4 本体控制系统主线程程序流程图
第一个子线程为Socket线程,负责操作端的接入和退出、Socket通信、数据编解码以及数据存储。程序流程框图如图5所示。
第二个子线程为感知器数据采集线程,负责传感器数据采集和存储。
第三个线程是图像采集和传输线程,该线程主要负责摄像头的登录、退出及图像的采集和转发。
第四个线程是数据处理线程,该线程主要负责处理传感器反馈的数据和图像,对数据进行矫正补偿、姿态检测、信号报警。如当红外测距传感器所测得的距离超过设定的阈值时系统将会发送越界信号,当里程计数值未发生变化而姿态仪中加速度计数值剧烈波动时系统将会发送坠落信号。
图5 本体Sokcet线程程序流程图
第五个线程是在焊缝识别技术的基础上通过查询罐体焊缝数据库、融合姿态仪和里程计的方式实现机器人空间定位。传统定位方式在罐体定位中无法正常工作,因为基于传统的超声、红外、WiFi等方式的定位原理要求信号收发器处于空间同一平面,且中间无遮挡物。因此在该线程中根据实际焊缝的特点通过融合姿态仪、里程计方式实现了机器人基于焊缝编号的空间定位方式。实际罐体焊缝如图6所示。定位过程主要分3步:焊缝编号确定、多传感器位移计算、多传感器位移融合。
图6 实际焊缝样图
1)焊缝工程编号确定。
使用姿态仪和里程计可以实现机器人的空间定位,但是由于里程计和姿态仪都存在累计误差,所以机器人运行时间越长定位误差越大。为了消除累积误差,可以使用分段定位的方式,即运行一定的距离后将传感器重新置零。采用在罐体表面贴标记实现分段定位的方式会增加检测的人力成本。由于大型罐体是由多块钢板拼接而成的,其焊缝都是规则的直线段,因此充分利用罐体焊缝的已有特征,对焊缝上焊点的标定采用分段标定方式,其坐标为(焊缝编号ID,距离焊缝起点距离Pos),其中ID通过视觉传感器确定。焊缝的起始点和结束点都是汇合点(多个焊缝的相交点),当检测到第一个汇合点时即为一条焊缝的起始点。机器人沿着某条焊缝移动,当再次检测到汇合点时,此汇合点即为此条焊缝的结束点。通过纹理检测可以精确地识别焊缝的汇合点[10],当识别到汇合点之后查询数据库确定焊缝的工程编号。结合图6将实际焊缝抽象成如图7所示的焊缝示意图,机器人沿0号焊缝箭头方向驶入汇合点,当机器人通过视觉传感器识别出汇合点的同时识别出汇合点处所有的焊缝,对汇合点处的焊缝按顺时针方向进行编号,机器人根据决策规律驶入下一条焊缝如2号焊缝,此时查询数据库可知该焊缝在数据库中的工程编号为c,因此其焊点坐标可表示为(c,Pos),其中Pos根据2)、3)确定。
图7 焊缝示意图
2)位移计算。
里程计将转动轴的角位移、角速度等机械量转换成相应的电脉冲以数字量输出。通过计算里程计信号差值可以得到转轴转动距离,因此可以求得机器人的实际位移。本文中使用的里程计为Maxon 1024高精度光电式编码器,即电机轴每旋转一圈编码器产生1 024个脉冲信号。机器人电机转速为w,减速比为a,轮径为r,里程计初始值为S0,t时刻里程计的值为St,则机器人移动距离L1(t)(m/s)为:
本研究选用的姿态仪传感器由三轴加速度计和三轴陀螺仪构成,可以分别输出x,y,z各轴的加速度、角速度、角度。对x,y,z三轴的加速度做两次积分可以计算出机器人的位移。姿态仪的采样频率为200Hz,机器人工作时行走速度为0.2~0.5m/s,一个采样周期内机器人移动的距离为1.0~2.5mm,对此作积分计算求得的位移可以近似为机器人移动的距离。根据加速度计算得到的机器人移动距离L2(t)(m/s)为:
式中:*代表x,y,z;n为采样周期;ax,ay,az分别为x,y,z轴向的线加速度;Vx,Vy,Vz分别为x,y,z轴向的线速度。
3)姿态仪和里程计定位融合。
机器人的实际移动路径和规划路径存在偏差,因此里程计的定位位移始终大于实际位移。而姿态仪是通过近似、求和、积分的方法计算位移,其中存在计算模型误差,导致所求的位移小于实际位移[11]。通过分析可知,机器人沿焊缝匀速行走时,其角度可能发生变化,但角加速度不会变化。基于此,采用自适应权重方法将两种位移算法融合在一起[12],计算方式如下。其中L为融合后的位移,L1为里程计计算得到的位移即L1(t),L2为姿态仪计算得到的位移即L2(t)。
L=k1L1+k2L2,k1+k2=ka,ka≤1
式中:k1为L1的权重;k2为L2的权重;ka可以通过自适应算法确定,也可以根据经验值确定。k1,k2,ka的确定规则如下:①机器人运行稳定,则ka=1,k1=k2=0.5;②机器人运行不稳定但角速度变化稳定,则ka=1,k1+k2=1,k2>k1;③机器人运行不稳定且角速度变化不稳定,则k1+k2=ka,k1=k2=ka/2。ka通过经验值确定,将多次实验得到的数据存储在表中,机器人运行时根据运行状态查表可得具体值。
机器人操控端主要任务是完成控制系统与操作员的交互,因此需要有良好的用户体验。为了支持多平台操控,分别设计了PC版和Android版的操控端。
1)PC操控端设计。
Windows和Linux版本操控端的设计都是基于Qt 5.0完成的。Qt具有跨平台性,即在一个平台编写好源代码之后,在目标平台编译即可运行,无需重新编写代码。其设计思想依然以线程为对象,不同线程完成不同的任务。PC操控端设计如图8所示。
图8 Windows、Linux版PC操控端
2)Android操控端设计。
Android操控端是基于Android studio3.0实现的,操控端可以运行在Android 平板、Android 手机以及Android模拟器上。Android Studio设计的界面交互性比Windows的更贴近用户使用习惯,更便于携带操作。Android操控端设计界面如图9所示。
图9 Android操控端
为了验证系统的可行性和鲁棒性,以SEU_CLIMB_ROB_I 型爬壁机器人为实现平台,进行多次实际操作测试,对系统进行验证。图10为爬壁机器人在竖直壁面移动的测试图。通过上位机实时显示机器人的状态信息和传感器数据。图11为传感器采集的机器人的实时数据和状态信息。通信方面采用无线和有线两种传输方式,当无线通讯干扰较强时,机器人可以选择有线通信,实验中通信线路可以稳定地传输数据。
在机器人稳定工作的基础上对定位的可行性做了实验验证,图12为定位实验数据,图13为根据定位数据绘制的曲线,通过融合姿态仪和里程计两种定位方式,可以较好地实现爬壁机器人空间定位,从而克服传统定位方法在空间有障碍情况下无法定位的缺点,图12中相邻定位点的距离均小于1cm,因此定位识别精度在厘米级别,满足定位精度的需求。
图10 机器人功能测试图
图11 传感器数据
图12 定位实验数据
图13 定位曲线
本文针对应用于罐体设备检测的爬壁机器人设计了一套完整的控制系统,结合模块化设计思想和MVC设计模式使得系统层次清晰。硬件系统由多个模块组成,除电源模块之外,各模块可独立工作,极大程度降低了硬件系统的耦合性,因此也降低了机器人宕机的风险。软件采用C/S架构,机器人本体为服务器,实现了对机器人的控制;操控端则作为客户端,完成与用户的交互、监控等功能。实验结果表明,该控制系统可以稳定地控制爬壁机器人的运动。通过融合姿态仪和里程计的方式实现机器人的空间定位,该方法定位精度能满足实际要求。通过长时间的运行和重复实验,验证了控制系统的稳定性和鲁棒性,能够满足罐体设备检测的爬壁机器人控制需求。总体而言,该系统鲁棒性强、耦合性低、功能扩展性好。但该系统仍然有提升优化的空间,如机器人内部空间小导致机体内部热量难以散发、系统对设备的精度要求高导致设计成本偏高等问题。