技术文章及通讯

为自动驾驶出租车开发纵向控制

作者:Alan Mond, Voyage Auto


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

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

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

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

自动驾驶汽车的复杂性

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

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

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

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

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

首先,我们的团队研究了如何尽快安全实施纵向控制。我们决定从MATLAB开始自适应巡航控制(ACC)系统实例.本例包括一个Simulink模型,该模型使用MP金宝appC来实现一个ACC系统,该系统能够保持设定的速度或与领先车辆的设定距离(图4)。

图4。金宝app自适应巡航控制系统的Simulink模型。

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

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

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

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

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

我们在Simulink中模拟了控制模型,以确保其输出、加速踏板位置和金宝app制动踏板位置看起来合理,并且模型的表现符合我们对目标输入集的预期。

进行车内测试

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

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

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

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

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

在路上

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

2018年出版的

查看相关行业的文章