(电力电子与电力传动专业论文)机器人运动控制系统的软件设计.pdf_第1页
(电力电子与电力传动专业论文)机器人运动控制系统的软件设计.pdf_第2页
(电力电子与电力传动专业论文)机器人运动控制系统的软件设计.pdf_第3页
(电力电子与电力传动专业论文)机器人运动控制系统的软件设计.pdf_第4页
(电力电子与电力传动专业论文)机器人运动控制系统的软件设计.pdf_第5页
已阅读5页,还剩74页未读 继续免费阅读

(电力电子与电力传动专业论文)机器人运动控制系统的软件设计.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东南人学硕 j 学位论文 a b s t r a c t a tt h eb a s i so fe x i s t e dh a r d w a r ep l a t f o r m ,t h i sp a p e rd e v e l o p e sac o m p l e t es e to f r o b o tm o t i o nc o n t r o ls y s t e ms o f t w a r e f i r s t l y , t h i sp a p e ri m p r o v e sr e v e r s ek i n e m a t i c s s o l u t i o no fr o b o ta n di n t r o d u c e sp a t hp l a n n i n gi nj o i n ts p a c ea n dr e c t a n g u l a rc o o r d i n a t e s s p a c e a n dt h e n ,s o f t w a r e so fip ca n dd s p , a sw e l la sc o m m u n i c a t i o np r o t o c o lb e t w e e n i p ca n dd s pi sd e s i g n e d t h es o f t w a r eo fd s pa d o p t ss t r u c t u r e dp r o g r a mm e t h o d a n d a c c o r d i n gt ot h ep r i n c i p l eo fh i g hc o h e s i o na n dl o wc o u p l i n g ,r e a s o n a b l em o d u l e sd i v i s i o n i sm a d e d e t a i l e di n t r o d u c t i o n sa r em a d eo nt h ed e s i g na n di m p l e m e n t a t i o no fe v e r y m o d u l e t h es o f t w a r eo fi p ca d o p t st h ei d e ao fo o p f u n c t i o n a lr e q u i r e m e n t so fi p c s o f t w a r ea r ei m p l e m e n t e db yc l a s s e sa n di n t e r a c t i o nb e t w e e nc l a s s e s a tt h es a m et i m e t h ep a p e rd i s c u s s e st h ea p p l i c a t i o n so fd e s i g np a t t e r na n dc + + s t lo ni p cs o f t w a r e a n d o nt h i sb a s i s ,as e to fc o m m u n i c a t i o np r o t o c o lf o rt h es i x - j o i n tr o b o tm o t i o nc o n t r o li s d e s i g n e d b a s e do nt h er e s e a r c ho f r o b o tp o s i t o nl o o pc o n t r o la l g o r i t h m ,t h i sp a p e r i n t r o d u c e st h ed e s i g na n di m p l e m e n t a t i o no fp o s i t o nf u z z yc o n t r o l l e ri nd e t a i l a tl a s t , d e b u g g i n go fs i n g l ej o i n t ,m u l t i p l ej o i n t s ,l i n em o v e ,a r cm o v ea n d f u n c t i o no f t e a c h - p l a y b a c ka r em a d et ot h er o b o tm o t i o nc o n t r o ls y s t e m t h i si s s u eh a ss u c c e s s f u l l ys e tu pas o f t w a r ep l a t f o r mf o rs i x - j o i n tr o b o tm o t i o nc o n t r o l s y s t e m ,a n dp a s st h ed e b u g g i n g ,w h i c hh a sl a i dag o o df o u n d a t i o nf o rt h en e x tp h a s eo f r e s e a r c hw o r k k e y w o r d :r o b o t ,p a t hp l a n n i n g ,o o p , d e s i g np a t t e m ,f u z z yc o n t r o l i l 东南大学学位论文独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得 的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含 其他人已经发表或撰写过的研究成果,也不包含为获得东南大学或其它教育机构 的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均 已在论文中作了明确的说明并表示了谢意。 研究生签名:c 骖毳民同期: 少缪一丫一2 艿 东南大学学位论文使用授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位 论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人 电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文外,允许论 文被查阅和借阅,可以公布( 包括刊登) 论文的全部或部分内容。论文的公布( 包 括刊登) 授权东南大学研究生院办理。 研究生签名:c 莲盟导师签名 第一章绪论 1 1 引言 第一章绪论 工业机器人,是“在工业领域应用的一种可重复编程的( 至少具有三个可重复编程轴) , 具有多种用途的自动机器”( 国际机器人联合会的定义) 。它所处的环境为制造环境,即所谓 的“结构化”环境。由于具有可重复编程的特点,特别适合于多品种、变批量的柔性生产, 它已被广泛应用在工业生产线上。 工业机器人系统包括机械本体和控制器两大部分。目前,机器人的机械本体方面的设计 与制造技术已相当成熟,主要应用开发与研究方向集中在机器人的控制器。控制器是机器人 系统的指挥中枢,负责信息处理和与人交互,它接收来自传感器的信号,对其进行数据处理, 并按照预存信息、机器人的状态及其环境情况等,产生出控制信号去驱动机器人各个关节。 控制器决定了机器人性能的优劣。 开发“具有开放式结构的模块化、标准化机器人控制器”是当前机器人控制器一个重要 发展方向。所谓开放式结构是指控制器没计的各个层次对用户开放,用户可以方便的扩展和 改进其性能。其主要思想是: ( 1 ) 利用基于1 f 封闭式计算机平台的开发系统,如s u n ,s g i 。p c s 有效利用标准计 算机平台的软、硬件资源为控制器扩展创造条件。 ( 2 ) 利用标准的操作系统,如u n i x ,v x w o r k s 和标准的控制语言,如c ,c + + 。采片j 标 准操作系统和控制语言,从而可以改变各种专用机器人语言并存且互不兼容的局面。 ( 3 ) 采用标准总线结构,使得为扩展控制器性能而必须的硬件,如各种传感器,i ,o 板、运动控制板可以很容易的集成到原系统。 ( 4 ) 利用网络通讯,实现资源共享或远程通讯目前,几乎所有的控制器都没有网络 功能,利用网络通讯功能可以提高系统变化的柔性。 开放式控制器包含硬件和软件两个部分,硬件是实现机器人控制功能的实体。软件是实 现操作者对机器人控制的软环境。通过软件把机器人控制器的硬件同操作者联系起来,操作 者通过软件来实现对机器人的操作,完成各种作业任务。 控制器软件系统功能的好坏关系到是否可以最大限度的发挥硬件系统的功能,好的软件 系统甚至可以弥补一些硬件性能方面的不足,提高机器人的作业能力。 1 2 国内外机器人控制软件研究现状 国外关于工业机器人的控制器的研究已经比较成熟了,机器人控制器的研究已经由硬件 过渡到软件,当前机器人控制器软件系统主要采用以下六种结构方式: ( 1 ) 基于任务描述型 把整个系统软件按照任务划分为不同的任务模块,对单独的任务模块进行编程,最后通 过任务优先级和定时的方式来完成对每一个任务的调度。由于是基于明确任务型的,因此, 其专用性比较强。 ( 2 ) 基于部件描述型 按照机器人所实现的功能,把整个控制软件系统划分为几大部件,每个部件完成一项单 东南人学硕l j 学位论文 独的任务。这种部件描述犁软t t :结构提高了软件系统的通削性和升放性,h j 户町以通过具体 的需要添加新的功能郜仆。与此l 叫u 寸,由j :丌发出束的郜f i 乓仃 醍蚀的独立性,w 此,u j 以 在开发新的软件系统时重用这些现成的部件。 ( 3 ) 基丁多代理( a g e n t ) 描述的模型 由t - a g e n t 具有自治性、开放性、反应能力和主动性,因此近年米它铍j 泛地应用在智 能领域。 ( 4 ) 基于端口对象动态重新配置的软件结构 这种方法将面向对象的设计同数字控制系统的端口设计相结合。一个基丁端口的对象被 定义为具有通信功能端口的对象,每一个端口对象的输入输出表示一个状态变量串。对其 他对象而言,隐藏了内部的状态和方法。该结构和框架设置了一个全局状态信息库,所有对 象端口变量的状态以表格的形式存在该库中。 ( 5 ) 面向通讯的机器人软件系统 美国s a n d i a 国家实验室与其他能源实验部分合作,并由d o e 的机器人技术发展( r t d p ) 资助,开发通用智能系统控制器( g i s c ) ,g i s c 采用基于面向通讯的概念,并按照这样一 个概念,将一组能够相互通信的、具有互补能力的和半自主式的子系统合成为一个监督系统。 每一个子系统有定义良好的命令和接口,并且通过各子系统的接口由一个监督控制程序直辖 市系统的整个活动。单独的子系统也具有适时低层次控制功能,可以采用自主方式和异步方 式来实现。 ( 6 ) 分布式控制和管理系统 美国c i m f l e x 技术公司将新技术基础和相关方法用于高性能智能控制器的快速开发过 程,研制了一种分布式智能控制和管理( d i c a m ) 系统。这种通用控制结构结合面向任务 的、带有元控制器的领域控制器,元控制器可以在一个领域内调度活动。本项目包括四个部 分:用丁智能控制的参考模型的形式化;在开发上作空间中应用程序的构建,工作空间中系 统的要求通过选择设计组件来满足,设计组件是通用参考结构组件的专门化和详细化;应用 库中再使用模块的构建;丰富大量的开发工具的创建,融合了从软件工程( 控制定律说明符、 代码发生器、协议、编辑器和调试器) 和知识丁程( 领域模型器、规则管理器、基于知识的 设计助理) 中的大量技术。 前两种软件结构一般用于示教再现型工业机器人。后四种软件结构形式主要应用在机器 人的智能控制器。本课题的研究对象属于示教再现型工业机器人,本课题的任务是在师兄设 计的基于i p c ( 工控机) + d s p 的开放式控制器硬件平台及部分软件的基础上开发出一套 完整的具有界面友好,开放性和通用性强的机器人运动控制系统软件。为了提高软件的重用 性,我们采用了第二种基于部件描述的软件结构。 1 3 课题的研究对象和内容 本课题的研究对象是一个6 关节机器人手臂,由底座主体、大臂、小臂和手腕等几个部 分组成,其结构如图1 1 所示,连杆参数如表1 1 所示。本课题是在2 0 0 2 界师兄研究工作 的基础上进行进一步工作,2 0 0 2 届师兄完成了机器人运动控制卡的设计,以及部分软件设 计,这其中包括:下位机的c p l d 程序、上位机p c i 驱动程序、两关节的运动控制的上下 位机程序、机器人运动学正逆解解析表达式的推导等。本课题延续他的工作,完成的主要内 容有如下几个方面: ( 1 ) 对机器人运动学逆解进行完善。 ( 2 ) 开发一套完整的机器人运动控制系统软件并设计工控机和d s p 运动控制卡的通 讯协议。 2 第一章绪论 ( 2 ) 对机器人位置环控制算法进行研究,主要针对p i d 控制与模糊控制。 ( 3 ) 完成机器人六关1 ,软硬件调试。 本课题设计中使刚的软件开发i :具主要有:t ic c 4 0 ,v i s u a lc + + 6 0 ,m i c r o s o f ts q l s e r v e r 2 0 0 0 。i :控机操作系统采川m i c r o s o f t 公司的w i n d o w s2 0 0 0 。 一i :控机c p u 配置为p e n t u i m 川1 0 g h z ,内存大小为2 5 6 m 。d s p 仿真器使用闻亭公 司的t d s 5 1 0j t a g 仿真器。机器人各关节上面安装有交流伺服电机,电机额定转速为3 0 0 0 转,分,带有光电码盘和制动器,和伺服电机配套的是日本安川i 公司的s g d m a 伺服驱动器。 r o t ( s ) 图1 1 机器人结构图 表1 1 连杆参数 s tf l a n g e 杆号关节变量 qi ( 度) a i ( m m )d i ( m m ) 转角范围 oi ( 度) ( 度) 101 9 0 1 5 0 ( a 1 ) 0 1 7 0 2 e2 ( 一9 0 ) 1 8 0 2 6 0 ( a 2 ) 01 3 5 + 6 0 3 0 3 9 0 6 0 ( a 3 ) 0- 7 0+ 1 9 0 4 o4 9 0 0 - 2 6 0 ( d 4 ) 1 8 0 5 0 5 9 0 00 1 3 5 6 06 1 8 00 - 9 0 ( d 6 ) 3 5 0 注:oi :绕z i 1 从x i 1 到x i 转角,以逆时针为正;c ii :绕x i 从乙1 到z i 转角,以逆时针为正; a i :沿x i 从z i 1 平移到z i 的距离,与) ( i 正方向一致时为正;d i :沿乙1 从1 平移到 x i 的距离,与z i 1 正方向一致时为正。 将图1 1 所示的机器人结构图与实际的机器人相对比,我们发现表1 1 中的连杆参数 a 3 应由原来的6 0 改为一6 0 。 1 4 章节安排 全文共分为五章,内容如下: 3 东南人学颂i :学位论文 第一章 第二章 第二章 第四章 第五章 第八章 绪论。介绍j ,i 业机器人技术和开放式机器人控制器,给出j ,本课题的研 歹寸象f l j 内彳。 机器人理论基础。完善了解析法求解机器人运动学逆解,介纠了机器人大 节空间与直角坐标空间轨迹规划。 软件设计。运用结构化以及面向对象的编稃方法编写了卜位机和上位机软 件。 机器人控制算法。详细介绍了模糊控制算法在本课题中的应刚。 机器人调试。完成机器人单关节、多关节、直线与圆弧运动以及示教再现 功能的调试。 结论与展望。对本课题的设计做出总结,对f 一步的上作做了展望。 4 第二章机器人理论旗础 第二章机器人理论基础 2 1 机器人运动学 机器人的运动学,看重研究机器人各个坐标系之间的运动关系,是对机器人进行运动控 制的理论基础。机器人运动学主要描述了以下两个基本问题: 1 ) 运动学正问题。对一个给定的机器人,已知机器人的几何尺寸和关节空间的值,求 末端执行机构相对于给定直角坐标系的位置和姿态。 2 ) 运动学逆问题。已知机器人几何尺寸和末端执行机构相对于给定直角坐标系的位置 和姿态,确定关节空间变量的值。 在参考文献【1 】f 2 】中,对运动学的正解与逆解的求解进行了详细讨论和计算,我通过仔 细研究后发现在运动学逆解的求解过程中,存在一个小问题。同时文献f 1 】的正解的解析表 达式存在一些笔误,在此将更正后的正解解析表达式列出如下: n 。= c l s 2 3 ( c 4 c 5 c 6 - $ 4 s 6 ) - c 2 3 s 5 c 6 卜s l ( $ 4 c 5 c 6 + c 4 s 6 ) 船,= s 1 【s 2 3 ( c 4 c 5 c 6 - s 4 s 6 ) - c 2 3 s 5 c 6 】+ c l ( s 4 c 5 c 6 + c 4 s 6 ) 刀:= c 2 3 ( c 4 c 5 c 6 - s 4 s 6 ) + $ 2 3 s 5 c 6 0 ,= c l 【s 2 3 ( c 4 c 5 s 6 + s 4 c 6 ) - c 2 3 s 5 s 6 卜s l ( s 4 c 5 s 6 - c 4 c 6 ) 0 ,= s l 【s 2 3 ( c 4 c 5 s 6 + s 4 c 6 ) 一c 2 3 s 5 s 6 】+ c l ( s 4 c 5 s 6 c 4 c 6 ) 0 z = c 2 3 ( c 4 c 5 s 6 + s 4 c 6 ) + s 2 3 s 5 s 6 a ,= c l ( s 2 3 c 4 s 5 + c 2 3 c 5 ) 一s l s 4 s 5 口v = s l ( s 2 3 c 4 s 5 + c 2 3 c 5 ) + c l s 4 s 5 a := c 2 3 c 4 s 5 - $ 2 3 c s 只= d 6 ( c l s 2 3 c 4 s 5 + s l s 4 s 5 一c l c 2 3 c 5 ) 一d 4 c l c 2 3 + a 3 c 1 s 2 3 + a 2 c 】s 2 + a 1 c 1 只2 d 6 ( 一s l s 2 3 c 4 s 5 一c l s 4 s 5 - s 1 c 2 3 c 5 ) 一d 4 s l c 2 3 + a 3 s l s 2 3 + a 2 s 1 s 2 + a l s l = 一d 6 ( c 2 3 c 4 s 5 $ 2 3 c 5 ) + d 4 s 2 3 + a 3 c 2 3 + a 2 c 2 其中:s ,= s i n o , c f = c o s o ji = 0 - - 6 ,c 2 3 = c o s ( 0 2 一岛) ,s 2 3 = s i n ( 0 2 一秒3 ) 文献【1 】在求解逆解过程中,由式( 2 1 ) 、( 2 2 ) 可以导出见,而由式( 2 - 3 ) 、( 2 _ 4 ) 可以导 出皖。 s 2 3 ( c l 以+ s l a j ,) + c 2 3 口j = c 4 s 5 一s 1 c i j + c a y5 $ 4 s 5 一c 2 3 ( c i g x + s 1 y ) + s 2 3 刀2 = s 5 c 6 一c 2 3 ( c 1 0 膏+ 5 1 0 j ,) + s 2 3 0 := $ 5 5 6 5 ( 2 1 ) ( 2 - 2 ) ( 2 - 3 ) ( 2 - 4 ) 东南人学硕i :学位论文 将( 2 2 ) 式除以( 2 1 ) 式,( 2 - 4 ) 式除以( 2 3 ) 式从而得剑: cla 。一s1aj 钆=盯m卸而i再两汀面(2-5s2 3 as 1c c2 3a ) ( ci j+ y ) + z 0 6 一c t a n 专筹羔糕 陋6 , 当s i n0 ,= 0 时,文献【1 】中得出的结论是:良、嚷有无数个解,分别取与前一插补点 相同的关:节角度。 在用程序实现运动学逆解过程中,我们用正解来验证逆解求出来的结果是否正确时发 现:当s i n9 ,= 0 时文献 1 l q b 的结论是错误的。我们通过仔细观察和认真研究机器人的正 解表达式时发现: 由于侠的范围为1 3 5 一+ 1 3 5 ,因此当且仅当0 5 = 0 时,s i no ,= 0 。 1 、当s i no s = 0 ,c o s0 s = 1 ,c 2 3 0 时,? :、0 :分别为: 以:= c 2 3 ( c 4 c 6 一$ 4 s 6 ) = c ”c o s ( a , + 8 6 ) 0 z = c 2 3 ( c 4 s 6 + s 4 c 6 ) = c 2 3 s i n ( 0 4 + 优) 由式( 2 - 7 ) 和( 2 8 ) 可得: c 2 3 0 时,0 4 + 8 6 = a r c t a n 2 ( 0 :,l :) c 2 3 0 时,吼+ 眈= a r c t a n 2 ( 一0 z :, - - v i :) 2 、s i n0 5 = 0 ,c o s 9 ,= 1 ,c 2 3 = 0 时,i ,、 y 分别为: 1 。= c l s 2 3c o s ( 0 4 + 见) 一s ls i n ( 0 4 + 眈) 刀) j = c 1 5 2 3c o s ( 0 4 + 眈) 一s ls i n ( 0 4 + 优) 由式( 2 1 1 ) 和( 2 1 2 ) 可得 s 2 3 = 1 时,幺+ 吼= a r c t a n 2 ( n y ,z ,) 一只 s 2 3 = 一1 时,幺+ 皖= q a r c t a n 2 ( 一刀y ,一刀,) ( 2 7 ) ( 2 8 ) ( 2 9 ) ( 2 - 1 0 ) ( 2 - 1 1 ) ( 2 1 2 ) ( 2 1 3 ) ( 2 - 1 4 ) 综上所述,当s i n0 ,= 0 时,幺与哦有无穷解,但它们之间存在上述约束关系。在求 解时,幺或皖取与前一插补点相同的关:爷角度,另一个关节角度可根据上面给出约束关系 求出。 6 第_ 二章机器人理论皋础 2 2 机器人运动轨迹规划 所谓轨迹,是指操作臂在运动过程中的位移、速度和加速度对时间t 的运动规律。机器 人运动轨迹规划,就是根据机器人操作臂要完成的一段作业来设计机器人预期的运动轨迹。 通常将操作臂的运动看作是工具坐标系相对于:作坐标系的运动。机器人作业分成两类:一 类为点到点的运动( p t p ) ,只需要规定操作臂在t 作坐标系的起始位置和目标位置。一类 为连续路径运动( c p ) 不仅要规定操作臂的起始点和终止点,而且要指明两点之间的若干点 ( 路径点) ,必须沿特定路径运动。轨迹规划既可在关符空间也可在直角坐标空间中进行,一 般情况下,关节空间的轨迹规划用于实现点到点运动,而直角坐标空间的轨迹规划用于实现 连续路径运动。下面我们将分别介绍关节空间和直角坐标空间的轨迹规划。 2 2 1 关节空间轨迹规划 一般地,为了控制机器人的关节空间运动量,并使关节运动轨迹平滑,关节运动平衡, 需要对机器人的关节运动进行规划,主要内容包括关节运动轨迹的选择和关节运动位置的插 值。所谓关节位置的插值,是指对于给定关节空间的起始位置和目标位置,通过插值计算中 间时刻的关节位置。 常见的关节空间的位置插补算法有:3 次多项式值、过路径点的三次多项式插值、高阶 多项式插值、b 样条插值、用抛物线过渡的线性插值、过路径点的用抛物线过渡的线性插值 等。 本课题在实现点到点运动时,采用的关节空间位置插补算法为用抛物线过渡的线性插 值,下面详细介绍用抛物线过渡的线性插值。 如图2 - 1 所示,用抛物线过渡的线性插值,其中间线段利用直线插值,两端利用抛物线 过渡。一般地,关节加速度9 为已知的,需要求取的是抛物线与直线过渡点位置。 图2 1 抛物线过渡的线性插值 图2 1 中,由直线段可以求出关节速度为 免= 等 , 一, ( 2 1 5 ) 其中,厶是时间中间点,厶= ( t o + t d 2 ;o h 是关节初始位置和目标位置的中间点j 7 东南人学帧i j 学位论文 皖= ( 酿+ 秒,) 2 :,。是抛物线向直线过渡的时刻。 而根据抛物线的方程,厶时刻的关节何置可以川式( 2 1 6 ) 表示。 皖= 岛+ 抄 ( 2 1 6 ) 由式( 2 - 1 6 ) ,可以得到,6 时刻的关筲速度,见式( 2 1 7 ) 。 皖= 研6 ( 2 1 7 ) 将式( 2 1 6 ) 和式( 2 1 7 ) 代入式( 2 1 5 ) 中,经整理得到,6 的一兀二次方程,见式( 2 1 8 ) a 其解见式( 2 1 9 ) 铆;一8 t ,6 + ( 口r 一岛) = 0 ( 2 - 1 8 ) 仁一t s 一堕i 二终生二型( 2 - 1 9 )。 22 口 如图2 1 所示,利朋抛物线过渡的两端是对称的,即起始段的过渡时刻为t 6 ,结束段的 过渡时刻为r ,一,6 。当口= 4 ( 够一吼) ,;时,6 = ,2 时,无直线段。加速度越大,抛物 线过渡段越短。另外,为了保证有直线段,加速度不应该太小,应保证口4 ( 口,一岛) f ;。 路径轨迹见式( 2 2 0 ) 。 r 吼+ 圭旃2 ,晒 乙 i 一 目( ,) = _ 见+ 8 t 6 u 一吒) ,乙,t i 一,6 ( 2 2 0 ) l 巳一l 痧( t i 一,) 2 ,一乙, m a x p u l s e ) 止向溢出 为了确保该方法是创建这个类型的对象的唯一途径,需要将构造函数定义为保护 ( p r o t e c t e d ) 或私有( p r i v a t e ) 类型。 在本课题中,双口r a m 类c d p r a m 会在很多地方使用,但他们所使用的数据应当一致。 因此,应当使用s i n g l e t o n 模式,确保上位机程序中使用的是同一个c d p r a m 对象。这样不 仅能保证他们的数据一致性,而且节省了内存空间,因为第个对象都要占用一定的内存空间; 同时义节约了时间,因为构造每个对象都需要花费一定的c p u 时间。s i n g l e t o n 模式是对全 局变量的一种改进,它避免了那些存储唯一实例的全局变量造成的名字空间污染。代码示例 2 6 第二三章软件设计 如下: c d p r a m p u b l i c : s t a t i cc d p r a m + i n s t a n c e ( ) ; p r i v a t e : c d p r a m 0 ; s t a t i cc d p r a m 。m _ p d p r a m ; ) : c d p r a m + c d p r a m :l n s t a n c e 0 i f ( ! m _ p d p r a m ) m _ p d p r a m = n e wc d p r a m ; ) r e t u r nm _ p d p r a m ; ) 在需要使用类c d p r a m 对象时,通过i n s t a n c e ( ) 方法获得双口f 认m 类c d p r a m 的唯一 实例。 3 5 4 2c c o m m a n d 类 操作人员通过上位机提供的人机界面向下位机发出控制命令,一种直观的方法是将上位 机命令散布在各个界面类中,将上位机命令以成员函数的形式封装于各个界面类中。如果上 位机命令较少,采用这种方法是完全可行的;而当上位机命令较多,并且可能发生变化时, 程序的修改和维护将变得异常困难。 上位机命令类c c o m m a n d 将上位机命令即将上位机到下位机的协议内容封装起来,当 上位机到下位机的协议内容发生变化时,不需要改变c c o m m a n d 的接1 3 ,而只需改变 c c o m m a n d 类的实现,使得变化限制在c c o m m a n d 类中,从而有效的封装了变化,提高 了程序的易修改性和可维护性。 3 5 4 3c m o t i o n d a t a 类 c m o t i o n d a t a 类的主要功能是接收运动过程数据,它对上、下位机之间的同步策略以 及数据交换方法进行封装,当我们需要改变上、下位机通讯的同步策略或数据交换方法时, 只需改变c m o t i o n d a t a 类的实现,而程序的其他部分不会受到影响。 c m o t i o n d a t a 类是用于接收运动过程数据,在机器人运动过程中,下位机将采集到的 数据放入双1 3r a m 中,为了让上位机在接收数据的同时不影响对用户操作的响应, c m o t i o n d a t a 类可以用两种方法来接收数据:定时接收法和多线程接收法。 ( 1 ) 定时接收法 定时接收法是指在上位机程序中设定一个软件定时器,每隔一定的时间间隔发出一个 w m j 。i m e r 消息,在处理w m t i m e r 消息的过程中读一次双口r a m ,这种方式实现起 来比较简单。但是,由于w m t i m e r 消息的优先级较低,只有当消息队列中没有其他消息 东南人学坝l j 学位论文 时,系统才响应w m _ t i m e r 消息,也就是说实际响应的时间有时会远大r 定时时l 硼。在机 器入选动过程l | ,d s p 每隔。段u 寸f u j 向从i - ir a m - ,:与组数据,当数掂量较人h 寸,上位机 如果不能及时地将数据从双口r a m 中读出,就会造成数据丢失。定时接收法的优点是它的 程序逻辑比较简单,实现起来比较容易。因而,在数据量比较少的情况下我们用定时接收法。 ( 2 ) 多线程接收法 多线程接收法采用w i n 3 2 应用程序的多线程技术,专门开辟一个线程用丁二接收运动过 程数据。该线程在机器人停止运动时处于挂起状态,基本上不占用系统资源。一旦发出机器 人运动命令,马上启动该线程直剑运动结束。在机器人运动过程中,该线程循环检测双口 r a m 中的数据标志,根据数据标志来读取双口r a m 中的数据,当双口r a m 中无数据时, 让该线程睡眠,从而让主线程响应用户操作。 在m f c 中,线程分为两种类型:用户界面( u 1 ) 线程( u s e ri n t e r f a c et h r e a d s ) 和工 作者线程( w o r k e rt h r e a d s ) 。两者的不同之处在于u i 线程具有消息循环而工作者线程没 有。u i 线程可以创建窗口并处理发送给这些窗口的消息;工作者线程执行后台任务,因其 不接收用户的直接输入,所以不需要窗口和消息循环。 工作者线程非常适合于执行那些可以从应用程序中分离出来的独立任务以及在后台中 执行的任务。上位机接收运动过程数据是一个相对独立的任务,也不需要窗口和消息循环, 因此,我们创建一个工作者线程用于接收运动过程数据。我们采用下面这个m f c 提供的函 数创建一个上作者线程: c w i n t h r e a d + a f x b e g i n t h r e a d ( a f x _ t h r e a d p r o cp f n t h r e a d p r o c , l p v o i dp p a r a m , i n tn pr i or i t y = t h r e a d _ p r i o r i t 、,- n o r m a l , u n tn s t a c k s i z e = 0 , d w o r d d w c r e a t e f l a g s = 0 , l p s e c u r i 、j 汛r i b u t e si p s e c u r i t y a t t r s = n u l l ) ; 返同值: 一个指向新线程的线程对象。 p f n t h r e a d p r o c :线程的入口函数,声明一定要如下: u i n tm y t h r e a d f u n c t i o n ( l p v o i dp p a r a m ) ; p p a r a m : 传递给线程的参数,注意它的类型为:l p v o i d ,所以我们可以传递一个结 构体给线程。 n p r i o r i t y :线程的优先级,一般设置为0 ,让它和主线程具有相同的优先级。 n s t a c k s i z e :指定新创建的线程的栈的大小。如果为0 ,新创建的线程具有和主线程一 样的大小的栈。 d w c r e a t e f l a g s :指定创建线程以后的状态, 有两个状态:一是 c r e a t e ,线程创建以后,会处于挂起状态,真到调用_suspended r e s u m e t h r e a d ; 二是0 ,创建线程后就开始运行。 i p s e c u r i t y a t t r s ;指向一个s e c u r i t ya 1 _ r r i b u t e s 的结构体,用它来标识新创建 线程的安全性。如果为n u l l ,那么新创建的线程就具有和主线程一样的安全性。 线程的挂起操作采用m f c 类c w i n t h r e a d 的成员函数s u s p e n d t h r e a d o 实现。 当数据量较大时,相对于定时接收法,采用多线程接收法的数据丢失率低。多线程接收 法的缺点是程序逻辑较为复杂,在使用多线程接收法时,还要注意线程间的同步问题。当上、 下位机间数据传递量较大时,我们采用多线程接收法。 第三章软件没计 3 5 5 数据库访问模块 在机器人运动过程中,下位机会采集大量的数据送入上位机,上位机首先将这些数据存 入文件中,运动结束后,将保存在文件中的数据写入数据库。数据库访问模块的功能主要有 两个:一是将保存在文件中的运动过程数据写入数据库,二是提取数据库中数据用于进一步 分析。 3 5 5 1 数据库访问技术的选择 本课题使用的数据库是目前使用比较广泛的m i c r o s o f ts q ls e r v e r 2 0 0 0 。在v c 6 0 中 常用的数据库访问技术有:o d b c 、d a o 、o l ed b 、a d o 。 o d b c ( o p e nd a t a b a s ec o n n e c t i v i t y ) ,开放式数据库互连。它提供了一个通用的编 程接口,允许程序与多种不同的数据库连接。它为o r a c l e ,s q ls e r v e r ,m se x c e l 等提供 了驱动程序,使得用户可以使用s q l 语句对数据库进行直接的底层功能操作。o d b c 的特 点是功能强大,提供了异步操作、事务处理等高级功能,但相应的编程比较复杂、工作量大。 与此同时,o d b c 只能用于访问关系数据库,很难访问对象数据库和非关系数据库、顺序 文件等系统。 d a o ( d a t aa c c e s so b j e c t ) ,数据访问对象。d a o 就是一组基于m i c r o s o f ta c c e s s j e t 数据库引擎的c o m 自动化接口。如果系统使用a c c e s s 数据库,则用d a o 编程比较方便。 o l ed b ,对象链接与嵌入数据库。o l ed b 在两个方面对o d b c 进行了扩展。首先, o l ed b 提供了一个数据库编程的c o m 接口;其次,o l ed b 提供了一个可用于关系型和 非关系型数据源的接口。o l ed b 的两个基本结构是o l ed b 提供程序( p r o v i d e r ) 和o l e d b 用户程序( c o n s u m e r ) 。直接使用o l ed b 来设计数据库应用程序需要大量的代码。 a d o ( a c t i v e xd a t ao b j e c t ) ,a c t i v e x 数据对象。a d o 技术是基于o l ed b 的访问 接口,它继承了o l ed b 技术的优点,并且,a d o 对o l ed b 的接口作了封装,定义了 a d o 对象,使程序开发得到简化,a d o 技术属于数据库访问的高层接口。 综上所述,o d b c 与o l ed b 功能强大,但使用起来比较复杂,程序编码量大。d a o 只能用于访问m i c r o s o f ta c c e s s m e t 数据库,而a d o 基于o l ed b 技术而且使用起来比较 简单。因此,我们使用a d o 作为数据库访问技术。 3 5 5 2 在v c 中使用a d o 要在v c 中使用a d o ,在使用前必须作一些初始化的工作: ( 1 ) c o m 库的初始化 由于a d o 是基于c o m 技术的,我们可以使用a f x o l e l n i t 0 来初始化c o m 库,这项工 作通常在c w i n a p p :l n i t l n s t a n c e 0 的重载函数中完成,代码示例如下: b o o lc r o b o t a p p :l n i t l n s t a n c e ( ) c u r s o r l o c a t i o n = a d u s e c l i e n t ; ,游标类型 ,设置连接字符串,必须是b s t r 型或- b s r _ t 类型 b s t rts t r c o n n e c t = ”p r o v i d e r = s q l o l e d b 1 :p e r s i s ts e c u r i t yi n f o = f a l s e ;” “u s e ri d = s a ;i n i t i a lc a t a l o g = r o b o t m o t i o n d a t a ;d a t as o u r c e = 1 7 2 2 1 5 1 9 ”: m _ p c o n n e c u o n 一 o p e n ( s t r c o n n e c t 。,a d m o d e u n k n o w n ) ;打开数据库 r e t u mt r u e ; ) | l 捕捉异糠 c a t c h ( _ c o r n _ e r r o re ) ,显示错误信息 a f x m e s s a g e b o x ( e d e s c n p t i o n 0 ) ; r e t u r nf a l s e : 3 l 东南人学颀 j 学位论文 ) 其中m _ p c o n n e c t i o n 为_ c o n n e c t i o n p t r 接u 时象。我们征析构函数 j 火| = d j 数据库连接。 为了霄约内存空间,更为了防i 卜频繁进行数据库的连接与关闭操作,我们将s i n g l e t o n 模式应用于类f a c a d e a d o ,在整个应用程序中只实例化一次f a c a d e a d o 类即整个应用程 序中只存在唯一一个f a c a d e a d o 的对象。 3 5 6 曲线显示模块 曲线显示模块顾名思义主要功能是用于显示曲线。曲线显示有静态显示和动态显示之 分。静态显示的曲线是一个静止图形;而动态显示的曲线是一个变化图形,能够实现对变化 数据的实时显示。曲线显示模块既要进行静态曲线显示也要进行动态曲线的显示。动态曲线 用于显示实时显示运动过程中位置与转速的变化;而静态曲线可用于观察整个运动过程机器 人位置与转速的变化趋势。曲线显示模块是由类c p i o t 来实现的,它继承自m f c 的窗口类 c w n d ,同时使用其他的一些m f c 类来实现辅助功能。 图3 1 4c p i o t 类的界面 c p i o t 类的界面如图3 1 4 所示。在界面中,有一个垂直滚动条和一个水平滚动条,利用 它们来实现曲线的垂直和水平滚动,左上角和右下角的s p i n 控件分别用于对y 轴和x 轴进 行缩放。动态的弹出式菜单能实现曲线的动态放大和平移以便于数据的观察与分析。 3 5 6 1 曲线的动态显示 为了实时观察机器人各关节的运动情况,在机器人运动过程中,我们将运动过程中采集 到的位置与转速信息在上位机中以曲线的形式显示出来,由于上位机不断地接收来自下位机 的数据,所以曲线不可能在有限的显示屏中一次性地全部显示出来,曲线只能以动态的形式 通过显示屏幕,而且每个时刻可以看到的都应该是最近刚接收的n 个数据( 假设一屏能显 示n 个数据点) 所画出来的曲线,为了实现“在有限的显示屏中动态显示曲线”这一功能, 我们将从下位机接收到的数据保存起来,每隔一段时间进行一次曲线刷新,我们将最新接收 到的n 个数据取出来绘制在屏幕上,从而实现曲线的动态显示。 3 5 6 2 位图双缓冲技术的使用 我们的绘图过程大多放在o n p a i n t 函数中,当窗口由于某种原因需要重绘时,首先用 3 2 第j 幸软件设计 背景色将显示区清除,然后才调用o n p a i n t ,而背景色往往与绘图内容反差很大,这样在短 时问内背景色与显示图形的交替出现即出现屏幕闪烁现象,尤其是绘制点数较多时,这种现 象更加严重。为了解决这个问题,我们采用“双缓冲”技术,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论