移动机器人控制软件的设计与实现Word文档格式.docx
- 文档编号:16141205
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:19
- 大小:524.87KB
移动机器人控制软件的设计与实现Word文档格式.docx
《移动机器人控制软件的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《移动机器人控制软件的设计与实现Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
尤其是对一个新手而言。
一个老外说过,硬件是现成的,软件算法杂志里有的是,很多可以在网上当,但即使是一个博士生也要花费很长的时间完成一个实际可用的移动机器人。
为什么?
因为机器人应用的困难在应用软件的设计上。
前面那个老外也说过,现在什么都可以在网上当,唯独应用程序不能。
有过自己写移动机器人程序的人可能会理解这段话,当然也仅仅是可能,因为不排除有很多机器人大拿一上来就可以写出很棒的移动机器人软件。
移动机器人的控制软件开发是和硬件紧密相关的,甚至和机器人的体系结构也密切相关,同样是移动机器人,有的是用PC控制的,有的是用多个嵌入式系统实现的,有的则是多机器人协同工作的,操作系统有人会用DOS,有人会用Windows,有人会用Linux,有人会用EmbededOperationSystem。
硬件平台有的用x86,有的用ARM芯片,有的会用DSP,通讯里面会有串口,TCP/IP网络,无线以太网,红外,蓝牙等,甚至驱动机构也不一样,有的是用腿,有的是用轮子,即使是轮子也有好多种情况,两个轮子,三个轮子(包括两个独立驱动轮一个随动轮,或者两个同步驱动轮一个转向轮等),四个轮子,五个轮子等等,有的是集中控制的体系结构,有的是分布式控制的体系结构。
应用也不同,有智能行走的,有人远程控制的,也有人机结合的,诸如此类,这样看来,移动机器人应用程序的开发的确是很复杂,“无法从网上直接当了”,看来只能自己从头开始编写代码了这一条路好走了。
的确如此,但自己从头编程序也存在一个问题,那就是如何着手。
我们写文章希望有模板,同样写机器人应用程序也希望能有一个模板,按照模板的约定,把自己编写的模块嵌进去,就可以得到一个应用程序了。
可惜程序设计里面的模板无法移植到机器人程序设计领域,但是我们可以采用一个框架,在这个框架的规范下,我们写的模块或者利用他人写的模块进行组合就可以得到一个合理的应用程序。
框架的概念很广,可大可小,大的可以做到像J2EE或者CORBA那么复杂,做企业级开发,小的则只能在一个CPU上构件一个简单的应用程序。
我在开发移动机器人的时候设计了一种简单框架,专门用来给采用PC对机器人进行集中控制的情况下编写应用程序。
在我的博士论文(在个人主页里可以找到)里则设计了一种较复杂的框架,可以采用P2P技术实现多机器人或多系统的软件应用开发,而我现在正打算设计一种更通用,更复杂的,可以实现多平台,多CPU,多系统环境下的移动机器人应用快速开发,包括框架和中间件技术。
这里只是先介绍一下目前正在使用的那个PC用的软件框架。
值的一提的是,国内外已经有很多人在做或者已经做过这方面的工作了,我写在这里的目的只是为了和大家交流。
由于最近时间很紧张,每次只能写一小点,所以打算分数次把这部分内容介绍完,主要包括框架的模型,模块的接口定义,模块之间的通讯,动态模块的加载和配置,以及采用该框架实现的移动机器人应用举例,并提供相应的框架的源代码。
1、引言
我们初次编写机器人软件,通常有种“老虎啃天,无处下嘴”的感觉。
编写移动机器人程序和普通程序稍有不同,因为通常意义上的移动机器人程序都是多任务,实时的,甚至是分布式的。
我们可以很容易的在计算机终端上显示出“Hello,world”,也可以毫不费力的在移动机器人的液晶屏上显示出“Hello,World”,但是一边让机器人行走,一边要避障,同时还要处理通讯、定位等工作就决不是那么容易了。
这个时候我们需要的就是框架了。
2、面向移动机器人的应用程序框架
2.1、什么是框架?
我的理解中,软件里框架的概念很有点像计算机硬件里面的主板,它提供了系统运行所需要的电源,通讯等手段,并且所有符合总线协议的卡都可以往主板上插,从而实现所需要的功能和性能。
例如把数据采集卡查到主板上,计算机就具有了数据采集的能力;
把视频卡插到主板上,计算机就具有了压缩视频的功能,此外还有显卡,声卡,网卡,电视卡,运动控制卡,传真卡等等。
软件里的框架也是如此,它有点类似中间件的概念,提供了相当程度的代码支持,同时也定义了一些规范,这些规范包括通讯协议,模块的接口定义等。
用户可以自己编写模块,也可以使用别人已经写好的模块,通过框架的运行,带动模块的运行,从而实现一些预期的功能。
由此可见,框架必定是一种集成工具,其自身是一个完整的应用程序,而且可以通过模块来扩展应用系统的功能和改进其性能;
或者说,框架提供了应用程序的入口和出口,并能够根据配置,加载相关的模块实现功能的扩展和性能的提高。
其中,功能的扩展通过编写新的模块实现;
性能提高则通过对原有模块进行升级实现。
框架和体系结构之间存在着微妙的关系,一方面可以说框架和体系结构无关,例如同样用MFC,可以开发出各种体系结构的软件系统来;
另一方面,框架和体系结构又结合的那么的紧密,例如J2EE是一种框架,而看到J2EE就令人想起了分布式的体系结构。
CORBA亦是如此。
主板和体系结构之间的关系就更令人弄不清了。
因此我认为执着的追求框架和体系结构的区别是没有意义的,关键在于如何设计框架,使它更好用,效率更高。
2.2、框架的设计
框架设计的好坏对系统性能的影响当然非常重要,应当仔细考虑,全面分析,更重要的是能够在实践的过程中不断的进行改进。
目前我设计的这个软件框架比较简单,适合比较简单的应用,当然可以在此基础上进行进一步的完善,使之能够适应更复杂应用的开发。
1、R.A.Brooks的包容体系结构和分层递阶体系结构
首先让我们来看看目前移动机器人所主要采用的体系结构。
移动机器人目前所采用控制软件的体系结构可以分为三类:
一类是分层递阶式结构,一类是包容体系结构,最后一类是上述两种结构的综合。
在分层递阶体系结构中,它把各种模块安排成若干个层次,使不同层次的模块具有不同的工作性能和操作方式,一般说来,位于高层的模块负责复杂的判断、推理等操作,其智能化程度较高;
而较低的层次用于与外界交互,具有较强的实时响应能力,因此在底层往往是一些视觉,驱动,传感,伺服等工作模块。
其中具有代表性的是Saridis的三级模型,即执行级,协调级和组织管理级等。
分层递接体系结构主要特点是层次向上,智能增加,精度降低,实时性降低;
层次向下则相反。
分层递接结构能够较好的解决智能和控制精度的关系,因此获得了广泛的应用,但也有一些明显的缺陷,最主要的是它的反应性极差,因为处理问题的能力主要由高层解决,需要自下而上然后自上而下的来回过程,从而失去了高度智能性的实时反应能力。
为了解决这个问题,R.A.Brooks提出了包容体系结构。
包容体系结构结构图如下图所示:
与分层递接结构相比,包容体系结构是一种水平分片的结构,它的主要特点是按照“任务和行为”进行分类,把系统分解为若干个子系统,每个子系统不是技术功能模块,而是能够独立产生动作行为的系统;
每个子系统都能够直接接收传感器信号,也可以直接产生行为动作;
每个子系统平行工作,由一个协调机制负责集成,从而产生总体的行为。
该体系结构设计目标为多任务,鲁棒性,可扩展性以及较强的可判断性。
其基本设计思想来源于Brooks对智能的理解,即他认为能产生复杂行为的机器内部其控制系统不一定是复杂的,复杂的行为仅仅是复杂环境的反射;
一个自主式智能系统必须具有永久的生存能力等。
Brooks采用包容式体系结构,构造了多种机器人,这些机器人能够实现其设计目标,表现出较强的智能行为,因此包容式体系结构在智能机器人领域产生了极大的影响,对传统人工智能(基于符号和推理)产生了强烈的冲击。
但包容体系结构也存在不足之处,那就是功能层次之间缺乏协调和组织,尽管在局部行为上表现出灵活的反应能力和鲁棒性,但对长远目标和全局性的目标跟踪缺乏主动性;
而且限制了对知识的运用,包括人的知识。
因此,最近许多研究人员提出了一些新的体系结构,基本上是在包容体系结构的基础上集成了传统人工智能的方法,或者以分层递接为骨架,在每一层次上引入了类似包容体系结构的布置,提高每一层次的响应能力。
我把此类体系结构归于第三类。
分析分层递接结构与包容体系结构,不难发现,两者都是基于模块的基础之上构建的,不同之处在于分层递接结构中的模块是功能模块,而包容体系结构中的模块是行为模块。
但即使是行为模块也是由一些功能模块组合实现的,因此模块实际上是所有体系结构的基础,不同之处就在于如何组织这些模块,使其能够发挥其在整个智能机器人体系中的作用。
本项目在借鉴包容体系结构的基础上,结合多智能体技术,提出了一种基于模块协同的体系结构。
在此体系结构中,模块既可以是功能模块,也可以是行为模块,对模块的唯一要求是其必须能够主动的对输入的信号进行处理,并产生响应(类似智能体,即Agent)。
体系结构如下图所示
2、移动机器人控制软件框架的设计
框架的设计一方面考虑了对体系结构的支持,另一方面又打算尽量与体系结构保持一定的独立性,所以对框架做了高度的抽象,整体框架被抽象成了三个部分,即Platform平台、Module模块和Wire通讯连线等。
整个框架的结构(部分)如下图所示。
其中Platform类负责模块的加载,对模块的配置以及模块之间通讯的建立,Platform对象是整个应用程序的入口(有Main函数)和出口,并不考虑体系结构和机器人功能的实现,这些都是模块和配置实现的。
Module定义了模块应该遵守的接口,和模块要实现的基本功能。
模块和Applet类似,有初始化init,开始start,停止Stop和退出Destroy等行为,该接口没有定义模块应该实现哪些功能,这些是模块的具体实现应该考虑的,模块里有两个很重要的变量,分别是该模块的ModuleDoc和端口Ports。
ModuleDoc描述了该模块的具体配置信息,例如和硬件通讯时使用的串口名称,或者是网络地址,IP地址,也可能是其他需要传递给具体模块的参数,其中最重要的是模块的名称,用来在系统中唯一的标识模块用的,不能重复;
其次是该模块的实现类,供Platform在加载该模块的时候实例化所需。
端口Port是模块必须具备的,一个模块至少有一个端口,端口分为输入端口和输出端口,是模块之间通讯的唯一途径。
端口也是一个接口,符合该接口的任意实现类都可以作为端口来供模块使用,目前端口是硬编码在模块的代码中的,因此一旦模块编码完毕,使用何种端口也就确定不可更改了。
在后续研究中可以考虑把端口与模块的实现分离开来,在系统运行时动态组合,实现更灵活的配置。
下图是模块的一个典型配置。
模块实现的基本操作是根据输入的数据进行处理后,从输出端口把数据输送出去,当然数据处理的过程可能很复杂,例如可能是图像识别,也可能是障碍物检测,有些还需要进行网络数据库等操作等;
有些模块没有输入端口,例如一些人机接口模块(操作面板);
也有些模块没有输出端口,例如图形化显示模块等。
整个软件的功能是由模块决定的,确切的说是由模块之间的协作实现的,模块之间的协作,则是利用端口之间的通讯实现的。
在本系统中,端口之间通过虚拟的“线”连接起来的,在系统中用WireConfig来表示,线从输出端口引出,可以连接至多个不同的输入端口;
不同线之间可能会存在着交点,根据不同的方式,交点有不同的类型,如下图所示。
在输入端口的交点称之为抑制连接,即抑制线输入来的信号可以取代原线上的信号输送到输入端口里去,在输出端口的交点称之为禁止连接,即如果禁止信号线上有数据,则会禁止原信号线上的信号输出。
这些概念均取自Brooks的包容体系结构。
在Brooks的包容体系结构中,模块之间的通讯是异步的,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移动 机器人 控制 软件 设计 实现