RT-Linux在工业机器人控制系统中的实时性研究
2015-05-11刘金铁叶方平
刘金铁,张 哲, 叶方平
(1 武汉软件工程职业学院, 湖北 武汉 430205;2 华中科技大学, 湖北 武汉 430074; 3 湖北工业大学机械工程学院,湖北 武汉 430068)
RT-Linux在工业机器人控制系统中的实时性研究
刘金铁1,张 哲2, 叶方平3
(1 武汉软件工程职业学院, 湖北 武汉 430205;2 华中科技大学, 湖北 武汉 430074; 3 湖北工业大学机械工程学院,湖北 武汉 430068)
从硬件和软件两方面阐述机器人控制系统在实时性上的要求,并以RT-Linux系统为软件平台,采用模块化的软件设计方法,利用PC技术、现场总线技术以及多传感器技术,研究开放式工业机器人控制系统的问题。经实验验证,该系统具有较好的实时性。
工业机器人;嵌入式RT-Linux;实时性
机器人的实时控制由于其功能单一和计算能力差,在实际应用中难以保证。人们总希望机器人的控制系统在某种程度上选择特定的内核模块,而将不用的部分去掉,以减少其体积,适应市场变化和不同的任务需求,从根本上解决体积和功能的矛盾[1]。本研究以传统工业机器人为对象,开发了工业机器人实时控制平台,并验证了平台的实时性,为实现基于视觉技术的机器人搬运、分拣等实时控制作业打下基础。
1 机器人控制系统的硬件组成
本研究采用美国TI公司推出的DSP芯片TMS320LF2407A作为电机控制芯片,其内嵌的CAN控制器是一个完全的CAN控制器,每个TMS320LF2407A器件都包括两个事件管理模块EVA和EVB,并且使用一片TMS320LF2407A芯片就可以对四个电机进行控制,而对于六自由度机器人来说,只需两块控制卡就能对六轴进行联动插补控制。采用位置和速度双闭环控制系统来保证机器人运动的平稳和准确定位, 将DSP的高速运算能力和面向电机的高效控制能力集于一体,使其高速性和复杂的控制策略得以实现。工业PC通过CAN总线与DSP模块进行通信。DSP模块定期向工控机发送一次中断请求,接收来自工控机的位置和速度脉冲数,将脉冲数与编码器反馈的脉冲数进行比较,并将差值送到比例控制器进行比较并进行增益调节,再将调节的脉冲数送到偏差计数器,经过数模转换为电压值,发送给伺服驱动器,最终实现对各个伺服电机的实时控制。设计硬件系统体系结构见图1。
图1 控制系统硬件总体示意图
电机、驱动器和编码器相配套组成伺服系统。工业机器人一般由多个独立的伺服单元组成,每一个伺服系统对应伺服轴的控制通过DSP运动控制卡来完,所有轴系均由步进电机组成,各驱动器位置反馈采用带有增量式光电码盘闭环反馈结构[2],通过闭环控制提高控制精度,其硬件接线见图2。工控机完成上层的运动规划,通过解释器将机器人操作指令解释为DSP的运动程序,下载到DSP运动控制卡中执行,伺服运动完全可以只用DSP系统软件以及运动程序来实现,而电码盘、极限开关以及其他外部设备的I/O输入输出处理功能,转移到PC机上完成。
图2 闭环DSP运动控制卡结构框图
2 基于RT-Linux的控制系统软件平台
建立完全意义上的开放式控制器,控制系统必须摆脱对专用软件系统和硬件系统的依赖,选择何种操作系统,并如何在该操作系统上实现控制系统的实时控制要求,就成为了发展开放式控制系统的一个关键,而RT-Linux操作系统恰好可以解决这一问题。由于是可以运行于多种硬件平台的多任务实时操作系统,故本系统采用RT-Linux操作系统平台,充分利用RT-Linux源代码开放、软件资源丰富,针对特殊的应用要求自行裁剪,构建具有硬实时特性的多任务操作系统。
RT-Linux实质是在原有标准Linux内核的基础上引入一个小而精巧的实时内核,把标准Linux内核作为优先级最低的任务来执行,Linux内核随时可以被优先级更高的实时任务抢占,实现由标准Linux内核完成非实时任务,由实时内核完成实时任务的调度[3]。实时任务与Linux内核之间通过特定的通信机制(如RT-FIFO管道或共享)进行通信。这样既保证了Linux系统的稳定性和完整性,又从根本上解决了原有Linux核心态进程不可被抢占的问题,减少抢占延迟,提高系统的实时性能,RT-Linux对Linux内核运行原理的改造如图3所示。
图3 RT-Linux内核运行原理
整个系统软件大体上可以分为4部分:实时模块(控制层),非实时模块(应用层),实时模块与非实时部分的接口以及设备驱动程序(系统层)。软件系统结构如图4所示。
图4 软件系统结构
实时模块利用RT-Linux精确的定时精度与多线程实时调试机制,实现对多实时任务进行定时调度。同时,RT-Linux内核提供了多线程对应的API函数:
pthread_create() ;//创建线程
pthread_make_periodic_np();//函数用于设定一个周期性线程设置这个实时进程的开始执行时间,周期的间隔为多少纳秒。RTLInux 的周期任务可达到纳秒级的精度。
pthread_wait_np( ) 与pthread_make_periodic_np( )连用,暂停线程运行,等待下一周期到来。
pthread_suspend_np( );// 挂起某一实时线程(可以挂起自己)
pthread_wakeup_np( ) ;//唤醒被pthread_suspend_np( )挂起的实时线程
pthread_delet_np() ;// 销毁线程,即删除启动的实时进程、删除分配的RT-FIFO 和共享内存,释放申请的I/O 地址。
采用线程互斥锁来实现线程间的互斥:
int pthread_mutex_lock() ;// 将线程锁定并挂起.
int pthread_mutex_unlock();//将互斥锁解开
RTLinux 提供的这些简明的API, 已足以完成包括插补运算、逆运动学、位姿控制、PLC控制等内核实时线程间实现复杂的时序关系。
非实时模块主要完成实时数据的存储、处理、通信,人机交互的数据显示,多传感器的信息融合,工作规划等工作。监控系统主要完成系统各个组成部件的工作状态监测、机器人工作过程的监测、故障的报警提示等对实时要求不高的场合,减少对系统的资源占用,从而达到多任务并行处理的目的。
实时模块与非实时部分的通信可以采用RT-FIFO实现。在这里采用RT-FIFO,它是一种能够被内核实时线程和用户空间线程访问的先入先出队列,即第一个写入的数据将首先被读出。利用read()函数从FIFO管道里读取数据。由系统中断触发内核空间的中断服务程序,中断服务程序调用驱动程序的rtl_com_read()函数从串口读取数据,再利用rtf_put()函数将数据发送到FIFO管道[4]。同样,write()函数往FIFO管道写数据,当需要往串口写数据,可以通过调用驱动程序的rlt_com_write()函数完成。
设备驱动程序是操作系统内核和机器硬件之间的接口,所有硬件设备都被看成设备文件,这样提供了一个可用的程序接口使其他程序能够与这个设备互动。例如DSP运动控制卡就要在实时内核里编写相应的驱动程序。设备驱动程序主要是为满足不同的控制对象(即不同自由度的工业机器人),通过对设备文件的读写从而对驱动程序发送命令,这样在使用不同的硬件配置时只需修改驱动程序就可以满足要求,以实现系统的通用性。
3 系统实时性能分析
机器人控制系统对实时性要求非常严格。实时系统的性能评估包括:任务优先级性能、任务换道性能、任务内部通信性能、内存分配性能、中断延迟时间、操作系统运行时效率等,其中最严格的就是中断响应时间,如插补运算、位置控制、故障处理等都必须要在一定的时间内完成。如果中断响应不及时,则可能导致无法到达预定轨迹点、急停无法及时响应等后果。所以机器人实时控制部分必须精确安排各任务的执行时间和执行顺序,避免各任务之间产生资源和时间上的竞争。在本研究中,最为重要的是RT-Linux系统对DSP运动控制卡(TMS320LF2407A)的中断响应时间,所有工作的目的就是为了尽量减少中断响应时间。
RT-Linux定时精度可达到10 μs左右,最大中断延迟时间不超过15 μs,最大任务切换时间不超过35 μs,分辨率约为1 μs,且与系统负载无关,只取决于计算机硬件[5]。因此,工业控制微机的硬件配置为Pentium(R)4 CPU 2.26 GHz,DDR 1 G内存;服务器软件是用RedHatLinux5.0 (内核版本号2.6.29),RT-Linux补丁版本号2.6.29.6。在系统测试过程中,用户进程通过系统调用将持续发送脉冲写入核心层的实时驱动程序的缓冲队列,在下一个中断请求到来时,中断服务进程将数据缓冲队列中的脉冲数据写入DSP运动控制卡的缓冲,最终,驱动机器人运动。此过程中开启多个进程。测试程序部分代码为:
#include
#include
#include
#include
#include
#include
Void *pwm_code(void *arg){……} //脉冲发生函数
void *start_routine(void *arg){ start.time=gethrtime(CLOCK.REALTIME)}//获取发送脉冲数据时刻(作为测试开始时刻)
readIO(); //读取数据
while(1)
{
writeIO();//写出数据
pthread_wait_np{};// 等下一个周期的到来
now=clock_gethrtime(CLOCK.REALTIME);//测试结束时刻
elapsed_time=now-start_time; //中断延迟时间
rtl.printf(“elapsed.time=%L ,(long long)elapse.time”);
} //数据写入运动控制卡数据缓冲区(作为测试结束时刻)
int param_handler(unsigned int fifo){ ……} //创建FIFO通道实现实时非实时通信
int init module(void){ ……} //module.o实时模块的初始化函数
void cleanup_module(void){ ……} //清除模块设置
中断延迟时间的测试结果如图5所示。
图5 中断延迟时间的测试结果
由实验结果可知,任务调度的周期是1 ms,取1 000个周期的数据,分别记录调度时的最大延时和最小延时。通过分析图5的数据可以得出,在这1 000个周期内,任务调度的最大延迟时间不超过18 μs,而最小延迟时间基本为0,时间可以精确到微秒位,最大中断延迟时间不超过4 μs。这体现RT-Linux系统的实时性能的优势相当明显,基本满足底层硬件设备的实时性能。
4 结论
通过将RT-Linux与Linux结合的双内核结构,以及基于优先级的可抢占式双级中断机制,为各种复杂的工业机器人的实时控制提供精确的时间保障,实时性能完全可以满足机器人实时控制的要求,很大程度上解决传统Linux内核非实时的缺陷。
[1] 王振华,朱国力,郭长旺,等.基于DSP和CAN总线的CNC多轴运动控制器研究[J].制造业自动化, 2000,3(22):10-13.
[2] 梁 喜,孙志辉.基于DSP和CAN总线的多轴工作台分布运动控制系统研究[J].机电产品开发与创新.2007,20(05):138-140.
[3] 吴 柳.基于RT-Linux的实时性能测试[M].浙江:浙江大学出版社,2010.
[4] 陈建春,刘雄伟.基于RT-Linux 系统的数控系统与PLC 通信的实现[C/OL]// 第十五届全国机床专业学术会议,2002 [2011-02-13]http://wenku.baidu.com/link?url=FSb699KFFJjndETB9-tDXcv-vsciVN1M0RASOVfETPpr3by6EgU8uynINoSc2R8zYQ-b3F5lQcATVEnv66qor3UIEj0p9FN0iFeCpA4IaU3.
[5] 郭晋峰. RT-Linux的原理及其实时程序开发[J].微型机与应用,2001(04):54-59.
[责任编校: 张 众]
RT Linux Real-time Research in the Industrial Robot Control System
LIU Jintie1, ZHANG Zhe2,YE Fangping3
(1WuhanVocationalCollegeofSoftwareandEngin.,Wuhan430205,China;2HuazhongUniv.ofSci. &Tech.,Wuhan430074,China;3SchoolofMechanicalEngin.,HubeiUniv.ofTech.,Wuhan430068,China)
From the hardware and software aspects of the robot control system, the paper addressed the requirements of real-time. It also studied the problems of the open industrial robot control system, using the RT Linux system software platform, modular software design methods, the PC technology, field thread technology and multi-sensor technology. The experiment results show that the system has better real-time performance.
industrial robot;embedded RT-Linux;real-time performance
2014-07-15
刘金铁(1969-), 男, 湖北武汉人, 武汉软件工程职业学院工程师, 研究方向为材料成型, 机械制造及其自动化
叶方平(1989-), 男,湖北仙桃人,湖北工业大学硕士研究生,研究方向为机械设计及理论
1003-4684(2015)01-0069-04
TH242.2
A