摘要:介绍了一种用于Robocup F-180小型组足球机器人比赛的无线通信系统的设计。包括发送端和接收端系统的硬件设计和实现及其软件设计。给出了一种适应于这套系统的通信协议,包括物理层的编码设计、纠错编码设计和帧结构设计。
足球机器人是一个极富挑战性的高技术密集 密集型项目,融小车机械、机器人学、机电一体化、单片机、数据融合、精密仪器、实时数字信号处理、图像处理与图像识别、知识工程与专家系统、决策、轨迹规划、自组织与自学习理论、多智能体协调以及无线通信等理论和技术于一体,既是一个典型的智能机器人系统,又为研究发展多智能体系统、多机器人之间的合作与对抗提供了生动的研究模型。它通过提供一个标准任务,使研究人员利用各种技术获得更好的解决方案,从而有效促进各个领域的发展。其听理论与技术可应用于工业生产、自动化流水线、救援、教育等实践领域,从而有效推动国家科技经济等方面的发展。机器人足球 从一个侧面反映了一个国家信息与自动化领域的基础研究和高技术发展水平。
目前,国际上有机器人足球比赛分为两大系列——FIRA和Robocup。本文所要论述的系统所应用的F-180小型足球机器人比赛就是RoboCup系列中应用较广泛的一种。
F-180小型足球机器人足球比赛的示意图如图1所示,比赛双方各有5名机器人小车在场上。足球机器人系统在硬件设备方面包括机器人小车、摄像装置、计算机主机和无线发射装置;从功能上分,它包括机器人小车、视觉、决策和无线通信四个子系统。
其中无线通信系统是衔接主机和底层机器人不可缺少的一环,它必须保证从主机端到机器人底层之间的数据传送是可靠的,从而使得机器人比较能够顺利流畅进行。由于比赛双方都有多个机器人同时在场地上跑动,要求无线通信有一定的抗干扰性。无线通信系统的性能相当程度上直接影响着机器人的场上表现。
1 系统的设计及实现
比赛中从摄像头来的视频信号经过计算机处理之后得到控制小车用的数据信息,而无线通信系统的就是将这些数据信息及时准确地送达场上的每一个机器人小车,系统采用广播方式,各机器人根据特定标志识别发给自己的有用数据,从而进行决策与行动。整个系统的框图如图2所示。
1.1 发送端的硬件设计
发送端主要用PIC16F877单片机实现编码和对发射机的控制,计算机通过串行口发送数据,经过PIC16F877编码后再通过PTR3000无线通信模块将数据发送出去。
所采用的PIC16F877单片机是Microchip公司推出的8位单片机。采用RISC指令系统和哈佛总线结构,最高运行的时钟频率可达20MHz,因而指令运行速度快。它有很宽的工作电压范围,可直接与3.3V的PTR3000无线通信模块配合使用。
TR3000无线数据收发模块是一种半双工收发器,采用NORDIC公司的nrf903无线收发芯片,工作频率采用国际通用的数传频段ISM,频段915MHz,工作频率可以在902MHz~928MHz可变。采用GMSK调制,抗干扰能力强,特别适合工业控制。灵敏度高,达到-100dBm,最大发射功率+10dBm,工作电压为2.7V~3.3V。它最多有169个频道,可满足需要多频道的场合,最高数据速率可达76.8kbps。因而完全可以满足小型组机器人通信的数传速率与距离的需要。
本系统中PIC16F877就是采用20MHz的时钟信号,能够满足即时收发数据以及编码的需要。整个系统中包含两种电源,无线通信模块的电源为3.3V,而MAX232又需要+5电源。信号线的连接也要考虑两种电平的匹配问题,在必要的地方要加上电平转换电路。
首先单片机要接收来自计算机端的数据,计算机串口输出的信号经过MAX232由232电平转换为TTL电平。但是由于单片机采用3.3V电平,因而MAX232输出的信号需经过电平转换才能输入单片机,电平转换可以采用TI公司提供的典型电平匹配电路(见图3),也可采用74LVCXX系列逻辑门来转换。
由于PIC16F877只有一个异步串行口,因而要通过16C550通用同步异步收发器(USART)芯片来扩展一个异步串行口。这样就可以保证从计算机串口输出的数据与无线通信的数据速率不同,从而使原始数据经过通信编码及打包数据量增加之后也能及时传送,并且在必要时也能将接收数据送回计算机端,实现半双工通道。系统的电路图如图4。从图4可以看出PIC单片机采用并口对16C550进行初始化配置。由于16C550共有10个寄存器,且占用了8个地址,因而PIC单片机用RA0、RA1、RA2三个通用I/O口做地址线选择16C550的各个寄存器。单片机可以不断通过RB1、RB2引脚检测TXRDY、RXRDY信号获知ST16C550是否接收到数据,还是已经发送了数据。还可以通过把16C550设置成中断方式使每接收到一个字节数据便产生一次中断使INT信号有效,单片机进入中断处理程序,从而使单片机的执行效率更高。
单片机通过自带的异步串行口输出数据到PTR3000通信模块。由于nrf903芯片接收和发送数据共用一个引脚,因而需要其他电路来解复用。最简单的方法就是在单片机的TX引脚先接一个10kΩ的隔离电阻,再与RX和PTR3000的DATA引脚相连。但是这种方法有两个缺点,它会造成发送的数据串入到单片机的接收引脚中,另外发送信号的驱动能力受到了极大的限制。因此,本系统采用了74HC244三态缓冲器作为隔离(见图4中虚线框内所示),并且通过单片机的RB4控制收发状态,因而在半双工方式下发送信号与接收信号可以互不干扰地传送。
对于通信模块工作状态的控制主要包含表1所列的这几个信号,通过单片机的普通I/O口即可控制。
表1 PTR3000工作工作模式配置表
PTR3000工作模式 | STBY | PWR-DWN | TXEN | CS |
正常工作:接收 | 0 | 0 | 0 | 0 |
正常工作:发射 | 0 | 0 | 1 | 0 |
掉电模式 | 0 | 1 | X | X |
待机模式 | 1 | 0 | X | X |
1.2 发送端的软件设计
当系统复位时,单片机首先要对PTR3000无线通信模块和16C550的寄存器进行编程初始化。PTR3000的初始化编程是通过同步串行信号进行的,总共有三个信号CFG_CLK、CS和CFG_DATA,分别连接到单片机RC3、RB7、RC5引脚。PIC16F877单片机本身就有同步串行口功能模块,但是由于PTR3000的同步串行数据位为14位,并非整数字节,而且14位数据必须一次初始化完成,因此实际通过普通的I/O口编程来实现这14位的同步串行信号更方便一些。在整个初始化期间CS信号必须一直为高电平。这14位初始化字的定义见表2。在初始化同步串行信号输出时最高有效位在先。在对PTR3000编程前先其状态为接收状态以免在其他频率造成无线干扰,编程完成后就可以将状态改为发射状态了。
表2 PTR3000初始化控制字各位定义
Bit | 参数名称 | 符 号 |
参 数 |
位 数 |
0~1 | 频段 | FB | 必须为了10(表示为选择频段915±13MHz) | 2 |
2~9 | 频点 | CH | f=902.1696+CH·0.1536(MHz) | |
10~11 | 输出功率 | POUT | 发射功率≈-8dBm+6dBm·POUT | 2 |
12~13 | 时钟分频输出 | Fup |
"00"=>Fup=fxtal "01"=>Fup=fxtal/2 "10"=>Fup=fxtal/4 "11"=>Fup=fxtal/8 |
2 |
接下来对16C550的初始化设置。由于PIC16F877自身的并行口对16C550进行初始化编程设置各个寄存器,需要注意的只是在输出每一个字节之前先要通过RA0~RA2输出相应字节的地址信号。在初始化设置时将16C550的波特率设置低于76.8kbps,以保证接收的数据能够通过PTR3000即时发送。
1.3 接收端的硬件设计
接收端装在每个机器人小车上,由于机器人小车的控制采用DSP控制器TMS320LF2407,因而在接收端PTR3000无线通信模块就采用TMS320LF2407来控制。通过PTR3000接收的数据直接输入DSP,由DSP进行解码,从而做出决策和发出控制信号。因而无线通信系统的接收端电路相对发送端要简单得多,只需用TMS320LF2407代替发送电路中的单片机与PTR3000模块相连接即可。PTR3000的初始化编程也就由2407的普通I/O口来实现,只不过在初始化编程之后依旧保持PTR3000处在接收状态。
2 协议的设计
2.1 物理层的编码设计
物理层的编码设计要根据所采用的物理器件和物理信道的特性来决定。本系统采用PTR3000无线通信模块在接收模块中为了获得0直流电平就需要在所传输的数据中逻辑“0”和逻辑“1”的数量相等。只有满足上述条件接收部分才会获得很高的接收正确率。长时间空闲也会导致接收部分的0直流电平漂移,因为长时间的空闲实际上一直发送的是逻辑“1”。
由于PTR3000的这些特性,很自然就想到采用曼彻斯特编码(Manchester)(也称为数字双向码(Digital Biphase)或分相码(Biphase,Split-phase)。它采用一个周期的方波表示“1”,而且它的反向波形表示“0”。由于方波的正负周期各占一半,因而信号中不存在直流分量。在异步串行通信中有一个起始位“0”,因此将停止位“1”长度也设为一位,这样在一个字节共10位信号中也就不存在直流分量了。只是加了曼彻 斯特编码之后原来一个字节的数据现在要两个字节才能传送。
图4
有一些数字节,不会在进行曼彻斯特编码之后的数据串口出现,但是在一个字节中也具有0直流分量的特性,也有很高的接收正确率。这类数据字节如:0xF0、0x0F、0xCC、0x33等。从码型看来其中0xF0码型定时性能是最好的(其码型见图5),它很容易使异步接收器达到同步并且不会发生错误。由于0xF0的这种特性就可以用它做同步码元,在空闲的时间内通信系统就通过一直发送同步码元,使接收端保持同步,而且也可以保持接收模块的0直流电平状态。
2.2 纠错编码设计
为了在有一定外界干扰的情况下,保证主要与机器人之间的无线通信依然稳定可靠,必须采取一定的抗干扰措施,这可以采用纠错编码来实现。可以选择纠错编码方案有(14,8)分组码、(7,4)分组码和循环码,需要使用两字节的长度发送一字节的有效信息;(5,2)分组码和循环码,交错码、(21,8)分组码和缩短循环码、(21,9)BCH码、(21,12)BCH码,需要使用三字节的长度发送一字节的有效信息。
系统中使用了(7,4)分组码,并在实际中取得了较好的效果。它的构成方式如下:
假定不做任何处理的原码格式为:
其高四位的监督码为:
A2 | A1 | A0 |
其低四位的监督码为:
B2 | B1 | B0 |
则编码后成为两个byte长度:
1 | X7 | X6 | X5 | X4 | A2 | A1 | A0 |
0 | X3 | X2 | X1 | X0 | B2 | B1 | B0 |
其中每个字节的最高位作为标志位,用于表示高四位和低四位,高四位用“1”做标志,低四位用“0”做标志。接收端通过检测标志进行重组和解码。对于译码基本方法有维特比译码和使用监督矩阵译码,可根据具体的编码方案灵活选用。
2.3 帧格式设计
一般数据帧包括帧头、机器人标识、数据、数据校验、保留字节等内容,通常按照下面的格式排列:
帧头 | 机器人标识 | 数据 | 保留字 | 数据校验 |
为了保证帧能够准确接收,帧头的设计至关重要。一般帧头需要两个或两个以上的字节,并且应该选择数据中出现几率较低的数值和组合。在这个系统中可以采用一般数据中根本不会出现的数据字节如0xF0、0xCC作为数据帧头。而其它类型的帧(如开球或暂停等命令帧),则可以选择在0xF0之后加上其它的字0x33、0xC3、0x3C、0x0F等构成。这种帧头组合在一般的数据中是不会出现的,因而可保证帧同步不会出错。场上的每个机器人通过数据帧中的机器人标识来识别属于自己的数据,由于场上只有5个机器人,因而机器人标识只占用一个字节。
这套通信系统采用了PTR3000无线通信模块进行无线传输,并运用了单处机的编解码使这套系统工作更加稳定可靠,使数据通信及时正确地传送到场上的每个机器人,完全满足小型组足球机器人比赛的通信速率和正确率要求。
这套小型组机器人通信系统已应用于中国科技大学的F-180 Robocup小型足球 机器人系统中。2003年7月在意大利举行的Robocup小型机器人足球比赛中,这套通信系统在存在各种通信干扰的情况下依然表现出了较高的可靠性。2003年8月在北京举办的全国机器人大赛F-180 Robocup小型组的比赛中,这套通信系统中中国科技大学一队赢得了亚军。
评论
查看更多