自动驾驶汽车
ARGO项目的目标是为未来汽车开发主动安全系统。这些系统能够理解环境条件,并在发生突发危险时,它们可以警告驾驶员,甚至可以控制车辆。此外,这些系统还能够完全无人干预地驾驶车辆(自动驾驶)。
ARGO(见图1)是在意大利帕尔马大学开发的样车,于1998年6月向公众和科学界展示,当时它在意大利高速公路网络上自主驾驶了超过2000公里。
整个实时数据采集和处理都在运行Linux的单台基于奔腾MMX的PC上执行。
许多问题(不仅仅是与交通和安全相关的问题)可以通过使用自动驾驶车辆来解决。
除了提高安全性并减少道路事故,从而挽救生命的明显优势外,车辆比今天更近距离行驶的可能性将提高道路通行能力。更智能地调节每辆车的速度也将显着降低燃油消耗。换句话说,自动驾驶汽车有可能实现当前交通基础设施的最佳利用,改善交通出行并最大限度地减少风险、出行时间和能源消耗。此外,沿着给定路径重复行驶的商用和工业车辆将受益于对其路线的更强控制,并且将需要更少的人员来管理其移动。
不幸的是,自动驾驶车辆比其他应用更需要实时响应,因此需要智能算法和强大的计算引擎。同时,就商业产品而言,系统成本必须保持在较低水平。最初,底层技术,如抬头显示器、红外摄像机、雷达和声纳,都源自昂贵的军事应用。由于对这些应用的兴趣日益浓厚以及工业生产的进步,今天的技术以极具竞争力的价格提供传感器、处理系统和输出设备。
本项目展示了如何成功地将非常低成本的解决方案(在传感器和处理引擎方面)应用于在真实世界条件下驾驶“智能”车辆。本文介绍了基于标准奔腾MMX 200 MHz和Linux操作系统的底层架构,并讨论了整个项目中遇到的主要优势和问题。
该项目由意大利国家研究委员会 (CNR) 资助,“MilleMiglia in Automatico”巡游由TIM(意大利电信移动)赞助,TIM提供了GSM设备和整个旅程的蜂窝连接。
安装在ARGO上的计算架构的核心(如图2和图3所示)是基于单个奔腾MMX处理器(200MHz,32MB RAM)。该PC配备了一些额外的板卡,用于图像采集、图像可视化、声音警告以及来自特定设备的数据I/O。
GOLD(通用障碍物和车道检测)是驱动ARGO车辆的软件,其设计尽可能具有可移植性;因此,它独立于特定的Linux发行版/库,并且可以针对libc或glibc进行编译。此外,由于我们安装的第一个内核(2.0.18)的高度稳定性,ARGO上当前使用的发行版仍然是Debian 1.2。
以下是对ARGO适配器/软件库及其对Linux支持的描述。
采集设备:由于ARGO依赖于基于视觉的处理引擎,因此采集设备是最重要的硬件。GOLD需要一个帧捕获器,能够同时从两个不同的摄像机捕获两个灰度图像。感谢关于Linux和视觉的特定邮件列表(http://atlantek.com.au/USERS/wes/linux/frame.html)的可用性,我们发现只有Matrox Meteor RGB帧捕获器在Linux支持的硬件中具有此功能。Matrox Meteor模块尚不兼容video4linux。然而,许多示例及其源代码的可用性使我们能够快速与此硬件交互。
数据I/O:虽然帧捕获器可以被认为是主要的输入设备,但自动驾驶还需要一个用于操纵方向盘的输出设备。ARGO PC中安装了National Instruments LabPC+ ISA适配器;它提供了许多多功能模拟、数字和定时I/O端口。因此,它用于驱动方向盘执行器(步进电机)、确定车辆速度(通过霍尔效应速度计)以及从控制面板输入用户命令,如图2所示。LabPC+的使用非常简单,因为Linux模块为每个不同的I/O端口提供了一个设备和简单的ioctl。
声音警告:声音警告被反馈给驾驶员。使用OSS免费声音模块开发了标准声卡的简单接口。
图像可视化:计算结果也通过安装在ARGO车辆上的彩色6英寸显示器反馈给乘客(见图4)。软件的开发需要能够检查中间结果和输入调试命令。为此,开发了两个接口,一个基于VGA,一个基于X11。在第一种情况下,SVGA库用于显示(中间)结果,ncurses库用于输入用户命令。在第二种情况下,也使用了xform widget库(见图5)。
编程工具:利用奔腾处理器的MMX功能来提高处理速度。GOLD代码的几个部分使用MMX汇编语言直接重写,并使用Netwide Assembler (NASM) 进行编译,NASM是一个通用x86汇编器,支持奔腾、P6和MMX操作码。
互联网连接:在车辆演示期间,驾驶舱的实时视频镜头被广播到互联网。为了实现这一点,建立了到互联网的链接。这种类型的链接意味着使用移动电信设施,如GSM或卫星调制解调器,并施加以下约束
低比特率传输带宽(通常略多于每秒一千字节)
移动过程中带宽的高度可变性
频繁的载波丢失
为了提高链路的吞吐量,同时使用了两个GSM调制解调器。事实上,Linux内核提供了一种使多个串行链路表现为单个更快连接的特定方法:EQualize负载均衡器 (EQL)。其基本思想是将网络流量分配到串行线路上。此外,EQL还支持具有不同吞吐量和协议的链路。
为了不过分加重主处理引擎的负担,车辆上安装了另一台廉价的Linux机器(康柏笔记本电脑),并配备了并行端口Quickcam彩色摄像头(Linux支持)和两个GSM调制解调器,能够使用MNP10-EC协议以高达9600Kbps的速度工作。一个自定义应用程序用于从Quickcam抓取图像,将其转换为JPEG格式,并通过利用EQL的两个GSM调制解调器将其发送到我们的Web服务器http://MilleMiglia.ce.unipr.it/(第三台Linux机器)。一旦收到这些图像,图形时间戳就会叠加在其下部,并在互联网上提供。一个在后台持续运行的简单脚本用于在连接丢失时(由于隧道、GSM未覆盖区域等任何原因)恢复这两个连接。
为了在不同的交通条件、道路环境和天气下广泛测试车辆,于1998年6月1日至6月6日进行了2000公里的旅程。在此测试期间,ARGO沿着意大利高速公路网络自主驾驶,穿过平坦区域和丘陵地区,包括高架桥和隧道。意大利道路网络特别适合进行如此广泛的测试,因为它具有快速变化的道路场景、不断变化的天气条件以及通常相当多的交通量。巡游发生在高速公路和快速路上,但该系统也被证明可以在结构足够规则的乡村道路上工作,且没有交叉路口。
在旅程中,除了数据采集和自动驾驶处理的正常任务外,系统还记录了最重要的数据,如速度、方向盘位置、车道变换、用户干预和命令,并在系统难以可靠地检测道路车道时转储系统的整个状态(包括图像)。
这些数据在巡游结束后离线处理,以便计算系统总体性能,如自动驾驶的百分比,并分析意外情况。从给定的系统状态开始重新处理相同图像的可能性允许重现检测到故障并找到解决方案的条件。在巡游结束时,系统日志包含超过1200MB的原始数据,而在整个巡游期间,系统处理了约1,500,000张图像(每张768 x 288像素),总计约330GB的输入数据。
在巡游期间,ARGO车辆向互联网广播了实时视频流:两个GSM蜂窝调制解调器连接到帕尔马大学信息工程系的视觉实验室,用于传输有关测试进度的最新消息以及驾驶舱内摄像头采集的图像,以演示自动驾驶。证明科学界、大众媒体和普通公众对此有浓厚的兴趣,网站http://MilleMiglia.CE.UniPR.IT/在巡游期间被访问超过350,000次,传输了超过3000MB的信息,在巡游的第一天,每小时访问量达到16,000次的高峰。
巡游期间遇到的主要问题是由于图像采集。该项目的一个目标是开发一种成本足够低的系统,以便于将其集成到大量车辆中,因此使用低成本采集设备是一个明确的起点。特别是,安装了可视电话摄像头(小型传感器,平均每个成本为100美元)。虽然这些摄像头即使在弱光条件下(在夜间)也具有高灵敏度,但场景照明的突然变化(例如,在隧道入口或出口处)会导致图像质量下降。(它们是为以恒定照明为特征的应用而设计的,如可视电话。)摄像头具有缓慢的自动增益控制,在隧道出口处大约有100到200毫秒的持续时间;因此,采集的图像完全饱和,其分析变得不可能。
图6. MilleMiglia in Automatico 巡游期间的自动驾驶
另一方面,处理系统的设计被证明适合车辆的自动驾驶。此外,当前技术提供的处理系统具有比ARGO上安装的系统更强大的特性:一台具有200MHz奔腾处理器和32MB内存的商用PC。在这样一个系统上,通过能够同时采集两个立体图像(分辨率为768x576像素)的视频帧捕获器增强,GOLD系统每秒处理多达25对立体帧,并每40毫秒为自主转向提供控制信号。(当车辆以100公里/小时的速度行驶时,这相当于每米对方向盘位置进行一次微调。)显然,处理速度会影响最大安全车速:处理速度越高,最大车速越高。
不同的天气条件,特别是光线条件,证明了该方法和图像处理算法的稳健性。事实上,即使在关键的光线条件下,系统始终能够提取导航任务的信息,例如在阳光直射摄像头、地平线高或低、傍晚以及白天、高对比度或低对比度的情况下。在夜间,由于没有阳光反射和阴影,系统的行为得到改善,而感兴趣区域始终被车辆前灯照亮。
图7. MilleMiglia in Automatico 巡游路线
最后,尽管巡游期间测得高温,但该系统仍然出人意料地稳健。在某些情况下,外部温度达到35摄氏度,即使在没有空调的情况下,系统仍然可靠地工作。
对巡游期间收集的数据进行分析,可以计算出许多关于系统性能的统计数据(见表1)。特别是,对于巡游的每个阶段,计算了自动驾驶期间车辆的平均速度和最大速度。平均速度受到交通拥堵状况(尤其是在都灵、米兰和罗马的绕城公路上)以及收费站、交叉路口和道路工程的影响很大。
自动驾驶百分比和最大距离显示出较高的值,尽管存在许多隧道(尤其是在亚平宁山脉的安科纳到罗马和佛罗伦萨到博洛尼亚的路线上)以及几段道路,这些道路的车道标记缺失或磨损(费拉拉到安科纳和安科纳到罗马),甚至根本没有车道标记(佛罗伦萨到博洛尼亚)。从根本上重要的是要注意,一些阶段包括通过收费站和通过交通繁忙且经常排队的绕城公路,在此期间系统不得不关闭。
在整个项目中,选择基于英特尔的平台,并结合Linux操作系统,已被证明极其可靠;在过去的两年中,由于这些系统组件造成的故障次数为零。
最初,选择Linux操作系统(而不是实时操作系统或工业PC操作系统)背后的主要原因是可用的最新开发和调试工具、驱动程序和关于特定硬件设备的常见问题解答,以及与互联网上大量研究人员互动的可能性,以便解决问题。
未来研究的主要课题(ARGO项目,第二阶段)与开发一种新的车辆有关,该车辆集成了道路跟随和编队行驶(自动跟随手动驾驶车辆)功能。在下一阶段,处理引擎将是更高性能的基于英特尔的架构,再次由Linux操作系统驱动。


