面向任务教育机器人编程方法及实现

2013-05-12 06:32刘海春陈卫东魏之暄
微型电脑应用 2013年1期
关键词:仿人状态机编程

刘海春,陈卫东,魏之暄

0 引言

仿人机器人是集机械、电子、控制、计算机、传感器等多种学科和先进技术于一体的现代自动化技术装备[1]。教育仿人机器人是一类应用于教育领域的专用仿人机器人,它区别于普通仿人机器人是其开放性和模块化的特性,用户可以方便地改变硬件配置、组合软件功能,以实现不同的任务。因此,能基于某种开放性的编程方法,提供友好的编程环境和控制器,根据使用对象的教育水平不同实现不同层面的自主创新,逐渐成为研究的热点[2]。

目前面向机器人的编程方法按实现步骤的不同可分为:面向过程和面向对象。其中教育仿人机器人大多数采用基于文本或者图形化的面向过程的编程方法,如Kondo公司的KHR,VStone公司的Robovie,而其中图形化编程方法只是将文本编程的过程图形化,依然属于面向过程的流程式编程,随着任务复杂程度和环境影响因素的增加,编程难度随之上升,限制了机器人可应用的技术人群[3]。而教育仿人机器人还鲜有面向对象的编程方法。面向对象的编程方法开放、模块化程度高,特别适用教育领域。与面向过程的编程相比,它具有程序结构直观、易于理解、交互方式简单等优点,更适用于不确定环境下的编程。

针对上述问题,本文设计了一种以任务为对象,面向任务的图形化教育仿人机器人编程方法。该方法基于行为反应式的控制方式,采用有限状态机模型实现任务层和行为层的协调机制,并构建了完整的控制系统,包括上层编程环境和下层控制器。控制器基于ARM处理器和嵌入式Linux操作系统,使用核心板和扩展板构架,实现基于硬件的运动控制,缓解控制系统中央处理器压力,并有良好的扩展能力。编程环境实现面向任务的编程方式,让用户集中精力于任务中每个状态、行为模块的实现和模块间的逻辑关系,更适用于不确定环境的编程,并且能提高编程结果的重用性。本文通过教育仿人机器障碍赛的实验,突出了其开放性和模块化的特点,为相关学科的研究提供了一个简洁、开放的编程方法和控制系统。

1 编程方法和控制系统

面向任务的教育仿人机器人编程方法实现了基于任务与事件触发的规划和基于行为反应的控制。任务与事件触发的规划包括按照仿人机器人感知到的环境、事件描述对整体任务进行分解与规划,从而产生按一定序列相互连接的一系列离散的状态。再对每个状态进行局部规划,每个状态内包含若干个行为,行为是至少包括一个感知和一个动作的集合,本文规划的行为为基元行为,它仅由一个感知和一个动作组成,基元行为是不可分的,只能完成一件单一的事。这些行为的集合描述了当前状态的特征,状态之间的变迁由事件感知实现,最后用有限状态机确定完成上述任务的一系列动作的状态序列。有限状态机是表示有限个状态以及在这些状态之间的转移的数学模型,这样某一任务的执行过程可以被描述成以状态为节点,基于事件触发为变迁的一个有限状态机,如图1所示:

图1 任务模型

为实现将具体任务抽象成便于面向仿人机器人编程的有限状态机形式,本文设计了面向仿人机器人的控制系统,包括编程环境和控制器,如图2所示:

图2 控制系统

编程环境:提供图形化的编程界面,用户可以自由编写机器人的动作,并以库的形式存储;支持从动作库中调用已编写的动作模块,结合机器人运行环境中的感知事件,以面向任务的编程方式规划仿人机器人任务,生成任务的状态序列,再以XML描述语言把当前有限状态机模型表示成树的形式,通过串口或网络通讯模块下发到控制器。

控制器:基于ARM处理器和嵌入式Linux操作系统,接收编程环境下发的XML文件,并解析为任务状态机的状态序列,实现基于任务与事件触发规划的状态下的行为控制功能。行为控制决定了某一状态下所需选择的行为以及行为之间的优先级和抑制关系,这是一种基于行为反应的控制器,包括多种基本行为并行工作,各行为根据感知事件的输入,按照各自的控制算法产生动作。同时行为控制模块还将感知得到的信息传送给状态序列模块,刷新和维护任务有限状态机模型。

2 控制器

2.1 硬件设计

控制器硬件采用模块化设计,分离了中央处理器芯片和外设,使用核心板和扩展板叠加的构架,缩小了控制系统体积,便于灵活更换扩展设备和接口,如图3所示:

图3 控制系统硬件结构

核心板的嵌入式主板其性能将直接影响机器人的控制精度和实时性,同时考虑到系统对视觉功能和外设扩展的需求,嵌入式主板采用了ARM9核的微处理器S3C2440。ARM是RISC结构的处理器,内部集成了3级流水线技术,大大地提高了处理速度;ARM的功耗在同档次处理器中是较低的,低电压、微电流供电,适合教育仿人机器小型化、移动使用的需要。S3C2440集成了CMOS Camera控制器,可以实现视觉子系统的电路扩展,同时具有丰富的片内资源,有64M的RAM和2M的Nor Flash、1G的Nand Flash,处理器工作频率最高达到400MHz,满足控制系统的实时性要求。

扩展板包括舵机驱动模块、USB HOST模块、电源管理模块、音频接口模块等扩展模块,其中舵机驱动模块基于型号为EPM1270T144C的CPLD芯片,用硬件的方式实现舵机控制,能缓解控制系统中央处理器压力,而且CPLD丰富的I/O资源,可以同时进行几十路舵机控制,满足仿人机器人多关节规划的需求。而且CPLD可以通过不同配置实现不同功能,使系统更加灵活,避免资源浪费。

控制器采用分布式控制原理:核心板完成中央处理功能,扩展板完成各自特定的功能。核心板和扩展板间采用并行总线、I2C和USB总线进行通信,并且方便扩展其他支持相同总线方式的设备。控制系统还具有网络通讯功能,能实现远程通讯或资源共享。

2.2 软件设计

控制器选用了嵌入式Linux操作系统,Linux用户可以创建多个进程,并使各个进程协同工作来满足实时性的需求。另外Linux有丰富的设备驱动,支持多种外设的即插即用,包括摄像头、U盘、网络等,方便用户扩展控制系统的功能。控制器软件自下而上分为硬件层、系统库层和任务层。

硬件层的核心是MDEV模块,其作用是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的文件,包含CDC、CPLD定义的设备上下文对象的类。MDEV实现CDC、CPLD驱动管理功能,实现设备的模块化调用。

系统库层包含Linux系统的核心文件,包括Expat、OpenCV、Socket、D-Bus等。其中Expat用来解析XML任务描述文件,把编程环境中设计的有限状态机模型解析到控制器程序中。解析过程并不需要把所有XML文件全部加载到内存里,仅需根据当前状态调用相关行为,这样可以分析非常大的XML文件,支持复杂的仿人机器人任务的编程。OpenCV实现视觉处理。Socket和D-bus实现各层次、各模块间的数据传输。

任务层分为状态序列模块、行为控制模块、动作驱动模块和事件感知模块,功能包括机器人的初始化,任务流程分配,状态序列跳转,传感器采集,执行器驱动等。状态序列模块负责解析脚本分配已规划的任务,执行状态跳转的功能;行为控制模块按照行为之间的优先级和抑制关系,通过事件感知模块的结果调用动作驱动模块;动作驱动模块负责控制硬件驱动,如舵机驱动、发音等;事件感知模块负责读取传感器或控制器信息。

3 编程环境

教育仿人机器人的编程环境要求简洁、直观、友好,除了能够对机器人全身各关节精确控制,还要能有一定逻辑编辑能力以完成具体任务。基于图形化编程可以提供直观的编程界面,使得不具备或具备很少专业知识的用户也能方便地给机器人编程[4][5]。本控制系统的编程环境基于行为反应式的控制方式,采用有限状态机模型实现任务层和行为层的协调机制,让用户集中精力于任务中每个模块的实现和模块间的逻辑关系。编程环境分为动作编程,任务编程。

3.1 动作编程

动作编程功能生成用户需要的动作,每一个动作可以是单帧的静态动作,也可以是连续多帧的动态动作,而且都独立存在,以库的形式存储,能在任务编程中随时被调用。本编程环境提供两种动作编程方式:在线示教方式和基于运动捕获的示教方式。

3.1.1 在线示教

在动作编辑界面中,拖动机器人每一个关机的角度滑块到期望位置,并以帧的概念存储。一帧画面,或者一系列帧按设定时间T连续运行,即为一个动作。此界面还提供了用户完成整个动作编辑所需的功能,包括动作的编辑管理(添加、修改、删除、上移一帧、下移一帧等)、通过通讯端口直接将当前动作在机器人上实时运行的在线运行测试等功能,如图4所示:

图4 动作编辑

这种在线示教方式优点就是机器人轨迹的正确性性和精确度都能得到保证,但效率低下。

为弥补在线示教的效率问题,本界面还支持离线编程,可以导入在计算机上模拟仿真的结果,再通过在线示教的方式,对精度得不到保证的模拟结果进行修正。

3.1.2 基于运动捕获的示教

在线示教的方法是面向最底层的示教方法,但在不适用于如步行、跌倒、爬起等复杂的全身动作的设计。仿人机器人全身运动规划领域的探索在很久以前就已经展开,到目前为止,尚未形成成熟而实用的最终办法。细观涌现出的多种不同的全身运动规划算法,根据人的运动模式来生成其全身运动是个自然而然的想法。为了获取人的运动数据,通常使用运动捕获系统[1]。

本文采用微软公司的Kinect作为运动捕获系统,获得人的全身运动,然而由于仿人机器人与实际人体的结构特征不可避免的具有差异,捕获得来的运动数据不能直接运用到仿人机器人上,否则可能会因为关节角度的运动范围限制或稳定性限制[6],造成动作生成失败。

为基于运动捕获示教流程如下,首先,通过运动捕获系统获取人体运动数据,输出简化模型的空间坐标,对采集到的运动数据进行分析和基于仿人机器人运动学的逆运动学解算,得到仿人机器人模型的关节角数据;再经过关节角度约束和稳定性约束后,生成能够应用于仿人机器人的动作。

3.2 任务编程

提供图形化的编程界面,以面向任务的编程方式规划仿人机器人任务。可以自由生成任务的状态序列,并从动作库中调用已编写的动作模块,结合机器人运行环境中的感知事件,组成状态下的各种行为。图形化的编程界面具有两种基本元素:图标(icon)和连线(line)。图标用于表达每一个状态,连线则表示状态间的跳转。每个状态图标由多个行为组成,行为的动作描述和感知,如表1所示:

表1 行为模块

这为行为的选择和合成提供了基本模块,通过设置适当的行为的触发条件以及行为之间的耦合关系略,可由若干个基本行为构成一个复杂的状态。最后以XML描述语言把当前任务有限状态机模型表示成树的形式,通过串口或网络通讯模块下发到控制器。

4 编程实例

本文采用教育仿人机器人IRONEEG作为实验平台,机器人全身有17个自由度,每个自由度由舵机控制,上述控制器安装在机器人背部,并在编程环境中针对机器人障碍赛编程,以验证本控制系统对不确定环境编程的有效性。

实验场地为2m×0.8m的长方形区域,机器人从起点开始沿黑线行走,并在沿线途中越过两道障碍,其中一道障碍以步行避障绕过,另一道障碍需要机器人爬行通过,两道障碍出现顺序未知,终点以圆形色块表示,位置未知,机器人看到表示终点的色块后即向终点行走,走到终点即为完成比赛,如图5所示:

图5 任务有限状态机图

在任务编程界面按照的有限状态机表述方式编辑上述任务,再把任务生成XML文件,通过串口或无线网络下载到控制系统,通过控制系统的嵌入式Linux中的expat XML解析器把整个任务分解到各个功能模块中,机器人便能按照上述有限状态机的结构,根据感知调用动作,产生行为,自主完成给定任务。

在实验中,机器人接收遥控器命令以较稳定的步速起步,沿跑道中的绿线行走,通过安装在头部的摄像头识别需要绕行的障碍,以及需要爬行通过的障碍,最后通过摄像头看到终点色块时,步行到达终点位置为完成任务,如图6所示:

图6 障碍赛实验进程照片

5 结论

针对传统教育仿人机器人面向过程的流程式编程不易学习和使用的问题,设计了一种面向任务的图形化教育仿人机器人编程方法。该方法基于行为反应式的控制方式,采用有限状态机模型实现任务层和行为层的协调机制,有限状态机作为一个通用的表现形式,可以在一个抽象的层次上作为一个可复用的模板,利用其的正交性和收敛性,可以覆盖机器人编程的所有可能性,又不会重复处理,并且能保证所有的处理都在可预测的控制范围内。并构建了完整的控制系统,包括上层编程环境和下层控制器。控制系硬件分离了中央处理器芯片和外设,使用核心板和扩展板叠加的构架,缩小了控制系统体积,便于灵活更换扩展设备和接口。编程环境简洁、直观、友好,除了能够对机器人全身各关节精确控制,还要具有逻辑编辑能力,能让用户集中精力于任务中每个模块的实现和模块间的逻辑关系。

通过教育仿人机器人IRONEEG进行的实验表明,本控制系统适用于教育仿人机器人的研究和开发,其开放性和模块化的特性能被开发人员迅速接受,有利于仿人机器人研究的深入推广。

[1]梶田秀司.仿人机器人[M].北京:清华大学出版社,2007.

[2]鲍贤捷,陈卫东,曹其新.机器人图标化编程环境的设计及实现[J].机器人,2006,28(6):481-486.

[3]Huq R,Lacheray H,Fulford C,et al.QBOT: An educational mobile robot controlled in MATLAB Simulink environment[C].In Proceedings of Canadian Conference on Electrical and Computer Engineering.St.John's,NL ,Canada,2009.

[4]Biggs G,MacDonald B.A survey of robot programming systems[C].In Proceedings of Australasian Conference on Robotics and Automation.Brisbane,Australia,2003.

[5]张小冰,陈卫东,曹其新.面向服务机器人的简易编程环境设计[J].上海交通大学学报,2007,41(11):1811-1815.

[6]Katsu Yamane,Jessica Hodgins. Simultaneous Tracking and Balancing of Humanoid Robots for Imitating Human Motion Capture Data[C].In Proceedings of the IEEE/RSJ International Conference on Robots and Systems.St.Louis,USA,2009.

猜你喜欢
仿人状态机编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
基于有限状态机的交会对接飞行任务规划方法
仿人机器人的现状研究
三段式状态机在单片机中的实现
探究仿人机器人设计及步行控制方法
具有面部表情的仿人头部机器人系统的研制
基于反熔丝FPGA的有限状态机加固设计