基于ROS和LinuxCNC的工业机器人控制系统开发*
2015-11-24高美原秦现生于喜红
□ 高美原 □ 秦现生 □ 白 晶 □ 于喜红 □ 马 闯
西北工业大学 机电学院 西安 710072
基于ROS和LinuxCNC的工业机器人控制系统开发*
□ 高美原 □ 秦现生 □ 白 晶 □ 于喜红 □ 马 闯
西北工业大学 机电学院 西安 710072
针对传统工业机器人控制系统开放性差、内部结构复杂和技术升级困难等弊端,在保证系统实时性和稳定性的前提下,构建了基于ROS和LinuxCNC的工业机器人控制系统软件架构。根据系统的功能要求和所选平台的特点,软件分为三部分:任务调度模块、实时任务模块和EtherCAT主站模块。通过实验证明原型控制系统具备控制工业机器人完成基本工作的能力。
工业机器人 ROS LinuxCNC 控制系统
随着工业机器人技术逐渐成熟,应用范围不断扩大,对控制系统的要求也越来越高。面对复杂的工作环境和严格的安全要求,机器人对外界的感知能力越来越重要。机器人配备的传感器从简单的光电开关和触碰开关,发展到触觉、声觉、视觉、力觉等高端传感器,随着这些传感器的大规模使用和价格不断下降,整合和处理各种传感器的数据显得更加重要。因此,在工业机器人控制系统中,如何实现各种信息的融合,并与传统的运动控制和逻辑控制衔接,成为实际应用中亟待解决的问题。
ROS(Robot Operating System)是一个机器人软件平台,最早源于2007年斯坦福人工智能实验室的STAIR项目和机器人技术公司Willow Garage的个人机器人项目 (Personal Robots Program)之间的合作。2008年后主要由Willow Garage公司继续该项目的研发,并于2010年发布了开源机器人操作系统ROS,现在大部分传感器在ROS上都得到了比较好的支持[1]。具有多传感器的工业机器人面对的主要问题之一是控制器的时钟同步问题,多传感器和控制器之间的通信,控制器和执行器之间的通信,都必须具有统一的时钟,否则无法完成传感器间的数据融合,ROS中基于点对点的通信机制很好地解决了这个问题。在ROS中设备之间的通信有一个统一的调度中枢(Roscore),通过这个调度中枢,开发者能够很好地控制信号传递,并且可以便捷地实现复杂的功能。但ROS本身并不具备实时环境,因此为了保证控制系统实时性和稳定性,底层算法需要在具有实时补丁的 Linux内核中实现。LinuxCNC是一个应用于机床和机器人运动控制的开源软件,由美国国家标准与技术研究院开发,使用RTAI实时补丁,提供完整的底层运动控制算法,并且可配置的软件架构和模块化的设计使其能够便捷地被其它软件调用。
1 控制系统软件架构
结合ROS和LinuxCNC,基于软件的层次化和模块化设计原则,笔者提出了工业机器人控制系统的软件架构,如图1[2~4]所示。软件架构主要分为三部分:①上层任务调度模块,主要实现信息融合和智能规划,包括非实时传感器数据的提取和处理,传感器间的信息融合,机器人的行为规划等;②实时任务模块,主要实现传统的运动控制和I/O控制,包括命令解码、轨迹规划、粗插补、正逆解、细插补、I/O逻辑控制等;③以太网现场总线通信模块,采用EtherLab(在Linux环境下针对工业自动化领域用于快速生成实时代码的开源工具包)提供的部件EtherCAT Master,实现控制系统对伺服系统和I/O硬件的实时控制。
2 任务调度模块设计
任务调度模块主要功能是将输入的命令和传感器的信息自动分解为对运动控制模块和PLC模块的操作,并监控整个操作过程。数据采集节点和数据处理节点负责传感器信息的处理和整合。为了增加工业机器人自主运动能力,减少试教操作和编程,针对工业现场中机器人广泛应用的动作(如抓取动作、喷涂动作等),构建面向任务的命令控制。决策中心是调度模块的核心组成部分,根据有穷自动机理论,将任务逐层细化,直到拆分成基本的动作、输出运动和逻辑控制指令[5]。其中状态集合Q描述机器人当前状态,输入字符集Σ描述输入命令和外界环境抽象之后的状态。转移函数表征当有穷状态机获得一个字符,或者发生一个事件
时,状态的转移情况。利用ROS提供的软件点对点通信机制以及丰富的软件资源,构建原型系统。
2.1 数据处理节点
在传感器数据采集节点中,完成对数据的预处理,使其能够被数据处理节点使用。数据处理节点通过对采样数据进行分析,设计算法提取特征,根据实际需求生成“消息”或“服务”,供决策中心调用。“消息”或“服务”包括:1)运动控制命令,如运动暂停,直线运动等;2)I/O控制命令,如气抓打开,PLC中某个变量改变等;3)轨迹信息,如目标位置,目标特征,障碍物信息等;4)自定义数据,为后续开发预留。由于数据处理节点具有相似结构,但与采集数据节点的接口变化剧烈,因此采用工厂方法软件设计模式。
2.2 抓取动作的有穷自动机模型
工业机器人抓取动作在码垛工艺和装配工艺中广泛存在,是实现复杂功能的基本要求,图2所示完成了对抓取动作的任务划分。
根据抓取动作的任务划分,建立有穷自动机模型,其中状态转换如图3所示。该模型共有11个状态,包括:初始化状态q0;输入检测状态q1;目标匹配状态q2;目标判定状态q3;路径规划状态q4;碰撞检测状态q5;接近目标状态q6;位置调整状态q7;角度调整状态q8;末端执行器动作状态q9;执行完毕状态q10。因此有限状态集合Q={q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10}。开始状态为 q0,结束状态为q10。输入符号w1~w21的生成主要由三部分决定:输入命令、当前状态和外部环境。从整体分析,转态转换主要分为三部分:当输入命令为运动指令时,控制器直接执行命令,接近目标后判断是否需要调整;当输入命令是目标位置时,要经过路径规划和碰撞检测,生成运动指令并执行;当输入命令是目标特征时,经过目标匹配和目标判定,生成目标位置或运动命令并执行。当运行中出现系统错误或者检测到危险,将首先判定当前状态是否有误,如果有误则进行修正,否则根据条件向上个状态转移。
▲图1 工业机器人控制系统软件架构
▲图2 抓取动作任务划分
3 通信接口及实时任务模块
3.1 通信接口模块
任务调度模块和实时任务模块之间需要通信接口,用于实现两者信息交换和命令传递。由于ROS的稳定性无法满足工业要求,为了防止上层软件的风险向下层传播,需要严格控制通信通道。在ROS中建立负责通信的节点Commucation Package,在linuxCNC的任务控制模块中建立与之对应的线程Commucation Thread。节点 Commucation Package通过有名管道pipe Statue和pipe Error获取实时任务模块当前的状态信息和错误信息,将任务调度模块生成的控制命令通过有名管道pipe Command发送给实时任务模块;线程Commucation Thread与之相反,通过有名管道pipe Statue和pipe Error发送控制器当前的状态信息和错误信息,通过有名管道pipe Command获取当前命令。控制命令通过运动解析模块和软件PLC解析模块将信息发送到实时模块。
3.2 运动控制模块修改及配置
运动控制模块是工业机器人数控系统的核心组成部分,包括轨迹规划、T型加减速、正逆解、三次样条曲
线插补、PID组件等[6]。加载运动模块前,首先根据工业机器人构型及连杆参数修改src/emc/kinematics目录下的正逆解并进行编译,然后在hal文件中添加启动模块,示例如下:
▲图3 决策中心状态转换图
3.3 软件PLC编程及配置
LinuxCNC下嵌入了软件 PLC模块classicladder,用于实现工业机器人运行过程中的逻辑控制。PLC的编程分为两部分:系统编程和用户编程。系统编程主要针对机器人安全措施(如紧急停止,使能开发,操作模式,限位开关等)、错误信息(如电机报错,通信失败等)和编程指令,系统启动时程序运行,因此具有一定的权限才可修改。用户程序主要针对和其它外部I/O或控制系统的集成,如电磁阀,开关或PLC等。启动PLC人机界面编写程序 (以单个轴的限位开关为例)并保存为myladder.clp,如图4所示[7]。完成后在hal文件中添加PLC启动及配置:
3.4 HAL下EtherCAT组件开发
HAL(硬件抽象层)是LinuxCNC重要的组成部分,使用了基于硬件的引脚模型,有效的连接了系统的软件和硬件。HAL本质上是使用RTAI提供的一组实时函数,构造的具有管理功能的软件框架,用于维护和配置实时组件。实时组件是一个定义了输入引脚、输出引脚、参数值、函数和线程的程序软件,通过HAL文件可以加载和连接各个组件形成具有特定功能的复杂系统[8]。通过将EtherCAT master提供的应用接口,封装为HAL下的实时组件,即可实现EthereCAT驱动的动态加载。
EtherCAT组件开发包括主站配置、从站配置以及组件配置。主站配置流程包括:1)初始化部件,注册HAL驱动,获取组件ID;2)调用hal_malloc函数分配共享内存;3)调用hal_pin_type_newf函数创建引脚;4)解析主站配置文件参数,如图5所示,包括主站的主站号、运行周期、偏移时间、从站序号、名称、类型以及周期参数等[9]。
▲图4 软件PLC程序编写
▲图5 主站配置文件
▲图6 实验平台
▲图7 实验过程
从站配置主要根据厂商提供的XML设备描述文件,设置从站的运行模式,配置非周期性数据和周期性数据,并添加引脚和功能函数。应用层采用CoE协议,根据CiA402(伺服运动控制规范)配置周期性数据,示例如下:
组件配置包括将EthereCAT组件和运动控制模块与软件PLC模块相连接。
4 实验验证
4.1 系统组成
搭建实验平台如图6所示,分为三部分:①非实时传感器和监控系统,包括工业相机和远程操作机等;②中央控制器,实验采用的是研华工控机;③执行器,包括工业机器人及末端执行器。
4.2 实验结果
机器人实验过程如图7所示。在输入零件特征后,通过工业相机获取目标的位置,工业机器人抓取零件,并将零件放于另一个相机视野中,检查零件是否合格,如果合格则放入物料箱中。经过调整和修改,机器人能够完成整个流程。
5 结论
为了提高工业机器人的灵活性和适应性,笔者提出了基于ROS和LinuxCNC的控制系统软件架构,并分析了每个模块的具体实现。由实验可知,软件原型能够实现工业机器人最基本的抓起动作。
[1]黄开宏,杨兴锐,曾志文,等.基于ROS户外移动机器人软件系统构建 [J].机器人技术与应用,2013(4):37-41.
[2]张少勋,郗晓田.基于 Linux-RTAI的Ether CAT主站研究[J].电子设计工程,2013,21(10):151-154.
[3]王飞,裴海龙.开放式数控系统中软件 PLC系统的开发及应用 [J].制造技术与机床,2010(8):73-76.
[4]刘鑫.基于 EtherCAT的工业机器人控制器研究与设计[D].武汉:武汉科技大学,2012.
[5]刘磊.仿人机器人嵌入式视觉系统和决策系统 [D].哈尔滨:哈尔滨工业大学,2012.
[6]The LinuxCNC Team.User Manual[EB/OL].http://www. linuxcnc.org/index.php/english/documentation.
[7]The LinuxCNC Team.Developer’s Manual[EB/OL].http:// www.linuxcnc.org/index.php/english/documentation.
[8]谢林菲,游林儒.基于 HAL的 ClassicLadder的研究与应用[J].组合机床与自动化加工技术,2010(2):41-45.
[9]张少勋.基于嵌入式数控平台的 EtherCAT主站实现[D].广州:华南理工大学,2013.
(编辑 平 平)
TP306+.2
A
1000-4998(2015)10-0021-04
*西北工业大学研究生创业种子基金资助(编号:Z2015071)
2015年5月