无人自动驾驶车辆是室外移动机器人的一种,车上控制系统对车辆进行自主控制,实现无人驾驶。我们的车辆研究使用SICK公司的LMS291激光雷达作为主要的障碍物检测传感器,并同时用于车辆的激光导航。该激光雷达支持RS-232和RS-422串行通信,由于RS-232通信的最大速率为20k bps,无法满足车辆实时检测障碍物的需要。因此,在智能车辆上,采用RS-422传输激光雷达数据,传输速率为500K bps。
为满足激光雷达和PC机的高速数据传输,现有的解决方案的实时性得不到保障,而且都不具备任何数据处理功能,而障碍物检测功能应集成到底层硬件平台上实现,万一PC发生死机,车辆仍能自动避撞,保证了车辆系统的安全性和可靠性。因此,需要开发一套新的接口卡来实现这些功能。
1 接口卡研制目标和总体方案
针对激光雷达在智能车辆上的应用要求,我们对接口卡的功能提出了如下目标:
(1)激光雷达数据采集功能。通过RS-422与LMS291激光雷达进行通信,通信速率为500k bps;可实时获取激光雷达数据;可配置激光雷达参数。
(2)数据传输功能。通过CAN总线将采集的激光雷达数据送往上位机PC。
(3)障碍物检测功能。通过系统对激光雷达数据的处理,获取障碍物检测参数,通过I/O,直接发送紧急停车命令给底层控制器,紧急刹车。
根据系统要求,板上的CPU决定选用TI公司的TMS320LF2407ADSP芯片,它速度快、功耗低、易于开发、资源丰富、有片上CAN控制器等。LF2407A采用哈佛总线结构,具有16位高性能的CPU,时钟频率为40MHZ并支持软件改变锁相环的频率,在智能控制和通信中得到广泛应用。500)this.style.width=500;" border=0>
2 系统硬件设计
2.1 RS-422通信接口设计
RS-422A通信接口标准是EIA公布的“非平衡电压数字接口电路的电气特性“标准,它采用非平衡发送器和差分接收器,电平变化范围为12V,通信速率最大10Mbit/s(120m通信距离内),通信速率最小90Kbit/s(1200m通信距离)。
由于本系统要适应高速大流量数据通信,且要实现数据处理功能。为了保证数据传输的实时性和可靠性,我们选用TI 公司的UART产品TL16C752B。它是一个超前的解决方案,提供了两路相互独立的异步收发器,具有64字节的发送和接收FIFO 存储器,这样服务间隔时间就增加了,使外部CPU 有多余时间处理其他的应用,减少了整个UART 的中断服务时间。
本系统将TL16C752B配置在LF2407A的I/O空间,TL16C752B还提供了2个中断请求信号分别用于通道A和B申请LF2407A中断,复用LF2407A的外部中断XINT1.
2.2 CAN通信接口设计
CAN总线是德国BOSCH公司从80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率可达1MBPS。CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。
本系统使用的DSP芯片已集成了片内CAN控制器,收发器采用德州仪器公司生产的SN65HVD230CAN总线收发器,主要是与带有CAN控制器的TMS320Lx240x系列DSP配套使用,该收发器具有差分收发能力,最高速率可达1Mb/s。SN65HVD230具有高速、斜率和等待3种不同的工作模式。其工作模式控制可通过Rs控制引脚来实现。
3 系统软件设计
软件设计的第一步是初始化,包括系统初始化、异步串口和CAN初始化等。然后是主体部分即UART和CAN的通信以及数据处理等。主体部分程序主要由三大块组成:激光雷达配置模块、UART和CAN通信模块、车体避撞模块。
3.1 激光雷达配置模块
PC与激光雷达之间通过固定的数据格式进行通信,配置激光雷达的流程如下:
(1) 首先打开串口,初始化, 等待激光雷达返回开机初始化的应答数据。
(2) 使用默认的密码“SICK_LMS”,改变操作模式为“安装模式”, 并等待雷达应答数据的返回。
(3) 配置激光雷达和UART串口的速率。先将激光雷达波特率改为500K,等到返回修改成功的应答数据后,再将UART串口的波特率也改为500K。
(4) 设置扫描宽度和角度分辨率,扫描宽度180度,角度分辨率为0.5度。
(5) 请求激光雷达的配置数据,目的是获得一些参数的值,放到数组中,然后修改部分参数的值,并用命令77h将参数写到激光雷达中。
(6) 切换到监控模式,获得激光雷达连续扫描数据。
此后雷达便开始以26.6毫秒的周期将测量数据以500Kbps的通信速率发送给接口卡。
3.2 UART和CAN通信模块
UART采用中断方式接收激光雷达发送过来的数据,因为数据传输速率为500Kbps,接收中断非常频繁,中断程序过于复杂会延误后续的数据处理,所以整个中断程序非常简短,不超过20条指令。当主程序检测到UART接收到一桢数据后,就将数据写入CAN邮箱4和5,通过CAN发送给PC机。同时,CAN通信采用中断接收PC机发送过来的数据,再通过UART发送给激光雷达。
3.3 车体避撞模块
车辆在自动驾驶时需要实时检测车前方一定范围内的障碍物,一旦发现有障碍物就必须控制车辆紧急制动以免发生事故,这个障碍物检测是由安装在车前部的激光雷达完成的。
当UART接收到激光雷达一楨数据732个字节后,进行CRC校验,数据校验无误后,去掉楨头和楨尾,将距离数据的高位字节和低位字节合并,然后存放在数组Laser_Range[361]里。智能车辆的宽度为1.4米,我们设置了一个障碍物检测区域,是以激光雷达为中心的一个2×2米的方形区域,只要在这个区域内有障碍物我们就认为车的前方有障碍物,需要紧急制动。一桢激光雷达数据是361个距离值,在判断时将这361个数据分为三个部分,三个区域内的数据分别有各自的判断条件,条件如果成立则认为该区域内有障碍物。当检测完361个数据以后,如果没发现障碍物则认为是安全的,如果发现了障碍物则认为有危险,这时直接通过I/O发送命令给底层控制器让车辆紧急刹车。
4 试验结果
本文对上述接口卡进行了试验验证。试验平台为上海交通大学研制的无人自动驾驶车辆,测距传感器为LMS291激光雷达,安装在车辆前方。在车载笔记本电脑的VC++平台上对CAN接口进行配置,接收激光雷达在500kbps下发送的连续数据,对每一个测量的距离数据用一个小圆圈表示,在实验室外的车道上进行了实际演示,结果如下
随着前方障碍物的变化,图像会实时地跟着变化。由于采集速率高,激光雷达数据完全没有丢失。数据传输实时性也很好,笔记本电脑接收激光雷达一桢732个字节数据的时间为27.2毫秒,比激光雷达实际的时间周期只延迟了0.6毫秒,达到了车辆精确定位导航算法的要求。