杨志江, 郑 昆, 耿春明, 夏继强
(1.北京航空航天大学 机械工程及自动化学院,北京 100191;2.芜湖赛宝信息产业技术研究院有限公司,安徽 芜湖 241000)
在移动机器人和智能车的避障和定位研究中,超声波避障在直线性和非接触性两方面优于机械避障,而在对于减小被测物颜色、空间烟雾与光线对测距的影响方面优于激光避障,因此应用广泛。如果目的是将车体周围所有障碍物都可以探测到,一般采用的方法是多个超声波传感器在不同位置进行并列安装,每个超声波传感器独立工作,而每个超声波传感器又作为一个通信节点,通过工业总线和核心控制板组网,比如控制器局域网(controller area network,CAN)总线,各个测距节点的测距信息直接传送给核心控制板。这种方法的缺点在于单个超声波探头的传感器节点挂载在总线上占用了大量的系统硬件资源,另外核心控制板要对大量实时信息进行处理,这也大大浪费了控制系统软件资源,形成一个体积庞大,核心控制板软件编写复杂的系统[1]。针对这一问题,本文采用的方法是同样在RS—485总线上挂载多个超声波测距从站,但每一从站中又具有多路超声波传感器,每个从站作为一个通信节点,从站采集的多路信息汇总后经RS—485总线传输到中控板进行实时处理后,再将数据发送给机器人或汽车的核心控制板,中控板作为系统核心控制板和下层的从站的中间节点,可以进行信息的预处理,简化核心控制板的中央处理器(central processing unit,CPU)资源。本文也阐述了实际工程应用中的超声波传感器的布置方式。单个超声波测距从站包含多路超声波传感器的设计能够节省机器人和汽车控制系统的硬件资源;中控板对多个超声波测距从站的信息进行整合后再发送给控制核心板的设计简化了核心板的软件编写;利用RS—485总线可以与多个带有RS—485接口设备互连,实现数据的高速远距离传输,且控制方便[2]。
超声波测距原理主要是利用超声波传感器向外发射超声波时开始计时,超声波在空气中传播,遇到障碍物后返回,超声波传感器接收到反射波后立即停止计时。根据计时器记录时间t和超声波声速计算障碍物距离(s=ct/2,c为超声波声速)时会受温度影响稍有变化,有些超声波测距设备会进行温度补偿设计[3],但由于本文主要在室内自动导引车(automatic guided vehicle,AGV)叉车上使用,室内温度下,c一般取为344 m/s[4]。由于所采用的超声波发射器是收发一体,在激励脉冲停止后,仍然有余波产生,会在近处产生较大的盲区,根据这一点可以得出实际运用的性能参数。
系统主要由中控板和超声波测距从站组成,系统组成框图如图1所示。图中超声波测距从站中包含多路超声波传感器。中控板和各个超声波测距从站通过RS—485总线相连,各超声波测距从站实时通过多路超声波传感器测量机器人或汽车周围障碍物的信息,中控板以一定的时间间隔分别获取各从站的信息,汇集各模块信息经一定的处理后向上一级中央控制系统发送最终的数据结果,其中中央控制系统仅对中控板进行简单命令的发送和数据接收,极大减轻了移动机器人或汽车的中央控制系统CPU的负担。中控板和超声波从站均以STM32单片机作为控制和处理的核心,其系统时钟可达到72 MHz,可保证数据的实时性。
图1 系统组成框图
中控板的任务为:1)接收上一级控制系统的命令、向上一级控制系统即核心控制板,发送数据;2)通过RS—485总线向各个从站发送命令和接收各从站的实时数据,即中控板主要完成命令的接收和发送功能,其硬件中需包含RS—485模块和向上级控制系统通信模块。因为中控板与机器人和汽车的核心控制系统的通信要求的多样,所以要进行定制。本文设计的系统是以工控机作为核心控制系统,其与中控板通过串口进行简单的协议通信,故文中设计的中控板硬件结构如图2所示,中控板作为多节点信息汇总的主节点通过挂载的从节点个数不同,可以实现超声波测距回路大幅度的增减。
图2 中控板硬件结构
从站包含2组8路超声波测量回路,每路均包含1个收发一体式超声波探头、超声波发射电路、回波的滤波电路,由双四通道模拟多路选通开关4052进行分时选通;2组回路分别拥有一个回波的一级滤波放大电路和STM32的40 kHz脉冲产生I/O口;而两组回路又共享STM32控制内核和MAX3485通信模块,图3为超声波回路硬件。
图3 超声波测距从站硬件结构
该设计以STM32为控制核心,协调各电路的工作,两组超声波回路并行执行,STM32同时在两组回路的I/O口发送40 kHz脉冲,并且同时选中每组中4052的同一通道,进入发射电路激励传感器向外发出超声波,遇到障碍物会返回反射波,进入接收电路进行简单的处理后经各自的4052通道进入放大滤波电路后进入STM32的ADC通道经软件计算得出最终的障碍物距离,同时保存测得距离的传感器所在的通路即可得到障碍物的方位,经MAX3485以RS—485通信协议上传给中控板障碍物的距离与方位的信息。
中控板主要完成接收上一级控制系统的命令和向其发送处理后的数据以及向超声波从站发送命令及接收从站实时测得的障碍物距离与方位的信息。系统开始后首先初始化,经MAX3485向第一个从站发送访问命令,然后等待判断是否收到从站数据,然后处理并保存所接收的数据,如果该从站第1次未响应,则为保证可靠性再次向该从站发送命令,当所有从站访问结束后等待接收移动机器人或智能车控制系统的命令,收到后则向控制系统发送最终处理后的数据,中控板流程如图4所示。中控板的接收数据命令是通过串口中断子程序完成。
图4 中控板流程
超声波从站主要是完成8路超声波传感器测距及接收中控板的命令和向中控板发送传感器测得障碍物的信息,每个从站都有自己的地址,当中控板发出命令时每个从站都会接收到,但只有地址匹配的从站向中控板发送数据。从站程序的设计主要由主程序模块、定时中断模块、串口中断接收及串口发送数据模块等组成,在此仅对主程序和中断程序予以说明。在主程序开始初始化后首先调用超声波发射子程序并打开TIM2,TIM2 主要是用于计时回波时间和通道的选择,在延时1.5 ms后开始调用回波处理子程序判断回波并计算距离,如果接收到中控板的命令且地址匹配,则通过RS—485向中控板发送实时数据,否则,本次循环结束,对于TIM2中断主要完成2组4052的通道选择,同时选中两组超声波回路相同标号的2组进行激励,为防止从站发生死循环或其他故障时,能自动复位程序从而利用系统时钟设计一看门狗。超声波从站流程如图5。
图5 超声波从站流程
该系统中,中控板为主站,超声波测距模块为从站,主从之间通信为RS—485协议,每次通信中由主机发起,向从站发送地址(从站地址为0x01递加1)及相应的指令,从机采用中断方式接收数据,只有当某个从机的地址匹配时,该从机才响应并向主机发送数据。因每一从站发送的数据包括8路探头测得的距离值(mm),每探头距离值两字节表示,即至少有16 B的数据,需进行差错控制,以保证数据传输的正确性。在以下几个方面进行说明:
1)因采用问答式协议,当某一从站地址匹配后向主机发送数据时,因在总线上的其他从站处于监听状态,故其他从站可能会将该数据中的某一部分判断为主机的问询命令,从而进行响应引起总线冲突。
解决方法:主机在发送问询命令时,加入起始和结束标记,该标记不与从站应答中的数据相同,因本超声波测距模块最远测得距离为3 500 mm,用两字节表示,故十六进制最大为0x0DAC,其最高位为0x0D,故在发送数据中不能出现连续2次大于0x0D的字节,故选择0xAA,0x55和0x55,0xAA 分别作为起始和结束标记。
2)在从站发送数据中16 B的距离值可能因受到干扰而引起主站接收错误。
解决方法:加入发送数据校验位,因最高字节为0x0D,故8路最高字节相加和最大为0x68,可用1个字节表示,从而将8路距离值高字节相加为校验字节。
3)主机问询某一从站时,如果在规定时间内没有收到从站应答,则主机认为问询失败,并重新问询,如果3次问询仍失败则记录失败次数,问询下一从站,在这一过程中主机在第二次问询时,可能会收到从站第一次问询应答结果。
解决方法:在主机发送问询命令和从站发送应答数据帧时加入1 B表示问询次数,仅当主机从机匹配则表示本次通信成功。
由上三种情况从而确定主机发送命令帧格式为
0xAA0x55从站地址命令代码访问次数0x550xAA
其中,命令代码:0x03读取从站值;从站地址为:0x01,0x02,0x03以此类推;访问次数为:0x01,0x02,0x03中某一个。
从站发送应答帧格式为
本站地址访问次数16B距离值校验字节
其中,从站地址为:0x01,0x02,0x03以此类推,数据在节点板初始化时从FLASH闪存中取得;访问次数为:0x01,0x02,0x03中某一个,由节点板识别到的主机问询命令中的问询字节所得。
经实验测得,利用70 mm直径的圆木作为障碍物,探头测距的范围类似于图6(a)的形状,可以看出在近端和远端会产生两侧的测量盲区,在该地带障碍物无法测得。另外一体式超声波激励后会产生一段时间的余波,所以在近端会产生测距盲区,在该盲区中所测距离是不可靠的,而这种情况不可避免的。因此,为尽可能保证障碍物有效识别,探头必须间隔布局,最终的效果如图6(b),近端极限距离和近端盲区的极限值相等,为了保证在大于近端极限距离的区域的障碍完全测得,布局间隔必须适合,使相邻两个探头的测距范围重合一部分,而远端的极限距离则会随布局间隔变化而变化。该设计所得到的最优间距40 cm,近端极限距离30 cm,远端极限距离为120 cm。
图6 超声波探头布局
以车体大小为2.8 m×2 m为例,为了可以探测到车体一整周的障碍物,基本保证无盲区,如图7进行布置,共要安装有32个超声波探头,由于每个从站包含8路超声波回路,所以只需要4个485总线从站节点就可以实现,极大地节约了硬件资源。但由于实验车具有行进速度v,在一个探头的测量周期t下,保证试验车不行驶进入近端盲区,即进入小于近端极限距离d的区域,系统的实际近端盲区极限值为D=d+vt。如行进速度为0.7 m/s,t为200 ms,则实际盲区为44 cm。
图7 超声波探头试验车布局示例
本文提出基于STM32 的RS—485总线与中控板组网的多路一体式超声波测距模块设计方法,由于在一个节点中包含8路的超声波回路,该设计不仅可以对超声波回路进行整倍数增减,而且极大地节约了硬件资源,减轻了总线的负载。由于较大的车体需要的超声波回路较多,该模块的设计提供了其全方位的避障的可能。该设计已经在工厂中进行了试用,工作正常。