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

艾伦·蒙德,Voyage Auto


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

进行车载测试

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

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

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

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

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

在路上

我们使用基于模型的设计(Model-Based Design)开发的纵向控制器已经在Voyage服务的退休社区的自动驾驶出租车中运行。我们看到需求在增加,使用量每周增长10%。我们的工程团队正在从这些飞行过程中收集的数据中学习,我们将继续整合这些数据来完善控制器。

2018年出版的

查看相关行业的文章