刘子贵
(江门职业技术学院,江门 529090)
随着国内劳动力成本的不断上升,工业机器人在投资成本方面展现了强劲的竞争力。然而,面对如此大的市场需求,国内工业机器人制造商在工业机器人市场竞争中长期处于劣势地位。国内90%以上的机器人市场被国外知名机器人厂商占据,究其原因是我国工业机器人行业起步晚,在机器人关键技术上与发达国家存在较大差距[1]。因此,开展机器人运动控制、机器人外部轴协同与多机协同、多传感器数据融合等关键技术研究,研发一款具备高性能、开放式、平台化、网络化以及标准化的机器人运动控制器,对国产品牌机器人加速产业化和提升我国工业制造竞争力、国家科技创新与高端制造业水平具有重要意义。
当前,机器人应用主要集中在搬运、分拣以及上下料等简单场景下,对于焊接、打磨及涂胶等高端应用场景,尚少有机器人可以解决这些场景下的关键问题。传统控制器在控制系统架构以及机器人的运动控制算法和工艺算法上,均存在较大不足。软件框架上的不足会影响机器人控制器的处理效率和实时性。传统控制器一般仅考虑机器人的运动学,忽略了机器人的动力学。在机器人的工艺层面上,更少有研究。因此,发展高性能的机器人运动控制器,需要加大对软件框架、机器人学算法和工艺的研究。
随着机器人应用的发展,人们已经不能单把机器人当成是一个单一的嵌入式设备。智能制造的核心要求是希望工厂能够实现柔性化生产,即基于固有的硬件设备,能够根据需求的变化,灵活进行配置,生产符合要求的产品。这就要求机器人控制器在保证高性能的运动控制基础上,开放足够多的运动控制接口和工艺接口,方便用户根据自己的需求进行自由配置,实现满足自己需求的机器人应用。目前,传统控制器一个封闭的系统缺少能够用于二次开发的接口。
理论上,机器人设计的目标是能够替换目前大部分需要人工参与的工作岗位。然而,机器人是一款专用的自动化产品,需要根据实际需求定制化开发软硬件,以实现某种功能,一定程度上阻碍了机器人的推广。解决这一问题的核心在于需要把机器人控制器设计成一款平台化系统,除了可以实现机器人的运动控制,还需要能够接入大量第三方设备,包含传感器、执行机构及机床等,实现与这些设备的通信,并将获取的信息进行融合处理,更好地规划机器人的任务。
传统的机器人在工业现场是一个个独立的工位,按照各自的程序完成相应的任务。流水线的生产方式可以加快工厂的生产效率,但是由于机器人是独立的个体,在一条由多台机器人组成的产线上,这些机器人难以组成一个系统进行管理,会对生产监控和任务更改带来巨大困难。开发网络化的机器人控制器,结合物联网技术和云计算技术,可以在更大的时空范围内对机器人的运行状态和任务执行进行监管,也可以更加高效地对机器人发布任务。
当前,国内外存在大大小小上百家机器人生产厂家,每家都有自己的控制系统,在操作方式、任务编程上各不相同,导致基本不可能在同一条产线使用两个不同品牌的机器人,带来了额外的部署和维护成本。为了能够在机器人行业达成统一标准,需要根据现有机器人的应用情况,总结在实际场景中的问题,制定机器人系统的开发标准,以助于机器人的推广应用。
运动控制是机器人控制器技术的核心功能,包含机器人的运动学和动力学算法,机器人的轨迹规划和路径规划算法,机器人的线性、非线性控制以及力控制等。优秀的运动控制算法能够实现运动学与动力学的快速解算,以最优理论规划机器人的轨迹和路径,避开奇异位置和运动性能极限点。另外,需要在机器人运动过程中补偿本体自身的重力、摩擦力和惯性力,保证机器人轨迹的精度,抑制外部因素的干扰等。
外部轴协同和多机协同可以在更大程度上扩展机器人的自由度,帮助机器人完成更加复杂的作业任务。常用的外部轴包含机器人的行走轴和变位机等。外部轴协同和多机协同技术的核心难点在于解决不同机构之间的联动问题,即需要保证不同机构工具中心点的位姿随时间的变化保持一致。
机器人在实际中除了简单的搬运码垛应用外,更多的是用到复杂工艺的场景,包括焊接、打磨及涂胶等。机器人在执行这些工艺时,需要随时读入传感器数据和改变输出控制量。工艺往往需要大量的人工经验,如何将这些经验参数化,并由控制器自动根据这些参数形成工作流程,是实现机器人工艺的重点。工艺参数将生成机器人运动路径上的控制点,然后控制器基于这些控制点规划产生最终的轨迹。
机器人运动性能的保证一方面来自机器人的控制算法,另一方面来自控制器的嵌入式技术,尤其在于系统的实时内核和现场总线两部分。实时系统能够保证在一定的时间限制内完成特定的功能,而现场总线能够连接现场设备,实现高效、可靠的通信。
控制器要预留足够多样化的电气接口,读取各类现场传感器的数据。比读取更加重要的是处理传感器数据,尤其是在多个传感器同时作业时,如何将这些数据进行综合,消除现场的干扰,降低数据的不确定性,得到最准确的结果,是多传感器融合技术需要解决的问题。
支持虚拟仿真的机器人控制器,要求系统能够高度模仿机器人的运动和状态。这需要借助计算机图形学和机器人学的基本理论知识。需要对机器人进行结构和惯量分布的建模,随后对机器人进行运动编程,在机器人虚拟运行过程中实时预估机器人的状态,预报机器人超限运动、碰撞、超负载等情况。
编译技术是将源代码编译成目标代码的技术。需要设计一种标准化的机器人编程语言,能够高效地运行于控制器,同时支持将目前主流机器人厂家的编程语言快速通过编译器转化为该语言。编译技术包含文法分析、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成等过程。
制定控制器的软件框架并编程实现,基于框架逐个完成方案内容,包含电路硬件和嵌入式软件接口的研发、机器人运动控制算法的研发、外部通信协议整合以及数据融合算法的开发、机器人编程语言的设计和实现、机器人三维仿真功能的实现以及机器人工艺包的开发。
控制器采用的系统架构如图1所示,自下而上可以分为5层,分别为硬件层、系统和驱动层、算法和工艺层、任务层和接口层。
图1 控制器系统架构
硬件层主要指控制器底层的电路硬件,采用X86+FPGA的处理器方案,兼顾运算能力和信号处理能力,同时设计丰富的外部电气接口,如Ethernet、Modbus、RS232/485等,为控制器的外部扩展提供硬件支持。
系统和驱动层涵盖控制器底层操作系统和硬件驱动部分。本文采用Linux作为控制器的底层操作系统,搭配实时内核补丁,提高系统的实时性,保障底层通信的精度。同时,在操作系统上安装EtherCAT、CANopen等主流现场总线的主站协议,为运动控制提供通信支持。
算法和工艺层是机器人控制器的核心,囊括了机器人的运动学算法、动力学算法、轨迹规划算法、路径规划算法、线性和非线性的控制算法以及力控算法等机器人运动控制的核心技术,同时包括焊接工艺、打磨工艺、涂胶工艺以及喷涂工艺在内的机器人主流应用的成熟工艺包。
任务层主要负责机器人控制指令和程序代码的解析,同时负责控制器整体系统的任务调度和状态监测,更像是机器人的操作系统。
接口层主要负责向上提供控制器的二次开发接口,包括机器人的运动控制接口和工艺接口。该层主要支持开发者在提供的机器人硬件和系统软件功能基础上,开发面向场景的应用。
操作系统可以分为实时系统和非实时系统两类,两者的核心区别在于对任务调度处理策略有所不同。非实时系统采用非抢占式的调度策略和基于时间片原则的抢占式调度策略。所谓非抢占式调度策略即一旦内核把运算资源分配给某个任务后,便会一直执行该任务,直到该任务完成后才会把资源再分配给新的任务。基于时间片原则的抢占式调度策略则由内核给任务分配时间片,只有在一个时间片结束后,内核才能把资源分配给别的任务。综合来说,非实时内核任务调度的原则是先到先得,后执行的任务不能打断先执行的任务,只能排队等待,因此不能保证在约定时间内完成特定任务。实时内核则引入了优先级概念,优先级高的任务可以无条件抢占正在执行的低优先级任务。因此,对于实时系统,原则上只需要给予对完成时间有较高要求的任务足够高的优先级,就可以保证任务完成的实时性。
本文采用Linux作为底层操作系统。Linux的官方内核并非实时内核,它的时间精度只有毫秒级,对于工业产品是完全不可以接受的。时间的误差会带来设备精度和稳定性上的问题。选择双内核方案,即非实时内核和实时内核并存,通过在常规Linux系统上安装实时补丁来增加系统的实时性。采用Xenomai+Linux系统,为用户提供了用户空间和核空间两种模式。用户空间的执行模式保证了系统的可靠性和良好的软实时性,内核空间程序则能提供优秀的硬实时性[2]。
机器人学主要的研究内容包括机器人的参数建模、机器人的运动学和动力学、机器人的轨迹规划以及机器人的运动控制等。机器人学建模通常采用D-H(Denavit-Hartenberg)参数建模。机器人可以看作由多个连杆组成,连杆之间由运动副连接,在机器人中称之为关节。大部分的机器人都由移动关节和旋转关节连接而成。机器人的每个连杆均可以用4个参数来描述,如图2所示。这些参数组成了最后的D-H参数表。对于实际中常用的串联型机械臂构型,如常规六轴机器人、协作机器人和选择顺应性装配机器手臂(Selective Compliance Assembly Robot Arm,SCARA)机器人,均可以列出它们的D-H参数。
图2 连杆的参数建模
机器人的运动学和动力学主要研究机器人关节空间和任务空间的换算关系。机器人的动力来源于关节的电机,控制器的信号主要用于驱动关节电机的运动。而在实际应用中,更加关心机器人的工具中心点在任务空间的运动状况。因此,控制器在机器人运行过程中需要不断换算关节空间和任务空间的对应值,以保证机器人按照设想的模式运行。运动学主要解决在静止状态下各关节角度值和工具中心点在笛卡尔空间的位置姿态关系。动力学则主要解决在运动过程中,关节输出扭矩和末端输出力和扭矩的关系。根据实际场景不同,机器人会有选择地运行位置模式和力矩模式。
位置、速度以及加速度是运动常用的几个要素。为了实现机器人的平稳运行,要求在运动过程中时刻保证机器人在关节空间和任务空间的位置、速度以及加速度连续。轨迹规划即在路径已知的情况下,规划位移相对于时间的函数,保证机器人的运动性能。常用的轨迹规划算法包括多项式样条曲线、S形加减速曲线以及三角函数角速度曲线等。
传统的机器人控制方法能够在保障环境精度的情况下精确完成任务。然而,现实中的情况更为复杂。纯刚性的控制方法难以应对柔性的应用场合,如装配、打磨等场景。这就需要在机器人的控制方法上创新,其中力位混合控制器就可以解决这一问题。在运动过程中,混合控制器反馈得到机器人末端的力值,再将其输入控制器改变末端的状态。
外部轴是相对于机器人的本体轴而言,在电气接口上与本体轴并无不同,只是在机器人算法上会将机器人的本体轴整体建模计算,而外部轴需要单独定义并进行计算。根据实际的应用场景,外部轴可定义为地轨、变位机和其他伺服设备。
对于外部轴为地轨即为机器人增加行走轴的情况下,机器人末端的可达空间在地轨的方向上得到了极大延伸。理论上,机器人在可达空间内的任意一点都有无限多组解,如何在这无限多组解中求得最优解是行走轴问题的关键。对于仅有本体轴的情况,六轴机器人在任务空间的一组位姿点的逆运算至多对应8组解,通常采用计算关节空间距离取最小值为逆解。而对于行走外部轴的情况,可以选用能量最优的方式求取机器人的逆解,得到机器人和外部轴的控制量。
对于外部轴为变位机的情况,更加注重机器人与变位机的配合。变位机可以弥补机器人在某些位姿上不可达的问题。通常以变位机为主动设备,机器人为从动设备。先规划变位机的运动过程,后得到机器人的轨迹信息,在运动过程中实时结算机器人的关节姿态,实现机器人的随动效果。
多个机器人协作需要解决轨迹位置的一致性问题和机器人之间的碰撞问题。本文采用虚拟力算法实时计算各关节的受力情况,从而调整方向防止机器人之间发生碰撞。根据双臂之间的距离建立虚拟力场的虚拟引力和虚拟斥力,其中引力场接近目标,斥力场排斥环境中的障碍物[3]。
多传感器数据融合技术是利用计算机技术将来自多传感器或多源的信息和数据在一定的准则下加以自动分析和综合,以完成所需要的决策和估计而进行的信息处理过程[4]。机器人控制器常用的传感器数据包括视觉传感器、力传感器、激光雷达以及温湿度触感器等。控制器采用分布式数据融合方式,即触感器获取的原始数据已经由传感器的控制器进行初步处理得到了局部结果,再将结果传入机器人控制器,由机器人控制器综合数据得到最后的结果。该过程可以抽象为数据层、特征层和决策层3个层次。多传感器数据融合技术常用的方法包括卡尔曼滤波、人工神经网络等。
标准的机器人编程语言应该包含数据类型、运算和表达式、过程语句、运动指令及通信指令等要素。机器人编程语言中的数据类型应该包含布尔型、整型、浮点型、关节结构体、位姿结构体、坐标点结构体、姿态角结构体以及字符串等。运算和表达式除了四则运算外,还应该包含常用的数学函数,如三角函数、指数运算以及对数运算等。过程语句包含循环语句、条件循环语句、条件判断语句以及子函数等。运动指令包含直线、圆弧、关节、自定义路径以及对应的相对运动等。通信指令则涵盖各类电气接口的通信,如数字模拟输入/输出(Input/Output,I/O)、Modbus以及传输控制协议(Transmission Control Protocol,TCP)等。编译器的工作流程,如图3所示。
图3 编译器的工作流程
代码编译其实是将字符流转换为目标机器代码的过程,对程序代码的编译也就是对字符串的处理,编译的流程包括词法分析、语法分析、语义分析、中间代码生成、机器无关代码优化、代码生成以及机器相关代码优化等[5]。
机器人虚拟仿真功能包含三维仿真、物理引擎以及机器人状态的模拟3个技术要素。三维仿真平台可以选择基于OpenGL库进行开发。物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动、旋转和碰撞反映。为了在机器人仿真过程中增加重力、摩擦力、碰撞等对仿真效果的影响,采用带物理引擎的仿真平台V-REP或者Gazebo进行机器人仿真。模拟机器人的状态除了需要模拟机器人的姿态外,也需要使用物理引擎模拟机器人的力学状态,使仿真效果更加逼近真实的情况。
本文提出了一套标准化的机器人编程语法规则,一方面能够方便处理现有的主流厂家的机器人程序代码,将其统一格式,另一方面能够极大地提高机器人执行程序的效率,并能够提升控制器的通信能力,将传感器数据融合技术用于机器人控制器,使机器人能够更好地适应非结构化的环境,实现柔性作业。在控制器中融入虚实结合的机器人仿真技术,能够实现控制器在脱离机械本体的情况下完成任务编程和效果仿真,还能将仿真结果运行在实际机器人上,有利于降低机器人操作中存在的试错风险,提高实际编程的效率。同时,控制器能够基于网络实现互联,通过一个中心节点实现多台机器人同时监控和互相协作,更有利于机器人在大批量应用场景下的管理和部署。