【转】移动机器人控制软件的设计与实现

  移动机器人的应用现在非常多,做一个移动机器人似乎也很容易,车体自己可以加工,也可以去买现成的;避障可以用超声阵列;导航可以用激光测距LMS;定位可以用电子地图加LMS加陀螺仪;驱动可以用各种电机及配套驱动器或者自己做;通讯可以去买现成的无线通讯模块,可以是数字的,也有模拟的;大范围定位可以用GPS模块,也是现成的;至于什么红外,蓝牙,甚至计算机视觉都可以去市场上买,但是(然而)为什么做一个移动
摘要由CSDN通过智能技术生成

  移动机器人的应用现在非常多,做一个移动机器人似乎也很容易,车体自己可以加工,也可以去买现成的;避障可以用超声阵列;导航可以用激光测距LMS;定位可以用电子地图加LMS加陀螺仪;驱动可以用各种电机及配套驱动器或者自己做;通讯可以去买现成的无线通讯模块,可以是数字的,也有模拟的;大范围定位可以用GPS模块,也是现成的;至于什么红外,蓝牙,甚至计算机视觉都可以去市场上买,但是(然而)为什么做一个移动机器人还是这么难呢?尤其是对一个新手而言。一个老外说过,硬件是现成的,软件算法杂志里有的是,很多可以在网上当,但即使是一个博士生也要花费很长的时间完成一个实际可用的移动机器人。为什么?因为机器人应用的困难在应用软件的设计上。前面那个老外也说过,现在什么都可以在网上当,唯独应用程序不能。有过自己写移动机器人程序的人可能会理解这段话,当然也仅仅是可能,因为不排除有很多机器人大拿一上来就可以写出很棒的移动机器人软件。

移动机器人的控制软件开发是和硬件紧密相关的,甚至和机器人的体系结构也密切相关,同样是移动机器人,有的是用PC控制的,有的是用多个嵌入式系统实现的,有的则是多机器人协同工作的,操作系统有人会用DOS,有人会用Windows,有人会用Linux,有人会用Embeded Operation System。硬件平台有的用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提出了包容体系结构。

包容体系结构结构图如下图所示:

<

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值