基于桌面机械臂的快速任务调度控制系统设计*
2018-08-03刘满禄2静2
徐 亮, 刘满禄2,, 张 静2,, 张 华, 王 姮
(1.西南科技大学 信息工程学院,四川 绵阳 621010;2.中国科学技术大学 信息科学技术学院,安徽 合肥 230026)
0 引 言
目前多数机械臂[1,2]采用集成控制板卡或者控制柜进行控制的,在处理繁杂任务时往往需要人为示教和反复调整,且示教后的实时控制性能并不理想[3,4]。针对此问题,郑天江提出了工控机内核开发和运动控制板卡相结合方案,尽管在一定程度上提高了控制系统的实时性,但系统和应用程序接口(application program interface,API)移植却很不方便[5]。张艳琼等人[6]提出了基于Web Service 的控制系统,虽然加快了上位机与硬件的数据交互,但对于多任务调度下的机器人姿态解算的实时性并不高。王帅华等人[7]提出了基于ARM实时抢占式的控制系统,在一定程度上提高了实时性,但在任务调度中却未给出。杨杏等人[8]提出了基于Qt开发的控制系统,虽然开发和移植简便,但并未考虑到机械臂在运动控制中需要实时进行繁杂的姿态计算。
本文提出了基于快速任务调度的控制系统。将系统分为三个部分进行设计,机械臂的API以及控制系统的任务调度均采用C++语言处理,经由MATLAB外部语言接口调用并能够实现模块的快速装载。机械臂的姿态解算由机器人工具箱集成的专用函数块快速处理,能够实时解算机械臂姿态,并对位姿进行记录理,为系统实时操控提供了保障。
1 任务调度与系统结构
1.1 任务调度
现有的以任务为导向的控制系统,一般为实时任务系统和非实时任务系统[9]。针对实时任务系统又分为周期性任务控制系统和非周期性控制任务系统。就非周期实时任务控制系统而言,通常采用事件的优先级的顺序进行任务调度处理[10,11]。系统中第i个执行任务事件为Ei,对于系统任务集合描述为{E1,E2,…,En},于是在周期性任务系统中时间描述为
TR={max(Cp1,Cp2,Cp3,…,Cpn),TPp,TDp}
(1)
式中Cpn为任务计算时间,TPp为任务周期,TDp为任务时间限制。
类似地非周期任务时间描述为
TUR={Capmax,Rap,TDap,η,Δtmin}
(2)
式中Capmax为最大任务计算时间;Rap为任务下发时间;TDap为任务限制;η为非周期任务达到率;Δtmin为任务最小时间间隔。
设任务调度最大干扰时间为Nt,则对于任意一个任务在周期系统下能被调度,则满足
(3)
由式(3)可知对于任务调度系统若要保持任务能快速被调用,就必须压缩任务计算执行时间,因此采用多模块并行处理,运用任务调度的控制方式是十分必要的。
1.2 系统结构
系统设计分为控制系统与任务调度、机械臂的API和机械臂位姿解算3部分。当控制信号给定时,由控制器结合姿态结算信息按照优先级进行任务调度分配,任务调度模块通过机械臂的API实现控制任务的快速调度与执行。在控制器执行的同时,姿态解算模块对机械臂进行实时位姿信息获取并快速解析送至控制器,确保任务调度高效、有序进行。系统整体结构如图1所示。
图1 系统结构
2 被控对象建模
Geomagic Touch多自由度桌面机械臂作为控制对象,如图2所示。
图2 桌面机械臂
(4)
(7)
(10)
设末端齐次变换矩阵为
(11)
得末端位置坐标(px,py,pz),求导有速度表达式满足
(12)
根据速度表达式,代入参数计算出速度雅克比矩阵,即可建立关节角速度跟末端姿态的关系,其中,实时的姿态解算由MATLAB下的机器人工具箱完成[12,13]。
3 控制结构设计
控制结构选取多通道控制结构,如图3所示。每个独立的控制对象有着独立且与之对应的控制器。在每个控制干路中采用与多回环反馈相结合的方式形成独立的控制回环。子控制器参数可以独立设置,在任务执行上提高了控制效率,降低了控制模块之间的耦合。每个控制回环的执行与否经由任务调度控制器依据优先级进行调度处理,确保控制系统的每个子控制单元顺利被调度,完成控制任务。
图3 控制结构
对于N个关节的机械臂动力学方程为
(13)
式中M(q)为正定惯性矩阵;C(q)为离心和哥氏力项;G(q)为重力项。设期望关节角度为qd,跟踪误差为e,有
e=qd-q
(14)
采用PD控制器,设比例控制增益与微分控制增益分别为Kp和Kd;控制率为
(15)
设期望重力为G(q)d有
(16)
由于桌面机械臂末端在水平面运行,于是实际重力项和期望重力项之差近似为零。期望重向关节与水平面接触,由式(16)整理得
(17)
(18)
联立得式(17)有
(19)
由式(21)知控制系统输出收敛。
4 实验仿真与结果分析
实验平台为SensAble科技公司的Geomagic Touch多自由度桌面机械臂设备[14,15]。该机械臂前3个关节有电机,后2个关节只有位置电位器。实验过程中,机械臂末端处于近似光滑的桌子平面。给定位置信号后,使得末端轨迹进行跟踪,并根据跟踪情况对系统性能进行分析。系统的任务调度函数由C++语言编写并封装,经由MATLAB的C编译器编译后生成后缀为.mexw的可调用文件。系统运行时,首先启动各个模块,并依据优先级进行任务调度。在调度过程中,当检测到各个子模块的标志参数满足一定条件时,对任务执行的优先级顺序进行修改,使得控制任务顺利完成,确保系统运行的快速性和实时性。任务调度的主函数部分核心代码如下:
void main(void)
{Create_Scheduler();/*创建任务调度并分配子模块优先级*/
Enable_Device(hHD);/*初始化硬件设备*/
hdStartchedule(gCallbackHandle);/*启动当前任务调度*/
hdChackScheduler(flag);/*检测任务标志位*/
mdlUpdate(gCallbackHandle);/*更新任务调度*/
hdReStart_Schedule(gCallbackHandle);/ *重启任务调度*/}
在信道给定正弦信号下,末端轨迹在桌面跟踪情况如图4所示。
图4 末端跟踪轨迹
由图4可以看出,桌面机械臂的末端在Y轴和X轴方向分别在375 ms和492 ms内完成期望运动轨迹跟踪,且首次跟踪时间均控制在0.5 s以内,表明系统的动态响应性能良好。在500 ms以后,Y方向和X轴方向跟踪较为平滑,均未出现跟踪上的时延滞后和与跟踪不足问题,表明系统的稳定性能良好。
在时间顺序上,Y轴与X轴方向首次完成轨迹跟踪时间并不同步,这是由于执行Y方向的跟踪任务调度先于X轴方向跟踪任务的调度。此外,从Y方向的轨迹跟踪可以看出,从信号输入到完成首次跟踪时间为375 ms,这是由于系统要初始化各个模块并进行任务调度的耗时。从Y轴方向的任务完成到调度X轴方向的任务执行亦即二者完成首次跟踪消耗时间之差,即完成二次任务调度时间117 ms,控制在0.12 s以内,从任务调度到任务执行完成较信号周期时间较为短暂。这表明系统的实时性能良好,也为机械臂末端实时跟踪提供了保障。
此外机械臂末端运行的桌面存一定的摩擦,机械臂的关节的机械摩擦等外界因素也给控制系统带来了一定的非线性干扰。尽管如此,设计的系统对桌面机械臂仍实现了较好任务调度实时控制,表明设计方法的有效性。
5 结束语
实验证明,所设计的快速任务调度控制系统,实时性能良好。整体系统初始化至第一次任务调度执行耗时小,任务调度切换完成迅速,系统动态特性良好,满足控制要求。从实验结果看,Y方向和X方向的轨迹均实现了较为平滑的稳定的跟踪,系统稳定、可靠。因此,设计的控制方法是可行的,另外该系统结构简单,为同类工程实现提供了参考。下一步的研究工作,应优化机械臂的姿态解算控制器,使之能够快速完成更为复杂的机械臂的姿态解算,进一步优化整体系统的实时性,提高系统实用价值。