APP下载

基于802.15.4协议的多机器人无线通信系统的设计

2010-05-05臧申俊

微型电脑应用 2010年6期
关键词:网络层物理层字节

臧申俊

0 引言

RoboNet的软件系统采用的系统架构如图1所示:

图1 系统架构图

RoboNet系统硬件采用了Chipcon公司(现已被TI公司收购)的CC2430[1]方案。RoboNet的使用者(机器人系统[2][3])通过串口向交互层发送命令,交互层解析命令如果是要发送数据则传给网络层,如果是设置或查询系统参数,则CC2430单片机直接做相应处理。网络层的任务是为交互层传来的数据选择合适的路由并加上网络头,然后将数据包传给介质访问控制层(Medium Access Control)MAC层。在MAC层,系统按照地址格式添加头部,并调用物理层进行发送。物理层直接调用硬件的射频模块,把数据调制成无线电波发送出去。在另一个方向,系统接收到的数据沿着相反的方向,从物理层到MAC层再到网络层,最后到交互层传给使用者机器人系统。

1 物理层和MAC层

1.1 RoboNet物理层设计

IEEE802.15.4标准定义的物理层帧格式[4]如图2所示。物理帧第一个字段是4个字节的前导码,用来进行帧同步。帧起始分隔符(Start-of-Frame Delimiter,SFD)字段长度为一个字节,其值固定为0xA7,标识一个物理帧的开始。帧长度(frame length)由一个字节的低7位表示,其值就是物理帧负载的长度,因此物理帧负载的长度不能超过127个字节。物理帧的负载长度可变,称之为物理服务数据单元(PHY Service Data Unit,PSDU),用来承载MAC帧(5个字节的确认帧和8到127字节变长的其它帧)。

图2 802.15.4协议物理层帧格式

物理层的主体是有限状态机phy_FSM(),如图3所示。RoboNet系统初始化物理层状态为空闭状态IDLE。当MAC层想要发送数据并且物理层状态为IDLE时,上层需要先把物理层相关参数设置好,然后把物理层状态切换为TXDATA。如果物理层的射频协处理器已经收到数据,并开始发送数据,则把物理层切换到TXWAIT状态。否则把物理层状态切换到IDLE,结束此次发送

图3 物理层状态机

1.2 MAC层设计

对于RoboNet应用的多机器人系统来说,由于机器人节点之间是互相平等的,关联机制和信标机制起不到有效的作用,因而在RoboNet系统中,只使用了数据帧和确认帧。MAC层帧格式[4]如图4所示。

图4 RoboNet使用的MAC层帧格式

MAC层的主要逻辑是mac_FSM()函数。MAC层先调用下层状态机phy_FSM()使其保持运转,然后检查本层是否正在发送数据,如果是则等待数据发送完毕,最后进入MAC层的状态机,其状态切换如图5所示。

图5 RoboNet MAC层状态转换图

2 网络层和串口交互层

RoboNet属于多跳无线自组网,无线自组网起源于军事应用,它是20世纪70年代美国国防部高等研究计划局(Defence Advanced Research Projects Agency,DARPA)资助研究的在战场环境下采用分组无线网进行数据通信(Packet Radio Net,PRNET)项目中产生的一种新型的网络架构技术[5]。

2.1 网络层设计

网络层的功能是为节点提供路由功能,是多跳移动无线自组织网络的核心部分。AODV[6]和DSR[6]都是可用于移动多机器人网络的优秀的路由协议。DSR虽然需要更长的网络头来保存路径,但它在高移动性的场合下比AODV对发送包的开销要小。RoboNet选择DSR作为路由协议。

图6 RoboNet网络层头部结构

MAC层的负载(MPDU)包括网络头部和网络负载两部分。其中网络头部为路由提供信息选项,其格式如图6所示。

表1 网络头部分类型

首先是一个字节的类型位,它表示这个包的类型,一共分四种:路由请求(ROUTE_REQ)、路由回复(ROUTE_REPLY)、路由错误(ROUTE_ERROR)、路由数据(ROUTE_DATA),具体数值见表1。

第二个字节有两个作用:在路由请求时,它表示这个请求的序列号,是为了避免对重复的请求进行处理;在其它类型时,它表示跳数信息。第三、第四个字节是表示这个包的网络层的目标地址,以低有效字节顺序存放。接下来第五个字节也是个复用类型的域:在数据是广播时它表示这个广播的标识符,是为了避免对收到过的广播重新发送;而在其它情况下,它表示收到的这个节点和源节点之间的跳数。选项的最后是由常量MAX_ROUTE_LEN定义的16位地址数组,它表示了网络层包的传播路径,是源路由协议的直接体现。

网络层不再像物理层和MAC层一样采用状态机设计,因为网络层既要处理包的发送,又要处理包的接收,使用状态机会带来巨大的复杂度,并且其并行效果也不会明显。因此网络层只提供了一个叫nwk_main()的函数供上层不断调用。它的流程如图7所示,只做了两件事:检查是MAC层是否收到网络包,并调用函数进行处理;检查发送队列里是否有包在等待,并调用相应函数进行处理。这是种串行处理方式,由于MAC层接收到的数据和发送队列里的数据都采用了数组来缓冲,只要它们的队列不溢出,就不会对协议栈的性能造成影响。

图7 nwk_main流程图

图8 网络层待发数据缓冲区

在RoboNet系统中,本节点要发送的数据都存放在一个叫nwk_send_queue的缓冲区里。它是一个先进先出循环队列,如图8所示。q_tail是最先存进来的缓冲区项的索引,q_tail是下一个空闲的缓冲区项的索引,当上一层有数据要发送时会往这个索引指向的地方存。另外还有两个布尔变量q_full和q_empty来表示发送缓冲区是否为空和是否为满。

当收到路由请求包时整个流程如图9所示。首先检查之前是否已经收到过这个请求包,如果收到过那就没有必要再进行处理了。然后判断这个请求的目标节点是否是当前节点。如果是,则这个请求到达了终点,当前节点需要返回一个路由回复。路由的回复直接在收到的路由请求的网络头部里改,不需要再重新分配一个网络头,即方便又节约了空间。最后一种情况是当前节点既不是目标节点,也没有到目标节点的路由。这时当前节点需要转发这个路由请求。

路由回复发往发起路由请求的那个节点,中间节点收到路由回复包首先判断自身是否为源节点,如果是则通过路由回复包中的地址信息更新自身的路由缓存,并不再转发路由回复包。如果自身不是源节点则在更新完自身缓存后还要继续转发这个路由回复包。

路由错误包的目的是节点在转发数据时,发现原有路径不可达时,向数据发起节点报告路由失效。网络层对收到路由错误包的处理和收到路由回复包的处理十分类似,首先判断接收到路由错误包的节点是否为源节点,如果是则根据路由错误包中的信息删除自身缓存中已经失效的路由,并不再转发该路由错误包。如果自身不是源节点则在删除完自身缓存中无效的路由信息后还要继续转发这个路由错误包。

数据包的接收和发送是通信的目的所在,整个流程如图10所示。首先对于广播的数据包需要特殊处理,先判断是否需要丢弃。如果存在下列三种情况之一:一本节点已收到过该广播数据包;二该广播数据包是自身发出的;三该广播数据包的生存时间为零,则丢弃该广播数据包。否则继续广播该数据包。如果收到的不是广播数据包,则判断这个包的目标地址是不是当前节点。对于目标地址是当前节点的数据包,只需向上层递交这个数据包的网络层源地址和网络层负载即可返回。对于目标地址不是当前节点的数据包需要进行转发。这时还需要检查发送是否成功。如果成功就可以结束处理并返回。如果MAC层发送失败,表示这个数据包路径信息中对于当前节点的下一跳不可达,此时要更新当前节点的失效路由信息。

图9 对收到路由请求包的处理流程图

图10 对收到数据包的处理流程

2.2 交互层设计

交互层位于网络层之上,是RoboNet系统的最顶层。它负责把网络层接收到的数据,按照约定格式组装成数据帧通过串口发送出去,同时又对从串口进来的数据帧进行解析处理,如果是要发送数据,则把数据和目标地址提取出来,放到网络层的发送缓冲区中。

交互层对串口进行接收和发送的帧都按照图11所示的格式进行处理。第一个字节是帧界限符,用于表示一个帧的开始,值为十六进制0X7E。第二个字节标识长度,是类型相关数据字段的长度,规定最大长度为106字节。第三个字段是类型相关数据,长度并不固定。最后一个字节是校验字节,用来简单地校验数据在串口收发过程中有没出错。校验和(checksum)的计算方法如下:把类型相关数据字段中的每个字节加起来,然后对0XFF取反。校验和的校验方法如下:把类型相关数据中的每个字节加起来,再加上校验和,如果值为0XFF则数据包正确。

图11 串口帧通用格式

RoboNet系统一共有两大类型帧:第一类是用于通信的数据相关帧,如图12所示;第二类是用于设置、查询、返回参数用的命令相关帧,如图13所示。它们由类型相关数据中的第一个字节来区分,具体取值如表2所示。

图12 数据相关帧的格式

表2 串口帧的不同类型

对于发送数据和接收数据的帧,其数据部分的前两个字节用来标识地址,低有效字节优先。发送数据时,地址域是目标地址;接收数据时,地址域是网络层源地址。

图13 参数相关帧的格式

第一个字节表示命令的类型,为表3-2中的设置参数、查询参数和返回参数三者之一。第二个字节指示了要操作的参数类型。第三、四字节是参数值,以低有效字节优先顺序存放。对于获取参数的帧来说,参数值还未知,这两字节无意义,可用任意数值填充。对于参数值只有一位的情况,比如射频发射功率,此时值的高有效位无意义,可用任意数值填充。

3 系统性能测试与分析

本节对RoboNet系统的性能做了测试,测试的标准采用了分组递交率。测试时使用的四种拓扑结构如图14所示。其中(a)表示A节点和B节点在彼此通信距离之内;(b)表示A节点和B节点彼此在通信距离之内,B节点和C节点在彼此通信距离之内,但A节点和C节点不能直接通信;(c)类似(a)和(b);(d)表示A节点、B节点、C节点和D节点彼此之间都可以直接通信。在以下的测试中,单跳通信使用(a)所示的拓扑,两跳通信使用(b)所示拓扑,由A节点向C节点发送,三跳通信使用(c)所示的拓扑,由A节点向D节点发送。

图14 测试时用的四种拓扑结构

(1)不同跳数对单播通信递交率的影响

图15所示的是在9600bps波特率的情况下,不同跳数对单播通信递交率的影响。我们可以看到单跳通信和两跳通信都达到了95%以上的递交率,而三跳通信在负载为20字节的情况下递交率比较低,只有65%。但是随着负载的增加到40字节后,三跳通信的递交率也达到了95%以上。

图15 不同跳数对单播通信递交率的影响

图16 不同发送间隔对广播通信递交率的影响

(2)不同发送间隔对广播通信递交率的影响(三跳)

图16所示的是三种发送间隔下的三跳广播通信的递交率,大的延时能提高递交率。而负载越大时需要的延时也越大,从而能减少网络中包的冲突,减低丢包率。在频繁需要广播通信的机器人网络里发送广播时这是需要注意的。

4 总结

本文设计并实现了的RoboNet通信系统,为多机器人之间的通信提供了无线多跳自组织网络的通信方式,包括了单播通信和广播通信。它不需要基础设施如基站,就可以在任何地点临时组网通信,并且网络中的节点都是无差异的,不存在主次节点。在节点失效时,可以由冗余的节点继续其工作,具有自愈性、抗毁性、高健壮性等特点。该系统目前只是在少量节点上做实验,未来的工作将在大规模节点上进行实验,并测试其性能。

[1]Texas Instruments.CC2430 Data Sheet.Texas Instrument.Dallas,TX.2006.

[2]邹磊,蔡自兴,任孝平.基于簇的多移动机器人通信系统.[J]计算机应用研究.2009,26(8):3109-3111.

[3]Bergbreiter S,Mehta A,Pister K.etc.PhotoBeacon:Design of an Optical System for Localization and Communication in Multi-Robot Systems.In Proceedings of the International Conference on Robot Communication and Coordination.Athens,Greece,Oct.2007:(30-37).

[4]The Institute of Electrical and Electronics Engineers.IEEE Standard for Local and Metropolitan Area Networks,part 15.4,Wireless Medium Access Control(MAC)and Physical Layer(PHY)Specifications for Low-Rate Wireless Personal Area Networks(LR-WPANs).IEEE Press.2003.

[5]Reese R B.A Zigbee-subset/IEEE 802.15.4 Multi-platform ProtocolStack.http://www.ece.msstate.edu/~reese/msstateP AN/.2007

[6]Johnson D B,MaltD A z,Hu Y C.The dynamic source routing protocol for mobile ad hoc networks(DSR).IETF Internet Draft.July,2004.

猜你喜欢

网络层物理层字节
基于K-ML-MPWFRFT的物理层安全传输技术
No.8 字节跳动将推出独立出口电商APP
公路联网电子不停车收费系统路侧单元物理层自动测试软件研发
No.10 “字节跳动手机”要来了?
简谈MC7字节码
论物联网安全威胁及其应对策略
多天线物理层安全传输系统性能分析
物联网技术在信息机房制冷系统中的应用
卫星通信物理层安全技术探析
Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair