技术文章和通讯

自动驾驶出租车纵向控制系统的开发

艾伦·蒙德,Voyage Auto


第一位乘坐我们自动驾驶出租车的乘客是一位名叫贝弗的盲人妇女。当被问及这次驾驶时,贝弗说她觉得很安全——感觉比视力正常的人开的一些车要平稳得多。从Voyage到现在的Cruise,我们希望每位乘客都能感受到同样的安全和舒适。

作为一家小型初创公司,我们要与许多致力于自动驾驶技术的大型公司竞争,我们希望尽可能快地迭代。我们团队的目标之一是尽量缩短在白板上探索想法和将这些想法付诸实践之间的时间。为了实现这个目标,我们集中精力,将我们的第一个出租车服务范围扩大到小社区(图1),并通过多次迭代改进我们的设计。我们使用Docker容器来管理系统依赖关系,并使用机器人操作系统(ROS)作为感知、运动规划和控制的中间件。我们使用基于模型的设计,而不是手动编写纵向控制系统的模型预测控制(MPC)算法®和仿真软万博1manbetx件®

我们的三名工程师团队只用了两个月就完成了最初的制动和加速控制系统。

图1所示。一辆Voyage自动驾驶出租车行驶在佛罗里达州村庄社区的路上。

图1所示。一辆Voyage自动驾驶出租车行驶在佛罗里达州村庄社区的路上。

自动驾驶汽车的复杂性

自动驾驶汽车集成了多个复杂的系统来感知周围环境,规划通往目的地的路径,控制转向和速度(图2)。设计和实现这些系统的挑战是环境中的所有物体和危险,包括十字路口、人行横道、环岛、建筑活动、行人、u型弯道、单行道、动物和限速,更不用说其他车辆不可预测的驾驶模式。

图2。Voyage自动驾驶出租车的系统概述。

图2。Voyage自动驾驶出租车的系统概述。

为了简化控制设计的挑战,我们决定在战略合作伙伴的退休社区部署我们的第一个自动驾驶出租车(图3)。这些社区不仅有良好的地图和明确的定义,他们还设置了速度限制,通常是25英里每小时(40公里每小时)。

图3。鸟瞰图村退休社区。

图3。鸟瞰图村退休社区。

以自适应巡航控制系统为例启动开发

首先,我们的团队研究了如何尽快安全地实施纵向控制。我们决定从MATLAB开始自适应巡航控制(ACC)系统示例.该示例包括一个Simulink模型,该模型使用M万博1manbetxPC实现ACC系统,能够保持固定的速度或与前车保持固定的距离(图4)。

图4。万博1manbetx自适应巡航控制系统的Simulink模型。

图4。万博1manbetx自适应巡航控制系统的Simulink模型。

在下载了这个模型并在Simulink中运行了一些初步的模拟之后,我用Robotics System Toolbox™和Simulink Coder万博1manbetx™从模型中为一个独立的ROS节点生成了c++代码。我们的自动驾驶出租车的所有软件都是模块化的,每个子系统——感知、路径规划和纵向控制等等——都作为ROS节点运行。三天之内,我们就在我们的车上运行了ACC生成的代码。

从头开始创建我们自己的模型预测控制器

虽然ACC Simulink万博1manbetx模型有潜力,但它不能满足我们的所有需求。例如,车辆在启动和停止时过于颠簸,我们发现乘客对这种类型的运动特别敏感。(我们出租车上的乘客不一定会感受到检测和感知算法的效果,但他们会立即感受到纵向控制的效果。)

我们回到绘图板上从头开始设计了一个系统,真的是在白板上创建了一个运动学模型,根据第一原理来描述出租车的运动。我们在Simulink中实现了该运动学模型,并将其作为控制器设计的基础。万博1manbetx然后,我们修改了MPC模型的参数以满足我们的需求,并加入了额外的逻辑来处理边缘情况和原始MPC模型处理不佳的场景,例如走走停停的驾驶。

在开发的早期阶段,我们从rosbag日志文件中导入千兆字节的数据到带有Robotics System Toolbox的MATLAB环境中,并过滤掉与纵向控制器无关的所有ROS主题。一旦数据被导入,我们就可以像访问任何其他MATLAB变量一样访问它,这使得它很容易分析和使用。

我们在Simulink中模拟控制模型,以确保其输出、加速踏板位置和刹万博1manbetx车踏板位置看起来合理,并且模型的行为符合我们对目标输入集的预期。

进行车内测试

模拟让我们对控制设计有了足够的信心,可以在车上进行试验,我们的团队是第一批乘客。我们从重新设计的ROS节点控制模型中生成c++代码,并将节点部署到Docker容器中的车辆上。Docker使我们能够创建具有所有必要依赖项的生产环境映像,然后在开发和测试过程中始终如一地维护和复制该映像。

在最初的车内测试中,很明显我们的控制器在加速和刹车方面过于激进。虽然我们在模拟过程中绘制的图表显示了速度的平滑变化,但实际的骑行体验却一点也不平滑。这一认识向我们强调了使用基于模型的设计快速从概念到道路测试的重要性。我们在实验室里根本无法很好地判断设计的质量;我们必须像乘客一样,在车里体验它。

我们完成了几次设计迭代,调整参数和约束,包括对加速度和震动的限制,以及时间常数和MPC输出更新的速率。我们在Simulink模型中设置了ROS参数,方便我们的同事直接万博1manbetx通过ROS校准参数。即使他们之前没有使用Simulink的经验,他们也可以快速更新参数值。万博1manbetx

创建虚拟车辆测试制动场景

因为测试另一辆车突然转向进入我们的车道的场景是不安全的,我们创建了一种新的ROS节点来模拟鬼的障碍-从本质上说,这是一辆虚拟车辆,我们可以把它放置在与出租车不同的距离上。我们在Simulink中创建了这个虚拟交通工具,并将其参数化,这样我们万博1manbetx就可以,例如,让它从零速度开始,然后逐渐增加速度。我们用Simulink Coder为ROS节点生成代码,然后使用该节点测试和调优万博1manbetx控制器的制动性能。有了这个只花了几个小时开发的节点,我们可以在出租车前面生成虚拟障碍,看看它会如何反应,然后调整它的性能,直到它安全平稳地停下。

在路上

我们使用基于模型的设计开发的纵向控制器在Voyage服务的退休社区的自动驾驶出租车中运行。我们看到需求在增加,使用量以每周10%的速度增长。我们的工程团队正在从这些驾驶过程中收集到的数据中学习,并通过结合我们学到的知识继续改进控制器。

2018年出版的

查看相关行业文章