APP下载

WAM 协作机器人EtherCAT 总线通信方式研究

2021-03-29宋玲玲

机器人技术与应用 2021年6期
关键词:实时性主站驱动器

宋玲玲

(滨州职业学院,山东滨州,256603)

0 引言

在机器人运动控制研究中,有许多优秀的控制成果都是采用基于CAN 总线的驱动方案,这些成果对于学习和研究机器人运动控制和应用有着极大的帮助。然而CAN 总线型伺服驱动器在国内机器人行业并不是主流产品,一旦出现损坏,很难维修和更换,不利于这些优秀成果的继承和使用。

例如,Barrett Technology 公司推出的WAM 机器人就是这样一款优秀的、用于学习、研究和应用的协作机器人。WAM 机器人采用CAN 总线驱动,除驱动器等硬件外,所有控制部分为开源代码,非常适合于进行底层驱动研究和高级编程的学习和应用。但是,WAM 机器人只使用特殊定制的基于CAN 总线的Puck 驱动器,维护成本高,不利于应用推广和进一步的底层研究。

为此,根据国内EtherCAT 总线型伺服驱动器在机器人行业的广泛应用现状,结合将WAM 机器人改造成基于EtherCAT 总线型驱动器的过程,本文提供一种用EtherCAT 驱动器替代CAN 驱动器软件方案,来继承和发扬这些优秀的机器人成果,为其他驱动和控制领域技术提供一点借鉴。

本文共五个部分,第一部分介绍WAM 机器人驱动相关内容;第二部分提出改造方案;第三部分讲述改造实现过程;第四部分进行实验并给出结果;第五部分进行总结,给出类似改造的一点建议。

1 Barrett WAM 机器人

WAM 机器人[1]采用钢丝绳轮组作为减速机,替代齿轮传动,具有更小的关节摩擦阻力,是一款“绳驱”机器人。由于采用绳驱,动力驱动后置,机器人易于操作,是一款优秀的、既可以用于科研、也可以实际应用的协作机器人。

如图1 所示,WAM 机器人主要包括,内部PC、外部PC、驱动电机、安全模块、控制面板和显示面板等部分。其中,外部PC 为可选组件,可由用户自己购买和配置;内部PC 为机器人必选的进行机器人编程控制的计算机。WAM 所有电机均为直流无刷电机,其驱动器为Puck,由Barrett 公司特别定制,通信采用CAN 总线,应用层协议也为自定义。安全模块可以监控机器人的速度、指令扭矩的大小,控制PC 与Puck 之间通信速率,控制显示与控制面板上的按钮及状态。控制面板和显示面板用来控制和显示机器人的状态。上电后,WAM 有三种可能的状态:活动、空闲和故障。在执行任何命令之前,必须手动激活WAM,如果出现问题,WAM 将自动进入空闲或故障状态。

图1 WAM 系统简图

WAM 机器人提供的控制接口为软件开发包,libbarrett(实时版本1.2.4,非实时版本2.0),是C++开源库,分为两层,上层为用户提供高级运动编程接口,下层执行实时运动控制。该软件系统运行环境为装有Xenomai 实时内核的Ubuntu 系统。图2 给出来WAM 机器人的逻辑控制图,用户使用过编程方式将控制指令经由Xenomai 发送到CAN 总线卡,再由CAN 总线卡发送到WAM 的各个Puck。命令控制周期最高为1kHz,默认速率为500Hz。

图2 WAM 逻辑控制图

2 改造方案

2.1 改造内容

2.1.1 软件接口

WAM 机器人与硬件部分的通信是以CAN 总线卡为媒介的,用户程序和实时代码通过CAN 总线卡指挥硬件驱动机器人运动。为了不改变或者少改变libbarrett 库代码,需要设计好WAM 机器人与硬件部分通信的软件接口。WAM 机器人的CAN 消息是自定义的应用层消息,不是标准的应用层协议,因此软件接口需要有消息转换的处理单元,能够解析WAM 的自定义消息。

2.1.2 电机驱动器

WAM 机器人的电机驱动器为基于CAN 总线的Puck驱动器,是Barrett 公司定制开发的驱动器产品,不是大众化产品,不支持EtherCAT,出现故障不能维修只能更换,因此,需要全部更换为基于EtherCAT 通信的通用型驱动器产品。

2.1.3 驱动电机

WAM 机器人上使用的直流电机是Barrett 公司定制的与Puck 驱动器相配合的电机,这些电机特性参数无法全部获得,因此需要更换为广泛使用的品牌电机。

2.1.4 安全模块

安全模块在WAM 机器人中具有重要的地位,起到对机器人限速、安全防护的功能,当机器人运动超速或电机电流过大时进行安全处理。因为安全模块也是采用puck 进行管理的,改造后不能应用,且限速和限流功能在基于EtherCAT 的驱动器上都有配置,所以取消硬件安全模块。

2.2 改造方案

本次改造硬件部分选择一种方案,选用BLM 无框无刷直流电机[2]替代原配电机,驱动器采用支持EtherCAT通信的Elmo 直流驱动器[3],编码器采用多摩川磁编码器。软件部分有两个备选方案,一是在用户层开发CAN 消息与EtherCat 消息转换接口,开发EtherCAT 主站,进行运动控制,在消息转换接口提供部分WAM 安全模块功能;二是在内核上实现上述功能,软件开发在Ubuntu 18.04上进行,WAM 软件接口库采用libbarrett-2.0.0 版本。EtherCAT主站采用SOEM主站代码[4]移植。在改造实验中,第一种软件方案不能保证实时控制周期,所以采用第二种软件方案进行改造。

3 软件实现

硬件改造比较容易实现,根据WAM 的技术规范就可以选择出适合的电机功率及相应的编码器和驱动。安全模块的大部分功能在每个Elmo 驱动器上都有了相应的功能,例如限流、限速、报警和急停等。因此,此次改造就不单独设立硬件的安全模块,而是设立一个软件“安全模块”来实现单个驱动器无法实现安全模块的功能的部分。

3.1 虚拟CAN 内核模块

Ubuntu 系统下硬件驱动程序都是以内核模块(kernel module)形式存在的,这样Ubuntu 可以像管理文件系统一样管理各种硬件。为了在用户层像访问真实硬件CAN总线卡一样,在内核建立一块虚拟CAN 总线卡,即在内核创建一个CAN 总线虚拟驱动模块,实现CAN 总线卡的各种功能,替代硬件总线卡。虚拟CAN 内核模块名字为“ec_CAN”,有两个重要功能,一是CAN 消息处理单元,负责与用户层CAN 通信的交互任务,由操作系统根据用户层通信要求执行调度;二是EtherCAT 总线处理单元,负责EtherCAT 主站及相关控制任务的处理,由一个内核线程进行管理。

3.2 CAN 消息处理单元

因为虚拟CAN 模块不是真实硬件的驱动程序,所以不需要接收硬件上CAN 消息,仅需要处理与用户层交互CAN 信息,即执行用户层消息发送处理和填充消息接收队列。因此模块接收函数直接返回处理成功即可,由发送函数处理CAN 消息发送和接收。

根据WAM 的CAN 消息规范,需处理的CAN 消息分为五类:

1)各电机驱动器一般消息:获取各驱动的基本参数,如编码器分辨率、扭矩常数等。

2)WAM 主体关节各驱动器消息:获取各关节编码器值、设置驱动力矩。

3)手部关节各驱动器消息:获取各关节编码器值、设置驱动力矩。

4)力传感器消息:获取各维度受力和力矩的测量值。

根据以上分类,分别通过EtherCAT 主站存取各驱动器相应的参数和状态数值。为了不影响EtherCAT 主站的控制周期,CAN 消息处理不直接访问EtherCAT 主站,而是利用数据缓冲区进行数据交换。该缓冲区由EtherCAT主站主控循环更新。

CAN 消息处理提供八个主要接口函数:

1)void activeWAM(bool ac) :负责执行激活或停止WAM 机器人,在驱动器侧使能或不使能驱动器。

2)unsigned int32 getEncoder(int8 index) :负责取各驱动器编码器值。

3)void setTorque(int8 index, unsigned int16) :负责设置各驱动器力矩值。

4)unsigned int16 getStates(void) :负责取系统状态。

5)void emergence(void) :负责执行急停。

职业院校通信专业人才培养目标一般是:面向现代信息通信技术(Information and Communication Technology,ICT)服务产业相关工程设计、建设、监理、督导、维护、优化等岗位,培养熟悉现代通信系统及终端产品的性能和工作原理,具有通信系统及其设备生产、安装、运维及工程管理、网络规划优化、电信业务营销等能力的高等技术技能型人才。

6)void resetDriver(int8 index) :负责复位每个驱动器。

7)unsigned int16 getInputs(void) :负责获取各驱动器数字输入值。

8)void setOutputs(unsigned int16 outputs) :负责设置各驱动数字输出值。

3.3 EtherCAT 总线处理单元

总线处理单元负责与各个Elmo 驱动器进行通信,存取各种参数,控制输入输出端子,实现驱动器的周期力矩控制。总线处理单元逻辑上包含一个EtherCAT 主站,该主站由SOEM 移植而成。

3.3.1 SOEM 主站移植

SOEM 是 简 单 开 源EtherCAT 主 站(Simple Open EtherCAT Master)首字母缩写,是一个用于学习和使用EtherCAT 主站功能的C 语言函数库。在GNU/GPL2.0 许可下,用户可以修改和发布源代码。SOEM 由两部分组成,一是操作系统相关的网卡驱动部分,负责建立RAW socket 通信、延时和线程处理任务,另一部分是纯C 语言的EtherCAT 主站,支持COE、SOE、FOE 等常用应用层协议。本项目采用SOEM 作为EtherCAT 主站基础代码,选用版本为1.3.1[4]。

由于国内基于EtherCAT 的运动控制主要使用COE应用层规范,而COE 规范完全支持canopen_ 402 协议,符合大众化的使用习惯,所以本EtherCAT 主站应用层采用COE 规范。

SOEM 网卡驱动部分从用户层移植到内核层,需要处理以下几个重要问题:

1)网卡搜索:搜索用户指定的用于通信的网卡,搜索依据为用户指定的MAC 值。由于在内核中搜索,所以不能使用用户层函数,而是在模块加载的时候枚举整个以太网设备列表查找用户指定的网卡。枚举函数为for_each_netdev(&init_net, netdev),其中init_net 为内核中全局网络设备列表表头,netdev 为枚举到的网络设备结构体指针。

2)建立socket 链接:为EtherCAT 主站提供通信接口。采用内核函数sock_create_kern()和kernel_bind()打开一个socket 并绑定到用户指定的网卡。

3)收发消息: 使用kernel_sendmsg() 和kernel_recvmsg()替代应用层send()和recv()两个函数,完成对网卡的收发信息。

4)延时函数:采用内核延时函数封装。

5)内核线程:将用户层线程的创建及管理移植为内核线程的创建和管理。

6)互斥信号:将用户层互斥信号量移植成内核信号量。

在处理好以上几个问题后,SOEM主站移植任务完成,就可以使用SOEM 编程控制各个Elmo 驱动器,完成机器人运动控制。

3.3.2 EtherCAT 主站初始化

主站初始化需要完成全部Elmo 驱动器的检测与初始化、设定各驱动器的控制参数、使各驱动器进入COE的“操作”状态。

驱动器在初始化时涉及两个重要的参数,一是最大速度,二是最大电流,这两个参数是对安全模块对速度和电流管理的分解,将这两个参数设置在各个驱动器内,就起到了安全模块的功能。

3.3.3 EtherCAT 处理主循环

主循环为EtherCAT 通信的周期循环,除了进行通信外,还负责进行各驱动器状态收集和转换,实时处理各种异常情况。主站将所有驱动器的状态抽象为三个:空闲、激活和异常,对应于WAM 机器人安全模块提供的三种状态。其中,空闲状态代表所有驱动器工作在未使能且其他一切正常的状态;激活状态代表所有驱动器已使能的状态;异常状态代表任何一个驱动器出现报警或故障,需要人工处理的状态。

实时异常处理有三个主要功能:一是动态检测各驱动器工作状态,二是诊断和分析各驱动器工作状态做出异常处理决策,三是进行不同状态下异常处理。异常处理有以下几类:

1)COE 状态错误:一般情况下通过重新启动过程来消除状态操作。

2)驱动器警告:一些简单警告可以用复位解决。

3)驱动器故障:提出用户终止执行,检查硬件。

4)用户急停:恢复初始化参数。

主循环由一个PD 定时器负责定时处理,能够动态调整间隔时间,减少操作系统进程调度引起的周期时间跳动,保证EtherCAT 主站周期循环的实时性。主循环定时周期为0.5 毫秒,即频率为2kHz,可以保证满足用户层最高1ms 实时循环的应用需求。

4 实验及结果

4.1 实时性测试

本项目试验和验证过程是统一的,由两个计时过程分析组成。第一个计时分析是确定内核模块EtherCAT 主站主循环的实时性,这个实时性决定了用户指令执行的实时性。第二个计时分析是确定用户层控制实时性,这个实时性决定了运动控制的实时性。

第一个计时分析采用内核高精度定时器执行,在2kHz 频率驱动7 个Elmo 驱动器情况下,经过几次试验,跳动量为0.1%~1.1%,表明主站的实时性很高。这个实时性的保障来源于两个因素,一是内核模块的线程实时优先级,二是PD 定时器的动态时间控制。

第二个计时分析采用libbarrett 自带的分析方法。作为一个优秀的机器人运动控制库,libbarrett 除了提供重要的运动控制功能外,还提供了检测自身控制实时性的方法。这个方法在real_time_execution_manager.cpp 源文件中,有专门代码报告实时控制循环的状态,包含内容见表1 所示。

表1 实时循环控制报告

经过多次试验,得到如表1 所示结果,可以看出,用户层的实时控制循环有着相当好的实时性。

4.2 例程测试

libbarrett 库提供了两个重要应用例程,bt-wamzerocal 和bt-wam-autotension,分别用于标定机器人工作零点和自动收紧各关节钢丝绳。多次使用bt-wam-zerocal进行零点矫正试验,每次都能够正确执行并完成零点矫正。多次使用bt-wam-autotension 进行钢丝绳收紧功能试验,收紧功能正常,并能够完成各个关节钢丝绳收紧。另外,运行libbarrett 库提供的运动测试例程,也达到了改造前的运动控制效果。

根据以上测试结果,可以认为基于EtherCAT 通信的驱动改造基本达到预期效果,成功达到此次改造目标。

5 结论

基于CAN 总线的驱动和基于EtherCAT 总线的驱动最大的不同点是,EtherCAT 通信需要一个主站进行控制,通过以太网卡与驱动器进行通信,而CAN 总线没有主站,直接与驱动器进行通信。将基于CAN 总线的通信转换成基于EtherCAT 的通信,实际上是用一个以太网卡和EtherCAT 主站替代CAN 总线卡。虽然,EtherCAT 总线的机器人驱动方式改造是在WAM 机器人上进行的,但是,改造方案确是通用的,完全可能将一些基于CAN 总线运动控制设备,改造成基于EtherCAT 总线驱动的设备,并且能够达到与原设备驱动相同的能力。

猜你喜欢

实时性主站驱动器
藏起驱动器号确保数据安全
空间大载荷石蜡驱动器研制
航空电子AFDX与AVB传输实时性抗干扰对比
EtherCAT主站与主站通信协议的研究与实现*
多表远程集抄主站系统
计算机控制系统实时性的提高策略
压电陶瓷驱动器的迟滞特性
电场调制FeCoSi/PZT驱动器磁性研究
基于改进经济压差算法的主站AVC的研究
关口电能计量故障监测报警装置及主站研究