分享

模块化机器人图形化编程系统的开发与研究

 GXF360 2017-05-31
模块化机器人图形化编程系统的开发与研究

模块化机器人图形化编程系统的开发与研究

赵子建1梁建宏1 张代兵2
(1北京航空航天大学机械工程及自动化系,北京,100191;2国防科学技术大学机械工程及自动化系,长沙,410073)

摘 要

关键词:机器人,模块化教学,图形化编程,动态不规则树

0 引言

随着智能制造行业的不断发展、机器人技术的不断成熟,教育机器人的市场发展正如火如荼。同时,图形化编程作为一种高效、简明易懂的开发方式[1],目前已经被广泛地应用在机器人教学领域。

国外机器入教育开展的较早,从20世纪60年代起,美国、日本等发达国家就相继推出了各自的教育机器人基础开发平台,并出现了一些比较优秀的图形化编程软件,其中以丹麦乐高公司的MindStroms系列软件、德国慧鱼公司的ROBOPro和美国麻省理工学院(MIT)的简易编程工具Scratch推广较好。在国内,机器人教学开展比较晚,较早的如上海未来伙伴机器人有限公司的风暴机器人系列、广州中鸣数码科技有限公司的积木套件机器人、北京博创科技集团的创意之星教学机器人套件产品,以及近期面市的格物斯坦(上海)机器人有限公司的套件产品、昆山瑞泰智能科技有限公司的酷博可重构的数字舵机模块机器人等,均使用图形化软件进行编程。

针对目前教学机器人图形化编程存在的程序流程和参数设置复杂、用户群体编程基础要求高等问题,本文设计了一种面向青少年的模块化教学机器人的图形化编程系统,其具有友好的人机界面、简单明了的程序流程、操作简便的参数设置和编译下载方式,能够提升用户对机器人图形化编程软件的有效操作和认知[2],同时具有较高的稳定性、可扩展性和较好的进阶性。

1 模块化教学机器人控制原理

模块化教学机器人系统的稳定工作取决于以下四个子系统:机器人主控制器、上位机编程软件系统、机械执行系统以及传感器等设备。

硬件系统主要为主控制器以及外围套件。机器人主控板电路主要包括:主控芯片及其最小系统、外围套件接口。主控板电路中主要有主控芯片、电源电路、复位电路、时钟电路。外围套件接口主要包括:传感器接口、液晶显示接口、电机控制接口等。

传感器设备是模块化机器人行为感知系统,能够感受外界环境的各类信息。传感器主要包括:颜色传感器、陀螺仪、超声传感器、声音传感器、触碰传感器、电机旋转检测传感器、计时器等。传感器将感知的外界环境信息通过模拟量或者数字量的形式传输到控制器端。机械构型设计即通过各种模块的零件拼接搭建成各种各样的构型。机械构型的设计决定着机器人的动作执行。

图形化编程系统所需实现的基本功能取决于模块化教学机器人的硬件系统和机械构型设计,编程系统提供了用户编程所需的各种模块,通过连线和属性连线将模块连接生成程序流程图,然后通过各个模块的控件设置其参数,最后通过编译类C代码,生成可执行文件下载到控制器,利用传感器返回的参数作为控制条件,控制模块化机器人的构型执行动作。模块化教学机器人控制原理如图1所示。

图1 模块化教学机器人控制原理

2 图形化编程系统框架设计

2.1 编程系统需求分析与设计要点

模块化教学机器人系统是以方便中小学生使用、易于理解为主要目标,同时要具有可扩展性、开放性以及通用性,这样才能更紧密地贴合教育理念,体现教育平台的教育价值和功能。

根据以上需求分析,教学机器人图形化编程系统需要满足以下两大要求:

1) 模块化设计。

各个编程模块需要独立开发,并且提供标准的接口函数,这样既可以实现每个模块的特定功能,也可以通过各个模块组合,生成类C程序,同时也有利于后期软件更新功能模块,具有很高的可扩展性。

2) 图形和代码分离设计。

由于模块化教学机器人面向中小学生,因此编程系统需完全图形化,实现图形和代码的完全分离设计。这样,用户在使用丰富的图形化语言编写程序之后,通过点击下载,即可实现代码的转换及下载过程,不需要代码可视,更有利于中小学生理解编程初级思想。

2.2 图形化编程系统框架

根据图形化编程需求分析和设计要点,利用模块化思想和数据流模式[3-4],设计图形化编程软件总体框架。

用户通过新建工程或者文件进入程序编程主界面,通过鼠标拖动模块标签组内的任意模块到达主界面,利用动作模块、程序流程模块以及传感器模块搭配组合,设置各个模块参数值,连接属性线,连接程序流程线,完成图形化编程设计,编译下载到控制器。上述过程即完成程序段的设计,操作简单,易于理解。

相较于其他图形化编程软件,该图形化编程语言在程序流程上设计为一条横向主链表模式,处于主链表上的模块可以自动更新位置,进行位置规划,同时以模块的实虚状态来区分是否在程序主流程上。在设置参数方面,采用了图形随数据实时更新的方,这使界面友好性大大提高,且属性连线的设置减少了程序的复杂度,更有利于中小学生理解。

图形化编程系统框架图如图2所示。

图2 图形化编程系统框架

2.3 图形化编程系统程序流程设计

为了使图形化编程系统程序流程简单、易于理解,本系统采用单一程序流程结构,即:程序由开始模块执行,遇到动作模块、传感器模块正常执行,通过属性连线将传感器模块的输出连接到任意后面将要执行的模块参数之上;遇到循环模块判断是否满足循环的条件,如果满足,即执行循环模块内部的模块,遇到停止循环模块则退出,然后再执行循环模块之后的模块,否则直接执行循环模块之后的模块;遇到切换模块判断满足哪种情况条件,执行相应情况内部的模块,然后退出切换模块,继续执行切换模块之后的模块,如有默认情况,则执行默认情况。

与其他的图形化编程软件相比,此种单一程序流程设计思路避免了利用连线实现循环以及多种情况的选择,使程序界面美观大方,同时流程结构简单易懂,执行效率高。

图形化编程系统程序流程图如图3所示。

图3 图形化编程系统流程图

3 图形化编程系统实现方案

本软件采用的开发平台为VisualStudio2010+Qt4.84,因为Qt不仅可以面向对象、包含丰富的API函数,而且还具有优越的绘画功能、可用户化的外观以及组件间的通信等诸多优点。而VisualStudio可以提供方便的IDE,为开发者提供Windows下的便捷操作。

3.1 界面实现

编程软件系统界面的实现是基于QtDesigner的QDialog的窗口类,窗口中通过布局的方式布置了编程界面和编程面板。

当用户通过菜单栏的选项或者工具条的选项选择新建工程或者新建文件进入编程主界面之后,可以看到在程序下方的编程面板里面包含不同组别的模块库。这些模块分别为动作模块组、程序流程组、传感器组以及数据操作组。每个模块都是由继承于QTabWidget的标签页窗口以一定的布局方式显示在编程面板中。

程序主界面即为用户编辑程序的区域,用户通过拖动编程面板的模块到主界面开始模块之后,自动形成程序主链表,完成逻辑连接。程序主界面采用的是The QGraphics View Framework(图形视图框架)[5-6],可以对大量的图元进行操作。

The QGraphics View Framework 包含三个大类:QGraphicsItem项类(或者叫做图元类),本软件中的模块全部都继承于此类;QGraphicsScene场景类,即程序编程主界面,用来包含并管理所有的模块,可以通过此场景向每个图形项传递事件信息,同时管理其状态;QGraphicsView视图类,用来显示程序主界面的框架。

通过此图形视图框架构造的界面,实现了图形和数据的分离设计,设计思路依据模块化设计思想,简单可靠,管理方便。

3.2 模块设计与数据结构构建

在图形化编程语言过程中,都存在一个基本的逻辑编程单位,这一逻辑编程单位明确定义了和其他程序单位的边界,强调了外部行为,从而将外在抽象行为(或者说表现形式)与其内部实现分离开来,因此具有以下特性:

1) 封装性。

封装[7]是将抽象的元素都单独分离出来,使得抽象的接口与实现相分离。所谓抽象的接口就是图形化表现形式,即软件系统实现的所有图形项;抽象的实现即每个模块以及连线和属性连线的内部数据,最终实现由图形表示抽象的类C语言。

2) 模块化。

模块化设计是为了实现系统高内聚、低耦合的特性,同时将联系紧密的内容组合。在软件中,由于每个模块具有顶点位置、长、宽、向后指针等共同的属性,所以定义一个基类-INode类。这个类继承于QGraphicsItem,然后分别使四个模块组(动作组、程序流程组、传感器组、数据操作组)以及普通连线、属性连线继承于该类,实现了高内聚的特性。但是,每个类别除了包含共有的属性之外,同时定义了不同参数以及不同的鼠标点击和移动事件等特征;针对循环模块和切换模块的特殊复杂性,分别为循环模块定义了向循环模块内的指针指向插入到循环模块内部的模块,为切换模块定义了指针数组,分别指向插入到切换模块内部的各个模块,从而需要模块化每个类,实现低耦合特性。

模块化思想设计降低了系统复杂性,利于软件复用。

3) 基于数据流执行。

图形化程序具有二维特性,其执行过程是基于数据流的,即当且仅当某个模块的入口数据全部到达,模块被执行,同时程序的整个程序流程也是基于数据流模式,仅当处于实状态的所有模块数据全部到达,才允许执行编译下载。

本软件系统根据类别设计了四组共30种不同模块,各个组别的描述以及模块类型如表1所示。

表1 模块类型与描述

本软件在设计的过程中确定了程序按固定流程进行,即从开始模块执行,依次执行开始模块之后的模块,遇到循环模块执行循环模块内部的模块,遇到切换模块即执行切换模块各个情况内的模块。

为了方便地将这一逻辑序列的图形模块集合编译成类C代码,本系统采用动态不规则树的方法,实现模块的插入、删除、修改,同时表征各模块在程序流程中的逻辑序列关系。为了实现这个操作,在操作某个模块的时候,就要递归遍历整个不规则树,根据各个模块的数据和参数值来绘制各个模块,并实现模块之间的连接。动态不规则树结构如图4所示。

在程序流程中,设计某些特定模块输出值作为后面模块的输入参数,在表现形式上则为在特定模块的属性参数位置上绘制数字、逻辑输出/输入图标,以连属性线的方式将输出的值连接到输入参数位置。程序根据当前模块的输入参数的来源生成当前模块的函数以及参数。

3.3 流程图绘制

图4 动态不规则树结构

基于本软件设计过程中提出的流程图数据结构为一个不规则的树结构,流程图的绘制过程即为递归遍历绘制的过程。通过递归算法,遍历流程体,而这个流程体即为这个不规则的树,起始点为开始节点,根据指向下一个模块的指针向后遍历,直到向后的指针为空;遇到循环模块,从循环模块内部的第一个模块开始,并得其作为一个新的流程体的开始节点,重新执行一遍绘图程序;遇到切换模块,在切换模块内部的每种情况内的第一个模块开始,将其作为一个流程体的开始节点,重新执行绘图程序。

主链表执行完毕,然后执行程序副链表。副链表模块处于随机位置,其遍历方法和主链表一致。在绘制的过程中,根据模块是否在程序流程上的情况,将其绘制为虚和实两种状态,实状态表示处于流程上,虚状态则处于非流程状态。程序流程中模块的实、虚状态通过透明度来区分。

3.4 图形化语言编译及下载

编译器的本质就是实现一种语言变为另外一种语言,它以某种语言作为输入,通过一定的编译处理,输出目标语言[8]。在本系统中,每个模块的任何一个模式都对应着一个接口函数,根据程序流程图,将之转换为一段类C的代码段,作为编译器的输入。由于模块化教学机器人的控制器选用的是ARM Cortex-M3内核的32位微控制器,其可识别机器码,故本图形化编程系统的编译器选择GNU 的GCC工具链[9](tool-chain),将图形化流程程序转换为二进制代码输出。通过USB转RS232串口[10]实现编译后,目标程序下载到stm32f103控制器内。在实际使用过程中,本系统所采用的下载方式可以方便应用于各种机型和环境,同时具有方便、性价比高、下载速度快等特点。

4 结语

本文针对目前图形化编程软件编程界面不友好、参数设置复杂且难于理解、程序流程复杂等缺点,设计和开发一款面向中小学生的模块化教学机器人图形化编程软件系统。该编程系统从软件界面布局、色彩设计、界面交互设计三个方面体现了编程界面的友好性,并且通过流程图中模块的实虚状态来体现程序流程的清晰程度,以编译下载时间迅速体现实时下载性,从而使本图形化编程系统软件具有实用性。

参考文献

[1] 邱长伍,曹其新.机器人图形化编程与三维仿真环境[J].机器人,2005,27(5):436-441.

[2] 张辉,郑佳.适应儿童用户特征的图形化交互界面设计[J].包装工程,2014(18):17-20.

[3] WHITING P G, PASCOE R S V. A history of data-flow languages [J].IEEE Annals of the History of Computing, 1994, 16(4): 38-59.

[4] DAVIS A L, KELLER R M. Data flow program graphs [J],Computer, 1982, 15(2): 26-39.

[5] Blanchette J, Summerfield M.C++ GUI Programming with Qt4,Second Edition[M].北京:电子工业出版社,2013:150-165.

[6] Summerfield M. Advanced Qt Programming Creating Great Software with C++ and Qt4[M].北京:电子工业出版社,2011:270-308.

[7] 刘昱,王立福.一种面向图形化编程的软件设计方法[J].计算机科学,1997(1):73-76.

[8] Louden K C. Compiler construction principles and practice[M].北京:机械工业出版社,2004:1-8.

[9] 朱兴泉.IDE集成GCC编译器的方法[J].指挥控制与仿真,2007(5) :105-107+120.

[10] 葛明涛,尚怡君.USB转RS232通信接口的设计[J].光盘技术,2009(7):51-52.

现有的教学机器人图形化编程软件虽然减少了编程的复杂性,但是仍然存在界面不友好、参数设置复杂、程序流程表现形式单一、程序编译下载时间长等缺点。针对存在的问题,本文设计了一种面向中小学生的模块化教学机器人图形化编程系统,提出了总体思路和实现方法,依据模块化思想设计各功能模块,构造不规则动态树结构,利用Qt图形视图框架实现编程主界面,并通过arm-none-eabi编译下载。实际应用证明,使用该方案设计实现的软件人机交互界面友好、程序流程清晰、参数设置方便、编译下载迅速。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多