技术文章和通讯

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

艾伦·蒙德,Voyage Auto


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

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

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

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

限制自动驾驶汽车的复杂性

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

远航自驾车出租车的图2.系统概述。

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

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

启动开发与自适应巡航控制系统的实例

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

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

下载该模型并在Simulink运行一些初步的模拟后,我从机器人系统工具箱中生成了一个独立的ROS节点的C++代码。™ 和Simulink编码器™.金宝app 我们的自驾出租车的所有软件都是模块化的,每个子系统感知、路径规划和纵向控制等都作为ROS节点运行。三天之内,我们在车上运行了ACC生成的代码。

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

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

我们回到绘图板,从地面上设计了一个系统,从字面上到白板上,建立了一个基于第一原理描述出租车运动的运动学模型。我们在Simulink中实现了这个运动学模型,以此作为控制器设计的基础。MPC模型满足了我们的要求,并加入了额外的逻辑来处理原始MPC模型处理的次优的边缘情况和场景,如停转驾驶。金宝app

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

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

进行车内测试

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

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

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

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

因为测试另一辆车突然转向我们的车道是不安全的,所以我们创建了一种新型的ROS节点来模拟鬼的障碍-essentially,虚拟车辆,我们可以从出租车不同距离的位置。我们在Simulink中创建这个虚拟车辆和参数,以便我们能够,例如,有金宝app它从零开始的速度和逐渐增加的速度。我们生成的代码与Simulink的编码器的ROS节点,然后使用节点测试和调整控制金宝app器的制动性能。与此节点,其只用了几个小时,要发展,就可能会产生在我们的的士前面的虚拟障碍,看看它的反应如何,然后直到它安全,平稳停止调整它的性能。

在路上

我们采用基于模型的设计开发的纵向控制器在运行中在航程服务于退休社区自开出租车。我们看到需求增加,与每星期的使用增长了10%。我们的工程团队从这些游乐设施中收集的数据中学习,我们将继续通过合并我们学会推敲控制器。

2018年出版

查看相关行业的文章