软件体系结构
1、设计原则
在2004年和2005年的挑战之前,DARPA透露给竞争者们一个信息,四轮驱动的皮卡有通过整个赛程的能力。这些公告建议成功完成挑战的创新点在于设计出智能驾驶的软件,而不是设计独特的汽车。本公告及2004年比赛中的顶级选手指导了我们斯坦福大学赛车队的设计理念:将自动导航作为软件问题。
关于先前机器人架构的工作,Stanley的软件架构与著名的三层架构(Gat,1998年)有关联,虽然没有一个长期的象征性规划方法。许多指导原则证明了软件体系结构设计的必要性:
1.1、 控制和数据管道
在Stanley的软件系统中没有集中的主进程。所有模块按照自己的节奏执行,进程间没有同步机制。相反,所有的数据都是全局时间戳,并且在整合多个数据源时使用时间戳。该方法降低了死锁和处理延迟的风险。为了最大限度地提高系统的可配置性,几乎所有的进程间通信通过发布 - 订阅(publish-subscribe)机制实现。传感器到驱动器的信息单方向流动;相同的模块一次只接收到一个信息。在任何时间点上,管道中的所有模块都是同时工作的,从而最大限度地提高了信息吞吐量,最小化软件系统的等待时间。
1.2、状态管理
虽然软件是分布式的,但系统状态被局部保持着。系统中有许多状态变量。正常状态在局部监视器中;参数状态在参数服务器中;全局驱动模式保持在一个有限状态自动机中;汽车状态由状态估计模块估计。环境状态分解成多个地图(激光,视觉和雷达)。这些地图都被保持在专用模块中。结果是,所有其他模块将收到相互一致的值。确切的状态变量在后面的章节中讨论。所有的状态变量通过发布-订阅机制广播到软件系统的相关模块。
1.3、可靠性
软件非常注重机器人系统的整体可靠性。特殊模块监视各个软件和硬件组件,以及在检测到故障时自启动之类的组件。用这种方式,软件对某些事件是稳定的,如软件模块或停滞传感器的崩溃和挂起。
1.4、开发支持
最后,构造软件有助于系统的开发和调试。开发商可以轻松地运行软件的一个子系统,并且轻松在不同的处理器之间迁移模块。为了在开发过程中方便调试,记录下所有的数据。通过使用一种特殊的重放(replay)模块,软件可以在记录的数据上运行。开发一些可视化工具,使的汽车在运动期间或重播之前的记录数据时能够检查数据和内部变量。开发处理使用race-quality软件发布的一套具有严格规则的版本控制过程。总的来说,我们发现,开发过程中软件的灵活性对于长期自动操作的可靠性而言是非常基本的。
2、处理管道
比赛软件大约由30个并行执行的模块(图5)组成。系统被分解成六层:传感器接口,感知,控制,汽车接口,用户接口,以及全局服务。
图5 Stanley软件系统的流程图。软件大致分为六个主要功能组:传感器接口,感知,控制,汽车接口,用户界面。有许多相互交叉的服务,如过程控制器和记录模块。
2.1、传感器接口层包括许多软件模块,他们涉及接收和时间标记所有传感器数据。该层从每个激光传感器(75Hz),照相机(约12赫兹),GPS和GPS罗盘(10 Hz),和IMU和途锐CAN总线(100赫兹)接收数据。该层还包含一个数据库服务器,里面存储路程坐标(RDDF文件)。
2.2、感知层将传感器数据映射到内部模型。这层的主模块是无迹卡尔曼滤波(unscented Kalman filter,UKF)汽车状态估计器,它决定了汽车的坐标,方向和速度。三个不同的映射模块基于激光器、照相机和雷达系统构建一个二维(2D)环境地图。寻路模块使用激光驱动的地图寻找道路边界,使得车辆可以位于道路中间。最后,为了确定安全的驾驶速度,表面评估模块提取当前道路参数。
2.3、控制层负责调节汽车的方向盘,油门和制动响应。一个关键模块是路径规划,在方向盘和速度的定义域内它设置汽车的轨迹。这个轨迹传递给两个闭环轨迹跟踪控制器,一个用于方向控制,一个用于刹车和油门控制。两个控制器发送低级命令到驱动器,它能够忠实地执行规划的轨迹。控制层还设有一个顶层控制模块,作为一个简单的有限状态自动机。通过车载触摸屏或无线紧急制动,该模块确定整个汽车模块对用户命令的响应,并保持档位状态以防需要倒车。
2.4、汽车界面层作为机器人线控系统的接口。它包含汽车刹车,油门和方向盘的所有接口。它还有车辆服务器,一个调节许多系统组件电源的电路的接口。
2.5、用户界面层包括远程紧急制动和启动软件的触摸屏模块。
2.6、全局服务层对所有软件模块提供一些基本服务。命名和通信服务通过卡内基·梅隆大学的(CMU)进程间通信工具包(Simmons&Apfelbaum,1998年)。一个集中参数服务器维护所有汽车参数的数据并以一致的方式更新他们。每个系统部件的电力由电力服务器调节。另一个模块监控所有系统组件的运行状况并需要的时候重新启动单个系统组件。时钟同步通过一个时间服务器实现。最后,一个记录数据服务器的转储传感器,控制和诊断数据到磁盘以便重播和分析。
之后会更加详细地介绍Stanley的核心软件过程。然后本文用Stanley在比赛中的表现来进行总结。