带电作业螺丝紧固机械臂作业规划研究
2024-01-08张博研李钰强杜锦华
张博研, 李钰强, 吴 晗, 杜锦华
(1.西安交通大学电气工程学院, 陕西 西安 710049; 2.云南电网有限责任公司昆明供电局, 云南 昆明 650000)
1 引言
随着中国社会经济不断发展,社会年耗电量逐年扩大,到2020年中国年发电量已达到77 790.6亿kW·h,这既显示了我国电力网越发庞大与复杂,也表现了整个社会对电力能源越发的依赖,使得国家对电力供应稳定性提出了更高的要求[1]。如此,带电作业显得极为关键。纵观历史,带电作业人员事故频发,我国在1995年之后很长一段时间内限制了带电作业,但由此造成了供电可靠性下降和社会经济损失,也反映出供电稳定性与带电作业安全性之间巨大不可协调的矛盾冲突,而恰巧机器人及人工智能的蓬勃发展为此提供了一个极佳的解决方案,即半智能或智能机器替代人进入危险环境作业,由人员遥控操作或者机器自主操作完成带电检修,既保障了电力系统稳定性,又提高了带电作业的安全性。
国内对带电作业机器人研究开始于20世纪九十年代,直到2002年3月,国内才诞生第一台具有自主知识产权的带电作业样机,它仅适用于10 kV以下电压,由工作人员于绝缘斗内近距离操作控制[2,3]。之后,经过不断研究,至2012年,我国已经发展了多代带电作业机器人,从只能通过键盘操作机械臂,到实现主从控制机械臂;由自主研发电机驱动到实现液压驱动,不断推陈出新。
本文在众人已有的研究基础上,针对带电作业机器人的广泛应用前景,着手于机械臂紧固螺丝作业场景进行研究,主要基于实验室PROBOT Anno机械臂,构建工作流程设计,针对现有研究中实时性差和缺少自主作业等弊端,旨在提高作业的智能性、自主性,扩展带电作业人工智能(Artificial Intelligence,AI)化思路。相对于人工带电作业和其他机器带电作业方式存在的弊端,本文研究的意义和创新点主要体现在以下几个方面:
(1)减少人的因素
因为人工非一次现场操作,由于摄像头传输的画面不一定能反映真实机械臂操作反馈,遥控操作的方式不一定准确可靠,故通过视觉伺服反馈自主规划运动轨迹,控制机械臂自主到达目标位置,完成作业任务。
(2)探讨了机器自主智能检修的一种可能
通过视觉等传感器,加持AI算法使得机械臂可以自主追踪、定位检修目标,完成程序任务。这种方式仅仅需要修改、加持定位目标以及加载检修程序,通过加载更换末端执行器功能模块,便能在诸多类似环境下持续应用,前景大有可为。
2 机械臂运动学分析和建模
2.1 机械臂的运动学建模
因力矩控制较位置控制复杂,本文采用运动学理念,忽略动力学属性,建立机械臂运动模型,利用关节角度变量输入控制运动位置和方向。运动学最常用的建模方法是Denavit and Hartenberg参数法,简称D-H法,这是纯粹以建立连杆坐标系组合,达到模拟机械臂的数学方法,并通过相关函数能够极快将计算得到的D-H参数转换为末端位姿,进行相应处理。
本文基于精锋微控PROBOT Anno机械臂进行运动学建模,这是一款面向教育科研的六轴开源桌面型机械臂。采用标准D-H参数法(Standard Denavit and Hartenberg,SDH),首先建立连杆与关节的编号,对于连杆,基座为杆0,之后顺延至末端连杆(本文至杆6);对于关节,连杆i的近基端关节为关节i,远基端关节为关节i+1,遵循近基端关节与连杆标号一致原则。在此基础上建立连杆坐标系,SDH将杆i坐标系固定在连杆远基端,由于关节皆为Revolute类型,坐标系其Z轴方向保持与关节i+1轴线同步,作为其驱动轴,并遵循右手螺旋定则,共建立7个坐标系。建模结果如图1所示。
图1 PROBOT Anno机械臂连杆坐标系Fig.1 PROBOT Anno linkage coordinate system
通常使用一个齐次变换矩阵T,来表示两个坐标系之间的位置位姿变换映射关系。变换矩阵T由一个3×3的旋转矩阵R和一个3×1的位移矩阵P构成,一共含有12个必要参数。对于一般的机械臂来说,变换矩阵T,只需对4个参数进行研究,便可解析得到矩阵,前提是满足以下两个约束[4]:
(1)坐标系O1的X轴垂直于Oi-1的Z轴。
(2)坐标系O1的X轴相交于Oi-1的Z轴。
这4个参数分别是d、θ、a、α,其具体含义见表1。
表1 参数含义Tab.1 Parameter meaning
因此坐标系{i}到{i-1}的齐次变换矩阵,可以通过对应的变换步骤,整理解析转换为通用数学形式,表示为:
(1)
2.2 正向运动学齐次变换求解
正向运动学(Forward Kinematics,FK),又名直接运动学,是将关节变量空间变换到笛卡尔坐标系空间的数学变换。在运动学的位置、速度、突变等诸多信息中,FK通常关注的是位置分析,即本文所需的通过给定关节变量,求解末端位置姿态,所以在本文中FK可等效于上文中提到的坐标变换矩阵i-1Ti,对于PROBOT Anno机械臂来说FK即综合变换矩阵0T6。
0T6=0T11T22T33T44T55T6
(2)
将PROBOT Anno机械臂的SDH参数代入式(2),并化简得到式(3):
(3)
式中,tij为化简得到的代数式,以矩阵第一项为例:
其中, si为sinθi的缩写;ci为cosθi的缩写。
由于篇幅有限,不能展示出其余的各项。汇总得到PROBOT Anno机械臂运动学正解,且是唯一的。
2.3 逆向运动学迭代求解
逆向运动学(Inverse Kinematics,IK)即将笛卡尔空间坐标转换至关节变量空间,是从已知的末端位置信息出发,获得机械臂关节变量的数学变换。在机械臂运动控制的总体过程中,一般在关节变量空间靠关节变量来驱动机械运动,在笛卡尔坐标系规定的空间中,规划机械臂终端运动的路径与轨迹,所以求解逆运动学是非常有必要的。目前对于IK问题,仍然还没有标准和常规应用求解方法,但可以使用相关的分析方法和数值解法得到逆解,例如解耦、逆变换、迭代、螺旋代数、双重矩阵、双重四元数等。由于PROBOT Anno机械臂后三轴不仅改变末端执行器的姿态,同时也改变了其位置,因此该款机械臂违背了Pieper 准则,不能采用正解矩阵的逆变换求解,所以将采用迭代法的原理[5]。
组合式(2)和式(3)的表达式,展示如式(4),它是一组非线性代数方程,迭代法求解的便是它的一组解。最常用的方法便是Newton-Raphson法。
(4)
δT=T-T*
(5)
(6)
(7)
对式(7)进行一阶泰勒展开得到式(8):
(8)
(9)
(10)
(11)
由上得迭代一般步骤:
(1)设置初始猜想值。
(2)计算残差,判断误差,是否停止迭代。
(3)计算迭代因子,更新初始值。
(4)返回步骤(2)。
(5)输出迭代结果和其他迭代信息。
3 机械臂目标识别与定位
目标识别是通过摄像头或者其他方式获得环境图片信息,通过图像识别算法模块进行处理,提取目标三维位置和其他相关信息,并对得到的信息类编码处理,使输出信息与下一模块端口匹配。图像处理的前提是得到所需要的图像,在这个过程中,一般使用透视相机,它的作用是将三维世界以透视投影的方式二维化。在相机成像中,像素坐标是必不可少的。因此需要得到像素坐标系上某点的齐次形式q=(u,v,1)T与世界坐标系点P=(Xw,Yw,Zw,1)T之间的关系。影响其转换关系的主要因素为相机参数。在确定参数后可以简单地将转换公式写作:
(12)
3.1 基于颜色空间解析目标信息
颜色空间是一个三维度空间,包含了所有可能的三色刺激值,涵盖了颜色和亮度的概念。计算机视觉发展至今,已经形成了诸多颜色空间,常用颜色空间见表2。机械臂作业环境背景亮度可控,故选用RGB颜色空间进行后续其他图像处理操作即可,并预先将图像颜色空间RGB分离开,使得相关操作仅对单一灰度处理,简化算法。本节主要采用了平滑、边缘检测、直线检测等操作。
表2 常用颜色空间Tab.2 Common color space
图2 处理之中值滤波效果Fig.2 Median filtering effect
边缘检测主要为了得到图像中各组成部分的轮廓。一般过程即处理灰度图中,图像梯度变化极大的像素点点集即是轮廓。边缘检测成熟的算法也有很多,本文采用的是经典的Canny 边缘检测算法。该算法通过滤波、增强、检测三步完成边缘检测,滤波可通过本节前述方法实现,增强即是利用Sobel算子计算梯度幅值和方向,检测即是利用滞后双阈值完成强弱边缘筛选和轮廓跟踪。
直线检测主要在边缘检测的基础上,得到目标轮廓直线位置和方向属性,为螺丝紧固作业的末端执行器与目标对焦获取信息。常用Hough 变换来做处理,处理效果如图3所示,图3(a)为直线检测图,穿过目标轮廓的直线即为检测出来的目标边缘直线扩展显示,图3(b)同步显示了直线的角度(theta)和其他检测信息,需要注意,这里的角度0是以垂直线为初始,顺时针扩大。
图3 Hough 变换处理效果及其信息终端显示Fig.3 Hough transform processing effect and its information terminal display
3.2 目标识别综合仿真
ROS即Robot Operating System,是一个开源框架系统,OpenCV即Open source Computer Vision library,是一个跨平台的开源视觉库[6]。本节在Ubuntu18.04操作系统环境下,将ROS和OpenCV结合,对传递的图像或相机采集到的图像,按图4所示流程编写程序进行处理,识别出目标的位置和偏转角度等信息。
图4 图像处理简要程序流程Fig.4 Image processing brief program flow
通过编译运行,识别效果通过rqt工具展示如图5所示,其中展示了算法实时处理图像数据,以矩形框选目标,并以黑色填充可视化边缘信息,输出得到目标在世界坐标系下位置以及偏转设定基准线的角度,并将关键信息基于话题通信方式传送出去,等待被其他程序订阅处理。
图5 以rqt命令展示的图像识别效果Fig.5 Image recognition effect shown by rqt command
随后将图像识别模块应用在Simulink中,其处理效果展示如图6所示,其中图6(a)为整体展示,图6(b)为局部放大图。由于实际物体受于相机像素和环境噪声影响,此处以仿真世界环境作为识别源代替。从图6可以看到螺丝模型目标被矩形圈出,并以黑色点标出目标中心位置。
图6 Simulink图像识别效果Fig.6 Simulink image recognition effect
同时根据螺丝模型的创造信息和图像识别出的位置信息对比见表3,结果差值在毫米级别,证明了该模块处理图像的可行性。
表3 图像识别信息与实际比对Tab.3 Comparison of image recognition information and actual position
经过对算法的分析,误差来源的一大原因是,获取目标的原始图像分辨率不够高,仅有800×800,导致在对灰度图处理的过程中损失了很多信息,且算法采用先横向后纵向处理逻辑,使得y维度损失高于x维度,实际造成y维度误差大于x。
4 运动路径规划
一般来说,机械臂的运动规划,涵盖两个方面,即路径和轨迹,探讨的是路程最短、时间最优、功耗最低等问题。路径,指的是在两个维度点之间,避开不可穿越的维度壁障,寻到的一条道路,它是空间维度点的集合;轨迹可以看作是路径的接续,只有先得到路径维度集合,作为给定参数,才能得到带有时间维度的轨迹,在这个过程中通常也规范了机械臂的速度和加速度等约束。
4.1 基于A*算法实现最短路程设计
路径规划算法自提出起,便不断发展,形成多种常用算法,随着技术进步逐渐与其他领域结合,衍生了多种多样的规划算法,如基于轴突延迟的尖峰神经网络路径算法和随机蛙跳等[7,8]。
就普通的小康家庭来说,其实大体就分为四块:衣食住行、保险、储蓄备用、投资创富。目前对中国的居民来说,主要有以下大类资产种类:股票、债券、货币、房地产、商品。每类资产又可以细分为很多子范畴,股票是股份有限公司在筹集资本时向出资人发行的股份凭证,是社会化大生产的产物。股票又可分为大盘股/小盘股;股票在交易市场上作为交易对象,同商品一样,有自己的市场行情和市场价格。由于股票价格要受到诸如公司经营状况、供求关系、银行利率、大众心理等多种因素的影响,其波动有很大的不确定性。正是这种不确定性,有可能使股票投资者遭受损失。价格波动的不确定性越大,投资风险也越大。因此,股票是一种高风险的金融产品。
在螺丝紧固作业中,目标点为螺丝,其三维空间状态基本是固定的,加上忽略风力,以架空线、绝缘子和杆塔为主的障碍也基本是固定的,所以可采用静态规划算法。在静态算法中尤以A*为突出代表,因它自带的灵活性优势,能广泛快速运用于不同情境中,故本文中也采取A*作为PROBOT Anno机械臂的路径规划器。
A*作为一种成功的人工智能启发式算法,它的核心在于由Dijkstra算法(靠近源心的结点)和BFS(Breath First Search)算法(靠近靶子的结点)的信息块结合起来的启发式函数f(n)[9]。
f(n)=g(n)+h(n)
(13)
式中,f(n)为任意节点n到目标节点的最小估价;g(n)为源节点到任意节点n的代价;h(n)为目标节点和任意节点n之间的成本。
启发式函数f(n)对于A*算法有着极大的影响,h(n)越准确,算法搜索速度越快,最理想的情况下,h(n)和g(n)大小完美匹配,那么沿所寻到路径,f(n)的值将基本不变,也就是说,A*算法寻路相当于寻找f(n)低值的联合体。除了启发式函数外,A*算法还具备两个关键组分,分别是开放列表和关闭列表,前者用来存放等待检查评估代价的子节点,通常是父节点周围相邻所有节点;后者用来存放不需要再次检查评估的节点,通常是从开放列表中删除的节点。通用程序实现流程如图7所示,可以看到,整个程序执行循环搜索之前,就已计算完空间各节点对于目标的h(n)。这里采用这种形式的目的有两个,一是加快循环速度;二是便于修改h(n)或为其增加权重等附加约束。
图7 A*算法实现流程Fig.7 A* algorithm implementation flow chart
三维路径规划的实现仿真如图8所示,由于三维空间展示复杂度远大于二维,为便于展示寻路过程与效果,网格大小选择10×10×10,起点、终点、空间障碍物通过代码进行初始化给定。在图8中方块、空心球、星号的中心位置信息即为该立方体网格索引信息,其中不同灰度的立方体分别代表起点、终点、路径和障碍物,空心球代表开放搜索列表,黑色星号代表关闭列表和开放搜索确定的代价最小子节点。
图8 A*算法三维度Matlab仿真实现Fig.8 A* algorithm three dimensional Matlab simulation implementation
4.2 梯形轨迹规划设计
轨迹规划,主要包含两大类——关节空间轨迹规划和笛卡尔空间轨迹规划。本文中轨迹规划的实现,采用了伪笛卡尔空间轨迹规划,是通过在依靠路径规划得到的三维空间路径离散点集的前提下,直接将每两个离散点之间视为存在一条离散直线段,进而采取固定时间对其进行插值,插值完成后,将其三维坐标通过逆运动学模块,变换至关节变量空间,这里与笛卡尔空间轨迹规划不同的是,不再进行关节空间轨迹详细规划,而是依靠前节逆运动学迭代法所阐述的原理,即期望值向着初始值靠近。而固定时间插值点维度坐标的选取,常用的方法有梯形和S曲线速度分布,本文采用梯形分布。梯形分布较S曲线精度稍弱,但运动速度更快[10]。
梯形速度分布将两点之间,每个维度的速度分布划为匀加速(T0~Ta)、匀速(Ta~Tb)、匀减速(Tb~T)三个阶段,如图9所示。基于该种分配方式,可以看到位置随着时间虽然呈现非线性变化,但是变化程度是平滑的。
图9 时间T内某一维度梯形分布轨迹位置x、速度v、加速度a随时间变化图Fig.9 Change of position, velocity and acceleration of a trapezoidal trajectory in a certain dimension with time T
根据图9并结合已知参数,可得到如下三个关系公式,即位置时间关系表达式(14)、速度时间关系表达式(15)、加速度时间关系表达式(16)。通过这三个表达式和相应输入参数,便可规划出空间两点之间各维度运行平滑的速度分配轨迹。
(14)
(15)
(16)
式中,x0、x1分别为起始和终止位置;t0为开始时间;Ta为加速、减速时间;vm为最大速度。
4.3 碰撞检测功能设计
本文设计的机械臂紧固螺丝作业中,需要自主规划路径,避开障碍物,使得机械臂末端执行器能够顺利完成作业任务。在这之中,避免机械臂与障碍物之间,以及避免机械臂自身连杆发生碰撞是非常关键的一段设计环节,所以对相关部分进行碰撞检测和碰撞预防是驱动机械臂路径规划和轨迹跟踪的重要前提[11]。由于本文设计应用的螺丝紧固杆塔作业场景具有可重复性,且抽象到仿真世界的环境障碍信息是固定的、已知的,故采用静态检测的理念。因为可以预先对机械臂和环境障碍信息进行几何外形层次的简化处理,对此可采用层次包络盒方法,即是对机械臂各连杆和环境障碍基于常用空间规则几何形状做包络抽象处理,使得碰撞检测问题聚焦为空间几何形状是否发生重叠。常用的包络方法有球体、柱体、AABB、OBB等。
对于自体碰撞处理,通过将机械臂的基础连杆和连杆一的空间信息处理成自体障碍信息,将其固化在前文寻路算法的处理程序中,使得算法得到的末端执行器路径避开自体连杆空间,达到避免碰撞的目的。处理结果如图10所示。
图10 机械臂自体碰撞区域转化为障碍包络处理Fig.10 Auto-collision area of robotic arm transformed into an obstacle envelope processing
二是机械臂与环境障碍之间的碰撞处理。此处对已经简化过的环境信息,利用长方体(AABB)再次进行包络处理,本文中由于抽象建立的仿真障碍信息位置的特殊性,碰撞处理忽略其Y维度信息,关注其体截面中心和X、Z轴信息。对于PROBOT Anno机械臂来说,末端执行器由于已经进行路径自主避障规划处理,所以末端部分不再需要碰撞检测处理,此处仅考虑连杆三、四、五,对这几个连杆再次简化,将连杆末端抽象成一个点,通过齐次变换矩阵计算该点的X、Z轴信息,与障碍物包络后的截面中心X、Z轴信息进行差处理,确保差值大于一定值,从而避免碰撞发生。根据以上的思路编写碰撞检测算法函数,仿真验证结果如图11所示。
图11 防碰撞模块启用前后对比图Fig.11 Comparison before and after anti-collision module is enabled
5 实验结果
综合第3、第4节所述模块,将机械臂运动学、图像识别、运动规划、碰撞检测等衔接起来,得到一套基于PROBOT Anno机械臂自主紧固螺丝作业抽象设计,并用Simulink在仿真环境中展现出来。最后,为了验证整体设计的有效性,将其与实物连接,进行相关部分验证。
基于前文介绍的工作,综合作业实现设计思路如下:
(1)架构世界笛卡尔坐标系,以PROBOT Anno机械臂基点为原点,其他坐标系处理结果最终转换到此系,在此系内进行规划和显示工作。
(2)对各部分参数进行初始化,获得或给定机械臂末端起始基础位姿。
(3)通过摄像头或者其他方式获得环境信息,通过图像识别算法模块进行处理,提取目标三维位置和其他相关信息。
(4)通过以A*算法为基础编写路径规划模块,自主规划出机械臂末端的空间无碰撞路径点集,之后对空间路径离散点之间进行梯形速度分配规划。
(5)用BFGS(Broyden-Fletcher-Goldfarb-Shanno)迭代法进行逆运动学求解,驱动机械臂完成轨迹点跟踪,完成作业任务。
流程中,数据信息的传送是基于阵列形式的一次传输,故没有循环控制。在整个设计思路中,对环境信息、机械臂力学参数及带电作业程序都进行了简化、忽略和抽象处理,将目光更多着眼于紧固螺丝作业整体流程的功能实现。作出带电操作紧固螺丝作业整体规划设计流程如图12所示。
图12 基于PROBOT Anno机械臂紧固螺丝作业仿真实现简要设计流程Fig.12 Simple design process realized based on PROBOT Anno arm fastening screw operation simulation
由于Matlab软件上已具有和ROS通信的能力,并且实验室所拥有的PROBOT Anno机械臂是在ROS下通过输入关节信息给ROBCELL控制器达到控制驱动电机目标的。这就给予了实物验证极大的便利,本文通过ROS Master通信机制,将Matlab算法规划得到关节变量以话题的形式发布出去,继而在ROS里面通过终端订阅处理,再传递给机械臂控制台,驱动机械臂关节轴完成轨迹跟踪。同样基于此,可在Ubuntu系统中,将ROS+OpenCV+USB摄像头得到的图像处理结果信息发布给Matlab,使得Matlab专注于运动规划算法设计。
紧接着在Simulink中搭建仿真模型,并将仿真结果以可视化三维图动态展示出来,整体仿真规划效果如图13所示,其中①表示末端初始位置,“∘”是规划的路径,②是简化模拟的环境障碍,③是抽象简化的目标螺丝。由图13中能够看到,仿真极好地避开了障碍物,提前规划出一条无碰撞的路径。
图13 PROBOT Anno机械臂紧固螺丝作业可视化仿真Fig.13 Visual simulation of PROBOT Anno arm fastening screws
整个作业任务,末端轨迹是分段平滑的直线段组合,直线段连接角度皆为钝角,整个空间轨迹没有出现瞬时的尖峰干扰,符合设计预期,如图14所示。另外由图15展示的各关节角度θ时间变化图,可以看到,整个运动过程中,角度变化是平滑的,确保了运动的精确定位和机械臂电机的稳定运行,验证了设计模型的正确性。
图14 机械臂紧固螺丝作业过程末端空间轨迹Fig.14 Space trajectory at end of screw tightening process of manipulator
图15 PROBOT Anno机械臂紧固螺丝作业过程中各关节轴角度变化Fig.15 Angle of each joint axis changes during the fastening screw operation of PROBOT Anno robot arm
随后将仿真文件中的可视化更换为ROS通信模块,将Matlab与ROS时控机械臂结合起来,完成机械臂实物运动规划控制,结果展示如图16所示,机械臂能够很好自主越过白色块状障碍物,其与障碍物距离极近,但是却未发生碰撞,极大证明了目标识别、运动规划和碰撞检测的正确性。
图16 PROBOT Anno机械臂紧固螺丝作业过程中各关节轴角度变化Fig.16 Angle of each joint axis changes during the fastening screw operation of PROBOT Anno robot arm
6 结论
本文主要对机械臂带电紧固螺丝自主作业进行了研究,针对现有研究中带电紧固螺丝作业存在的问题,例如人工作业风险大和机械作业缺乏自主性、实时性差等问题,利用实验室现有PROBOT Anno机械臂,根据带电作业紧固螺丝作业规划研究的架设要求,基于前人已有的研究基础,抽象相关作业环境,简化基本作业操作,对PROBOT Anno机械臂实物进行了深入了解,同时创新性地加入了目标识别、路径规划等功能,实现了自主作业。
本文首先详细分析了运动学相关原理,包括机械建模、坐标变换、正逆求解等。随后综合机械臂手册数据规划了机械臂末端运行空间,并利用包络模型简化机械臂和抽象障碍,设计出异体简化碰撞检测功能模块。选用启发式A*算法,自主规划出最短路径,利用相关模块完成梯形速度分布轨迹插补。同时在Ubuntu18.04环境下利用OpenCV实现了实物检测处理。最后将各功能模块在Simulink平台结合,完成总体作业仿真实现。最后通过ROS通信机制,在Ubuntu18.04和Matlab2021a之间建立信息传输通道,使得Matlab仿真模块能够控制PROBOT Anno机械臂,进行算法实物验证。总体来看,仿真和实物的实现效果证明了紧固螺丝自主作业设计的可行性和有效性。
本文下一步的工作内容将集中在拓展机械臂功能,例如增加带电巡检功能,实现巡检-诊断-修复工作流程,填补现有研究的空缺[12]。