多伦多大学自动驾驶导论笔记-全-
多伦多大学自动驾驶导论笔记(全)
001:欢迎来到自动驾驶汽车专项课程

在本节课中,我们将介绍多伦多大学自动驾驶汽车专项课程的概览,包括课程目标、内容结构以及学习所需的基础知识。
大家好,欢迎来到多伦多大学的自动驾驶汽车专项课程。我是Steven。我是Jonathan。我们将作为您在整个专项课程中的讲师。自动驾驶汽车是沉睡的巨人,它有能力改变一切。它能提升道路安全,为所有人提供出行便利,同时显著降低驾驶成本。本专项课程将教授您在自动驾驶行业开启职业生涯所需的知识。
无论您来自学术界还是工业界,这些课程都将为您提供基础知识和实践技能,帮助您与自动驾驶汽车共同构建新的未来。在整个课程中,我们将向您展示来自我们研究以及我们自己的自动驾驶汽车(我们称之为“Autonoousose”)的真实世界数据和场景。
经过数十年的应用研究和屡获殊荣的探索,我们多伦多大学团队很高兴向您展示自动驾驶的核心技术细节。本专项课程共包含四门课程。
以下是第一门课程的内容简介。
在第一门课程中,我将向您介绍自动驾驶汽车的软件和硬件架构。到本课程结束时,您将能够设计自动驾驶汽车的基本硬件系统,识别自动驾驶软件栈的主要组件,并为自动驾驶汽车项目制定安全评估策略。
上一节我们介绍了课程概览,本节中我们来看看后续课程的核心内容。
在专项课程的第二门课程中,我将教授您关于自动驾驶汽车的状态估计、感知和定位。到本课程结束时,您将理解参数和状态估计的关键方法,开发并使用典型车辆定位传感器的模型,将扩展卡尔曼滤波器和无迹卡尔曼滤波器应用于车辆状态估计问题,并将激光雷达扫描生成的点云配准到静态环境的3D地图上。
在第三门课程中,我将教授您自动驾驶汽车的视觉感知。完成本课程后,您将能够将3D点投影到相机图像平面上,校准针孔相机模型,应用特征检测、描述和匹配算法进行定位与建图,开发并训练用于目标检测和语义分割的神经网络。您将把这些方法应用于车辆跟踪和可行驶路面估计。
在第四门也是最后一门课程中,我将教授您自动驾驶汽车的运动规划。到本课程结束时,您将能够设计轨迹展开运动规划方法,计算与静态和匀速运动物体的碰撞时间,在复杂的道路网络上规划路线,为车辆定义高级行为及状态转换(例如通过十字路口、绕过停放的车辆和并道),在存在静态障碍物的环境中开发运动学可行的路径,计算满足速度、曲率和移动物体运动规划约束的速度曲线,规划行为并执行操作以安全地在世界中导航,并在CARLA模拟器中获得调试和测试自动驾驶算法的宝贵经验。
因此,到专项课程结束时,您将对自动驾驶软件栈的架构和组件有详细的了解,并将能够编程实现您自己的自动驾驶汽车。
由于我们教授的是如何编程实现您自己的自动驾驶汽车,本专项课程有几项先决条件。
以下是学习本课程所需的基础知识列表。
- 您应精通线性代数,并熟悉矩阵、向量、矩阵乘法、秩、特征向量和逆矩阵。这些背景知识将有助于您理解贯穿各课程的控制、状态估计、感知和规划算法。
- 您还应熟悉统计学,特别是高斯概率分布。这些知识对于状态估计和感知非常重要,例如当我们从GPS和惯性测量中估计车辆速度和航向时。
- 您还应熟悉基础微积分和物理学,例如力、力矩、惯性和牛顿定律。
当然,了解如何驾驶汽车是有帮助的,但由于汽车是自动驾驶的,这并非本专项课程的硬性要求。如果您不具备这些必要的先决条件,Coursera上有优秀的机器人学、人工智能、深度学习等课程可以帮助您为此专项课程做好准备。

自动驾驶是一个不断发展和变化的领域,因此不仅跟上自动驾驶知识,还跟上机器人学、人工智能和深度学习的发展,将有助于您保持技术技能的敏锐度。前路漫漫,我们需要先驱者帮助我们到达彼岸。
那么,您准备好开始这段旅程了吗?

本节课中我们一起学习了多伦多大学自动驾驶汽车专项课程的总体介绍、四门核心课程的主要内容以及学习所需的基础知识准备。
002:课程概述与目标 🚗


在本节课中,我们将要学习多伦多大学自动驾驶汽车专项课程的第一门课程。我们将了解课程的整体结构、核心学习目标以及最终的项目实践。
欢迎来到多伦多大学自动驾驶汽车专项课程的第一门课程。我是斯蒂芬,我将担任您在本课程中的讲师。
本课程旨在向您介绍自动驾驶汽车的世界。我们将从定义“驾驶任务”开始,然后列出驾驶的各个要素,即您手握方向盘时会自动执行的所有操作。这包括许多感知任务,例如识别路标、其他车辆和行人,预测他们的行为,以及做出各种决策以在交通中安全行驶。
接下来,我们将探讨设计基本自动驾驶汽车硬件配置的不同方法,讨论一个通用的软件栈,用于将驾驶任务分解为可管理的组件,并讨论如何为决策制定表示感知到的环境。
随后,我们将研究如何在自动驾驶汽车设计中融入安全考量,包括软件和硬件两个方面。从那里,我们将进入车辆建模与控制领域。我们将建立一个捕捉车辆纵向和横向动力学的模型,定义一个调节车辆速度的控制器,定义一个跟踪期望路径的路径跟随控制器,甚至了解用于精确执行具有挑战性机动操作的最先进的模型预测轨迹控制器。
在本课程结束时,您将完成一个实际项目,在CarSim仿真环境中驾驶一辆自动驾驶汽车绕赛道行驶。您将测试控制设计的极限,并了解在车辆性能极限下驾驶所固有的挑战。
这些主题将为本专项课程中使用的自动驾驶基本术语奠定基础,列出构建自动驾驶解决方案的最重要要求,并展示如何在自动驾驶汽车中执行动态驾驶机动。
我非常高兴能向您介绍这些概念,并希望它们对您有所帮助,助力自动驾驶汽车成为我们日常生活的一部分。

那么,让我们开始吧。今天是构建自动驾驶汽车的好日子。😊

本节课中我们一起学习了:本课程的整体介绍、学习路径以及最终目标。我们明确了课程将从驾驶任务分解开始,逐步深入到硬件配置、软件架构、安全设计、车辆动力学建模与控制,最终通过一个仿真项目来综合应用所学知识,为后续深入学习自动驾驶技术打下坚实基础。
自动驾驶汽车简介:P03:自动驾驶汽车的故事

在本节课中,我们将回顾自动驾驶汽车发展历程中的主要里程碑。从早期的梦想与尝试,到现代技术的突破与挑战,我们将一同探索这段激动人心的历史。
概述

自动驾驶的未来看似近在咫尺,但抵达这一点的旅程漫长而艰辛。自动驾驶汽车的梦想几乎与汽车本身一样古老。本教程将带您从最初的构想开始,穿越数十年的技术演进,了解那些定义了这个行业的关键突破与挫折。
早期梦想与构想(1920s-1950s)
自动驾驶的构想很早就已出现。早在1925年,弗朗西斯·胡迪纳展示了一辆名为“美国奇迹”的遥控汽车,它空着驾驶座在曼哈顿街道上行驶,吓坏了路人。
需要澄清的是,这位本地机械师弗朗西斯·胡迪纳,并非著名的逃脱艺术家哈里·胡迪尼。后者曾因人们错误地将此壮举归功于他而感到相当不快,并引发了一场争执。
到了1956年,自动驾驶汽车的梦想依然活跃。通用汽车公司发布了一部宣传视频,声称自动驾驶汽车将在1976年问世。
在《未来的钥匙》中,通用汽车设想人类在高速公路上交出控制权,享受无压力的驾驶,乘客甚至可以通过语音激活的控制功能与汽车互动。这个预测在时间上有些乐观,但令人惊讶的是,该视频中的许多预测如今正在市场上成为现实。
主流灵感的来源直接来自于繁忙交通中的驾驶现实。毫无疑问,我们日常所做的最危险的事情之一就是开车。事实上,当今超过94%的驾驶事故都是由某种人为错误引起的。

那么,如果我们能通过自动化消除人为错误,从而最小化或完全消除驾驶死亡事故呢?此外,一个无人驾驶的未来还能带来许多其他深远的好处:你无需再专注于车道、转弯和交通,可以回复工作邮件、吃饭或放松,让早晨的时光变得高效得多。我们还可以将驾驶提供的出行便利扩展到全人类,而不仅仅是那些能够执行驾驶任务的人。
欧洲与美国的初步探索(1980s-1990s)

让我们回到自动驾驶汽车故事的开端,看看定义这个行业的里程碑、让一切成为可能的突破,以及提醒我们这个无处不在的自主驾驶愿景有多么雄心勃勃的挫折。
我们的旅程始于20世纪80年代欧洲的一些早期进展。先驱者们研究自动驾驶技术已超过40年,早期的车辆大多是部分自动驾驶,且以低速运行。
1986年,慕尼黑大学的恩斯特·迪克曼斯及其团队开创了一辆机器人货车,它可以在无交通的情况下完全自主驾驶。1987年,它的行驶速度达到了每小时60公里。
在20世纪90年代初,他的团队为尤里卡普罗米修斯项目做出了重大贡献,并开发了一辆使用心理计算机视觉(即专注于环境中兴趣点)的自动驾驶奔驰汽车。他们使用了超过50个当时最新的微处理器——Transputer,并采用了机器人技术中通用的概率方法,来融合传感器输入并实时应对道路情况。
最终,这辆奔驰汽车在交通中从慕尼黑行驶了1600公里到达哥本哈根,人类干预的平均间隔距离为9公里。
与此同时在美国,卡内基梅隆大学的NavLab实验室正忙于构建一系列能力不断提升的原型车。
1986年,他们的第一辆自动驾驶汽车NavLab1,使用多台Sun工作站,在道路上达到了每小时30公里的速度。
随后在1990年,NavLab2——一辆经过改装的悍马车,能够在越野和公路上自主行驶,在公路上达到了每小时110公里的自主速度。
这促使团队尝试了更具雄心的项目。1996年,他们完成了“无手横跨美国之旅”,这是一条横跨大陆的4800公里路线,自动驾驶比例达到了令人印象深刻的98.2%。
不久之后,加州大学伯克利分校的PATH项目崭露头角,成功演示了在I-5公路专用HOV车道上运行的自动驾驶车队。
1992年,四辆车以高速公路速度编队行驶,依靠道路上的磁标记进行精确的相对定位,并证明了使用这种编队行驶可以节省燃油成本并减少风阻。
成功的测试继续进行,1997年,完成了8到10辆车的大规模演示。该项目还牢固确立了雷达系统和车对车通信在自动驾驶汽车行业中的应用,带来了诸如自适应巡航控制和紧急制动等进步。
DARPA挑战赛与时代转折(2000s)
接下来在2002年,美国国防高级研究计划局宣布了其首次大奖赛,这将永远改变世界对自主机器人能力的看法。
第一届赛事于2004年举行,DARPA为获胜者提供100万美元奖金,条件是建造一辆能够穿越莫哈韦沙漠142英里的自动驾驶汽车。尽管第一届赛事只有少数几个车队成功起步,且卡内基梅隆大学的“红队”仅行驶了7英里就获得了第一名,但很明显,在没有任何人类帮助的情况下穿越沙漠140英里的任务确实是可能的。
在第二年的第二届DARPA大奖赛中,23支队伍中有5支打破了预期,在没有任何人类干预的情况下成功完成了赛道。斯坦福大学的车辆“斯坦利”赢得了挑战,卡内基梅隆大学的“沙暴”紧随其后。无人驾驶汽车的时代已经到来。
后来的2007年赛事,称为DARPA城市挑战赛,邀请大学在繁忙的道路上展示他们的自动驾驶汽车,并有专业特技驾驶员参与。这一次,在经历了一段令人揪心的30分钟延迟(因为大屏幕阻挡了他们的车辆接收GPS信号)后,卡内基梅隆团队脱颖而出,斯坦福大学的“初级”车辆获得第二名。
这三项大奖赛确实是自动驾驶汽车发展的一个分水岭时刻,改变了公众,更重要的是,改变了科技和汽车行业对全车辆自主可行性的看法。现在很明显,一个巨大的新市场正在打开,竞赛已经开始。
谷歌立即聘请了来自卡内基梅隆大学和斯坦福大学的团队负责人克里斯·厄姆森和迈克·蒙特梅洛,将他们的设计推向公共道路。到2010年,谷歌的汽车已在加利福尼亚州行驶了超过14万英里,后来在一篇博客文章中写道,他们有信心将交通事故死亡人数减少一半。他们对这一宏伟目标的追求持续至今,截至2018年10月,该团队已累计行驶超过1000万英里。
大约在同一时间,美国进行了首次自动驾驶测试,来自VisLab的两辆橙色货车完成了国际自动驾驶挑战赛,从意大利帕尔马大学到中国上海行驶了全程约1.5万公里,驾驶员干预极少。
一年后,沃尔沃展示了他们的“公路列车”概念,其中一辆车可以控制其后面的几辆车,从而减少道路拥堵并提高驾驶员舒适度。汽车驾驶员可以选择跟随一辆领头的卡车,但近距离跟随导致了频繁的车辆损坏,以及在雨天条件下的低能见度。
随着发展步伐的加快,越来越多的公司推动为道路测试建立法律框架。2012年,内华达州机动车辆管理局向谷歌颁发了有史以来第一张自动驾驶汽车测试许可证,这意味着他们现在可以在公共道路上进行自动驾驶测试。加利福尼亚州很快也效仿,强制要求公布各种测试统计数据以及人工干预率。
2013年,在第一辆奔驰汽车公开演示125年后,梅赛德斯-奔驰通过自主覆盖相同的106公里路线,展示了他们的自动驾驶能力。

随着多个参与者展示了可行的道路演示,公众对自动驾驶的兴趣开始高涨。内华达州的消费电子展成为展示最伟大自动驾驶技术和最狂野车辆重新设计的年度盛会。
大约一年后,谷歌展示了他们的“萤火虫”汽车,这是一款从头开始设计的自动驾驶汽车,最高时速可达40公里,没有方向盘或踏板。乘客可以坐下来放松,只有在感到不舒服时按下一个停止按钮。谷歌向我们展示了自动驾驶未来的可能面貌,而特斯拉也不甘落后。
大约在2015年底,特斯拉将一套自动驾驶功能引入名为“Autopilot”的软件中。到2016年,他们展示了Autopilot如何能够自动泊车,并可以通过按钮召唤车辆。这代表了当时部分自动驾驶功能的最大规模部署,并见证了特斯拉的Autopilot系统迅速积累了数百万公里的行驶里程。
挑战、事故与行业反思(2010s至今)
然而,不可避免地,随着自动驾驶行驶里程的扩大,2016年在佛罗里达州发生了第一起涉及特斯拉Model S的致命事故。这是由于摄像头和雷达传感器同时未能正确识别一辆左转的运输卡车,以及一位习惯了汽车自行其是的驾驶员疏忽所致。
这一挫折表明了依赖人类监控自动驾驶系统的危险性。尽管遭遇挫折,进展仍在继续。这也是自动驾驶出租车队概念开始流行的时候,像Zoox和nuTonomy这样的初创公司走在了前列。事实上,nuTonomy出租车于2016年首次在新加坡投入运营。
最后,我们来到2018年,以及那场在亚利桑那州夺走一名行人生命的臭名昭著的优步车祸。这一事件给自动驾驶汽车测试社区带来了冲击波。优步停止了测试,直到细节被完全理解。通过美国国家公路交通安全管理局的独立调查,我们将在第一门课程中更详细地讨论这个令人担忧的案例,作为自动驾驶系统仍面临挑战的一个例子。
因此,自动驾驶汽车的发展故事是一个取得巨大成功的故事,也是一个近年来似乎更频繁地发生挫折的故事。那么,是什么导致了测试期间自动驾驶事故的增加呢?
首先,自动驾驶汽车在复杂条件下行驶的里程数正在爆炸式增长,因此事故数量必然上升。事实上,Waymo最近宣布,截至2018年秋季,他们已经完成了超过1000万英里的自动驾驶。人类干预之间的间隔时间持续增长,最先进的系统可以行驶数千公里而无需任何干预。
人类水平的性能似乎近在咫尺,但行业比以往任何时候都需要更多支持来实现并超越这一雄心勃勃的目标。许多新老公司正努力在2020年之前将真正的无人驾驶汽车推向市场。首次大规模部署将出现在车队中,公司拥有车辆并提供革命性的新服务,如机器人出租车、无人驾驶配送。这项技术仍然相当昂贵,但随着规模经济的实现,价格将迅速下降。
为了实现我们期望无人驾驶汽车为社会带来的变革性变化,仍有许多工作要做。该行业将继续需要杰出的工程师来为驾驶提供创新的解决方案。
总结
本节课中,我们一起学习了自动驾驶汽车从早期构想到现代实践的发展历程。我们看到了先驱者的探索、DARPA挑战赛的关键推动作用、科技巨头的入场,以及行业发展过程中伴随的技术突破与安全挑战。自动驾驶的故事远未结束,它正站在从测试走向大规模商用的门槛上,等待着更多人贡献智慧,共同塑造个人出行的未来。

那么,真正的问题是:你准备好帮助塑造个人出行的未来了吗?
004:认识讲师史蒂文·瓦斯兰德

在本节课中,我们将跟随讲师史蒂文·瓦斯兰德的个人经历,了解他如何从一名广泛的兴趣爱好者成长为自动驾驶与机器人领域的研究者,并探讨该领域的发展现状与学习路径。
童年与广泛的兴趣 🧒
我童年时兴趣广泛,热爱各种事物。我曾以为自己可以成为一名科学家,或许是物理学家,也可能是化学家,但当时其实并没有明确的想法。成长过程中,我对未来并不担忧,度过了一段田园诗般的童年。

青年时期的挑战与发现 🚴
到了十六七岁或十八岁时,我开始思考需要做一些有趣的事情来充实人生。正是在这个阶段,我开始接受各种挑战,并逐渐认识到是什么在持续驱动着我。我热爱解决数学问题,喜欢在放学后和朋友一起钻研化学或微积分难题。这些只是我业余时间的消遣,并无特定目标。直到我开始认真尝试选择一项事业时,才发现了我所喜爱的事情经常出现的具体应用领域。
职业生涯的起点:航空工业 ✈️
大学毕业后,我在加拿大普拉特·惠特尼公司工作,这是一家小型喷气发动机制造商。在普拉特·惠特尼的工作经历令人着迷,我有机会参与测试喷气发动机控制系统,从而接触到了有趣的航空学知识。
然而,航空领域的挑战在于其极其严格的安全要求。你所做的每一件事都必须严谨无误,且每次都必须精确运行。该领域的发展很大程度上受制于经过反复验证的、已有三十年历史的技术。作为一名试图推动变革、改变世界的年轻工程师,这让我感到非常沮丧。
转向研究与机器人领域 🤖
我带着从航空航天工业中获得的美好经验以及对安全的重视,开始了研究生生涯,进入航空与航天领域,并开始建造无人机。
这本质上是解决问题和开发算法。例如,让无人机降落在行驶的汽车上,或者让自动驾驶汽车自行泊车、穿越障碍区域。所有这些问题都非常实际、具有应用性,并且你在构建过程中就能看到成果。你可以看到它运行得如何——如果无人机错过了汽车,它就会坠毁失败。这其中有一种令人兴奋的趣味性。
如何打造一辆自动驾驶汽车 🚗
要制造一辆自动驾驶汽车,首先需要将普通汽车改造成线控驾驶车辆。这意味着你可以将计算机接入汽车,并向油门、转向和刹车发送指令,汽车将实际执行这些操作。
# 伪代码示例:发送基础驾驶指令
send_command(throttle=0.5, steering_angle=0.1, brake=0)
一旦具备了这种能力,你就可以真正开始编程让它做任何你想做的事情。
接下来,你必须在后备箱加装一整套传感器和计算设备。拥有了所有这些部件,你就可以开始构建自己的自动驾驶车辆了。
研究重点与学术角色 🧪
我的实验室围绕一个理念建立:如果我们拥有一个真实的测试平台,并将其置于真实情境中,我们就能更快地了解当前方法的局限性。
我们真正关注的是寻找特别适合学术界的研究问题。例如,处理恶劣天气条件、应对一些边缘案例,或者试图从理论上证明我们所使用的方法具有可量化的安全性。在学术界,我们确实有很多具体问题可以研究。我们可以尝试许多大胆的想法,可以比工业界更自由、更快地探索可能的解决方案空间。
行业展望与挑战 🔮
我们肯定会看到这些车辆的性能不断提升。像特斯拉自动驾驶仪这样的系统每年都会变得越来越好。我们还将看到真正自主的车队在受限领域内运行,这些领域被认为是安全可控的。
但我仍然认为,要实现最终目标——在任何你想驾驶的地方实现完全自主——我们还有很多工作要做。这只是因为汽车可能失败的方式太多,它们必须理解的情境太多,有太多无法提前预测的奇怪状况。
给初学者的建议 📚
如果你刚接触自动驾驶领域,并认为这是一个美妙的领域想要尝试,我认为你首先应该完成这个Coursera专项课程。
除此之外,有数百种方法可以丰富你的知识,并更好地了解如何进入这个领域。整个领域依赖于机器人学、计算机视觉、神经网络与深度学习的基础。这些是你能够深入研究的领域,而它们的有趣之处在于也适用于其他美妙的应用,例如机器人操纵器、手机摄像头系统与视频拍摄功能改进、无人机飞行与物体跟踪等。你可以用这些知识做很多事情。
对于那些正在考虑自动驾驶是否是一个值得探索的方向的人,市场无疑将持续增长。对我们项目毕业生的需求非常惊人。
总结与个人感悟 🌟
回顾过去,我已经很久没有在放学后玩随机数学题了。想到我现在从事自动驾驶汽车的研究,并且已经玩了很多年无人机,我只是一个幸运的家伙。

在本节课中,我们一起了解了史蒂文·瓦斯兰德从广泛兴趣者到专业研究者的旅程,探讨了自动驾驶汽车的基本构建原理、当前的研究挑战与行业前景,并为初学者提供了进入该领域的学习路径建议。自动驾驶是一个融合多学科、充满实践乐趣与巨大发展潜力的前沿领域。
005:认识讲师乔纳森·凯利

概述
在本节课中,我们将认识本课程的讲师乔纳森·凯利教授,了解他的个人背景、职业选择动机,以及他对自动驾驶汽车技术所持的观点与责任感。

我叫乔纳森·凯利,是多伦多大学航空航天研究所的一名助理教授。
童年兴趣与启蒙
上一节我们认识了讲师,本节中我们来看看他如何对科技产生兴趣。童年时期,我每个月都喜欢去杂志店,总是阅读《大众机械》或《大众科学》。这些杂志包含了从太空旅行到新型车辆,再到新计算设计的各种有趣文章。正是这些内容最终促使我开始将科学技术视为一个可能的职业选择。
挑战者号事故的启示
对科技的早期兴趣引领我前行,但一次重大事件让我深刻认识到工程的责任。在我还很年轻的时候,发生了第一次航天飞机灾难,即挑战者号事故。我至今仍清楚记得当时的情景,并思考着一定是哪里出了严重问题,以及后果是多么可怕。那时巨大的爆炸场景让我震惊地坐着,我曾认为技术总是可靠的,它不会失败,汽车不会无缘无故爆炸。但在电视上看到这一幕,让我真切地体会到,扎实的工程在这些危及生命或可能改变人生的情境中至关重要。
自动驾驶汽车的责任与前景
认识到工程责任的重要性后,我们来看看这与自动驾驶汽车领域的关联。自动驾驶汽车在许多方面与此非常相似。作为工程师,我们有责任将这些系统设计得尽可能安全可靠。这是即将到来的最令人兴奋的技术革命之一。每天都有新的想法、技术和设计涌现。我常常坐在办公桌前,看到人们提出的创新性新想法和技术时,都会感到眼前一亮。这种兴奋感也来自于它可能改变技术格局,并做一些 potentially benefit a lot of people(可能惠及众多人群)的事情。

总结
本节课中我们一起学习了讲师乔纳森·凯利的背景。我们了解到他童年对科普杂志的兴趣引导他走向科技生涯,挑战者号事故让他深刻认识到工程可靠性的极端重要性,并将这种责任感与对自动驾驶汽车安全性的追求联系起来。最后,他表达了对该领域技术快速革新及其巨大潜力的兴奋与期待。
006:认识戴安娜-固件工程师


在本节课中,我们将跟随固件工程师戴安娜·伯吉斯,了解她在自动驾驶领域的职业路径、日常工作内容以及她如何进入这个令人兴奋的行业。我们将学习固件工程师在自动驾驶系统中的关键作用。
我是戴安娜·伯吉斯,目前在 Zs 公司的固件团队担任固件工程师。关于我的背景,我拥有滑铁卢大学的机电一体化工程学士学位。在校期间,我完成了许多实习,并在多个不同的岗位工作过。在加入 Zs 之前,我最近的一份工作是在 Peloton Technology,该公司专注于半自动驾驶卡车。我之所以能得到那份工作,是因为我曾在本迪克斯公司实习过,该公司生产卡车制动系统。因此,我通过卡车行业,以一种迂回的方式进入了自动驾驶领域,最终在 Zs 公司从事完全自动驾驶的工作。
我对机器人技术的兴趣始于高中早期。我一直对工程学抱有普遍的兴趣,并曾以为我大学会攻读机械工程。但在高中时,我选修了一些计算机课程,发现自己也喜欢编程。因此,我认为机电一体化是一个不错的选择。我还加入了一个机器人团队,即 FIRST 机器人团队。在这个团队中,你需要构建一个复杂的机器人,参加每年规则都会变化的比赛。这意味着每年都要为下一年的比赛构建一个全新的机器人。每场比赛都包含自主运行部分和驾驶员操作部分,因此需要完成更复杂的任务。通过这些经历,我对机器人技术产生了浓厚的兴趣,并在大学期间进一步巩固了这份热情。
上一节我们了解了戴安娜的职业背景和兴趣起源,本节中我们来看看她当前的具体工作内容。
我目前在固件团队工作。我的大部分工作都围绕着一个主要的运动控制单元展开。这个单元在车辆中帮助与其他部件协同工作,以控制车辆,例如移动制动器或整体移动机器人向任何方向转向。因此,我的很多工作是确保我们能为该单元编写驱动程序,并能与其他系统进行安全通信。
通过这些工作,我还能进行大量测试,并使用我们称为 Labo 的装置。这基本上是一个硬件在环测试器,它允许你在代码被部署到将在任何赛道上行驶的车辆之前,在真实的硬件上测试你的代码。


本节课中我们一起学习了固件工程师戴安娜的职业发展路径,从高中对机器人技术的兴趣,到大学选择机电一体化专业,再到通过卡车行业进入自动驾驶领域。我们了解到,作为一名固件工程师,她的核心工作是开发和测试车辆运动控制单元的驱动程序与通信系统,确保自动驾驶汽车能够安全、可靠地执行转向和制动等关键操作。她的经历展示了进入自动驾驶领域可以有多种路径,而扎实的工程基础和软硬件结合的能力至关重要。
007:认识温斯顿-软件工程师




在本节课中,我们将跟随软件工程师温斯顿的视角,了解他如何进入自动驾驶领域,以及他在该领域的具体工作内容。我们将学习到学生竞赛如何激发职业兴趣,以及自动驾驶中一个核心模块——定位与建图的基本概念。
我的名字是温斯顿·维尤。我目前在Zoox公司担任定位与建图方向的软件工程师。
我进入自动驾驶领域的契机是在大学最后一年。当时,通用汽车公司与汽车工程师学会联合发起了一项名为“Autodrive”的学生竞赛。这项竞赛为期三年,每年年底都会有一次比赛。最终目标是让各学生团队在三年后能够打造出一辆符合SAE自动驾驶等级中L4级别的车辆。
我当时领导着轨迹规划团队,并设计了我们在第一年比赛中使用的轨迹规划和车道变换算法。
最终,我们团队赢得了第一名。我们提交了一篇详细阐述我们设计的论文,这些成果至今仍在推动着相关进展。我意识到自己对自动驾驶汽车产生兴趣,这背后还有一个小故事。那要追溯到我大学生涯的初期。
我曾是学校“无人驾驶飞行器”学生团队的成员。我们建造的是半自主的固定翼无人机。它们由遥控器控制,搭载了工业摄像头和机载计算设备。我负责该项目的计算机视觉部分,具体任务是检测绘制在木质标牌上的字母。这些标牌被放置在地面上,而我们的飞机则在200英尺的高空飞行。
有一天,当我开车行驶在街道上时,我想到:我能否将用于检测标牌的这些计算机视觉工具,用来识别道路标志呢?我萌生了一个想法:在我父母的车上安装网络摄像头,然后开车在社区里转,检测所有的街道标志。不过,我的父母对此并不太支持,所以这个项目最终没有进行下去。
后来,当学校的Autodrive团队开始招募成员时,我觉得这很酷。而当我真正开始参与这个项目后,我意识到这就是我想从事的事业。于是,我来到了这里。
在Zoox公司,我隶属于CLAMS团队。CLAMS是一种贝类,在这里它是“校准、定位与建图同步进行”的缩写。我主要专注于建图方面的工作,这主要涉及生成3D地图。我无法透露更多细节,但可以说,目前通过构建我们的地图,我对旧金山地理的了解可能比亲自到过那里还要多。
真正让我每天早上充满动力去工作的原因是,我正在解决这些非常前沿、非常酷的问题。这些都是个人或公司以前未曾深入涉足的领域,因为它仍然是一个处于快速发展中的活跃领域。




本节课中,我们一起学习了温斯顿从学生竞赛踏入自动驾驶行业的经历。我们了解到,参与实际项目(如Autodrive竞赛)是激发兴趣和获得实践经验的重要途径。同时,我们也初步认识了自动驾驶系统中一个关键组成部分——CLAMS,它代表了校准、定位与建图的同步优化,是确保车辆精准感知环境的核心技术之一。温斯顿的故事展示了将学术兴趣与工程实践结合,最终投身于前沿科技领域的典型路径。
008:认识安迪-自动驾驶系统架构师


在本节课中,我们将通过自动驾驶系统架构师安迪·王的视角,了解他进入机器人学和自动驾驶领域的历程,以及他目前工作的内容和意义。


我是安迪·王,一名自动驾驶系统架构师。我早在高中时期就开始了机器人学的学习。我是加拿大最早参加机器人竞赛的学生之一。进入大学后,我协助共同创立了一个机器人团队。当时的指导老师刚从美国回来,他告诉我们那里正在举办一个名为DARPA挑战赛的比赛。这项赛事是推动整个自动驾驶行业兴起的关键事件之一。由此,我们衍生出一些自动驾驶赛车活动,我也参与其中。从那时起,我便深深着迷于此。
我工作了几年来积累经验,之后回到研究生院深造。在那期间,我学习了车辆控制与动力学。现在,我从事下一代自动驾驶汽车平台的工作。作为一名系统级工程师,我有幸能够与多个不同的团队广泛合作,共同构建一个完整的系统。这意味着我既要与负责感知、运动控制软件的软件工程师合作,也要与设计传感器和车辆平台的硬件工程师合作。
我认为机器人学非常有趣,而自动驾驶这个特定问题尤其令我热爱,因为它能直接影响人类的生活质量。我们不仅致力于提升安全性、挽救生命,它还可能有机会帮助我们重塑对交通的思考方式,甚至改变我们使用城市的方式,让生活更高效、更幸福。




本节课中,我们一起了解了自动驾驶系统架构师安迪·王从学生时代到职业发展的经历。他分享了如何通过机器人竞赛和DARPA挑战赛进入该领域,并阐述了其当前工作的跨团队协作性质,以及自动驾驶技术对提升人类生活质量和重塑未来社会的潜在影响。
009:认识保罗·纽曼-Oxbotica创始人、牛津大学教授




在本节课中,我们将跟随保罗·纽曼的视角,了解他投身自动驾驶领域的契机、他创立的公司Oxbotica的工作,以及他对自动驾驶汽车未来发展的核心观点。
我是保罗·纽曼,我是Oxbotica的首席技术官和创始人,同时也是牛津大学的信息工程学教授。
我记得自己开始对自动驾驶车辆和自主系统产生兴趣的那一天。那是在悉尼,当时我刚开始攻读博士学位,正在和一位博士生交谈。他向我介绍了一个名为“SLAM”的问题。这个问题是:一辆车能否在没有预先给定地图的情况下,自己弄清楚它在世界中的位置,并且自己构建出这张地图?我当时就意识到,这是我想要研究的“终极问题”。我记得很清楚,那是1996年3月19日,我真正发现这里存在一个重大问题。自那以后,这个问题从未让我感到厌倦。虽然我们现在已经知道如何解决这些问题了。
但我始终是一名工程师,热衷于建造东西。我发现,将软件和机械结合是建造东西最激动人心的方式,而这几乎就是机器人的定义。因此,我从未真正失去这份热情。大概从九岁开始,当我尝试为非常基础的计算机编程起,直到现在每天所做的工作,这种兴奋感从未离开过我。
那么,我们在Oxbotica做什么呢?我们开发让自动驾驶车辆实现自主的软件。我们的工作覆盖整个软件栈,从最底层的传感器开始,一路向上,贯穿规划、定位、控制、感知,直到车队管理系统。我们构建的是让整个车队实现自主运行的完整软件环境。

😊

这就是我们构建的东西。同时,我在大学里也进行开发工作。
我是牛津机器人研究所的所长,在那里我也拥有很棒的工作生活。在那里,我研究的是自主系统和机器人领域那些非常、非常困难的问题,这些问题可能是未来10年才会遇到的。其中一些是关于机器与智能、机器学习的最初期的研究问题,我们希望在未来5到10年内将其应用到我们的车辆中。因此,我拥有非常优越的生活和工作环境。
那么,我为什么如此关心自动驾驶汽车呢?因为目前的交通系统已经“完成”了,但它现在是有问题的。
道路上80% 的事故是由注意力不集中引起的。而机器不会做的一件事就是感到无聊。我们目前完全没有解决这个问题。我们目前的驾驶方式是低效的。随着我们年龄增长,身体变得虚弱,我们最需要的是保持与社会的联系。而如果我们说:“哦,抱歉,你视力下降了,不能开车了。你癫痫发作了,不能开车了。”那么,我们目前这套关于人类如何驾驶、如何移动自身(无论是人本身还是货物)的整个体系简直是荒谬的。它源自马车时代。如果我们现在拥有现有技术,我们绝不会那样做。
所以,目前的体系是荒谬的,而软件和算法将改变这一切。我绝对相信,自动驾驶技术将让更多的物体(人和货物)移动得更高效、更安全。
这里存在一个问题:车辆本身应该是独立智能的,还是应该利用智能基础设施?
那么,什么是智能基础设施?例如,一个交通灯可以告诉你“我即将变红,这是我的位置”。或者一个环岛可以告诉你“这是车辆的位置,你的空位即将到来”。我们可以用无数种方式来设想如何为我们的城市配备智能设备。
我的观点是,车辆本身需要足够智能,能够不依赖基础设施而运行。如果提供了智能基础设施,当然可以在信任它的前提下使用它,但这涉及到网络安全等一系列问题。所以,我的观点是,车辆本身必须足够智能,就像你作为司机一样。你可以看到交通灯,可以看到车道线,你不需要前面的车告诉你“前面有辆车”,因为你可以看到它。因为如果基础设施被移除了,你仍然希望自动驾驶车辆能够运行。基础设施可以增强车辆的能力,但我认为不应该依赖它。因为如果你解决了不依赖基础设施的问题,那么你才能真正掌握在任何地点实现全交通自主的可能。这可能需要一些时间,但你走在了正确的轨道上,并且不依赖于昂贵、定制的专用基础设施。在我看来,为自动驾驶汽车准备的昂贵、定制的专用基础设施,就是一座城市本身。

总结

本节课中,我们一起学习了保罗·纽曼教授进入自动驾驶领域的个人经历,了解了Oxbotica公司致力于开发覆盖全栈的自动驾驶软件,并探讨了他对自动驾驶核心问题的看法。他强调车辆应具备不依赖智能基础设施的独立智能能力,以应对更广泛、更复杂的交通场景,并从根本上改变现有低效且不安全的交通体系。
010:为什么要学习这门课程


在本节课中,我们将探讨投身自动驾驶汽车领域的原因,并了解学习相关课程的价值。我们将从道德、安全、效率等宏观层面,以及个人职业发展的具体角度进行分析。
投身自动驾驶领域的宏观理由
上一节我们了解了自动驾驶的基本概念,本节中我们来看看为何这个领域值得投入。
自动驾驶领域在道德、安全和效率方面具有根本性的吸引力。其核心目标是实现更优、更安全、更快速的物质运输。
公式:核心目标 = 更优的运输 + 更安全的运输 + 更快速的运输
此外,这个领域本身极具趣味性。它涉及的是非常复杂且尚未被完全解决的难题。我们并非能在某个特定日期(比如某个星期三)就宣告彻底攻克所有挑战。这意味着整个领域仍处于起步阶段,并将持续发展很长时间。所面临的问题不仅极其困难,而且多种多样。
学习本课程的个人价值
对于工程师而言,如果你热衷于攻克那些非显而易见、需要层层剖析的复杂难题,并且希望自己的工作能对未来的交通方式产生重大影响,那么这门课程和成为自动驾驶工程师的道路完全适合你。
这门课程在今天非常重要,因为它将教授自动驾驶领域的许多基础知识。课程涵盖广泛的主题,为你理解和开发未来的系统提供了必要的知识储备。
以下是学习本课程的具体益处:

- 构建知识体系:课程将教授广泛的主题,帮助你建立理解自动驾驶系统所需的知识框架。
- 培养适应能力:课程将使你成为一名灵活且知识渊博的工程师,能够适应这个快速发展的行业。
课程知识的实际应用与行业准入
对于任何试图进入该行业的人,这门(或这类)课程都非常有用。它们让你对实现车辆自动驾驶所涉及的一切有一个更全面、更清晰的概览。
课程中的知识具有很高的实用价值。例如,我在滑铁卢大学学习的控制课程(也是本系列课程的一部分)内容,就被我应用到了机器人技术的PID控制器中。
代码(PID控制器伪代码):
error = setpoint - current_value
integral += error * dt
derivative = (error - previous_error) / dt
output = Kp*error + Ki*integral + Kd*derivative
对于已经工作的专业人士,进入自动驾驶领域的一个途径是获得对我们所面临问题的了解,例如状态估计。学习这门Coursera课程正是掌握此类知识的一种有效方式。

本节课中,我们一起学习了投身自动驾驶领域的多重价值:从推动社会进步的宏观意义,到解决复杂工程难题的职业乐趣。同时,我们也明确了学习相关课程对于构建专业知识体系、培养行业适应能力以及实现职业转型的具体帮助。无论你是学生还是在职人士,掌握这些基础知识都是迈向这个激动人心领域的重要一步。
011:自动驾驶等级分类


在本节课中,我们将学习自动驾驶汽车的基本术语、驾驶任务的定义,以及一个用于对驾驶自动化水平进行分类的系统。我们将从基础概念开始,逐步深入到由国际自动机工程师学会(SAE)制定的详细分类标准。
概述
欢迎来到自动驾驶汽车入门课程的第一个模块。通过本模块,你将了解构建一辆自动驾驶汽车所需的主要组件,以及驱动其设计的技术要求。在开始之前,理解自动驾驶汽车的要求,或者说我们如何定义汽车的“自动驾驶”至关重要。第一周旨在让你对专业课程中将深入探讨的术语和概念有一个宏观的了解。
在模块1中,我将向你介绍自动驾驶汽车的分类法,即我们用来定义驾驶自动化的分类系统。接着,我会描述驾驶任务中的感知需求,即我们需要能够正确识别的项目。最后,我们将探讨如何做出驾驶决策,并讨论几种让车辆在环境中移动的决策方法。本模块的目标是提醒你,驾驶任务实际上需要多少评估和决策。希望这能帮助你理解,在保障道路安全方面,我们人类能够有效管理多么复杂的任务。
基本术语与定义
我们将首先介绍一些技术术语和定义。这些术语将在整个专业课程中使用,如果你在这个行业工作,了解它们会很有帮助。
驾驶任务
广义上讲,驾驶任务由三个子任务构成。
- 感知:感知我们正在驾驶的环境。这包括跟踪车辆的运动,以及识别周围世界中的各种元素,如路面、路标、车辆、行人等。我们还需要跟踪所有移动物体并预测其未来运动,以便安全、准确地驾驶。
- 运动规划:这使我们能够成功到达目的地。例如,你可能想从家开车到办公室,因此你需要考虑应该走哪条路、何时应该变道或通过十字路口,以及如何执行绕开路上坑洼的转向操作。
- 车辆控制:我们需要操作车辆本身。因此,我们需要采取适当的转向、制动和加速决策来控制车辆在道路上的位置和速度。
这三个子任务构成了主要的驾驶任务,在驾驶车辆时需要持续执行。
运行设计域
接下来要介绍的概念是运行设计域,简称 ODD。ODD 构成了给定系统设计运行的操作条件。它包括环境、时间、道路特征以及其他汽车能够可靠运行的条件。明确定义自动驾驶汽车设计运行的操作条件对于确保系统安全至关重要,因此需要提前仔细规划 ODD。
自动驾驶等级分类
现在我们已经了解了一些基本术语,让我们来探讨核心问题:如何对驾驶系统的自动化水平进行分类?
以下是需要考虑的几个方面:
- 驾驶员注意力需求:例如,你可以在上班途中看电影吗?还是需要时刻将注意力集中在方向盘上?
- 驾驶员操作需求:例如,你需要转向吗?汽车负责控制速度还是你也需要控制?你需要变道吗?或者汽车可以在当前车道行驶而无需干预?
- 驾驶任务的定义:当我们说汽车可以自动行驶时,我们具体需要期待什么?我们之前已经广义地定义了驾驶任务,但需要更深入地讨论。
所有这些问题引导我们走向自动驾驶分类法。标准在不断演变,但为了我们的分类目的,我们将采用国际自动机工程师学会在2014年提出的分解方法。
驾驶任务的分解描述
现在,让我们讨论一种以自动化水平递增的方式来描述驾驶任务的方法。
- 横向控制:指在道路上转向和横向导航的任务,例如左转、右转、直行或跟踪弯道等。
- 纵向控制:指通过制动或加速等操作,控制车辆沿道路方向的位置或速度的任务。
- 物体与事件检测及响应:简称 OEDR。这本质上是检测直接影响驾驶任务的物体和事件,并做出适当反应的能力。OEDR 实际上涵盖了自动驾驶的很大一部分,因此通常与特定的运行设计域结合使用,来对当前的自驾系统进行分类。
- 规划:规划是驾驶的另一个重要方面。由于即时响应已经是 OEDR 的一部分,规划主要关注前往目的地或执行变道、通过十字路口等操作所需的长短期计划。
- 其他任务:人们在驾驶时还会执行一些杂项任务。这些包括使用指示灯示意、挥手、与其他驾驶员互动等。
现在,我们对自动驾驶汽车应执行的任务有了清晰的描述。
分类的关键问题
基于以上分解,我们可以提出以下问题,从而得出自动驾驶汽车自动化水平的分类法:
- 该系统能处理转向任务(横向控制)吗?
- 它能执行加速、制动和速度操控任务(纵向控制)吗?
- 该系统能执行物体与事件检测及响应吗?程度如何?关键的是,它能自行处理紧急情况吗?还是始终需要驾驶员在紧急情况下保持注意力?
- 该系统能在所有场景和条件下运行吗?还是它有一个有限的 ODD 或一组可以安全处理的操作条件?
SAE J3016 自动化等级
基于这些问题,让我们来看看 SAE 标准 J3016 定义的常用自动化等级。
-
等级 0:无自动化
这是完全由人类进行感知、规划和控制的等级。没有任何驾驶自动化,所有事情都由驾驶员完成。 -
等级 1:驾驶辅助
如果自动驾驶系统通过执行横向或纵向控制任务来辅助驾驶员,我们就处于等级 1 自动化。自适应巡航控制是一个很好的例子。在自适应巡航控制中,系统可以控制车速,但需要驾驶员执行转向。所以它能执行纵向控制,但需要人类执行横向控制。类似地,车道保持辅助系统也属于等级 1。在车道保持辅助中,系统可以帮助你保持在车道内,并在你偏离车道边界时发出警告。当今的系统依赖于对车道边界的视觉检测,并结合车道居中的横向控制。 -
等级 2:部分自动化
在等级 2,系统在特定驾驶场景中执行横向和纵向两种控制任务。等级 2 功能的一些简单例子包括通用的 Super Cruise 和日产的 ProPilot Assist。这些系统可以控制你的横向和纵向运动,但始终需要驾驶员监控系统。如今,许多汽车制造商提供等级 2 自动化产品,包括梅赛德斯-奔驰、奥迪、特斯拉和现代。 -
等级 3:有条件自动化
在等级 3,除了控制任务外,系统还能在一定程度上执行物体与事件检测及响应。然而,在发生故障时,控制权必须由驾驶员接管。等级 2 和等级 3 的关键区别在于,在某些特定情况下,驾驶员不需要集中注意力,因为车辆可以及时提醒驾驶员进行干预。这是一个有争议的自动化等级,因为自动驾驶系统并不总是能知道何时发生故障。等级 3 系统的例子包括奥迪 A8 豪华轿车,它拥有一个可以在慢速交通中无人监控导航的自动驾驶系统。 -
等级 4:高度自动化
在下一个等级,我们达到了高度自动化车辆的水平,系统能够在驾驶员未及时干预紧急情况时,达到最小风险状态。等级 4 系统可以自行处理紧急情况,但仍可能要求驾驶员接管以避免不必要地靠边停车。拥有这种程度的自动化,乘客可以查看手机或看电影,因为他们知道系统能够处理紧急情况并保障乘客安全。然而,等级 4 仍然允许自动驾驶系统具有有限的 ODD。截至 2018 年秋季,只有 Waymo 部署了具有此等级自动化水平的公共交通工具。Waymo 车队可以在定义的地理区域内,在一组标称的操作条件下处理驾驶任务,无需人类驾驶员。 -
等级 5:完全自动化
最后,在等级 5,系统完全自主,其 ODD 不受限制,意味着它可以在任何必要的条件下运行。等级 5 是我们的社会发生变革的时刻,无人驾驶出租车将人们和包裹运送到任何我们需要的地方。目前我们还没有等级 5 的例子,但也许不久的将来,你会是将其变为现实的人。
需要注意的一点是:自动化等级实际上是对自动化的粗略衡量。事实上,两款车型可能都声称具有等级 4 自动化,但拥有非常不同的能力和 ODD。
总结
在本节课中,我们涵盖了与自动化相关的各种概念。我们介绍了一些基本定义,包括运行设计域和驾驶任务的概念。我们还探讨了驾驶自动化的五个等级。现在,你可以评估自动驾驶系统的自动化水平了。


在下一课中,我们将探讨感知的要求,这是自动驾驶系统设计的一个关键方面。
012:感知系统的要求




在本节课中,我们将开始分析驾驶任务是如何执行的。具体来说,我们将详细探讨感知的多个过程。我们将首先定义感知任务,列出感知的要求,例如需要识别哪些静态和动态物体,以及跟踪自车在环境中运动的需求。最后,我们将讨论实现鲁棒感知所面临的一些挑战。
感知:理解环境与自身运动
上一节我们介绍了根据能力和运行设计域对自动化进行分类。本节中,我们来看看驾驶任务的核心组成部分之一:感知。
粗略地说,任何驾驶任务都可以分解为两个部分。首先,我们需要理解周围发生了什么以及我们身处何处,即感知我们的环境。其次,我们需要做出驾驶决策,例如,在行人即将进入道路时,我们应该加速还是停车?
回想上一课中提到的 OEDR 概念,即物体与事件检测及响应。任何驾驶任务都需要某种形式的 OEDR,这意味着我们需要某种方式来识别周围的物体、识别附近发生的事件并对其做出响应。我们讨论的自动化系统分类中,OEDR 就是标准之一。换句话说,如果我们想制造一辆自动驾驶汽车,就需要能够执行 OEDR。
感知的具体任务
让我们进一步分析 OEDR 的一个关键部分:感知。什么是感知?如前所述,我们希望理解周围的环境以及我们在其中的运动方式。具体来说,对于道路上的任何智能体或元素,我们需要首先识别它是什么(汽车、骑行者、公交车等)。其次,我们希望理解它的运动——它是否以某种方式移动,这能告诉我们它接下来会做什么。
人类非常擅长理解模式。然而,计算机系统要像我们一样快速识别周围的相同模式仍然很困难。我们能够预测运动物体的轨迹,这对于感知至关重要。如果能够正确预测,我们就能做出明智的决策。例如,如果我知道前方车辆接下来要做什么,我就可以决定下一步该怎么做,以实现我们双方的目标。
需要识别的静态元素
以下是感知任务中需要识别的各类静态元素:
- 道路元素:如道路本身、车道线、分隔道路区域的斑马线,以及“前方学校”等重要信息标识。
- 路外元素:如路缘石,它定义了我们可以行驶的边界。
- 交通信号:周期性变化,指示你是否可以前进、左转、右转或必须停止。
- 道路标志:如限速标志、方向指示标志、医院或学校预告标志等。这些也属于路外元素。
- 道路障碍物:如指示施工或道路封闭的橙色锥桶。这些属于道路元素。
需要识别的动态元素
接下来,我们讨论感知中需要识别的动态元素。这些元素的运动需要我们进行预测,以便做出明智的驾驶决策。
- 其他车辆:需要识别道路上的其他车辆,如卡车、公交车、汽车等四轮车辆。
- 两轮车:需要识别并预测摩托车、自行车等两轮车的运动。这些系统比四轮车拥有更多自由度,因此更难预测。
- 行人:应该能够识别并预测周围行人的运动。行人的行为方式与车辆有很大不同,因为人类在移动方式上具有固有的自由性,其运动通常比车辆更难以预测。
自车定位
感知的另一个关键目标是自车定位。我们需要能够随时估计自身的位置和运动状态。了解我们在环境中的位置和运动方式,对于做出明智且安全的驾驶决策至关重要。
用于自车运动估计的数据来自 GPS、IMU 和里程计传感器,需要将这些数据组合起来,以生成关于我们位置的连贯图像。
本专业的第二和第三门课程将深入探讨这些基本的感知任务,从第二门课程的自车定位开始,接着在第三门课程中学习道路内外物体的检测与跟踪。
感知面临的挑战
既然我们已经讨论了感知的主要目标,让我们通过探讨感知为何也是一个难题来结束本次讨论。
- 实现鲁棒的感知:这是一个巨大的挑战。检测和分割可以通过现代机器学习方法来解决,但为了达到人类水平的能力,仍在进行大量研究以提高其可靠性和性能。获取大型数据集对此至关重要,更多的训练数据能使我们的分割和检测模型表现更好、更鲁棒。然而,为所有可能的车辆类型、天气条件和路面收集和标注数据是一个非常昂贵且耗时的过程。
- 传感器不确定性:感知无法免受传感器不确定性的影响。很多时候,能见度可能具有挑战性,或者 GPS 测量值被干扰,或者 LiDAR 和雷达返回的位置值存在噪声。依赖这些传感器的每个子系统都必须考虑不确定的测量结果。因此,设计能够适应传感器不确定性和损坏测量的子系统,对于每个感知任务都至关重要。
- 遮挡与反射:相机或 LiDAR 数据中存在遮挡和反射等效应。这些效应会带来模糊信息,干扰感知方法,使其难以解析出准确的物体位置估计。
- 极端条件与数据丢失:还存在诸如光照剧烈变化、镜头眩光或隧道中 GPS 信号中断等效应,这些会使某些传感器数据完全无法使用或不可用。感知方法需要多个冗余的信息源来克服传感器数据丢失。
- 天气与降水:天气和降水会对传感器输入数据的质量产生不利影响。因此,拥有至少一些不受不同天气条件影响的传感器(例如雷达)至关重要。
总结
本节课中,我们一起学习了感知的主要任务:检测和评估环境中各类静态和动态物体与智能体的任务,以及理解自车在环境中如何运动的任务。最后,我们讨论了感知为何是一个难题。

本节视频内容到此结束。下节视频中,我们将讨论自动驾驶的决策制定方面。



013:驾驶决策与规划 🚗


在本节课中,我们将要学习自动驾驶系统中的决策与规划环节。上一节我们介绍了感知,它是执行驾驶任务的第一步。本节中我们来看看后续的步骤:决策制定以及最终的执行。
规划可以根据决策所需考虑的时间窗口进行非正式的分类。我们将通过一个简单的十字路口场景,列举成功完成驾驶任务所需的各种决策。然后,我们将根据用于决策的逻辑类型,对规划进行正式分类:是使用基于当前环境信息的明确定义规则,还是也依赖于对其他交通参与者轨迹的预测。
规划的时间层级
驾驶决策属于“规划”这个大范畴。当我们制定驾驶决策时,通常需要考虑三种类型的决策。
以下是三种主要的决策类型:
-
长期规划决策:这类决策回答诸如“如何从纽约导航到洛杉矶”或“如何从家到公司”的问题。其结果是整个驾驶任务的高层任务计划。如今的地图应用可以提供这类驾驶指令,例如走哪条路、保持在哪个车道等。
-
短期规划决策:这类决策回答诸如“现在变道安全吗”或“何时在十字路口执行左转”的问题。驾驶还需要一些即时决策或反应。
-
即时决策:这类决策涉及控制与轨迹规划,回答诸如“如何在弯道上保持车道”或“应该施加多少转向输入”、“应该加速还是刹车,幅度多大”等问题。
一个驾驶场景示例
让我们讨论一个非常简单的驾驶任务示例,并思考其中涉及了哪些类型的决策。请注意,在本系列课程中,我们假设所有场景均为右侧通行。
假设你在回家的路上接近一个十字路口。长期规划阶段要求你在这个路口左转。
现在,让我们看看需要做出的中期和短期决策。首先,假设该路口是受控的,即设有交通信号灯。由于你要左转,你必须判断是否需要变道进入左转专用车道。接着,在接近路口时,你选择减速,并且要平稳地减速以避免乘客感到不适。然后,你会在停车线前、人行横道前停下。这些关于变道和停车位置的决策都属于短期规划决策。
但是,你还需要思考并应对途中出现的各种情况。我们仍然需要进行物体与事件检测及响应。
以下是可能出现的几种情况及所需的即时决策:
- 如果一辆车插到你前方的左转车道,你会希望更早停车,为那辆车留出空间。
- 如果停车线没有标记,你必须大致判断隐含的停车线位置,并在人行横道前停下。
- 如果你后方有其他车辆,甚至路口有车辆抛锚,执行左转的决策会如何根据这些可能迅速出现的多种场景而变化?
所有这些决策都属于即时决策类别,需要规划系统做出安全的反应。最终结果是,即使对于一个简单的左转场景,也需要在不同时间尺度上评估大量可能的决策。这相当于讨论同一个路口通行的不同情况或场景。在每个场景中,我们需要一套一致的、能够实时评估的选择,并随着场景新信息的出现而更新。
此外,由于变道决策会影响行驶位置以及需要相对于哪些车辆来调整自身位置,即使一个看似简单的驾驶场景也需要三到四个层级的决策,并且最终仍需通过精细的车辆控制来执行。这个例子仅仅触及了运动规划所需持续决策流的表面。关键在于:驾驶是复杂的。
规划方法:反应式与预测式
接下来,我们讨论一种在软件中表示这些决策的可能结构。应对多层次决策挑战的一种方法是反应式规划。
在反应式规划中,我们定义一系列规则,这些规则考虑自车及环境中其他物体的当前状态,并产生即时动作。这些规则只考虑当前状态,而不考虑未来预测。
以下是此类规则的一些示例:
if pedestrian_on_road:
stop()
if speed_limit_changed:
adjust_speed(new_limit)
在这两条规则中,我们只是观察当前正在发生的情况,并基于即时可用的信息做出决策。
但还有其他类型的规划。在预测式规划中,我们对环境中其他参与者(如车辆和行人)随时间的运动方式进行预测。我们利用当前状态和预测信息来定义所有决策。
以下是预测式规划中的规则示例:
- 那辆车已经停了10秒,它很可能在接下来几秒内保持静止,所以也许我可以安全地绕过它。
- 一个行人正在乱穿马路,等我接近时他们会进入我的车道,让我减速,给他们一个在我前方过马路的机会。
可以看出,这是一种更自然的思考方式,与人类驾驶车辆的方式密切相关。我们在做决策之前,会预测道路上其他物体未来的位置。然而,这种类型的规划依赖于对环境其他参与者行为的准确预测,这为感知任务增加了显著的复杂性。尽管如此,预测式规划仍是自动驾驶汽车的主流方法,因为它极大地扩展了车辆能够安全处理的场景范围。我们将在专门讲解自动驾驶汽车规划的第4门课程中详细讨论规划的各个方面,并向你展示解决长期、短期和即时规划问题的方法。
总结
本节课中我们一起学习了规划问题以及基于行动时间窗口的不同规划类型,包括长期、短期和即时规划。我们分析了一个需要左转的简单十字路口场景,并得出结论:由于存在众多变量和可能性,驾驶确实是一个非常复杂的问题。接着,我们讨论了两种不同的规划方法:反应式规划和预测式规划。这仅仅是冰山一角,在驾驶任务中做出决策之前,显然还有更多需要考虑的因素。我们将在第4门课程中再次更详细地探讨所有这些概念。

至此,我们完成了自动驾驶汽车专项课程第一门课第一周的学习。让我们快速回顾一下本周所学:在本模块中,我们探讨了有助于后续课程学习的基本自动驾驶术语。然后,我们讨论了自动化等级,并提出了一个用于描述自动驾驶能力的分类法。接着,我们定义了驾驶任务以及驾驶的主要组成部分:感知、规划和执行。我们列出了感知中需要识别和跟踪的环境元素与参与者,并讨论了感知为何如此困难。最后,我们讨论了具有不同时间层级的规划,并了解了一些决策方法。

在下一个模块中,我们将定义自动驾驶汽车的主要组成部分,包括构成完整系统的硬件和软件元素。届时再见。
014:进入自动驾驶汽车行业的建议


在本节课中,我们将学习来自行业资深人士关于如何进入自动驾驶汽车领域的实用建议。课程内容涵盖教育背景、核心技能、实践经验以及职业心态等多个方面,旨在为初学者和初级工程师提供清晰的职业发展路径。
上一节我们探讨了行业概览,本节中我们来看看如何具体地准备自己,以成功进入这个充满活力的领域。以下是来自多位行业专家的核心建议。
教育背景与技能准备 🎓
获取工程学学位对我的帮助很大,尤其是在滑铁卢大学期间,我参与了许多实习和互动项目。那时我还协助指导了我们的第一支机器人团队,这些经历都丰富了我的简历。如果你想进入自动驾驶领域从事固件工程,你可能需要的教育背景包括工程学学位。计算机科学学位也可以,但获得一些硬件实践经验绝对有益。
在大学最后几年,我选修了嵌入式课程,以更熟悉日常工作中所需的底层软件或低级软件方面。对硬件非常熟悉在我的日常工作中确实有帮助,因为我需要驱动各种硬件部件。我见过这个行业里有很多机械背景出身的人,这也很有帮助。当然,懂得编程也绝对是一个优势,并且了解你周围的所有组成部分。
总的来说,我认为机电一体化工程对我帮助很大,因为它涉及面广,让我有机会接触所有方面。大量的项目帮助我理解了所有部件是如何协同工作的。
行业需求与招聘现状 💼
我认为目前这个行业因为发展非常迅速,几乎需要各种类型的角色,包括固件、感知或自动驾驶技术栈的任何部分都需要人才。由于我的固件背景,我经常收到关于固件工作的联系。但总的来说,现在有大量的工作机会,每家公司都在努力寻找最优秀的人才来解决他们的自动驾驶挑战。
这是一个招聘需求非常旺盛的行业,所以我经常被其他公司招募,他们只想招到人。显然,我也在努力为我的公司寻找尽可能多的人才,以便我们能够继续工作和发展。从我们的数据来看,我们做得还不错。但是,总是需要更多的人,每个人都在努力解决这个问题,每个人都在试图让所有最优秀的人来为此工作。
理想候选人的特质 🎯
现在我有机会在工业界工作,我认为理想的候选人应该是对这个领域感兴趣并充满热情的人。在技术技能方面,需要精通 C++ 和 Python。我们需要能够从第一性原理解决问题的研究工程师,也需要有机器学习经验的人。
我能给本科生或研究生级别的人最重要的建议之一是加入学生团队。学生团队让你有机会与同龄人协作,并发展你的沟通和领导技能。虽然你参与的项目可能不是最前沿的,但它们确实能帮助你在半专业的环境中积累工作经验。
沟通技巧对职场中的人也很重要,特别是在自动驾驶领域,我们需要解决所有这些独特的问题,能够清晰地表达你的想法至关重要。在事情失败时在场,是非常宝贵的学习经验。很多技能是可以迁移的,例如故障排除、与他人合作、解决问题的能力。我发现这些经验在开始进入工业界工作时非常有帮助。
实践与项目经验 🛠️

我给希望进入这个行业的初级工程师的建议是,真正动手实践。尝试自己承担项目,这可以采取“轮子上的笔记本电脑”的形式,即自己编程实现完整的软件栈,或者使用模拟器来预测我们真正上路时环境会是什么样子。我认为通过这些实践手段解决实际问题能教会你很多,我个人在日常工作中也从以前的项目中汲取了很多经验。
成为全面的系统工程师 🌐
如果你想在一家自动驾驶公司工作,我会给出什么建议?首先,对工程的所有领域保持开放态度,如果可以的话,不要只成为一个计算机视觉专家。尝试理解这本质上是一个机器人学问题,因为我们有软件使用多个传感器,试图在一个非常复杂的世界中回答一些非常困难的问题——这个世界有奇怪的照明、奇怪的天气、人们以奇怪的方式行事。你必须了解一点控制知识,或者知道如何与了解控制、规划、视觉、激光雷达、通信和系统工程的人对接。你将需要一直与这些人互动。
所以我想说,要把这理解为一个宏大的工程科学问题。显然,要持续不断地编码、练习、练习、再练习。并且要编写良好的代码。要知道,如果你作为一名本科生在搭建一个电路,而它看起来令人震惊,那它可能确实会“电”到你(这是一个关于电的好笑话)。软件也是如此。所以,要为你编写的代码质量感到自豪,这样你才会做得好。

勇于面对复杂环境 🌧️
要乐于深入棘手的环节。请不要只在室内和相机一起工作。走出去,到暴雨中,到大雪中,到刺眼的阳光下,在那里处理相机。不要担心它不工作,因为那是你能得到的最好教训。所以,勇敢地前往那些对这些系统来说难以工作的环境,并从中学习。
成为一名自豪的机器人专家,同时也成为一名系统工程师,因为这是一个全栈问题,而不仅仅是“我想很好地处理相机图像”或“我想识别汽车”。它是所有这一切,并且最终必须全部协同工作。

本节课中,我们一起学习了进入自动驾驶汽车行业的多方面建议。关键点包括:获取相关的工程教育背景(如机电一体化),掌握 C++ 和 Python 等核心编程技能,通过学生团队和实际项目积累宝贵的实践经验,培养解决问题的能力和沟通技巧,并对整个机器人系统保持全面的理解。最重要的是,保持热情,勇于动手实践,并乐于在复杂真实的环境中学习和成长。这个快速发展的领域正等待着具备综合能力和实干精神的新鲜血液加入。
015:传感器与计算硬件


在本节课中,我们将学习自动驾驶汽车感知任务中使用的各类传感器,并了解当前主流的自动驾驶计算硬件。我们将从传感器的定义和分类开始,逐一介绍它们的工作原理和关键指标,最后简要探讨支撑自动驾驶决策的计算平台。
传感器概述
上一节我们介绍了自动驾驶系统的基本框架,本节中我们来看看感知任务的核心——传感器。即使是最好的感知算法,其性能也受限于传感器数据的质量。精心选择传感器可以极大地简化自动驾驶的感知任务。
那么,什么是传感器?传感器是任何能够测量或检测环境属性或其随时间变化的设备。根据它们记录的属性,传感器被广泛分为两类:
- 外感受传感器:记录环境属性。
Extero意为外部或来自周围环境。 - 本体感受传感器:记录自车(ego vehicle)的属性。
Proprio意为内部或自身的。
外感受传感器
以下是自动驾驶中常见的外感受传感器。
1. 相机
相机是被动的光收集传感器,擅长捕捉场景中丰富、详细的信息。事实上,一些团队认为相机是自动驾驶唯一真正需要的传感器。但目前仅靠视觉还无法实现最先进的性能。
选择相机时,我们通常关注三个重要指标:
- 分辨率:构成图像的像素数量,决定了图像质量。
- 视场角:相机可见的水平与垂直角度范围,可通过镜头选择和变焦来改变。
- 动态范围:图像中最暗和最亮色调之间的差异。由于驾驶中会遇到高度变化的照明条件(尤其是在夜间),高动态范围对自动驾驶汽车至关重要。
在相机和镜头选择上,视场角和分辨率之间存在重要的权衡。更宽的视场角允许观察环境中更大的区域,但分配到特定物体上的像素会减少。随着视场角增大,我们需要提高分辨率,才能以相同的质量感知可能遇到的各种信息。
相机还有其他影响感知的属性,如焦距、景深和帧率。我们将在关于视觉感知的课程3中更详细地讨论相机和计算机视觉。
立体相机由两个视场重叠且图像平面对齐的相机组成,可以从同步的图像对中进行深度估计。将一个图像的像素值与另一个图像匹配,可以生成场景的视差图,进而用于估计每个像素的深度。
2. 激光雷达
激光雷达代表“光探测与测距”传感器。其原理是向环境中发射光束并测量反射回来的信号。通过测量返回的光量和光束的飞行时间,可以估计反射物体的强度和距离。
激光雷达通常包含一个带有多个堆叠光源的旋转元件,并输出三维点云地图,非常适合评估场景几何结构。由于它是自带光源的主动传感器,激光雷达不受环境光照的影响,因此在恶劣或变化的光照条件下不会面临与相机相同的挑战。
以下是选择激光雷达的重要比较指标:
- 光源数量:常见的有8、16、32和64线。
- 每秒点数:点收集速度越快,3D点云越详细。
- 旋转速率:速率越高,3D点云更新越快。
- 探测范围:由光源的功率输出决定。
- 视场角:激光雷达传感器可见的角度范围。
最后,我们还应该提到目前正在兴起的新型激光雷达:高分辨率固态激光雷达。它没有典型激光雷达的旋转部件,由于完全在硅芯片上实现,有望变得极其低成本且可靠。高分辨率固态激光雷达仍在发展中,但对于未来实现经济实惠的自动驾驶无疑是一个令人兴奋的方向。
3. 雷达
雷达代表“无线电探测与测距”。雷达传感器比激光雷达出现得更早,能够稳健地探测环境中的大型物体。它们特别适用于恶劣天气,因为基本不受降水影响。
以下是选择雷达的一些比较指标:
- 探测范围
- 视场角
- 位置和速度测量精度
雷达通常有两种类型:一种是宽视场角但短距离,另一种是窄视场角但长距离。
4. 超声波传感器
超声波传感器或声纳,最初得名于“声音导航与测距”,它使用声波测量距离。声纳是短程且廉价的测距设备,这使其适用于自车需要非常靠近其他车辆移动的停车场景。声纳的另一个优点是成本低。此外,与雷达和激光雷达一样,它不受光照和降水条件的影响。
选择声纳基于几个关键指标:
- 最大测量范围
- 探测视场角
- 成本
本体感受传感器
现在我们来讨论感知自车属性的本体感受传感器。最常见的包括全球导航卫星系统(简称GNSS,如GPS或伽利略系统)和惯性测量单元。
- GNSS接收器:用于测量自车的位置、速度,有时还包括航向。精度很大程度上取决于实际的定位方法和所使用的校正。
- 惯性测量单元:测量自车的角旋转速率和加速度。结合这些测量值可以估计车辆的3D方向,其中航向对于车辆控制最为重要。
- 轮速里程计传感器:该传感器跟踪车轮的旋转速率,并利用这些数据估计自车的速度和航向变化率。这与记录车辆里程的传感器是相同的。
传感器总结

总而言之,目前用于自动驾驶感知的主要传感器包括相机、雷达、激光雷达、声纳、GNSS、IMU和轮速里程计模块。这些传感器具有许多差异很大的特性,包括分辨率、探测范围和视场角。为自动驾驶汽车选择合适的传感器配置并非易事。

下图简单展示了每种传感器及其在汽车上的通常安装位置。我们将在下一个视频中,讨论如何选择传感器配置以实现特定的运行设计域时,再次回顾这张图。
计算硬件
最后,让我们简要讨论当今自动驾驶汽车中最常用的计算硬件。
最关键的部分是计算大脑,即汽车的主要决策单元。它接收所有传感器数据,并输出驾驶车辆所需的指令。大多数公司倾向于设计自己的计算系统,以匹配其传感器和算法的特定要求。然而,也存在一些可以“开箱即用”处理自动驾驶计算负载的硬件选项,最常见的例子是英伟达的Drive PX和英特尔与Mobileye的IQ。
任何用于自动驾驶的计算大脑都需要串行和并行计算模块,特别是用于图像和激光雷达处理以进行分割、物体检测和建图。为此,我们使用GPU、FPGA和定制ASIC,这些都是执行特定类型计算的专用硬件。例如,Drive PX单元包含多个GPU,而IQ则使用FPGA,两者都是为了加速可并行化的计算任务,如图像处理或神经网络推理。
最后,关于同步的快速说明:由于我们希望基于对道路场景的一致理解来做出驾驶决策,因此正确同步系统中的不同模块并遵循一个共同的时钟至关重要。幸运的是,GPS依赖极其精确的计时来运行,因此在可用时可以作为合适的参考时钟。无论如何,传感器测量必须用一致的时间戳进行标记,传感器融合才能正确运行。

课程总结

本节课中我们一起学习了传感器及其基于测量内容的不同类型。我们涵盖了自动驾驶硬件系统中使用的主要传感器,并讨论了它们的优势和比较指标。然后我们简要讨论了当今可用的自动驾驶计算硬件。希望这能巩固我们上周学到的关于进行自主感知的一些概念。在下一课中,我们将更进一步,看看如何为你的自动驾驶汽车选择合适的传感器配置。下个视频见。
自动驾驶汽车简介:第2课:硬件配置设计


在本节课中,我们将学习如何为自动驾驶汽车设计和配置传感器,以满足不同驾驶场景下的感知需求。我们将通过分析高速公路和城市环境两种常见场景,来理解传感器覆盖范围的设计原则。
上一节我们介绍了自动驾驶中常用的各类传感器。本节中,我们来看看如何布置这些传感器,以构建对环境的完整感知。
首先,回顾一下最常用的传感器:
- 摄像头:用于获取外观信息。
- 立体摄像头:用于获取深度信息。
- 激光雷达:用于全天候三维信息输入。
- 雷达:用于物体检测。
- 超声波传感器:用于短距离三维信息输入。
- GNSS/IMU数据与轮速里程计:用于车辆自身状态估计。
这些传感器有不同的配置、探测范围和视场角。其分辨率取决于具体仪器规格和视场角。
在讨论覆盖范围之前,我们先定义驾驶时可接受的减速率,这将决定传感器所需的探测距离。
- 紧急减速率:设为 5 m/s²,大致相当于紧急情况下猛踩刹车试图突然停止时的减速度。
- 正常减速率:设为 2 m/s²,在保证车辆能快速停止的同时,提供相对舒适的体验。
给定恒定减速度,制动距离 D 可按以下公式计算:
D = v² / (2a)
其中,v 是车速,a 是减速率。我们也可以考虑系统反应时间和路面摩擦极限,但本次讨论将简化处理。
现在讨论覆盖范围。核心问题是:我们应该将传感器放置在何处,才能为驾驶任务提供足够的输入?实际上,我们希望传感器能覆盖我们设想的运行设计域,即系统能做出决策的场景范围,并为所有决策提供充分输入。
驾驶场景众多,我们将通过两个常见场景来了解需求如何驱动传感器选择:高速公路驾驶和城市驾驶。
以下是这两种情况的简要对比:
- 高速公路:交通流量大、车速快、车道多,但所有车辆同向行驶。道路弯道较少且平缓,需考虑出入口和并道。
- 城市环境:交通流量和车速适中,车道较少,但交通流向复杂,尤其在交叉路口。
高速公路场景分析
我们可以将高速公路驾驶分解为三种基本操作需求:紧急制动、保持车速和变换车道。
1. 紧急制动
如果前方道路有障碍,我们需要及时停车。应用制动距离公式,假设高速公路速度为120公里/小时,采用紧急减速度,我们需要能感知前方约110米。因此,大多数自动驾驶系统旨在实现车辆前方150至200米的感知范围。
2. 保持车速(跟车)
为保持安全跟车距离,我们需要感知本车道前车的相对位置和速度。通常,人类驾驶员的安全跟车时间间隔设定为2秒。也可以根据前车紧急制动和自车反应时间来计算。在120公里/小时下,需要约165米的相对位置和速度测量范围,典型系统将此要求设为100米。
3. 变换车道
变换车道时,我们需要:
- 纵向:观察前方,与前车保持安全距离;观察后方,了解后车动态。
- 横向:情况更复杂。我们可能需要观察相邻车道之外的情况,例如,是否有其他车辆同时试图并入目标车道。我们需要协调变道操作以避免碰撞。
变换车道的传感器要求大致与保持车速场景相同,因为两者都需要管理自车前方、后方及两侧的车辆。
综上所述,高速公路驾驶的覆盖需求如下:
- 纵向传感器:用于紧急制动和跟车。
- 横向传感器:需要宽视场角传感器来跟踪相邻车道(约160至180度),以及40至60米的探测范围以寻找车辆间隙。
- 需要结合宽视场角和窄视场角传感器来完成紧急制动、保持车速和变换车道这三种操作。
仅从这一小部分ODD需求中,我们已经看到了多样化的传感器要求。
城市场景分析
接下来讨论城市场景。如前所述,城市环境交通流量和速度适中,车道比高速公路少,但增加了行人的复杂性。这里有六种基本操作:紧急制动、保持车速、变换车道、超越静止车辆、路口左右转弯以及通过环岛等更复杂的路口操作。
前三种基本操作的覆盖分析与高速公路分析基本相同,但由于车速较慢,不需要同样远的远程感知距离。
以下是其他操作的分析:
1. 超越静止车辆
- 纵向:需要感知静止车辆,同时观察对向来车。因此需要宽视场角短距传感器检测静止车辆,以及窄视场角长距传感器识别对向来车。
- 横向:与高速公路情况类似,需要观察相邻车道之外是否有并道车辆。
2. 交叉路口
需要近乎全向的感知能力,以应对各种可能的动态:接近的车辆、附近的行人、转弯等。
3. 环岛
- 横向:由于车速慢,需要宽视场角短距传感器。
- 纵向:由于环岛内的行驶方式,同样需要宽视场角短距传感器。我们需要感知所有汇入环岛的交通流以做出正确决策。
由此,我们得到城市驾驶的整体覆盖示意图。与高速公路覆盖的主要区别在于,城市驾驶需要针对路口、环岛和超车操作进行额外的感知。事实上,高速公路的需求几乎完全被城市驾驶的需求所覆盖。
覆盖分析总结与传感器配置
总结覆盖分析,对于所有驾驶操作,我们需要:
- 长距离传感器:通常具有较窄的角视场。
- 宽角视场传感器:通常具有中短距离感知能力。
随着场景变得复杂,我们看到需要在短距离尺度上(约50米范围内)实现360度全向传感器覆盖,并在纵向上有更长的探测距离要求。我们还可以增加像超声波雷达这样的更短距传感器,它们在泊车场景中非常有用。
最终,我们的传感器配置大致如下图所示。总结来说,传感器的选择应由我们想要执行的操作需求驱动,并应同时包括用于应对纵向危险的长距离传感器和用于全向感知的宽视场传感器。
最终配置方案还取决于我们对运行条件、传感器故障冗余以及预算的要求。没有单一的答案规定自动驾驶汽车需要哪些传感器。
本节课中,我们一起学习了如何通过进行传感器覆盖分析(包括高速公路和城市驾驶的纵向与横向情况)来选择硬件配置。


在下一个视频中,我们将研究典型自动驾驶软件栈的模块化软件架构。下次见。
自动驾驶汽车简介:第四课:环境表征


在本节课中,我们将更深入地了解用于表征汽车周围环境的地图。我们将概述自动驾驶中传统使用的三种不同类型的地图,并对每种地图进行更详细的解释,以便你更好地理解它们是如何创建并在整个专业课程中使用的。
上一节我们介绍了环境表征的概览,本节中我们来看看具体的地图类型。
以下是三种核心地图类型:
- 定位地图:此地图使用汽车在环境中移动时采集的连续激光雷达点云或相机图像特征创建。定位模块结合GPS、IMU和轮速里程计数据,利用此地图持续精确估计车辆的位置。
- 占据栅格地图:此地图同样使用连续的激光雷达点云构建,用于标示所有静态或固定障碍物的位置。它为自动驾驶汽车规划安全、无碰撞的路径。
- 详细道路地图:此地图包含所有交通规则元素、规则属性和车道标线的详细位置信息。它用于规划从当前位置到最终目的地的路径。
接下来,让我们逐一详细了解这些地图。
定位地图详解
如前所述,定位地图使用记录的激光雷达点或图像,组合成环境的点云表示。
当接收到新的激光雷达或相机数据时,会将其与定位地图进行比较,通过将新数据与现有地图对齐,来生成对自车位置的测量值。该测量值随后与其他传感器数据融合,以估计自车运动,并最终用于控制车辆。
例如,从自动驾驶汽车记录的一些激光雷达数据中,可以清晰地看到车辆从车道驶出并进入前方街道的运动轨迹。这种对汽车在环境中运动的详细、动态的表征,对定位模块极具价值。
定位地图可能非常庞大,存在多种方法来压缩其内容,仅保留定位所需的关键特征。此地图的构建将在本专业的下一门课程中,结合定位主题进行更严谨的讲解。
占据栅格地图详解
占据栅格地图是自车周围环境中静态物体的二维或三维离散化地图。创建此地图是为了识别自动驾驶汽车周围的所有静态物体,再次使用激光雷达点云作为输入。
被归类为静态的物体包括树木、建筑物、路缘石以及所有其他不可行驶的表面。例如,在此栅格地图中,如果将所有被占据的栅格涂色,占据栅格地图可能呈现如下形态。
由于占据栅格仅表示环境中的静态物体,因此必须首先移除所有动态物体。这是通过移除感知模块检测到的动态物体边界框内的所有激光雷达点来实现的。
接下来,不会干扰车辆行驶的静态物体也会被移除,例如可行驶路面或任何悬垂的树枝。经过这两步处理后,仅保留环境中来自静态物体的相关激光雷达点。
然而,过滤过程并非完美,因此不能盲目信任剩余的点就一定是障碍物。因此,占据栅格地图通过跟踪栅格单元随时间被占据的可能性,以概率方式表征环境。然后依赖此地图为车辆创建无碰撞的路径。
此地图的创建及其在局部路径规划问题中的应用,将在本专业课程4中进行更详细的介绍。
让我们看一个占据栅格随时间更新的例子。在这里,我们看到占据栅格可视化为自动驾驶汽车下方的浅灰色方形区域,用黑色方块更新环境中静态物体的位置。
当自动驾驶汽车在环境中移动时,所有静止物体,如电线杆、建筑物和停放车辆,都显示为被占据的栅格单元。
详细道路地图详解
详细道路地图是自动驾驶汽车可行驶的完整道路网络地图。它包含道路车道信息以及可能影响车道的任何交通规则元素。详细道路地图用于为自动驾驶汽车规划安全高效的行驶路径。
详细道路地图可以通过以下三种方式之一创建:

- 完全在线创建:严重依赖感知模块的静态物体检测,来准确标记和定位所有相关静态物体以创建地图。这包括当前驾驶环境中的所有车道边界、任何交通规则元素(如交通灯或交通标志)以及车道的任何规则属性(如右转标记或人行横道)。由于实时创建此类地图的复杂性,这种方法很少使用。
- 完全离线创建:通常通过多次采集给定道路的数据来完成。配备高精度传感器的专用车辆定期沿道路行驶以构建离线地图。采集完成后,利用静态物体感知的自动标记与人工标注和校正相结合的方式对信息进行标记。这种地图创建方法虽然能产生非常详细和准确的地图,但无法对变化的环境做出反应或适应。
- 离线创建并在线更新:这种地图创建方法结合了前两种方法的优点,创建一个高度准确且能在驾驶时更新的道路地图。

在关于运动规划的课程4中,我们将介绍一种存储详细道路地图中所有信息的方法,称为Lanelet模型。
让我们看一个详细道路地图的例子。如图所示,详细道路地图的车道边界用红色可视化。除了边界,每个车道的中心线也用红色标出。这些信息对于路径跟踪至关重要,因为它提供了沿车道的默认路径。如视频所示,车辆在自动驾驶时精确地跟随车道中心线行驶。
总结
本节课中,我们一起学习了自动驾驶中常用的三种地图类型:定位地图、占据栅格地图和详细道路地图。随着我们在本专业后续课程中深入探讨定位、防撞和运动规划,你将进一步研究这些地图类型。
恭喜你完成了《自动驾驶汽车简介》课程的第二个模块。在本模块中,你学习了:
- 如何为自动驾驶汽车选择传感和计算硬件。
- 如何根据驾驶要求设计特定的传感器套件。
- 如何分解自动驾驶软件系统。
- 表征环境的三种主要地图类型是什么。


在下一个模块中,我们将更深入地研究用于精确控制的车辆建模。下个模块再见。
019:自动驾驶汽车的未来


概述
在本节课中,我们将探讨自动驾驶汽车行业的未来发展趋势。我们将分析其发展模式、行业特点、竞争格局以及个人拥有与出行服务两种模式的未来可能性,并讨论消费者何时能真正购买到完全自动驾驶汽车。
自动驾驶行业的发展模式 🚀
上一节我们介绍了自动驾驶的基本概念,本节中我们来看看这个行业将如何演变。
我认为自动驾驶汽车行业不会突然在某一天彻底成功。它更像是计算机行业发展的一个类比。没有人会说“我们什么时候才能拥有计算机”,因为计算机的发展从未停止,它是一个持续进步的过程。自动驾驶技术同样如此,这是一项宏大的事业,它始于现在,并且永远不会停止。每一年,自动驾驶汽车都会变得更好、更智能。
软件的核心作用与行业独特性 💻
我认为这个领域非常有趣,因为这次,决定性的因素是软件,而不是钢铁原子的排列组合。软件的影响力具有非凡的非线性特征。复制软件的成本很低,但制造另一辆汽车则需要实实在在的成本。这一点非常特别。
因此,这是一个绝佳的工作领域,因为你编写的软件不需要钢铁厂,却可以对交通运输产生巨大影响。我认为这绝对是非凡的。我们以前从未见过这种情况。过去,你必须拥有油田、气田或汽车工厂等实体资产才能在交通领域产生影响。而现在,仅仅通过编写文本文件(代码) 就能实现。这确实非同寻常。
这个行业非常新,但未来非常光明。
新兴企业与传统车企的竞争 🏎️
至于像Zs这样的新兴公司如何与早已在此领域耕耘的传统汽车制造商竞争,我认为Zs的方法具有独特性。解决自动驾驶汽车的挑战不仅仅是一个汽车工程问题。在移除人类驾驶员后,你需要构建大量的额外冗余系统和软件来实现功能。因此,你必须同时关注汽车工业、汽车工程,以及航空航天、计算机科学和软件工程。
Zs正是为此而设立的,它从诞生之初就旨在从头开始打造车辆,并始终专注于这一使命。因此,它不像一些大型传统制造商那样受到诸多束缚,尤其是那些制造商最初主要只专注于汽车工程。
自动驾驶与共享出行的融合 🤝
我看到自动驾驶行业即将真正起飞,因为这是两件事的融合:自动驾驶和共享出行。目前,汽车的利用率可能只有5%,这意味着95%的时间它们都停在你的车道上或公司的停车场里。自动驾驶的美妙之处在于,我们可以让这些自动驾驶车辆在一天中的大部分时间都在路上行驶,用更少的车辆运送更多的乘客。
未来出行模式:个人拥有 vs 服务化 🚗🆚🚕

我可以预见这个行业将出现两种模式的浪潮:个人拥有和出行即服务。
以下是两种模式的论点:
- 个人拥有:人们可能总是希望拥有自己的车辆,出于奢华或隐私的原因。
- 出行即服务:便捷的交通将极大地受益于自动驾驶技术。
因此,未来我们很可能会看到两种模式并存。
何时能购买自动驾驶汽车? ❓
一个经常被问及的问题是:我什么时候能买一辆自动驾驶汽车?
这是一个非常合理的问题。我认为我们首先体验自动驾驶的方式不是购买,而是在特定区域、特定城市乘坐它们。这就是“地理围栏”论点:车辆将首先出现在它们经过充分演练和实践的城市区域。系统非常了解该城市的变化、光照条件、繁忙时段以及真正困难的转弯处。它们将像城市里高级的巴士一样,成为一种交通服务。
但人们真正想让我回答的问题是:我什么时候能走进汽车销售店,买到一辆没有方向盘、没有窗户的车?这基本上就是完全的L5级系统:完全不需要人类,车辆可以在任何天气、任何地点、任何时间行驶,你永远不用担心到不了目的地。它拥有和你现在的汽车一样的功能,并且是一件消费级科技产品。
这还很遥远,因为驾驶的复杂性很高。许多困难情况与你的驾驶考试毫无关系。你解决的是一个随机出现的问题,因为你是人类,你会想“哦,我知道那里该怎么办”。这个问题可能只出现一次,而你用那种方式解决了它。例如,你可能会倒车绕过它,或者判断“那是个塑料袋”,然后决定碾过那个纸箱,因为你认为它真的只是纸板,或者路上有牛,你会等待它们通过。还有处理后面闪着红蓝灯的紧急车辆,你会开到人行道上让路,因为你知道对方也注意到了警笛声,所以不会对你开上人行道感到惊慌。这是你们之间某种社会契约。
我可以继续列举所有我们人类能解决的有趣极端案例。但要拥有一辆车,能以极高的可靠性(例如五个西格玛水平)在任何时间、任何天气、任何国家、任何地点将你从所在地送到目的地,并且你对其拥有与现在购买的车辆同等的信心,这还有很长的路要走。
但这很棒。这就像问“我们什么时候才能拥有最好的计算机”。它只会一天比一天更好,你无法回答这个问题。
但这并不意味着我们在此之前无法改变交通运输。是的,汽车最初也并非哪里都能去,但它们变得越来越好。

总结
本节课中,我们一起学习了自动驾驶汽车的未来。我们了解到这个行业将像计算机一样持续演进,软件是其核心驱动力。新兴企业凭借跨领域的综合方法与传统车企竞争。自动驾驶将与共享出行深度融合,未来可能出现个人拥有和出行服务并存的模式。虽然完全自动驾驶(L5级)的消费级产品尚需时日,但通过地理围栏内的出行服务,我们将逐步体验并见证交通运输的变革。这项技术正在不断进步,并将持续改善我们的出行方式。
020:自动驾驶汽车安全保证


在本节课中,我们将学习如何将安全理念融入自动驾驶汽车设计的基础知识。我们将回顾一些早期的自动驾驶事故案例,正式定义安全相关概念,并探讨确保自动驾驶系统安全性的基本框架。
事故案例分析
上一节我们介绍了本模块的学习目标,本节中我们来看看自动驾驶发展初期发生的一些典型事故,以理解安全挑战的复杂性。
以下是几起在2017年至2018年间引起广泛关注的自动驾驶事故:
- 2016年3月,Waymo(前谷歌)车辆与公交车相撞:一辆Waymo测试车在试图绕过前方障碍物时,与一辆从后方驶来的公交车发生侧面碰撞。软件预测公交车不会在狭窄空间内超车,但公交车的实际驾驶习惯与预期不符,导致反应不及。
- 2017年,Uber自动驾驶车辆因过度反应而侧翻:在一次由其他车辆引发的轻微碰撞中,Uber测试车的控制系统因未针对此类外部干扰进行充分测试而反应过度,导致车辆侧翻。这凸显了控制系统需要具备鲁棒性,并进行覆盖尽可能多可预见场景的测试。
- 2017年底,通用Cruise Bolt与摩托车发生事故:一辆Chevy Bolt在尝试变道时,因相邻车道前车刹车导致目标空隙关闭,于是中止变道。此时,一位正在车道间穿行的摩托车手驶至其侧方,挡住了车辆返回原车道的路径,使车辆陷入“撞上摩托车”或“撞上邻车”的两难境地。
- 2018年初,Uber自动驾驶测试车致行人死亡事故:事故发生在亚利桑那州坦佩市夜间。一名行人推着自行车在未划线的区域横穿多车道道路。调查揭示了多重失效:
- 安全驾驶员监管缺失:车内的安全驾驶员当时不专注,且系统没有对其状态进行实时监测。
- 感知系统混乱:系统在碰撞前6秒检测到目标,但分类在“未知物体”、“车辆”、“自行车”之间反复切换,最终因判定检测结果不可靠而选择忽略该目标。
- 紧急制动系统被禁用:车辆自带的沃尔沃紧急制动系统在碰撞前1.3秒检测到行人,但Uber在自动驾驶测试模式下禁用了该功能,以避免多套避撞系统同时工作产生冲突。
从这些案例可以看出,感知、规划、控制等自动驾驶系统的各个环节都可能失效,而多个系统或多个决策者(包括其他道路使用者)之间的交互常常导致意想不到的后果。
安全基础概念定义
了解了安全评估的挑战后,我们现在来正式定义一些基本的安全术语。
- 伤害:指对生物造成的物理伤害。
- 风险:描述事件发生的概率与该事件可能造成的伤害的严重程度的结合。
- 公式表示:
风险 = 事件发生概率 × 伤害严重程度
- 公式表示:
- 安全:避免对生物造成不合理风险的过程。
- 例如,闯红灯驶入交叉路口是不安全的,因为这给车内乘员及其他通过路口的车辆带来了不合理的伤害风险。
- 危害:不合理伤害风险的潜在来源,或对安全的威胁。
- 例如,系统软件中一个可能引发事故的漏洞就是一个危害。
自动驾驶危害的常见来源
那么,自动驾驶汽车最常见的危害来源有哪些呢?危害可以来自多个方面:
以下是主要的危害类别:
- 机械危害:例如制动系统组装错误导致过早失效。
- 电气危害:例如内部线路故障导致指示灯失灵。
- 计算硬件危害:用于自动驾驶的芯片等硬件发生故障。
- 软件危害:自动驾驶软件中的错误或漏洞。
- 感知危害:由传感器数据不良、噪声或感知算法不准确导致。
- 规划危害:因特定场景的行为选择设计不当,导致无意中选择了危险动作。
- 驾驶任务接管危害:在需要人类驾驶员接管时,未能提供足够警告或接管机制失效。
- 网络安全危害:自动驾驶系统被恶意实体攻击或入侵。
每种危害在评估整体系统安全性时都需要不同的处理方法,我们将在后续课程中详细探讨。
如何确保安全:NHTSA安全框架
现在我们了解了安全涉及的基本术语,接下来思考一个问题:如何确保我们的自动驾驶汽车是真正安全的?即,如何针对复杂的驾驶任务和可能出现的众多危害,为完整的自动驾驶系统定义一个安全评估框架?


在美国,国家公路交通安全管理局(NHTSA)定义了一个包含12个部分的安全框架,用以构建自动驾驶的安全评估体系。该框架于2017年发布,是建议性而非强制性的。
该框架首先强调应采用系统化的安全设计方法,这贯穿了整个文件。此外,良好规划和受控的软件开发流程至关重要,并应在相关领域应用现有的汽车、航空航天等行业的SAE和ISO标准。
其余11个方面可大致分为两类:自动驾驶设计和测试与事故缓解。
自动驾驶设计相关要求
此类别要求自动驾驶软件栈中包含并考虑某些组件:
- 明确的运行设计域:设计者需清楚了解系统的能力和限制,并能在测试或部署前评估哪些场景是受支持且安全的。
- 经过充分测试的物体与事件检测及响应系统:这对感知和碰撞避免至关重要。
- 可靠便捷的降级机制:当系统出现故障时,能有效提醒驾驶员或使车辆自主进入安全状态。设计需考虑驾驶员可能不专注的情况。
- 遵守交通法规:系统设计应确保在ODD内遵守联邦、州及地方的交通法规。
- 网络安全:考虑网络安全威胁,保护系统免受恶意攻击。
- 人机界面:系统应能向乘客或驾驶员清晰传达车辆状态,例如传感器是否工作、当前运动规划、环境中哪些物体正在影响驾驶行为等。
测试与事故缓解相关要求
此类别涵盖了测试自动驾驶功能的方法以及减少故障负面影响并从中学到经验的方式:
- 全面的测试计划:在向公众推出服务前,应进行强有力且广泛的测试,可依靠仿真、封闭场地测试和公共道路驾驶三大支柱。
- 碰撞缓解措施:仔细考虑在碰撞事件中减轻伤害或损坏程度的方法,例如通过设计最小化碰撞能量,并在约束系统、安全气囊和耐撞性方面超越乘客安全标准。
- 碰撞后行为:车辆必须能迅速恢复到安全状态,例如安全停车、切断油泵、报警等。
- 数据记录功能:应具备自动数据记录仪(黑匣子),记录碰撞数据对于分析原因、改进系统以及厘清事故责任至关重要。
- 消费者教育与培训:对测试期间的备用驾驶员以及消费者驾驶员和乘客进行明确培训,使其更好地了解已部署自动驾驶系统的能力和限制,避免因对自动化的过度自信而引发不必要的危险。
需要记住,这些是目前建议公司关注的领域,并非强制性要求。NHTSA的主要目标是在不过度限制创新或预先选定技术的前提下,指导公司开发自动驾驶汽车。
总结
本节课中我们一起学习了以下内容:
- 回顾了自动驾驶行业早期发生的一些事故,揭示了自动驾驶软件可能失效的多种方式。
- 正式定义了伤害、风险、危害和安全等基本概念。
- 列出了自动驾驶汽车危害的主要来源。
- 回顾了美国NHTSA提出的自动驾驶安全框架及其核心要点。


在下一节课中,我们将探讨业界对自动驾驶安全的观点,以及针对自动驾驶汽车的一些安全建议。
021:行业安全保证与测试方法




在本节课中,我们将探讨行业对自动驾驶安全与测试的不同观点。具体来说,我们会首先分析行业两大巨头Waymo和通用汽车的安全理念,然后讨论评估安全的两种不同方法:分析式与经验式。
让我们开始吧。
Waymo的安全设计方法 🛡️
正如我们在上一个视频中所见,美国国家公路交通安全管理局要求每个自动驾驶开发者制定并描述一个全面的安全策略,涵盖其指导文件中的12个概念。迄今为止,Waymo和通用汽车发布了两份重要的报告。我们将以这两份报告为基础,讨论行业的安全方法。
Waymo的安全报告于2017年发布,其中包含了许多关于如何为自动驾驶汽车组织全面安全策略的深刻见解。Waymo涵盖了NHTSA的所有12个概念,但将其组织成一个五层安全方法。
以下是Waymo的五层安全方法:
- 行为安全:Waymo系统被设计为在行为层面执行安全驾驶。这包括遵守交通规则的决策、能够在运行设计域内处理各种场景,并在此过程中保持车辆安全。
- 功能安全:Waymo确保系统具有备份和冗余。这样,即使发生故障,汽车也可以切换到备用组件或备份流程,以最大限度地降低故障的严重性,并使车辆恢复到安全状态,如果可能则继续行驶。
- 碰撞安全:Waymo强调NHTSA建议的碰撞安全。它设计的系统确保在发生碰撞时,对车内人员的伤害最小。
- 操作安全:Waymo努力确保操作安全。这意味着其界面可用、方便且直观。这里的重点是允许乘客对车辆有一定程度的控制,但仅限于能维持系统安全的方式。
- 非碰撞安全:Waymo促进非碰撞安全。这指的是系统设计能最大限度地降低与系统互动人员(如急救人员、机械师、硬件工程师等)的危险。
这五大支柱构成了Waymo的“安全设计”系统,并形成了一个广泛的需求定义、设计迭代和测试体系,以确保每个组件都满足系统的目标。该过程使用了来自现有领域的多种工具,我们将在下一个视频中详细介绍这些工具。
Waymo的测试流程 🧪
现在,让我们讨论Waymo为评估其软件而遵循的具体测试程序,因为这是目前最公开可见且记录最完善的程序。
以下是Waymo遵循的测试程序:
- 仿真测试:他们首先在仿真环境中测试所有软件更改,每天进行约1000万英里的仿真。这代表了持续运行的巨大计算量,以确认系统安全要求的预期改进。为此,他们从所有道路经验中挖掘具有挑战性的场景,并进行系统性的场景模糊测试,即随机改变其他车辆和行人的位置和速度参数,以测试自车在所有情况下是否表现安全。这种方法对于发现难以解决的边缘情况特别有用,例如并线或通过交叉路口时的困难时间间隙。
- 封闭场地测试:然后他们在私人场地上进行封闭场地测试。他们涵盖了加州大学伯克利分校研究确定的28个核心场景,以及Waymo增加的19个额外场景。这些场景围绕避免四种最常见的事故场景组织:追尾、交叉路口、偏离道路和变道。这些类别显然有许多变体,但它们共同占所有碰撞事故的84%以上。
- 真实世界测试:最后,他们进行真实世界测试,这在美国许多城市的街道上经常可以看到,包括加利福尼亚州山景城,就在谷歌主园区附近。这种测试使他们能够识别越来越多不寻常的情况,并主要依赖于在测试期间由人类监控自动驾驶软件的动态驾驶任务后备策略。
这些测试策略的组合绝非Waymo独有,但已成为事实上的标准,因为它为固定投资提供了最大的灵活性和反馈。每种测试方法都专注于其最擅长的领域:仿真用于操控使其变得困难的场景,封闭场地测试用于确认特定的安全性能提升,真实世界测试用于发现更具挑战性的场景并增加公众对该技术的信心。
通用汽车的安全理念 🚗
现在,让我们将注意力转向通用汽车的安全理念。通用汽车在2016年收购了Cruise Automation,并因此将自己推向了自动驾驶开发的领先地位。
通用汽车的战略非常紧密地遵循NHTSA的安全框架,并单独处理12个主要领域中的每一个。通用汽车的安全策略并不试图重组或简化NHTSA的指导,而是专注于实现所需安全评估的实施策略。
以下是通用汽车安全策略的关键点:
- 迭代设计模型:通用汽车强调其迭代设计模型。他们首先分析场景,然后构建软件,接着仿真场景并测试软件,最后在真实世界的汽车上部署软件。他们不断迭代地对需求和自动驾驶系统进行改进和优化。
- 集成设计:与Waymo依赖原始设备制造商设计其车辆,并且只讨论与其自动驾驶硬件相关的机械和电气危险不同,通用汽车完全自己制造汽车,因此可以执行更集成的设计,在整个自动驾驶硬件中保持一致的质标准。
- 全面风险管理:通用汽车通过全面的风险管理方案确保安全。他们识别并处理风险,试图完全消除风险,而不仅仅是减轻风险。
- 内部安全标准:最后,他们所有的系统都遵循内部明确定义的安全、可靠性、安全性等标准。他们在汽车行业拥有多年的车辆开发经验,并因此制定了广泛的安全流程。
他们的安全流程涉及三种类型的分析。首先,他们通过故障树方法进行演绎分析,精确定位可能发生故障的组件并加以解决。其次,他们通过设计失效模式与影响分析进行归纳分析,即对设计方案进行失效模式与影响分析,并尝试自下而上地确保安全。最后,他们采用危险与可操作性研究进行探索性分析,找出系统可能无法按预期工作的情况。
通用汽车的安全阈值与测试 ⚙️
现在,这一切听起来可能很熟悉,事实上,这些正是Waymo描述的相同分析支柱。在下一个视频中,我们将更详细地介绍这些方法实际如何运作。
让我们谈谈通用汽车车辆的安全阈值。所有通用汽车车辆至少必须遵循两个关键的安全阈值。
以下是通用汽车的安全阈值与测试机制:
- 故障安全与冗余:首先,通用汽车为不同组件定义了一套明确的故障安全、备份系统和冗余,以便系统在发生故障后仍能继续工作。
- 预期功能安全评估:其次,组件必须通过预期功能安全评估,我们将在下一个视频中更详细地讨论。通过此评估,我们确保所有关键功能在已知和未知场景下都得到评估。
- 严格的测试机制:最后,通用汽车遵循严格的测试机制,包括性能测试、需求验证、故障注入、侵入式测试、耐久性测试和基于仿真的测试。
这两家公司都严格遵循安全标准,因此是实际有效实施安全的绝佳范例。
评估安全的方法:分析与数据驱动 📊
现在,我们对行业如何进行安全评估有了更清晰的认识,但我们仍然面临这个问题:是否真的可能精确评估自动驾驶汽车是否安全?或者至少比人类驾驶员更安全。让我们讨论可用于评估自动驾驶系统安全性的各种方法。
我们有两种可能的方法:分析式或数据驱动的安全评估。
分析式安全评估意味着可以通过分析系统来定义可量化的安全性能或故障率,这是基于对危险和场景的关键评估。如果可以通过分析确定整个系统的故障率,它可以为系统的哪些方面对整体安全贡献最大提供强有力的指导。一个很好的例子是航天飞机计划,其最初的分析故障率估计为每10万次飞行发生一次。然而,在该计划结束后,一项法证研究表明,早期航天飞机计划的飞行故障率接近每10次飞行发生一次,并且直到计划结束时才进展到每100次飞行发生一次。考虑到构成航天飞机发射的数千个子系统以及可能影响这些系统运行的数百万个变量,能够对如此复杂的系统进行此类分析本身就是一个奇迹。这种详细分析也适用于自动驾驶汽车,但由于车辆可能遇到的无限多样情况,可以说更为复杂。最终,分析方法只能为自动驾驶系统的安全性能提供指导,其结果需要通过经验来验证。
为了评估经验,我们使用数据驱动测试。这个概念是指,我们确信系统是安全的,因为它已经证明,使用特定版本的软件,它可以在运行设计域包含的一组道路和场景上达到所需的故障率。在自动驾驶的情况下,这些所需的故障率可以与人类驾驶水平挂钩,我们希望将事故率比当今驾驶员的水平降低10倍或100倍。
当前数据与挑战 📉
那么数据说明了什么,自动驾驶汽车实际上更安全吗?首先要知道,按照人类标准,驾驶仍然很危险。2015年的一份报告得出结论,在所有驾驶死亡事故中,约90%是由于人为错误造成的,有时是由于判断失误,有时是由于人类感知失败等。但人类也非常擅长驾驶,事实上,整个驾驶环境都是基于人类的感知和规划能力设计的。在美国,大约每行驶1.46亿公里发生一起死亡事故,每行驶210万公里发生一起受伤事故,大约每行驶40万公里发生一起碰撞事故。最后一个数字只是估计值,因为大多数较小的碰撞实际上并未报告。事实上,自动驾驶可能会大大有助于阐明这些统计数据,因为借助我们可用的额外传感器,将可能进行更全面的报告和重建。
现在让我们考虑初步的自动驾驶车辆统计数据,更具体地说,是在加利福尼亚州测试的所有自动驾驶车辆发布的脱离率。脱离是指自动驾驶软件请求驾驶员接管控制,或者安全驾驶员认为有必要进行干预。可以理解,获取整个测试车队的真实碰撞统计数据具有挑战性,因为这些是敏感数据。幸运的是,在加利福尼亚州的测试附带了一些有用的报告要求。2017年,Waymo在加利福尼亚州行驶了56.3万公里,经历了63次脱离,大约每9000公里脱离一次。通用汽车Cruise在加利福尼亚州行驶了21万公里,有105次脱离,大约每2000公里脱离一次。两者在整个年度都在快速改进,在当年的最后三个月,脱离率分别达到每12500公里一次和每8300公里一次。这些数字很难与人类表现直接关联,但大致意味着典型的通勤者每年只需因自动驾驶系统故障而干预一次。这是巨大的进步,但距离人类每年在数万亿英里行驶中实现的每40万公里发生一次碰撞仍有差距。
Waymo的63次脱离按频率排序的主要原因依次是:不期望的车辆机动、感知差异、硬件问题、软件问题、行为预测,最后是一起鲁莽道路使用者的情况。很明显,感知、预测和行为规划等核心任务仍然是具有挑战性的问题,仍有许多工作要做。
最后,谈谈统计显著性。从当今车队观察到的性能令人印象深刻。但它们能在多大程度上代表与人类能力的准确比较?我们真正需要行驶多少英里才能证明自动驾驶汽车比人类驾驶员更安全?特别是在死亡事故方面。在补充材料中,我们包含了一份兰德公司报告的链接,该报告试图解决这个问题。数字令人震惊。由于死亡事故是罕见事件,并且考虑到众多因素,报告指出,如果使用纯道路测试来验证自动驾驶系统的安全性,可能需要超过80亿英里的行驶里程。如果一支由100辆车组成的车队每天24小时、每周7天不间断行驶,至少需要400年才能完成。这是一个漫长的等待时间。正是由于这个原因,我们看到了如此多方面的安全方法。每家公司都在扩大车队规模,以增加自动驾驶系统在道路上获得的经验。
总结 📝
在本视频中,我们探讨了两种关于自动驾驶安全评估的行业观点:Waymo和通用汽车,并发现许多方法借鉴自其他行业。我们还讨论了当前的脱离率和道路测试要求,以证明优于人类的表现。在下一课中,我们将探讨一些最常用的安全框架和方法论。我们下节课见。




022:自动驾驶安全框架


在本节课中,我们将学习几种流行的安全评估框架。我们将从通用的分析框架开始,然后聚焦于汽车和自动驾驶领域特定的安全标准。通过本课,你将了解如何系统地分析和降低自动驾驶系统的风险。
通用安全分析框架
上一节我们介绍了安全的重要性,本节中我们来看看几种用于系统化识别和管理风险的分析框架。
故障树分析
故障树分析是一种自上而下的安全评估方法。我们从希望避免的系统故障(顶事件)开始,逐层向下分解,找出导致该故障的所有可能原因和底层事件。
故障树的顶层节点称为根事件或顶事件。中间节点是逻辑门,定义了导致根事件的潜在原因。这种分解会持续到可以为每个底层事件定义发生概率的详细程度。然后,我们可以使用布尔逻辑定律组合这些概率,来评估根事件发生的总体概率,以及哪些原因对其贡献最大。
考虑一个简单的例子:以车辆碰撞作为我们的根事件。导致碰撞的原因可以分解为软件故障或硬件故障(以及其他许多可能性)。硬件故障可能源于制造缺陷或材料缺陷。软件错误可能源于感知代码故障或网络安全问题(例如被黑客攻击)。我们可以继续分解到软件子系统和其中的特定计算,在每一个分支上深化树结构。最终,我们会到达可以分配每小时或每英里运行发生概率的特定故障率节点,即故障树的叶节点。
给定各个叶节点的故障率评估,我们可以使用逻辑门结构明确计算整体故障率的统计数据。用于向上传播这些概率的运算规则与事件遵循集合论时的概率规则相同。例如,对于独立事件,“或”和“与”的概率分别是子节点概率的和或积。
这就是故障树背后的基本思想。当叶节点包含概率时,它被称为概率故障树。概率故障树是一种在核能和航空航天工业中广泛使用的自上而下的安全方法,同样可以应用于自动驾驶。挑战在于构建一个全面的树结构,并正确识别叶节点事件的概率。
失效模式与影响分析
与故障树从系统故障向下流向所有可能原因不同,失效模式与影响分析是一种自下而上的过程。它着眼于单个原因,并确定可能发生的所有影响。
通常,故障树分析和失效模式与影响分析会结合使用来评估安全关键系统。失效模式是指整个系统中某个特定组件导致系统故障的方式。影响分析是指分析这些模式故障可能引起的所有可能后果。通常,影响分析旨在找出那些导致最严重故障的模式,从而可以改进设计,为系统增加更多冗余或更高可靠性。
以下是失效模式与影响分析的核心思想:目标是根据优先级对失效模式进行分类。因此,我们会问以下问题:影响有多严重?这些故障发生的频率如何?以及检测这些故障的难易程度如何?然后,我们使用优先级值量化所有故障,并首先处理优先级最高的故障。
以下是实施步骤。目标是构建一个包含所有可能风险情况的表格。
首先,与领域专家讨论,确定我们希望在表格中达到的详细程度的过程。
然后,质疑系统的目的,并列出所有可能的故障。
接着,针对每个可能的故障,识别其可能的后果,并为每个后果分配一个1到10的严重性评级(10为最严重)。
对于每个后果,识别可能的根本原因,并为每个根本原因分配另一个1到10的数字,表示该原因发生的频率。
然后,识别操作员、维护检查或故障检测系统可以检测到该失效模式的所有方式。
我们评估在导致影响之前检测到该模式的总体可能性,并分配另一个1到10的分数(1表示保证能被检测到,10表示不可能被检测到)。
最后,我们计算一个最终数字,称为风险优先级数,它是严重性、发生频率和可检测性三个分数的乘积。这个值越高,优先级就越高。
最终,我们通过修改系统的实现来解决最有问题的失效模式,直到将风险降低到可接受的水平。
也可以像故障树分析一样,使用实际的故障概率来执行失效模式与影响分析,并根据在固定运行期间发生关键事件的可能性来定义可接受的风险水平。方法不变,只是数字的含义和完成整个分析的复杂性会有所不同。
让我们坚持使用简单的评分方法,并通过一个简短的例子使失效模式与影响分析过程更具体。
考虑一个特定故障:车辆驶入由于其测试区域内道路施工而出现的碎石路面,导致控制器不稳定。最坏的影响可能是物理碰撞,严重性为10。它也可能导致驾驶员不适或险些发生事故,但这些事件的严重性较低。这种事件在城市环境中可能经常发生,只要存在特定类型的施工,所以可能性较高,假设我们将发生频率评分定为4。同样,我们可以为其他影响分配发生频率分数。假设这个问题目前无法检测,因为在我们自动驾驶软件运行期间没有主动监控路面纹理。因此,对于所有这些影响,可检测性评分都是10。那么,碰撞的风险优先级数就是 10 × 4 × 10 = 400。

同样,我们可能还有其他失效模式。例如,一个标志感知故障,优先级数为100;一个GPS同步故障,优先级数为300;一个车辆运动预测故障,优先级数为150。因此,我们将按照优先级顺序,在实施中解决这些故障:先处理碎石路面行驶,然后是GPS故障,接着是运动预测,最后是标志感知。

这就是失效模式与影响分析背后的通用框架。它是一种由军事和航空航天工业开发,后来引入汽车工业的风险评估方法。它提供了一种结构化的方式来量化风险并优先处理最重要的风险。
危险与可操作性分析
最后,失效模式与影响分析的一个常见变体是危险与可操作性分析。
与失效模式与影响分析寻求定量定义风险相比,危险与可操作性分析更偏向于定性过程。其主要目的是对可能出现的危险集合进行有效的头脑风暴。对于复杂过程,可以在不必为发生频率、严重性和可检测性分配具体数值的情况下评估风险,而这些数值可能很难确定。危险与可操作性分析通常在设计过程的早期用于指导概念设计阶段。
危险与可操作性分析的关键补充是使用引导词来引导应用于每个系统需求的头脑风暴。这些引导词包括“无”、“多”、“少”、“早”、“晚”等,可以引出其他情况下可能不会被考虑的潜在失效模式。因此,可以将危险与可操作性分析视为一种简化的、持续进行的失效模式与影响分析头脑风暴方法。
汽车与自动驾驶安全框架
现在,让我们聚焦于更具体的安全类型,讨论用于汽车和低级自动驾驶功能开发的现有安全框架,这些框架常用于评估自动驾驶车辆中的硬件和软件故障。
功能安全
我们将特别讨论ISO 26262中描述的功能安全方法,以及扩展了ISO 26262并在ISO PAS 21448中定义的预期功能安全方法。
功能安全是指因汽车硬件和软件故障引起的功能异常行为,或与其预期设计相关的非预期行为,所导致的不合理风险的缺失。
ISO 26262标准定义了汽车内电气和电子系统的功能安全术语和活动。因此,它仅涉及可能影响自动驾驶车辆安全的硬件和软件危险。该标准定义了四个汽车安全完整性等级,其中D级要求最严格,A级要求最低。每个等级都有与之相关的特定开发要求,必须遵守才能获得认证。
功能安全流程遵循V形流程。从左上角的需求规范开始,然后进行危险和风险分析,接着进行功能实现。然后,我们沿着右侧分支向上攀升,以确认设计目标已实现。我们从低层级的验证(如软件单元测试)开始,然后通过仿真、试验场操作和道路测试,进行子系统和全系统的验证。当我们沿着V形左侧下降时,高层级需求转化为低层级实现;当我们沿着V形右侧攀升时,我们在组合它们以确认系统安全运行需求之前,先确认每个低层级功能的实现。最后一步是进行总结性的功能安全评估,以评估残余风险并确定我们的系统是否已达到可接受的安全水平。
在功能安全V形流程的开始,我们使用危险分析与风险评估。在危险分析与风险评估中,我们识别和分类危险事件,并指定避免不合理风险的要求。这个过程驱动了此后的所有系统开发和测试。为此,我们首先识别可能影响汽车安全的硬件和软件故障、功能异常以及非预期功能。这就是失效模式与影响分析或危险与可操作性分析在功能安全框架中使用的地方,并会导出一组针对我们系统的特定危险。然后,我们定义系统必须运行的场景或情况列表,利用我们的设计运行域来创建此列表。接下来,我们将危险和情况组合成危险事件,描述预期损害,并确定风险参数,以计算每种情况和危险组合的潜在风险数值。在风险评估之后,我们选择风险最高的场景,即针对每种可能的故障可能发生的最坏情况事件。最后,我们基于这些最坏情况场景定义我们的安全要求。
危险分析与风险评估过程以了解所有可能发生的最坏情况故障的方式设定系统的设计目标,并通过验证确认这些最坏情况故障仅以合理的风险得到处理。这就是功能安全背后的主要思想:你专注于最坏情况需求,然后实现至少能够处理这些最坏情况需求的硬件和软件。
预期功能安全
最后,让我们简要探讨一下预期功能安全标准。
它在ISO PAS 21448文件中正式定义。预期功能安全特别关注与系统性能限制和系统的可预见误用相关的故障原因。
性能限制是指由于技术限制(如传感器性能限制和噪声)、算法限制(如物体检测失败)以及执行器技术限制导致的已实现功能不足。硬件和软件故障由ISO 26262中的功能安全标准处理,不在预期功能安全的范围内。预期功能安全还解决了由于用户可预见的误用而导致的不安全操作,例如用户困惑、用户过载和用户过度自信。当前的预期功能安全标准针对自动化等级0、1和2,并且也说明其方法可以应用于等级3、4和5的自动驾驶,但可能需要额外的措施。预期功能安全可以被视为功能安全流程的扩展,专门设计用于应对自动驾驶功能的挑战。因此,它遵循非常相似的V形开发理念,但增加了组件。预期功能安全也采用危险分析与风险评估来识别由性能限制和误用引起的危险。然后执行类似的设计、单元测试、验证和确认序列,以确认安全要求已得到满足。
总结
本节课中我们一起学习了多种安全评估框架。

我们首先讨论了通用安全框架:作为自上而下安全评估方法的故障树分析,以及作为自下而上安全评估方法的失效模式与影响分析。然后我们讨论了功能安全的概念,这些概念常用于软件和硬件的风险评估。我们还讨论了作为功能安全扩展的预期功能安全,它考虑了性能限制和误用。


正如我们在Waymo和GM的案例中看到的,所有这些理念在工业界都被广泛使用,它们在其安全评估中几乎使用了所有这些技术。恭喜你完成了本安全评估模块的学习。
自动驾驶汽车简介:P23:认识安全保证专家克日什托夫·查内茨基教授


在本节课中,我们将与安全保证专家克日什托夫·查内茨基教授对话,探讨自动驾驶汽车的安全性问题。我们将了解他在该领域的工作经历,以及自动驾驶安全设计所涵盖的关键方面。
大家好,欢迎来到滑铁卢大学的自动驾驶汽车车库。
我在这里与我的好友兼同事克日什托夫·查内茨基在一起。
我们今天将讨论自动驾驶的安全性问题。
我们是否可以从您在自动驾驶汽车安全设计方面所做的出色工作开始谈起?我曾为戴姆勒研究部门工作,那是16年前,而12年前,我有机会……没错,在一辆自动驾驶汽车原型车中,那是早期的原型车之一。是的,非常令人兴奋。当我来到滑铁卢大学后,我从事汽车软件工作,而功能安全始终是汽车软件中的一个重要主题,主要涉及潜在的缺陷。本质上,你不希望在以每小时100公里速度行驶的车辆中,出现类似电脑“蓝屏死机”那样的致命故障。
大约两年来,我一直在研究自动驾驶汽车,特别是其安全方面。因此,我的工作重点是系统架构、设计方法论、处理机器学习的安全性以及车辆在交通中的行为安全。


上一节我们介绍了克日什托夫教授的背景和研究重点。本节中,我们来具体看看他提到的几个核心安全领域。
以下是自动驾驶安全设计涉及的几个关键层面:
- 功能安全:核心目标是防止由系统故障(如软件缺陷、硬件失效)导致的危险。这通常遵循 ISO 26262 等标准,通过系统化的设计、分析和测试流程来确保安全。
- 预期功能安全:关注的是系统在无故障情况下,由于性能局限或设计不足而可能引发的风险。例如,传感器在极端天气下性能下降,或算法对某些场景处理不当。
- 机器学习安全性:由于自动驾驶大量依赖机器学习模型(如感知、决策),需确保这些模型的鲁棒性(对抗干扰的稳定性)、可解释性和可靠性。这涉及到对训练数据、模型架构和测试验证的特殊要求。
- 交通行为安全:确保自动驾驶车辆在复杂的动态交通环境中,其决策和行为符合安全规范,并能与其他道路使用者进行安全、可预测的互动。


本节课中,我们一起学习了自动驾驶汽车安全领域的概况。通过与克日什托夫·查内茨基教授的交流,我们了解到自动驾驶安全是一个多维度、跨学科的挑战,它不仅仅关乎硬件和软件的可靠性,还涉及算法行为的合理性以及在真实交通环境中的综合表现。理解这些基础层面是构建安全可靠的自动驾驶系统的第一步。
024:自动驾驶安全评估与验证

概述
在本节课中,我们将探讨自动驾驶汽车安全评估与验证所面临的挑战。我们将了解如何定义安全、区分验证与确认测试,并讨论应对海量测试需求的可能方法。
定义安全的挑战性问题
你认为,在定义自动驾驶汽车的安全性方面,我们需要回答哪些具有挑战性的问题?
这是一个已解决的问题吗?我们是否知道如何评估自动驾驶汽车的安全性?还是说,有太多因素或变量,以至于我们无法妥善处理“汽车是否安全”这一具体定义?
安全的定义与复杂性
安全可以用语言轻松定义。你可以说,安全是指不存在不合理的风险,在此情境下即撞车风险。
然而,当你深入探究这一定义时,它会变得非常复杂。核心问题在于:什么是不合理的风险?以及如何证明不存在不合理的风险,即只存在可接受的风险?
对于任何复杂系统,你都必须识别其中存在的危险。这些危险可能存在于系统的设计、实现,也可能存在于系统的运行过程中。
因此,我们本质上需要三个步骤:我们必须识别这些危险;我们必须识别危险可能发生的机制或方式;然后我们必须解决它们,即在设计、实现和运行中解决这些危险。
对于自动驾驶汽车,肯定存在许多此类可能发生的危险。
测试的挑战与规模
因此,挑战似乎部分在于需要进行多少测试。有一份报告指出,为了确保我们了解是否达到了人类水平的性能,所需的测试数量是天文数字——大约是每周7天、每天24小时不间断地进行400年的测试。
你认为这是一个根本性的阻碍吗?由于测试要求如此之高,追求自动驾驶是否变得不可能?还是说有某种解决方法?
应对海量测试需求
我不认为有办法绕过为所谓的“确认测试”积累足够里程的需求。这本质上是为了理解系统要求。
尽管这些数字看起来是天文数字,但一旦拥有足够庞大的车队,我们最终会积累这些里程。
当然,我们必须在知道系统是否可靠之前就发布技术。我们必须以渐进的方式进行。这就是为什么我们最初要进行测试——我们知道这是一个反馈循环。我们在实践中了解哪些方法有效、存在哪些风险,并在推广过程中解决这些风险。
验证测试与确认测试的区别
这里有一个非常重要的区别,即“验证测试”和“确认测试”。
例如,如果你更改了系统或改进了软件,你不需要重新进行所有这些公里数的测试。这些公里数的测试是为了定义系统要求。
之后,也许可以在仿真环境中进行,并且你知道哪些部分需要在道路上重新测试,或者哪些部分需要在封闭场地重新测试。

总结
本节课中,我们一起学习了自动驾驶安全评估的核心挑战。我们探讨了安全的定义及其复杂性,认识到识别和处理系统各层面的危险是关键。我们讨论了海量真实路测的必要性,但也理解了通过渐进式部署和反馈循环来应对。最后,我们明确了“验证测试”与“确认测试”的区别,后者用于定义要求,而前者在系统变更后可以更有针对性地进行。安全评估是一个持续的过程,而非一劳永逸的任务。
025:航空业经验与安全框架

在本节课中,我们将探讨自动驾驶技术发展中的一个核心问题:如何立法与构建安全体系。我们将分析航空业的成熟安全框架,并讨论其如何为自动驾驶领域提供借鉴,同时指出两者在应用环境上的根本差异。
立法与责任归属的挑战
一个经常被提及的问题是,我们如何为这项技术立法。我们知道事故终将发生,事实上,我们已经看到一些早期测试甚至导致了死亡案例。一旦我们开始更广泛地部署这项技术,我们永远无法达到完美的安全记录,总会有不可预测的故障和事故发生。
那么,如何划分责任?例如,当某家汽车制造商的车辆第一次撞上一辆载满儿童的校车时,这会终结整个行业吗?如果每个月都有针对这些试图自主驾驶的车辆的诉讼,我们是否会迷失方向?
行业目标:零死亡事故
对于行业和所有相关方而言,目标应该是零死亡事故。我们知道任何技术系统都可能出现故障,但我们必须尽一切可能避免那些会导致死亡或重伤的故障。这是首要目标。
向航空业借鉴安全框架
在某种意义上,汽车行业可以从航空业学到很多。航空业已经建立了一套体系,其中系统工程、运营和维护的所有方面都服从于一个整体的安全体系,即安全工程。
以下是航空业安全框架的核心做法:
- 系统性风险分析:审视所有重要的风险因素。例如,航空公司可能会分析成千上万个风险点。
- 全面应对:系统地解决所有风险,这既包括技术层面,也包括飞行员培训、确保充足睡眠等操作层面。
航空与自动驾驶环境的根本差异
然而,航空业的经验只能提供部分参考。航空器运行的环境要简单和开放得多。自动驾驶面临的真正挑战,似乎来自于与所有其他车辆、智能体以及行人的交互,其复杂性似乎完全不同。
你说得对,问题确实不同。例如,在驾驶飞机时,你有更多的时间来应对问题。我所说的借鉴,主要是指整体的安全框架:每一起坠机事故都会被调查,每一个事件都会被记录,我们总是从中学习,并且这种学习成果在国际所有关键利益相关者之间共享。
其核心理念是:竞争对手不在安全问题上竞争。这就是关键差异。
方法不能完全照搬
因此,我们不能100%照搬航空业的具体方法和技术。例如,在航空领域,你有一名训练有素的飞行员,自动化系统处理所有简单和中等难度的事务,而飞行员仍然负责处理所有困难情况。
在我们的案例中,我们希望实现一切自动化,并且无法依赖一个合格且训练有素的“飞行员”。因此,这些问题必须得到解决,这非常具有挑战性。
安全理念可以相通
但是,对待安全的方法本质上可以是相同的。我们必须思考这一点,并将此框架建立起来。

本节课中,我们一起学习了自动驾驶安全立法面临的挑战,以及向航空业借鉴整体安全框架的可能性。我们认识到,虽然自动驾驶的运行环境远比航空复杂,无法照搬具体技术方案(如依赖飞行员),但建立一套系统性的、非竞争性的、基于持续学习和共享的安全工程理念,对自动驾驶行业至关重要。目标是明确的:尽一切努力向零死亡事故迈进。
027:企业如何应对自动驾驶汽车安全问题


在本节课中,我们将探讨自动驾驶汽车带来的长期效益,以及企业为确保其安全性所采取的多层次测试与验证策略。
🚗 自动驾驶的长期效益
自动驾驶汽车的长期效益首先体现在安全性上。人们常听说有人深夜驾驶时目睹车祸,或因前方司机疲劳驾驶或追尾导致交通拥堵。如果社会能达到所有车辆都是自动驾驶的阶段,理论上将不再有车祸发生。人们可以安全地从A点行驶到B点。
此外,交通拥堵有望减少。道路上车辆数量可能减少,因为这些车辆可以相互通信,并且由于无需频繁变道超车,所有车辆能以相同速度行驶,这能极大缓解由变道和施工等因素造成的拥堵。
同时,自动驾驶为无法自行驾驶的人群提供了出行便利。例如,无法获得驾照的人,或在城市中养车不现实的人。对他们而言,乘坐公交车或未来的自动驾驶车辆,无需像公交车那样绕行,就能直达目的地,是更合理的选择。
🔬 确保安全的多阶段测试流程
在代码部署到车辆之前,我们会经历多个检查阶段,以确保其功能符合预期。
以下是我们的主要测试阶段:
- 仿真模拟:首先在仿真环境中运行代码。
- 历史场景测试:针对我们以前遇到过的边缘案例进行测试。
- 封闭场地测试:最终将代码部署到车辆上后,我们先在私人测试跑道上进行测试,然后才允许其进入公共道路。
我们通过多个测试阶段来确保上路车辆的安全,然后才实际部署这些软件功能。我们首先在仿真中严格测试代码,然后针对可能遇到过的边缘案例进行测试。一旦代码实际部署到车辆上,我们会先在私人测试跑道上测试这些车辆,之后才让它们驶上公共道路。
📊 安全性的核心优势与挑战
自动驾驶汽车的一个主要优势正是安全性。一个常被引用的统计数据是,94%的交通事故由人为错误造成。这为自动驾驶汽车提供了巨大的改进空间。
然而,保证车辆在所有不同道路场景下的安全,无疑是主要挑战之一。幸运的是,我们通过仿真、真实世界测试积累里程以及计算机测试等方式来解决这个问题。
🌙 应对不同环境的感知能力
这个话题经常被提及。显然,白天和夜晚的能见度不同。幸运的是,我们拥有多种传感器模式,它们能很好地相互补充。例如,雷达和激光雷达在夜间也能完美地“看见”东西。
通过使用多种不同的传感器技术,我们能够创建对周围世界安全、全面的感知,即使在夜间也是如此。
🛡️ 对测试与安全的严肃态度
我们绝对非常重视测试和安全。大量测试始于计算机仿真,以确保一切达标。许多真实世界测试开始时由人类驾驶员在方向盘后操控,他们可以随时接管,以保证安全,以防出现任何问题。
随着我们积累更多里程和经验,我们会越来越多地进行此类测试。我们从收集的数据集中不断学习,以进一步完善我们的系统。
🤝 机器学习的集体经验优势

我们许多人都认识在驾车时发生过事故的家人或朋友。这很糟糕,但事故发生后,你的邻居并不一定会因此变成更好的司机。
但对于无人驾驶汽车,情况则不同。设想20年后,我坐进的无人驾驶汽车将受益于所有其他无人驾驶汽车曾经行驶过的所有里程。而人类驾驶员恰恰无法做到这一点。因此,有一个非常有说服力的论点支持这些机器共享数据,共享它们在各种驾驶方式中获得的经验。而人类驾驶是一种孤独的体验,我们所有18岁的新手司机都是从不太好的驾驶者开始重复这一过程,这听起来很不合理。
🏙️ 改善交通与城市的愿景
我们有很多理由想要改善交通和城市。当你在飞机上望向窗外,会发现我们国家建造的大量基础设施都是为了移动人和物。

本节课中,我们一起学习了自动驾驶汽车在安全、效率和包容性方面的长期潜力。我们深入了解了企业为确保安全所采取的从仿真到真实道路的 rigorous 测试流程,并探讨了自动驾驶通过数据共享获得集体经验、从而超越人类驾驶局限性的独特优势。最终,改善城市交通是推动这项技术发展的核心愿景。
028:二维运动学建模


在本节课中,我们将学习自动驾驶汽车的二维运动学建模基础。我们将从坐标系转换开始,然后为一个简单的两轮机器人建立运动学模型,为后续学习更复杂的车辆模型打下基础。
坐标系与变换
在开始对车辆运动进行建模之前,理解坐标系变换的概念至关重要。本节中,我们将介绍二维变换,在后续关于状态估计的课程中,您将看到更多三维变换的内容。
我们使用的坐标系通常是右手坐标系,并且在本系列课程中会使用几个标准坐标系。
- 全局/世界/惯性坐标系:这是一个固定在地球上的参考系。通常表示为相对于附近参考点的东-北-天(ENU)坐标系,或全球导航卫星系统(GNSS)中使用的地心地固(ECEF)坐标系。
- 车身坐标系:该坐标系附着在车体的某个关键位置,例如车辆的重心或后轴中心点。该坐标系随着车辆的运动而相对于固定的惯性坐标系移动和旋转。
- 传感器坐标系:该坐标系附着在每个传感器上,描述了传感器输出所使用的坐标。
在许多机器人应用中,我们需要为移动系统附加多个坐标系,并需要在惯性坐标系中表示这些坐标系中的元素。为此,我们需要将变量从一个坐标系转换到另一个坐标系,例如从车身坐标系转换到惯性坐标系。即使是一个带有单个传感器的简单两轮机器人,也需要考虑三个这样的坐标系,而自动驾驶汽车则可能有数十个。为了保持感知中传感器数据表示的一致性,我们需要能够在坐标系之间转换信息。
让我们看一个简单的汽车速度矢量变换示例。通常,速度等运动学变量以具有大小和方向的矢量形式表示。
在下图中,矢量 V 在二维坐标系中以绿色箭头表示。这里显示了两个坐标系:由轴 B1 和 B2 定义的车身坐标系,以及由轴 E1 和 E2 定义的惯性坐标系,两者都在二维平面内。
假设两个坐标系(E系和B系)具有相同的固定原点,但B系相对于E系旋转了某个角度 θ。
我们可以定义旋转矩阵 C_EB(将矢量从B系变换到E系)和 C_BE(使用角度 θ 将E系投影到B系上),如下所示:
C_EB = [ [cosθ, -sinθ], [sinθ, cosθ] ]
C_BE = [ [cosθ, sinθ], [-sinθ, cosθ] ]
现在,让我们扩展示例以包含平移。这里我们看到一个两轮机器人,我们希望表示机器人车身坐标系 B 中观察到的点 P 相对于惯性坐标系 E 的位置。
机器人相对于惯性坐标系的位置是 (x, y)。机器人的方向再次是 θ。
以下方程关联了点 P 在车身坐标 p_B 和惯性坐标 p_E 中的位置:
p_E = C_EB * p_B + O_EB
p_B = C_BE * (p_E - O_EB)
注意,通常要将一个点从一个坐标系转换到另一个坐标系(车身到惯性,反之亦然)需要两项:原点的平移(本例中的 O_EB 和 O_BE)以及坐标轴的旋转(C_EB 和 C_BE)。
最后,我们可以使用齐次坐标来总结两个坐标系之间的变换,这导致了一个紧凑的矩阵乘法来应用变换。我们将位置向量扩展为包含 (x, y, 1),然后可以使用以下公式从车身坐标变换到惯性坐标:
[p_E; 1] = [C_EB, O_EB; 0, 0, 1] * [p_B; 1]
两轮机器人运动学建模
上一节我们介绍了坐标系变换,本节中我们来看看如何为一个简单的两轮机器人建立运动学模型。
机器人的运动被限制为只能向前移动,因为它的轮子指向这个方向。这个约束称为非完整约束,意味着它限制了机器人位置的变化率。因此,我们的机器人可以向前滚动并在滚动时转向,但不能直接侧向移动。我们将利用这个约束来定义机器人的运动学模型。
机器人的速度由其路径的切向量定义。将机器人的方向角定义为 θ。那么 tanθ 可以写为 dy/dx,即机器人在 y 方向的速度除以在 x 方向的速度。通过重新排列上述方程,我们可以推导出非完整约束方程的表达式如下:
-sinθ * dx + cosθ * dy = 0
然后,我们可以结合这些方程构建一对描述机器人运动的方程。机器人在 x 方向的速度是速度矢量大小 v 乘以 cosθ,在 y 方向是 v 乘以 sinθ:
dx/dt = v * cosθ
dy/dt = v * sinθ
最后,我们可以假设直接控制机器人航向的变化率:
dθ/dt = ω
我们现在已经成功地为机器人建立了一个运动学模型。该模型以向前速度 v 和旋转速率 ω 作为输入,并使用三个状态组成的向量来表示机器人:机器人的 x 和 y 位置及其航向角 θ。
在本课程中,我们将使用基于状态的模型。状态是一组变量(通常以向量的形式排列),它们完全描述了系统在当前时刻的情况。回到我们的机器人,模型的输入是速度 v 和方向变化率 ω。然而,对于实际的两轮机器人,也可能需要直接命令轮速作为输入。
我们现在来看看如何扩展模型,并将每个车轮的旋转速度与向前速度 v 和旋转速率 ω 联系起来。我们需要定义更多变量:
- P:机器人的中心。
- L:从机器人中心到每个轮子的距离。
- R:车轮的半径。
- ω1 和 ω2:左轮和右轮的角速度。
每个车轮处机器人的速度是车轮半径乘以其旋转速度,即 v_i = R * ω_i。这是通过假设车轮与表面之间无滑移来实现的。
机器人的速度可以计算为两个车轮的平均速度,如下图所示。当两个车轮的速度相同时,机器人沿直线移动。如果车轮速度不同,机器人将沿着某个瞬时旋转中心(ICR)做曲线运动。
我们现在将使用 ICR 的概念来定义两轮机器人的运动学模型。我们再次有旋转速率 ω 等于 v / R,并可以使用相似三角形来定义两个关于 ω 的表达式,分别用 v2 和 R、v1、v2 和 L 表示。将这些方程与用轮子旋转速度表示速度 v1 和 v2 的表达式相结合,就得到了机器人旋转速率的最终方程形式:
ω = (v2 - v1) / (2L)
v = (v1 + v2) / 2 = R * (ω1 + ω2) / 2
现在我们回到原始的机器人模型,并代入两轮机器人速度和旋转速率的新表达式:
dx/dt = R*(ω1+ω2)/2 * cosθ
dy/dt = R*(ω1+ω2)/2 * sinθ
dθ/dt = R*(ω2 - ω1) / (2L)
我们可以看到,该模型的输入是 ω1 和 ω2,即车轮的角速度,而两种机器人的状态保持不变。
此外,通过对连续时间方程进行离散化,我们可以将模型从微分形式转换为有限差分形式。这种形式对于控制器设计(我们很快就会看到)以及仿真和状态估计目的都很方便。
x_{k+1} = x_k + T * R*(ω1_k+ω2_k)/2 * cosθ_k
y_{k+1} = y_k + T * R*(ω1_k+ω2_k)/2 * sinθ_k
θ_{k+1} = θ_k + T * R*(ω2_k - ω1_k) / (2L)
注意,下标 k 表示当前时间步的变量值,下标 k+1 表示下一个时间步的变量值。

总结

在本节课中,我们一起学习了二维坐标系及其变换,并为一个两轮机器人建立了连续和离散的运动学模型。在下一个视频中,我们将开发运动学自行车模型,这是一个用于表示自动驾驶汽车运动的便捷而紧凑的工具。下次见。
029:自行车运动学模型




在本节课中,我们将学习如何建立经典的自行车运动学模型。这个模型因其简洁性,并能很好地满足汽车的非完整约束,在描述车辆正常行驶条件下的运动方面表现出色。
上一节我们介绍了运动学建模的基础和约束条件,并引入了瞬时旋转中心的概念。本节中,我们将推导自行车运动学模型。
模型概述与变量定义
著名的自行车运动学模型因其简单且符合汽车的非完整约束,长期以来被用作面向控制的合适车辆模型。
在推导模型之前,我们先在双轮机器人模型的基础上定义一些额外的变量。
我们将要建立的自行车模型被称为前轮转向模型,因为前轮的方向可以相对于车辆航向进行控制。
我们再次假设车辆在由惯性系Fi表示的二维平面上运动。
在提出的自行车模型中,前轮代表汽车的前左和前右轮,后轮代表汽车的后左和后右轮。
参考点选择
为了分析自行车模型的运动学,必须在车辆上选择一个参考点 (X, Y)。这个点可以放置在:
- 后轴中心
- 前轴中心
- 重心或质心
参考点的选择会影响最终得到的运动学方程,进而影响我们将要使用的控制器设计。在本课程中,我们将根据需要切换不同的参考点。
后轴参考点模型
让我们从后轴参考点模型开始。
我们将后轴参考点的位置表示为 (X_R, Y_R),自行车的航向表示为 θ。我们用 L 表示自行车两个轮轴之间的长度。与双轮机器人一样,这些是我们的主要模型状态。
自行车模型的输入与双轮机器人略有不同,因为我们现在需要定义前轮的转向角。
令转向角为 δ,它相对于自行车的前进方向测量。速度表示为 V,方向与每个车轮的方向相同。这是一个被称为“无滑移条件”的假设。
该假设要求我们的车轮不能横向移动,也不能纵向打滑。正是这个假设使我们能够根据双轮机器人车轮的旋转速率来计算其前进速度。
由于无滑移条件,我们再次得到自行车的旋转速率 ω 等于速度除以瞬时旋转中心半径 R。
根据由 L、R 和 δ 形成的相似三角形,我们看到 tan(δ) 等于轴距 L 除以瞬时转弯半径 R。
结合这两个方程,我们可以找到车辆旋转速率 ω 与转向角 δ 之间的关系为:ω = V * tan(δ) / L。
我们现在可以为后轴参考点建立完整的运动学自行车模型。
基于此模型配置,参考点在 x 和 y 方向的速度分量分别等于前进速度 V 乘以 cos(θ) 和 sin(θ)。
这两个方程与之前推导的旋转速率方程相结合,形成了后轴自行车模型。
前轴参考点模型
当以前轴中心作为参考点 (X_F, Y_F) 时,自行车运动学模型可以重新表述。这是一个很好的练习,可以尝试自己推导,以实践应用瞬时旋转中心的原理,其推导过程与后轴模型非常相似。
这一次,速度指向前轮的方向,该方向由 δ 和 θ 之和定义。
通过推导,可以得到车辆的以下运动学模型:
Ẋ_F = V * cos(θ + δ)
Ẏ_F = V * sin(θ + δ)
θ̇ = V * sin(δ) / L
重心参考点模型与侧偏角
最后一种情况是将参考点放置在重心或质心处,如右图所示。由于我们对前后轮施加的无滑移约束,重心处的运动方向与任一车轮处的前进速度方向以及自行车的航向都略有不同。
这种差异称为侧偏角,我们将其表示为 β,它被测量为重心处速度方向与自行车航向之间的角度差。
侧偏角的这个定义在我们转向车辆动力学建模时也同样适用,届时它可能会变得更加显著。
以重心为参考点的运动学模型可以类似于后轴和前轴参考点模型进行推导。
我们最终得到以下公式,这也将作为我们车辆动力学建模的基础:
Ẋ_c = V * cos(θ + β)
Ẏ_c = V * sin(θ + β)
θ̇ = V * cos(β) * tan(δ) / L
此外,由于无滑移条件,我们可以根据自行车模型的几何形状计算侧偏角。
给定 L_r 为从后轮到重心的距离,侧偏角 β 等于 L_r / L 乘以 tan(δ)。即:β = arctan( (L_r / L) * tan(δ) )。
模型扩展:转向角作为状态
最后,通常不可能将车辆的转向角从其范围的一个极端瞬间改变到另一个极端,而这在我们的运动学模型中目前是可能的。由于 δ 是由控制器选择的输入,对其变化速度没有限制,这有些不现实。
相反,如果我们假设只能控制转向角的变化率 φ,我们的运动学模型可以用四个状态来表述:X, Y, θ 和转向角 δ。
我们可以简单地扩展我们的模型,将 δ 作为一个状态,并使用转向速率 φ 作为我们修改后的输入。
完整模型与总结
我们的运动学自行车模型现在已经完成。再次强调,为了本课程后期以及整个第二门关于状态估计的课程中的控制目的,我们将使用基于状态的模型表示。
我们的运动学自行车模型以速度 V 和转向速率 φ 作为输入。系统的状态,包括位置 (X_c, Y_c)、方向 θ 和转向角 δ,根据我们模型中的运动学方程演化,这些方程满足无滑移条件。
我们现在可以使用这个模型来设计运动学转向控制器,这将在本课程后面的模块中看到。
本节课中我们一起学习了为车辆上三个不同的参考点建立了自行车运动学模型,并引入了侧偏角的概念。我们将在接下来的两个模块中使用这个运动学自行车模型来为自动驾驶汽车设计控制器。
在下一个视频中,我们将学习如何为任何运动系统建立动态车辆模型。下次见。




自动驾驶汽车简介:第三课:二维动力学建模


在本节课中,我们将从运动学模型进入动力学建模领域,学习如何考虑作用在车辆上的力和力矩,以建立更高精度的车辆运动预测模型。
上一节我们介绍了基于转向率和速度输入的运动学自行车模型。本节中,我们将开始探讨动力学建模,以考虑作用在车辆上的力和力矩。这类模型能提供比运动学模型更高精度的预测。然而,这种高精度是以更高的计算复杂度为代价的,因此运动学和动力学模型在自动驾驶开发中各有其用。
动力学建模对许多人来说可能非常熟悉。如果你擅长绘制自由体图和应用牛顿方程,可以跳过本介绍部分。如果你需要复习或从未接触过动力学建模,本介绍视频正适合你。
我们为何需要动力学建模?在车辆建模中,当车辆高速移动和转向,或路面湿滑时,由无滑移条件定义的假设可能不再成立,因为作用在车辆上的力会导致轮胎在路面上打滑。对滑移条件下的力平衡进行建模,可以扩展我们模型的适用范围,使其在更多驾驶条件下仍能准确预测运动。此外,汽车中的许多子系统也存在类似情况,硬性的运动学约束无法正确捕捉其演变过程,同样需要动力学模型。一个例子是传动系统,需要通过扭矩平衡来捕捉从油门位置到车轮扭矩,经过发动机和变速系统的连接过程。
通过显式地建模作用在车辆上的力和力矩的平衡,我们可以确定车辆所经历的加速度,并用它们来模拟车辆运动。
我们现在转向为刚体定义动力学建模过程的任务。
要建立一个典型的动力学模型,我们可以遵循以下步骤。
以下是构建动力学模型的四个步骤:
- 建立坐标系:设定模型中要使用的坐标系,例如我们之前讨论过的车身坐标系和惯性坐标系。
- 分解动态系统:将动态系统分解为集总动态元件。这些元件将系统中可能分布的特性组合成离散或集总的元件。以弹簧-质量-阻尼器系统为例,集总元件就是弹簧、质量和阻尼器。
- 绘制自由体图:为元件列表中的每个刚体绘制自由体图,并正确命名和建模作用在该物体上的所有力和力矩。
- 应用牛顿第二定律:使用牛顿第二定律,写出定义我们动力学模型的数学方程。对平移动力学,沿每个轴求和所有力;对旋转动力学,绕每个旋转轴求和所有力矩。结果是一个描述刚体运动的常微分方程,这就是我们的动力学模型。
让我们遵循这个四步流程,为一个一维平移系统——一个滚动的小车——建立模型。
该图显示了质量为 M 的小车,我们想要跟踪它的位置。
我们首先定义小车位置的坐标系,用 X 表示。接着,我们识别刚体,在本例中就是质量为 M 的小车。然后,我们绘制自由体图,并定义作用在小车上的所有力。在本例中,有三个力作用在小车上:F1 将小车向右拉,F2 和 F3 将小车向左拉。最后,我们在 X 方向应用牛顿第二定律来形成动力学模型。
描述小车运动的最终动力学方程是:m * x_double_dot = F1 - F2 - F3。其中 x_double_dot 表示 X 方向的加速度。注意,F2 和 F3 带有负号,因为它们指向 X 轴的负方向。
同样的过程可以应用于汽车中的减震器。减震器的动力学模型有助于工程师设计和调校车辆悬架,以获得更好的乘坐舒适性和驾驶性能。
为了对这个部件建模,我们可以遵循前面介绍的相同四个步骤。
我们再次建立坐标系,在本例中是垂直方向的一个坐标 y。我们识别刚体或集总动态元件。对于一个真实的物理系统,集总元件的概念非常重要。减震器依靠弹簧和带有限流装置的液压缸来吸收冲击。我们将这个系统建模为三个独立的集总元件:质量、弹簧和液压缸(或阻尼器)。我们使用线性弹簧和阻尼器模型,其中弹簧抵抗 y 方向的位移,阻尼器抵抗 y 方向的速度。第三步是绘制自由体图。通常,我们在此图中显示力或扭矩以及速度和方向。最后,我们形成动力学方程,在本例中就是著名的二阶弹簧-质量-阻尼器方程。
这个过程在处理旋转或扭转系统时没有变化。旋转系统在汽车中非常常见,例如内燃机轴、齿轮箱、扭矩转换器和轮胎。在旋转系统中,我们绕每个旋转轴求和扭矩 τ,并以与平移情况相同的方式处理集总惯量 J、扭转弹簧和阻尼器。我们将刚体的旋转加速度称为 α。
让我们使用四步建模过程来模拟车轮的旋转动力学。
首先,我们建立坐标系,一个旋转方向的坐标足以表示车轮的运动。我们定义 θ 为车轮的角位置,θ_dot 为其旋转速率,θ_double_dot 为其角加速度。接着,我们形成集总动态元件。轮胎模型具有旋转惯量 J(源于其旋转质量),以及由轮胎和轮毂材料属性定义的扭转刚度 K 和阻尼 B。我们通过车辆驱动轴的驱动扭矩来驱动车轮,并通过轮胎与路面相互作用产生的负载扭矩来抵抗这个驱动。现在我们绘制自由体图,驱动扭矩和负载扭矩被定义为相反方向,因为负载抵抗驱动扭矩对车轮的加速作用。
我们现在可以为车轮系统形成动力学模型。驱动扭矩和负载扭矩之间的差值定义了作用在车轮上的净扭矩,而来自集总元件模型的扭转弹簧和阻尼器则抵抗加速度。最终的动力学模型描述了当受到这个净扭矩作用时,车轮的位置如何变化。
车辆的动力学模型有多种用途。它们可用于在融合传感器数据跟踪运动时改进状态估计方法;可用于辅助控制器设计以跟踪期望的轨迹或路径;还可以帮助自动驾驶工程师定义车辆的性能极限,以避免规划汽车无法跟踪的不安全轨迹。
然而,一个完整的三维车辆模型,需要考虑车身侧倾和俯仰、任意倾斜的道路以及每个轮胎上不同的力和力矩,会构成一个非常复杂的模型。相反,我们可以将模型分离为两个二维模型,从而将车辆控制问题分解为转向控制问题以及油门和刹车控制问题。完整的三维车辆建模是一个引人入胜的领域,如果你想了解更多,我们在补充材料中提供了一些链接。
基于这些原因,我们将为我们的自动驾驶汽车分别建立纵向和横向动力学模型。
纵向模型考虑在倾斜道路上行驶的车辆。我们将车辆运动限制在 XZ 平面内。有几个力作用在车身和轮胎上,包括牵引力、滚动阻力、空气动力和由重力引起的坡度阻力。在下一个视频中,我们将更详细地讲解纵向车辆动力学模型。
类似地,可以为 XY 平面内的运动建立横向车辆动力学模型,即从俯视或鸟瞰视角观察车辆。在这个二维模型中,也有几个作用在车辆横向方向上的力,例如滑移力和离心力。这个主题也将在未来的课程中讨论。
在本视频中,我们介绍了二维动力学建模的基础知识,并将其应用于减震器和车轮子系统。这些模型有助于确定这些系统如何随时间演变。


在下一课中,我们将讲解车辆纵向动力学,并研究为驱动轮提供扭矩的传动系统部件。我们下节课见。
031:纵向车辆建模



在本节课中,我们将学习车辆纵向动力学的概念,以及为轮胎产生扭矩所需的动力总成组件模型。
通过本视频的学习,你将能够:

- 定义作用在车辆纵向方向上的动态力平衡。
- 描述内燃机汽车典型的动力总成组件模型。
- 连接典型的动力总成组件模型,形成用于纵向运动的完整车辆模型。
这些模型将帮助我们在本课程的下一模块中构建纵向控制器。
概述
现在让我们开始。车辆纵向动力学模型基于产生前进运动的车辆动力学。
纵向动力学基础
上一节我们介绍了课程目标,本节中我们来看看车辆纵向运动的基本原理。
下图展示了一辆汽车在倾斜路面上的典型纵向运动。

作用在车辆上的力包括:
- 前轮和后轮的轮胎力,
FXF和FXR。 - 空气阻力,
F_aero。 - 滚动阻力,
R_XF和R_XR。 - 重力分量,
M * g * sin(α),其中α是路面坡度角。
根据牛顿第二定律,来自车辆动力总成的前后轮纵向轮胎力 F_XF 和 F_XR,必须克服阻力,例如空气阻力 F_aero、重力分量 M * g * sin(α) 以及前后轮的滚动阻力 R_XF 和 R_XR。这些力之间的不平衡决定了车辆在纵向方向上的加速度,记为 ẍ。
纵向动力学方程可以通过将前后轮胎力合并为 F_X,前后滚动阻力合并为 R_X 来进一步简化。此外,我们可以假设路面坡度适中,这意味着可以应用小角度近似,即 sin(α) ≈ α。
于是,我们得到汽车纵向运动的基本动力学模型如下:
M * ẍ = F_X - F_aero - R_X - M * g * α
其中:
M * ẍ是惯性项,定义了车辆的纵向加速度。F_X是由动力总成产生的牵引力。F_aero、R_X和M * g * α构成了作用在车辆上的总阻力,我们将其称为F_load。
需要注意的是,我们仍需为此方程中的每个力建立模型,并定义它们如何连接到自动驾驶系统将施加的油门和刹车输入。在本视频的其余部分,我们将建立这些模型,并在后续关于动力总成、刹车和轮胎力建模等特定方面的视频中进行更深入的探讨。
阻力建模
现在我们已经有了基本的动力学方程,接下来让我们为汽车上的阻力建立一些简单的模型。
车辆的纵向运动受到空气阻力、滚动阻力和重力的阻碍。我们已经建立了重力影响的模型,接下来讨论空气动力学。
以下是空气阻力和滚动阻力的典型建模方法:
- 空气阻力:通常可以建模为依赖于空气密度、车辆正面投影面积、车辆摩擦系数和当前车速。给定固定的车辆形状和标准大气压,我们可以定义一个综合的空气阻力系数
C_aero,并将其乘以速度的平方来得到阻力:F_aero = C_aero * (ẋ)²。 - 滚动阻力:我们有一个类似的模型,它可能依赖于法向力、轮胎压力和特性以及车速。如果我们再次假设名义运行条件,并为了简化而忽略二阶项,我们可以得到一个线性的滚动阻力模型,其中
C_R1是我们的线性滚动阻力系数:R_X = C_R1 * M * g。
在这两种情况下,这些都是基本的近似模型,是控制器设计的良好起点。在实践中,所使用的模型的保真度取决于控制器或仿真环境所需的精度。
动力总成组件与运动学约束
现在我们已经有了作用在车辆上的阻力模型,让我们更仔细地看看由车辆动力总成产生的驱动力。
用于克服阻力的力来自动力总成,可以建模为由一系列组件产生。汽油或柴油发动机中的燃烧,或电动汽车/混合动力汽车电池中的电化学反应所产生的功率,流经传动系统,最终为车轮提供扭矩。
传动系统指的是发动机和车轮之间的一系列组件,通常包括液力变矩器(或离合器)、变速箱以及差速器。刹车也包含在此图中,可以直接在轮毂上提供阻力扭矩。
由于挂挡时车轮和发动机之间的直接连接,可以将车轮速度与发动机速度之间的关系建模为运动学约束。
以下是动力总成组件之间的运动学关系:
- 车轮旋转速度
ω_w根据液力变矩器涡轮速度ω_t通过几个齿轮比(包括液力变矩器、变速箱和差速器)而变化。这个组合齿轮比记为GR,并根据动力总成组件的状态(例如变速箱处于哪个档位)而变化。 - 发动机速度等于涡轮速度,可以互换使用。
- 车辆前进速度也与车轮角速度乘以轮胎有效半径成正比,我们主要将其建模为固定的轮胎半径
r_eff:ẋ = r_eff * ω_w。然而,为了更高保真度的建模,可以根据汽车上的力和力矩对轮胎的预期变形进行修改。
假设轮胎半径的影响已知,我们可以写出纵向车速 ẋ 等于轮胎有效半径 r_eff 乘以车轮速度 ω_w。
因此,如果我们能对发动机速度的动力学进行建模,我们就可以通过这些运动学约束将其直接与车速联系起来。这个速度表达式可以微分,从而得到用发动机旋转加速度表示的纵向加速度。
动力总成动态建模
现在让我们逐一推导每个动力总成组件的动力学方程,以建立整个动力总成的动态模型。
车轮是来自动力总成一侧的扭矩与来自外部阻力的扭矩之间的交汇点。
因此,我们可以通过以下一阶微分方程来描述车轮动力学,以计算车轮角速度 ω_w:
J_w * dω_w/dt = T_w - r_eff * F_X
其中,T_w 是由动力总成产生的车轮扭矩。如果已知轮胎力 F_X(可以从之前推导的车辆纵向动力学中计算),我们可以使用这个微分方程求解车轮扭矩 T_w。
车轮扭矩 T_w 实际上是刹车扭矩和变速箱输出扭矩的组合。我们将在后面的视频中讨论刹车建模,本视频将重点讨论动力总成。
施加到变速箱的扭矩称为涡轮扭矩 T_t,它来自连接发动机和变速箱的液力变矩器。
回想一下,液力变矩器的涡轮角速度 ω_t 通过齿轮比 GR 与车轮角速度相关:ω_t = GR * ω_w。
因此,我们可以为涡轮角速度定义一个类似的常微分方程,作为我们的变速箱动态模型:
J_t * dω_t/dt = T_t - T_w / GR
同时,我们可以从车轮动力学模型中代入 T_w 的表达式。
接下来是液力变矩器。实际上,液力变矩器具有复杂的动力学特性,因为它有多个叶轮和流经叶轮的流体,这允许发动机的耦合和解耦。当耦合时,我们可以假设涡轮角速度几乎与发动机速度相同,因此在变速箱模型中用发动机角速度替换涡轮速度,形成一个包含液力变矩器的动态模型。
最后,我们可以通过包含发动机动力学来定义完整的动力总成模型。
发动机惯性项等于燃烧过程产生的发动机扭矩减去来自液力变矩器的涡轮扭矩 T_t,而 T_t 仍然依赖于轮胎力 F_X。
J_e * dω_e/dt = T_engine - T_t
如果我们回到原始的纵向车辆模型并求解轮胎力 F_X,会发现它进一步依赖于发动机旋转加速度 dω_e/dt。这些项可以与发动机、变速箱和车轮的惯性项合并。
我们现在形成了完整的动力总成模型,并将所有单个组件惯性的总和定义为有效动力总成惯性 J_E。
动力总成模型简化为以下方程:
J_E * dω_e/dt = T_engine - T_load
该方程平衡了发动机扭矩 T_engine 与总负载扭矩 T_load,以驱动发动机加速度,从而驱动车辆纵向加速度。
这个最终方程实现了我们设定的目标,因为它展示了整个动力总成系统从发动机到作用在车辆上的外部阻力的动力学过程。
我们仍然需要将发动机扭矩与油门踏板位置、刹车扭矩与刹车踏板位置联系起来,这将在关于执行器建模的视频中介绍。
总结
在本视频中,我们一起学习了以下内容:
- 我们定义了车辆纵向动力学和阻力的紧凑模型。
- 我们描述了典型的动力总成组件并推导了它们的动态模型。
- 我们将这些子系统和力模型组合成一个统一的纵向动态模型,该模型适用于速度控制开发。

在下一个视频中,我们将研究横向动力学和建模的细节,以帮助开发转向控制器。

下次见。


032:自行车模型横向动力学 🚗


在本节课中,我们将学习如何将上一节介绍的车辆运动学自行车模型,扩展为一个动力学模型。我们将重点关注车辆的横向动力学,并最终将其表达为标准的状态空间形式,为后续的横向控制设计奠定基础。
上一节我们介绍了车辆的纵向动力学。本节中,我们来看看如何基于自行车建模方法,对四轮汽车的动力学进行建模。
通过本视频的学习,你将能够:
- 以运动学自行车模型为基础,构建汽车的动力学模型。
- 将其表示为适用于横向控制设计的标准状态空间形式。
现在开始学习。
我们希望放宽运动学模型中强制执行的无滑移条件,从而将运动学自行车模型扩展为动力学模型。
回顾完整的动力学自行车模型,我们保留了运动的两个分量:
- 第一个是沿车辆航向的纵向运动。
- 第二个是垂直于航向的横向运动。
具体对于车辆横向模型,我们感兴趣的是基于车辆运动时影响它的力矩,来对车辆的旋转速率进行建模。
为了开始对自行车模型的横向动力学进行建模,我们将做出以下假设。
以下是建模所需的关键假设:
- 假设前向纵向速度恒定。这样做是为了将横向和纵向动力学模型解耦,从而极大地简化建模任务,但在加速或减速出弯时会导致建模不准确。
- 与运动学自行车模型一样,前后轴上的左右车轮分别合并为一个车轮。因此,这个假设将四轮模型转换为两轮的自行车模型。
- 其他非线性效应,如悬架运动、道路倾斜度和空气动力,被假定为可忽略不计。实际上,这些效应会对产生的轮胎力产生重大影响,因此这同样是一个在某些情况下的限制性假设,但足以满足我们的目的。
我们将使用车辆重心作为动力学模型的参考点,因为它简化了牛顿第二定律的应用。
我们可以在惯性坐标系中定义总加速度为 A_Y,这包括车身坐标系中的横向加速度 Y_ddot,以及来自车辆旋转的向心加速度 ω²R。
利用侧偏角的定义,以及 v = ωR 和 ω = ψ_dot 的事实,这些表达式可以用侧偏角变化率 β_dot 和航向变化率 ψ_dot 来重写。
现在可以构建横向动力学的模型公式。影响动力学的唯一两个力是前轮和后轮上的横向力。
车辆纵向速度如前所述定义为 V,质量为 M。
对于角加速度 ψ_ddot,轮胎力产生的力矩方向相反,并与惯性项 I_Z * ψ_ddot 结合,形成这个二阶方程。参数 L_F 和 L_R 定义了从重心到每个轮胎的距离。
车辆动力学建模中最重要的组成部分之一是轮胎。轮胎力通常很难精确预测,轮胎模型往往是非线性的,并且需要通过经验来识别。我们将在本模块的最后一个视频中详细探讨一些更常见的轮胎模型。
然而,幸运的是,对于正常驾驶条件,可以使用简单的线性近似来模拟轮胎力的产生。这个近似实际上只对小侧偏角有效,轮胎力被建模为随侧偏角线性变化。
具体公式为:
F_y = C_α * α
其中 F_y 是轮胎横向力,C_α 是轮胎侧偏刚度,α 是轮胎侧偏角。
由于我们在控制设计中使用线性轮胎模型,我们必须确保通过坚持非激进的驾驶操作,不超出这个小角度假设。
为了使用这些线性轮胎模型,我们需要定义前轮和后轮的侧偏角 α_F 和 α_R。它们的定义方式与车辆侧偏角 β 完全相同,但它们是相对于车轮方向和车轮中心处的车辆速度来定义的。
轮胎的侧偏刚度由其抵抗车辆转弯时变形的能力定义。下图显示了轮胎横向力与轮胎侧偏角之间的关系,在0处的直线斜率被称为侧偏刚度系数 C_Y。
从图中可以看出,对于小侧偏角(通常小于8度),关系几乎是线性的。我们可以引入 C_F 和 C_R 作为自行车模型前轮和后轮的线性化侧偏刚度。
因此,作用在前轮和后轮上的横向力与每个轮胎的侧偏刚度 C_Y 和侧偏角 α 的乘积相关。
我们可以用车辆侧偏角 β、转向角 δ、纵向速度 V 和横摆角速度 ψ_dot 来表示轮胎侧偏角。
现在,可以通过代入轮胎力-侧偏角方程来修改先前推导出的横向自行车模型动力学方程。这导致了以下一对耦合的常微分方程,它们控制着车辆在横向上的动力学。
请注意,左侧变量表示车辆侧偏角的变化率和横摆角速度的变化率。
方便的是,由于在整个推导过程中所做的近似和假设,最终得到的车辆横向动力学模型是线性的。
我们可以定义一个状态向量 x_la,它包括横向位置 Y、侧偏角 β、横摆角 ψ 和横摆角速度 ψ_dot。系统现在可以表示成标准的状态空间形式,如下所示:
x_dot_la = A_la * x_la + B_la * δ
其中,系统动力学矩阵是 A_la 和 B_la,如果前向速度 V 保持恒定,它们将是时不变的。系统的主要输入是驾驶员的转向角指令 δ。
这种基于状态的表示形式在我们为横向控制设计不同的控制策略(如PID或MPC)时非常有用。该模型的线性特性也使其适用于使用常见滤波器进行状态估计,你将在课程2中了解更多。

本节课中我们一起学习了以下内容:
- 我们首先学习了如何将运动学自行车模型扩展为动力学自行车模型。
- 然后我们推导了自行车模型的横向动力学,并将其表达为状态空间形式。

在下一个视频中,我们将探索并构建车辆执行系统的模型,包括油门、刹车和转向。下节课见。
033:车辆执行机构 🚗


在本节课中,我们将学习车辆执行机构系统的基础知识,包括油门、刹车和转向。课程结束时,你将能够定义车辆转向、油门和刹车系统的常见模型,并将这些模型与之前视频中推导出的车辆动力学方程联系起来。
车辆横向动力学的主要输入是转向角,而纵向动力学的主要输入是油门踏板位置和刹车踏板位置。这些输入定义了作用在车辆上的部分力和力矩,并输入到控制车辆状态的常微分方程中。需要注意的是,横向动力学和纵向动力学会相互影响,尽管我们目前建立的模型基于假设将它们分开了。
横向力和力矩驱动车辆的横向运动学,从而产生车辆的横向速度和横摆角速度。同样,纵向力驱动纵向运动学,从而决定最终的前进速度和位移。车辆控制的主要任务是提供合适的转向、油门和刹车指令,使车辆保持在期望的路径上并遵循期望的速度曲线。我们假设这些期望元素由运动规划系统提供,并将在本专业的第四门课程中学习如何构建这样的规划器。
现在,让我们转向对三个指令输入子系统进行建模,以进一步完善我们的完整车辆模型。
转向模型 🛞
首先,让我们看看转向模型。转向模型本质上是驾驶员或自动驾驶系统的指令,用于控制车辆向左或向右转向。转向角通过特定的齿轮传动比机构转化为车轮转角,从而提供使车辆保持在曲线路径上的横向力。
在最简单的转向系统模型中,车轮转角可以定义为与转向角成正比。因此,转向角 δ_s 与车轮转角 δ 呈线性比例关系,比例系数为 C。这个模型对于我们的仿真工作来说已经足够,并且通常作为非激进驾驶的起点。
实际上,转向系统比上述简单公式更为复杂。如果转向指令的频率非常接近转向总成的带宽,则可能需要一个完全动态的模型。图中展示了转向总成中的主要子系统,例如方向盘、转向柱、转向齿轮以及连接转向柱与左右车轮的连杆机构。图中右侧还展示了齿条齿轮机构,它将方向盘的旋转运动转换为移动车轮连杆所需的线性运动。如果你想了解更多,补充材料中提供了转向总成更详细动态模型的链接。
动力总成模型 ⚙️
接下来是动力总成模型。正如我们在本模块前面所看到的,车辆动力总成决定了车辆的前进速度和加速度。在自动变速汽车中,驾驶员或自动驾驶系统有两个输入来加速或减速车辆:油门和刹车。该图展示了将驾驶员或自动驾驶系统的指令转化为车轮运动的机制。
现在,让我们看看典型的动力流通过动力总成的过程。回顾纵向动力学视频中的动力流图,动力流从动力产生单元开始,例如内燃机或电动机。油门踏板位置驱动动力产生单元产生的扭矩。在自动变速系统中,该扭矩被传递到变速系统,液力耦合系统或变矩器被放置在发动机轴和变速箱单元之间。然后,根据操作模式和期望速度,变速箱根据需要换挡。一档和二档是扭矩模式,更高的档位称为速度模式,指的是变矩器中的不同操作模式。接着,动力通过差速器流向车轮,产生车轮扭矩,最终产生牵引力。牵引力必须大于阻力(包括空气动力和路面摩擦力),才能使车辆在纵向上向前加速。
车辆运动的动力源可以通过内燃机的燃烧或电动机的电池产生。简而言之,驾驶员踩下油门踏板来定义加速车辆所需的扭矩需求水平。实际响应更为复杂,取决于所涉及的动力产生单元类型。内燃机、柴油发动机和电动机的特性各不相同。扭矩-转速图被用作表示这些动力单元特性的图表。
左图显示了汽油发动机的扭矩-转速曲线。对于一定范围的发动机角速度或转速,汽油发动机的最高扭矩工作点往往出现在中等转速,对于乘用车发动机通常在2000到3000转/分。在低速和高速时,发动机产生扭矩的能力会下降。中间的图是柴油发动机的扭矩特性,它在更宽的速度范围内表现出更一致的扭矩生成。这就是为什么柴油发动机更适合重型车辆,而汽油发动机最适合小型和城市汽车。右图显示了电动机的扭矩特性。电动机在较低转速(例如1500转/分)时效率更高,但在较高转速时效率不高。需要注意的是,为了弥补电动机在较高转速下扭矩特性的不足,混合动力电动汽车使用内燃机来提高在较高速度下的性能。
该图绘制了内燃机在不同节气门开度下的扭矩特性曲线。扭矩与转速的关系可以表示为一个二阶多项式,这是一个简单但相当好的面向控制的模型。在以下方程中,发动机扭矩表示为 T_E,油门踏板位置为 x_θ,发动机角速度为 ω_E。系数 a、a1 和 a2 针对不同的发动机进行识别和调整。这个模型被称为半经验模型,更详细的模型可以包括流体动力学、热传递、燃烧和许多其他现象,这些不在本课程范围内。给定发动机转速和油门位置,可以基于这个半经验映射计算产生的发动机扭矩,然后将其输入到车辆的纵向动力学模型中。
刹车系统模型 🛑
现在让我们转向刹车系统的模型开发。刹车过程从驾驶员指令的刹车踏板位置开始,该位置由电子控制单元转换为刹车压力。刹车压力在刹车盘或鼓上产生制动力,进而在车轮上形成制动扭矩。车轮上的制动扭矩产生一个负的纵向力以使车辆减速。由于控制单元对制动扭矩的管理,刹车系统的响应非常可预测。就本课程的目的而言,没有必要对刹车进行非常详细的建模。同样,可以使用从踏板位置到制动扭矩的简单线性映射。
当然,刹车系统对于控制车辆运动至关重要。事实上,刹车在车辆控制中扮演着一系列重要角色。以下是刹车系统的一些主要功能:
- 通过紧急制动缩短停车距离。
- 通过防抱死制动系统在制动时保持可转向性。
- 在制动时保持稳定性以避免翻车。
这些功能有助于扩展我们可以安全驾驶的操作条件范围,现代制动能力已显著提高了车辆的安全性和性能。
总结 📝
我们已经完成了对车辆执行器组件的讨论。让我们总结一下到目前为止所做的工作。在本视频中,我们研究了车辆执行机构系统以及用于在横向和纵向两个方向上移动车辆的主要指令。在自动驾驶汽车中,这些执行信号将是车辆控制模块的主要输出。我们还建立了转向、发动机和刹车模型,将这些指令转换为车轮转角和车轮上的扭矩。


在下一个视频中,我们将完成动态车辆建模过程的最后一部分——连接车辆与道路的轮胎。我们下个视频见。
自动驾驶汽车简介:第七课:轮胎滑移与建模


在本节课中,我们将学习轮胎滑移与建模的核心概念。我们将探讨滑移角和滑移比的定义,并介绍一些著名的轮胎模型,以完善我们的车辆动力学模型。
上一节我们介绍了如何将人类或自动驾驶系统的转向、油门和刹车指令,建模为车轮转角和驱动/制动力矩。这些执行器模型驱动着轮胎的状态,因此也是我们将要开发的轮胎模型的输入。
轮胎是车辆与道路之间的接口,作用在车辆上的所有外部力完全由轮胎产生。因此,为了全面分析车辆动力学并基于动力学模型开发控制器,拥有一个良好的轮胎模型来捕捉轮胎在其整个工作范围内的力生成行为至关重要。
让我们回顾两个重要的定义:滑移角和滑移比。
滑移角是车辆前进方向与其实际运动方向之间的夹角,我们记作 β。车辆的滑移角可以表示为横向速度 Vy 与纵向速度 Vx 之比的反正切。
β = arctan(Vy / Vx)
对于小的滑移角,我们可以使用小角度近似,直接将滑移角 β 近似为横向速度 Vy 与纵向速度 Vx 的比值。
β ≈ Vy / Vx (当 β 很小时)
我们可以扩展滑移角的概念,为每个轮胎定义滑移角。这里,前轮和后轮的轮胎滑移角分别定义为 α_F 和 α_R。轮胎滑移角是轮胎指向方向与其实际行驶方向之间的夹角,类似于车辆滑移角。轮胎滑移角在定义完整的轮胎模型中起着重要作用。
我们可以将轮胎滑移角与车辆滑移角、速度以及横摆角速度联系起来,其中车辆质心到前、后轮胎的距离分别用 L_F 和 L_R 表示。
描述轮胎滑移所需的另一个重要定义是纵向滑移或滑移比。滑移比捕捉了轮胎变形与其所受纵向力之间的关系。当加速或制动时,观察到的轮胎角速度与纯滚动运动的预期速度不匹配,这意味着除了滚动之外,轮胎与路面之间还存在滑动。轮胎旋转速度与汽车纵向速度之间的差异,可以表示为相对于纯滚动速度的比值,称为滑移比。
以下是车辆速度与轮胎角速度之间差异的三种情况:
- 车轮拖滑:当车辆速度 V 大于轮胎速度 R·ω 时发生。这出现在车辆减速时。
- 车轮打滑:当车辆速度 V 小于轮胎速度 R·ω 时发生。这常见于低摩擦路面(如结冰路面)行驶或漂移时。
- 车轮抱死:当轮胎速度为零而车辆速度非零时发生。这是第一种情况的延伸,可能发生在紧急制动时。然而,现代防抱死制动系统会尽量避免进入此状态,因为其制动性能差且会丧失转向控制。
接下来,我们看看轮胎在其整个工作范围内如何产生力的一些建模方法。
轮胎模型的输入包括:车辆滑移角、滑移比、路面摩擦系数以及作用在轮胎垂直方向上的法向力。然后,它计算出横向和纵向的力。当然,额外的输入可以提高准确性,例如轮胎材料特性和外倾角(轮胎旋转平面与路面之间的夹角)。这些额外的输入有助于扩展可建模的力和力矩集合,包括自回正力矩(使轮胎自动与行驶方向对齐的、绕转向轴的力矩)、滚动阻力矩,甚至侧倾力矩。
轮胎建模是一个深入且成熟的领域,已经发展出许多不同类型的模型。我们可以将这些模型分为三种主要的建模方法:
- 解析模型:基于轮胎物理建模定义的模型,通常导致模型简单、计算快速,适合控制器开发。尽管从计算角度看很有吸引力,但这些模型在轮胎的整个工作范围内通常表现不佳。刷子模型和Fiala模型是此类的例子。
- 数值模型:源于对轮胎多维有限差分和有限元模型的详细求解,并表示为一系列表格。这些模型比前一类更准确,但难以用于基于模型的控制器开发。然而,许多模拟器使用数值模型来提高其车辆动力学的保真度,从而可以在部署前准确评估稳定性和牵引力控制系统。
- 参数化模型:通过参数化函数定义轮胎曲线族的模型。然后通过大量测量来识别函数参数,并且每个轮胎必须单独评估。著名的参数化模型,如线性模型、Pacejka模型和Dugoff模型,被广泛用于车辆动力学建模。因为它们结合了准确的力预测和便捷的计算。这些模型易于实现,适合基于模型的控制器开发。
现在,让我们更详细地看看两个参数化模型。
我们将从一个简单的线性轮胎模型开始。线性模型由分段线性曲线的两部分组成。第一部分对应于线性轮胎区域,它通过一个力系数 C,将轮胎力(纵向或横向)直接与轮胎滑移比或滑移角联系起来。第二部分对应于饱和区域,对于所有超过最大滑移比或滑移角的值,轮胎施加一个恒定的最大轮胎力。
F = C * s (或 C * α),当 s < s_max (或 α < α_max)
F = F_max,当 s ≥ s_max (或 α ≥ α_max)
最大滑移比 S_max 导致最大纵向轮胎力 Fx_max,最大滑移角 α_max 导致最大横向轮胎力 Fy_max。总的来说,线性轮胎模型是线性区域大部分范围的良好近似,但当我们进入饱和区域时,准确性会下降。然而,对于常规的自动驾驶,由于轮胎主要在线性区域运行,线性模型是一个很好的近似。
我们要看的第二个模型是车辆动力学和基于模型的控制中最重要、使用最广泛的轮胎模型之一。它被称为Pacejka轮胎模型,也被称为“魔术公式”,因为它能非常好地表示纵向和横向轮胎力。
以下是用于根据滑移比、轮胎法向力和路面摩擦系数计算纵向轮胎力的“魔术公式”:
Fx = D * sin( C * arctan( B * s - E * (B * s - arctan(B * s)) ) )
我们通过实验定义系统参数 B、C、D 和 E,这些参数因轮胎而异。图中显示了不同路面摩擦系数下,典型的纵向轮胎力与纵向滑移的关系。
最后,让我们看一些从轮胎道路测试中收集的数据。下面的图表左侧显示了归一化纵向轮胎力,右侧显示了归一化横向轮胎力,分别相对于它们的滑移比和滑移角绘制。实验数据点上叠加了线性模型和Pacejka模型。我们可以看到,在低滑移区域,两种模型都能很好地表示数据,但随着滑移增加,线性模型表现不佳。这些数据也让我们很好地了解了精确建模轮胎力的难度,因为测量力的分散程度相对于模型来说相当明显。尽管如此,这两种模型对于创建动力学可高效计算的模拟车辆,以及基于车辆及其众多子系统的动力学模型开发控制律都极其有用。

在本节课中,我们探讨了车辆动力学建模中最重要的组件之一:轮胎模型。我们回顾了轮胎滑移和滑移比的定义,并探索了基于轮胎特性产生力估计的不同轮胎模型。

恭喜你完成了我们《自动驾驶汽车简介》课程的第三个模块。在本模块中,你提升了车辆运动学和动力学建模的技能。你推导了汽车的自行车运动学模型,并探索了车辆的横向和纵向动力学建模。在下一个模块中,我们将使用这些详细的车辆模型来设计调节车辆纵向运动的控制器。下次见。
035:行业面临的挑战 🚗


在本节课中,我们将探讨自动驾驶汽车行业当前面临的一系列核心挑战。这些挑战不仅涉及技术层面的创新,还包括如何将实验室中的研究成果安全、可靠地大规模部署到现实世界中。
因为这是一个全新的行业,我们面临着许多前所未有的挑战。我们必须找到多种不同的方法来解决这些从未遇到过的问题。因此,在寻找解决这些难题的创新方案时,过程既充满挑战,也令人兴奋。
学术界已经投入了大量研究,探索如何让这些汽车首先能够上路行驶。例如,如何检测行人,如何规划行驶轨迹等。
上一节我们提到了基础研究,本节中我们来看看产业界需要解决的核心问题:如何将这种自动驾驶体验交付给成千上万的用户,未来甚至可能是数百万用户。这其中的关键部分在于如何扩展我们的系统。
以下是规模化部署面临的具体问题:
- 如何将相同的算法部署到像旧金山、湾区,乃至最终整个美国大陆这样广阔的地图区域。
- 这是一个非常庞大且令人兴奋的待解决问题。

当然,在任何主要城市,都存在许多对自动驾驶车辆传感系统构成挑战的环境。例如,在旧金山,有些区域高楼林立,这极大地加剧了GPS多路径效应问题。
以下是此类挑战环境的一个例子:
- 旧金山的金融区,那里遍布高楼大厦。
目前,自动驾驶领域正围绕一个重大问题展开讨论:我们如何为极其复杂的系统提供强有力的安全性证明?
这是人类迄今为止面临的最困难的工程问题之一。我们如何才能给出强有力的保证?一种观点认为,必须对代码进行形式化验证。然而,就目前我们对形式化验证的了解而言,这种方法似乎难以扩展到如此庞大系统的规模。
当然,困难在于,自动驾驶车辆的输入信息变化多端,似乎很难写下所有可能输入系统的信息。
于是你可能会说,或许我们应该构建出色的模拟器。如果我们能构建模拟器,就可以同时运行成千上万个自动驾驶车辆的副本,一夜之间积累数百万英里的虚拟里程。这个想法同样非常吸引人,但迄今为止,我们还无法真正模拟某些传感器接收到的全部细节。
以下是模拟器面临的挑战:
- 例如,由于交互的复杂性,模拟一个完整的扫描雷达非常困难。
于是,争论又回到了原点:你需要不断地进行实际路测,积累真实里程,记住那些非常有趣的案例,并尝试在模拟器中复现它们。或许你可以建立一个“案例剧本”。
我认为答案是综合运用所有方法。就像我之前说不要只选择一种传感器一样,我建议全部使用。为什么要争论哪种方法最好呢?应该说,所有这些方法都在不同维度上帮助我们理解如何认证和确保车辆安全。没有单一的解决方案,我们也不应急于下定论。
以下是确保安全的综合策略:
- 你需要模拟。
- 你需要实际路测里程。
- 在某些关键环节,例如车辆开始与控制器的交互部分,你可能确实需要对那个指令信号的网关进行验证,以确保如果自动驾驶系统软件合约失败(例如无法保证在50毫秒内恢复),安全触发器就会启动,车辆将减速。

总而言之,就是综合运用所有这些手段。我认为应该对所有方法保持开放态度,不要试图断言必须用某一种特定方式来完成。
自动驾驶汽车简介:第五周:纵向控制与PID基础 🚗


在本节课中,我们将要学习自动驾驶汽车纵向控制的基础知识,并重点回顾经典线性时不变控制理论中的核心概念——比例-积分-微分(PID)控制器。
在上一模块中,我们学习了如何建立车辆模型来描述纵向和横向动力学。本节中,我们将深入探讨纵向车辆控制的概念,以调节自动驾驶汽车的速度。
具体而言,我们将回顾经典线性时不变控制的一些基本概念,为纵向车辆模型开发PID控制律,并结合前馈与反馈控制来改善期望速度的跟踪性能。纵向速度控制的设计是道路车辆所有性能的基础,也是实现自动驾驶所需的基本组件之一。
在本视频结束时,你将能够为线性时不变系统设计PID控制器。请注意,我们假设你已熟悉经典控制设计,包括在拉普拉斯域中使用传递函数。如果你之前未接触过这些概念,请查阅补充材料中列出的一些优秀控制课程。
让我们开始吧。
控制器的作用
在本课程的第三模块中,我们学习了如何基于自行车模型建立车辆的动力学和运动学模型。这些模型旨在捕捉动态系统对驾驶员输入指令(如转向、油门和刹车)以及外部干扰(如风、路面和不同车辆负载)的反应。输入和干扰对车辆状态(如速度和旋转速率)的影响由我们建立的模型定义。
控制器的角色则是通过感知当前状态变量,然后生成执行器信号来满足自动驾驶规划系统提供的指令,从而调节车辆的某些状态。对于纵向控制,控制器感知车辆速度,并调整油门和刹车指令以匹配规划系统设定的期望速度。
反馈控制回路
让我们来看一个典型的反馈控制回路。
- 被控对象/过程模型:接收执行器信号作为输入,并生成系统的输出或状态变量。
- 传感器与估计器:传感器测量这些输出,估计器用于将测量值融合成准确的输出估计值。
- 误差计算:输出估计值与期望的参考输出变量进行比较,其差值或误差被传递给控制器。
- 控制器:可被视为一种数学算法,它生成执行器信号,以使误差信号最小化,从而使被控对象的状态变量接近期望的状态变量。
被控对象模型,无论是线性还是非线性,都可以用几种方式表示。两种最常见的方式是:
- 状态空间形式:跟踪内部状态的演变,以连接输入和输出。
- 传递函数形式:直接建模输入到输出的关系。注意,对于传递函数,系统必须是线性且时不变的。
传递函数与PID控制器
传递函数 G 是系统输入 U 和输出 y 之间的关系,在拉普拉斯域中定义为复变量 s 的函数:G(s) = Y(s)/U(s)。
我们使用拉普拉斯变换从时域转换到 s 域,因为它便于分析输入输出关系,并有助于理解控制性能。在使用传递函数时,分子和分母的根为了解系统对输入函数的响应提供了强大的洞察力。系统的零点是分子的根,系统的极点是分母的根。
控制算法设计可以多种多样,从简单的常数增益乘法、查找表和线性方程,到基于非线性函数和有限预测时域优化的更详细方法。一些基本且经典的控制器包括超前-滞后控制器以及比例-积分-微分(PID)控制器。在本视频的剩余部分,我们将更详细地介绍PID控制组合,作为纵向控制的一个有用起点。
更复杂的控制设计也是可能的,并且对于非线性系统模型、时变模型或具有限制输出选择的约束的模型特别有用。非线性方法(如反馈线性化、反步法和滑模控制)超出了本课程的范围,但当然可以应用于自动驾驶车辆控制问题。基于优化的方法在自动驾驶中被大量使用,因此我们将在课程后面以模型预测控制为例介绍这类控制器。
PID控制器的数学形式
PID控制通过添加三个依赖于误差函数 e(t) 的项来数学表述:
- 一个与误差
e直接成比例的比例项。 - 一个与误差积分成比例的积分项。
- 一个与误差导数成比例的微分项。
常数 K_P、K_I 和 K_D 称为比例、积分和微分增益,它们决定了PID控制器(记为 u(t),作为被控对象模型的输入)的响应。
对PID控制进行拉普拉斯变换,得到其传递函数 G_c(s):
G_c(s) = K_P + K_I/s + K_D * s
在拉普拉斯域中乘以 s 相当于在时域中求导,除以 s 相当于求积分。将PID控制器的这三个项相加,我们得到PID控制的单个传递函数。注意,并非所有系统都需要使用所有增益。如果一个或多个PID增益设置为零,控制器可以称为P、PD或PI控制器。
PID传递函数在原点包含一个单极点(来自积分项),还包含一个二阶分子,其两个零点可以通过选择适当的增益值放置在复平面上的任何位置。因此,PID控制设计归结为基于被控对象模型选择零点位置以实现期望的输出或性能。也有几种算法可以调整PID增益,其中齐格勒-尼科尔斯法是最流行的方法之一。
闭环响应与增益影响
闭环响应表示当控制器决定应用于被控对象模型的输入时系统的响应。对于参考信号的阶跃输入,我们可以定义:
- 上升时间:达到参考值90%所需的时间。
- 超调量:输出超过参考值的最大百分比。
- 调节时间:稳定在参考值5%范围内所需的时间。
- 稳态误差:稳态时输出与参考值之间的误差。


以下是每个P、I和D作用效果的总结:
| 控制器增益 | 上升时间 | 超调量 | 调节时间 | 稳态误差 |
|---|---|---|---|---|
K_P 增加 |
减少 | 增加 | 微小变化 | 减少 |
K_I 增加 |
微小变化 | 增加 | 增加 | 消除 |
K_D 增加 |
微小变化 | 减少 | 减少 | 微小变化 |
例如,K_P 的增加导致对误差的反应更强,因此响应参考信号阶跃变化时的上升时间减少。类似地,由于 K_D 对误差变化率作出反应,K_D 的增加会导致超调量减少(在误差变化率高的地方),同时可能减少围绕参考值的振荡,从而缩短调节时间。最后,K_I 的增加可以消除稳态误差,但可能导致响应中的振荡增加。
最终,必须了解P、I和D增益效应的相互作用来选择它们,以调整系统响应,获得正确的闭环性能。在本课程的评估部分,当你开发自己的PID控制器时,将有机会看到这些相互作用。
示例:弹簧-质量-阻尼器系统
现在,让我们看一下著名的二阶弹簧-质量-阻尼器模型,如图所示。在这个例子中,我们将首先回顾所提出的动态系统的传递函数,然后为其设计一个PID控制器。
弹簧-质量-阻尼器系统的动力学已在本课程前面的视频中推导。系统受到输入力 F 的作用,模型的输出是物体的位移 x。质量 m 通过一个弹簧常数为 k 的弹簧和一个阻尼系数为 b 的阻尼器连接到刚性基础。
为了将方程转换到 s 域(拉普拉斯域),我们使用拉普拉斯变换,并将二阶方程写为:
m * s^2 * X(s) + b * s * X(s) + k * X(s) = F(s)
这依赖于时域中的导数对应于拉普拉斯域中乘以 s 这一事实。
最后,形成传递函数,它表示输出 X(s) 与输入 F(s) 之间的关系,并定义为被控对象传递函数 G(s):
G(s) = X(s)/F(s) = 1 / (m*s^2 + b*s + k)
这是一个二阶系统,具有由质量、弹簧常数和阻尼系数定义的两个极点。
为了评估系统特性,我们使用单位阶跃输入来激励系统。这通常是评估被控对象动态特性的第一步。例如,对于给定参数值 m=1,b=10,k=20,系统响应 x 绘制在此处。这种类型的响应很容易用MATLAB或SciPy等科学计算工具生成。输入是单位阶跃 f=1,输出同样是 x。这种响应称为开环响应,因为此时没有控制器应用于系统。
如果在被控对象上添加控制器,并且测量模型的输出并与期望的输出或参考信号进行比较,那么系统的响应称为闭环响应。对于单位反馈,传感器传递函数假定为1,通常它可以是任何传递函数。此处给出的闭环传递函数可以从控制器和被控对象的传递函数推导出来。对于学过经典反馈控制的人来说,你们会知道开环系统的极点定义了闭环响应的特性。你们可能也见过根轨迹、伯德图和奈奎斯特设计技术,这些可用于选择满足特定输出规格的控制器。我们在补充材料中为想了解更多信息的人留下了一些相关资源的链接。
不同PID控制器的阶跃响应
让我们看看几种不同PID控制器的阶跃响应。虚线水平线代表参考或期望输出,控制器的目标是使实际输出接近此参考。
- 纯比例控制:在P控制器响应中,我们看到快速上升时间、显著超调和导致长调节时间的持续振荡。
- 加入微分控制:添加微分控制改善了超调量和调节时间方面的阶跃响应,但减慢了上升时间。
- 加入积分控制:添加积分项保持了较短的上升时间,并能减少振荡和超调,从而实现较快的调节时间。对于弹簧-质量-阻尼器系统,简单的PI控制是一个优秀的设计。
- 完整的PID控制:在控制器中包含所有三个PID项,为设计阶跃响应提供了更大的灵活性。通过仔细调整控制器增益,我们可以利用三者的优点来消除超调,同时保持非常短的上升和调节时间。如图所示,在PID控制下,系统更快地接近参考值,且没有任何超调。
总结


在本视频中,我们涵盖了控制器设计的概念以及为何将控制器集成到动态模型中。我们还回顾了PID控制器,并学习了如何使用PID控制来控制弹簧-质量-阻尼器系统的阶跃响应。在下一个视频中,你将学习如何应用PID控制来调节自动驾驶汽车的速度。
037:基于PID的纵向速度控制





在本节课中,我们将学习如何将PID控制器应用于车辆的纵向动力学模型,以实现对设定参考速度的调节,例如定速巡航功能。课程结束时,你将能够定义完整的车辆规划与控制架构,并设计一个基于PID的控制器。

上一节我们简要回顾了PID控制器的设计和经典控制器设计。本节中,我们将看看PID控制如何应用于车辆的纵向模型。
首先,让我们更仔细地观察车辆控制架构,以及它如何融入整个自动驾驶软件栈。我们可以将该结构分为四个相互连接的部分。
以下是这四个部分:
- 感知层:通过传感器感知道路和环境,为系统生成输入参考。
- 规划层:包含路径生成和速度曲线生成(在汽车领域常称为“驾驶循环”)。这些曲线通过运动规划过程产生。
- 控制层:对于车辆的横向和纵向控制,唯一需要执行的任务是尽可能精确地跟随规划,从而最小化实际与参考路径及速度之间的误差。自动驾驶所需的所有其他任务都由系统的其他部分完成。
- 执行层:控制器生成车辆的执行命令或作动器信号,如我们之前模块所见,这包括用于横向控制的转向命令,以及用于纵向控制的油门和刹车命令。
现在,让我们看一个纵向车辆控制的例子。汽车控制中最著名和最常用的应用之一是在高速公路速度下运行的定速巡航。
定速巡航系统执行的功能是使用油门命令维持一个固定的参考速度,并根据驾驶员的要求加速或减速到一个新的参考速度。当车辆承受不同的负载和阻力时,巡航控制器会相应地改变油门开度。
许多现有系统具备扩展功能,例如自适应巡航控制(可根据前车测量值改变参考点),以及像交通拥堵辅助这样的半自动驾驶系统(可在整个车速范围内运行并为并线车辆创造间距)。这些扩展示例需要额外的控制器设计来处理更广泛的工作点。
这个框图展示了巡航控制器和被控对象(车辆模型)作为一个闭环系统,旨在使车辆速度接近参考速度。控制器可以分为高层和低层两个级别,尽管低层控制器对于控制任务并非必需。
高层控制器获取设定点速度与车辆实际速度之间的差值,并生成期望的车辆加速度以缩小差距。低层控制器获取车辆加速度,并生成油门或刹车作动以跟踪参考加速度。
在实践中,这种两级方法使我们能够超越单纯的PID控制,并直接对车辆请求的加速度施加限制或曲线,以维持速度。它还允许我们将之前模块中学习的、用于根据发动机状态生成期望扭矩的发动机图谱,与巡航控制的输入响应分离开来。
让我们更深入地看看高层控制器。上层或高层控制器根据速度误差决定每个时间步需要多少加速度。让我们在这里应用一个PID控制器,它在连续时域中表达。
高层控制器的输入是速度误差,输出是车辆的期望加速度。在上一课中,我们学习了如何设计PID控制器,并研究了不同增益如何影响控制器的性能。为了在软件中实现这样的控制器,我们将控制律离散化,将积分改为在固定长度时间步长上的求和。如果参考加速度或估计的车辆加速度不可用,微分项可以通过固定时间步长上的有限差分来近似。
低层控制器生成油门和/或刹车信号,以跟随高层控制器计算出的期望加速度。在设计低层控制器时,我们做一些假设来简化问题。
以下是我们的假设:
- 我们假设在巡航控制期间,仅需油门即可管理车速,如果需要刹车以避免事故,驾驶员将接管。
- 我们假设车辆在3档或更高档位运行,使得变矩器锁止,这意味着发动机扭矩直接传递到变速箱而无损失。
- 我们假设轮胎滑移角和滑移率可以忽略不计,因为巡航控制运动通常是平缓的。
低层控制器旨在通过增加或减少发动机产生的扭矩,来生成高层控制器期望的加速度。这由油门开度控制,但受动力总成动力学和发动机图谱的制约,使其成为一个非线性问题,对经典控制方法构成挑战。
因此,期望的加速度被转换为扭矩需求,然后扭矩需求再被转换为油门开度命令。回顾之前的模块,我们建立了一个二阶常微分方程,用发动机扭矩和负载扭矩之差来描述车辆的加速度。我们可以重新排列这个方程,在已知负载扭矩和车辆期望加速度的情况下,求解所需的发动机扭矩。
然后,稳态发动机图谱(通过在不同工作点测试发动机生成)可用于确定产生所需扭矩量所需的油门开度。在这些标准图谱中,所需的发动机扭矩和当前的发动机转速定义了所需的油门位置,如果需要可以进行插值。这种方法是一种数据驱动的近似,但在实践中效果很好。近似性源于图谱中的数据点是稳态点,而动力总成在不断改变其工作点以满足当前的驾驶条件。
最后,我们可以将车辆控制器的各个部分组合起来,模拟带有PID控制器的动态车辆模型对期望速度阶跃变化的控制响应。PID增益通过试错法调整,使车速跟随30米/秒(即108公里/小时)的参考速度。
在左侧的结果图中,我们看到以百分比表示的油门开度(即车辆的命令油门),在右侧我们看到实际速度如何随时间变化,并在一个稳定时间后达到参考速度。由于发动机图谱的非线性,我们看到车辆在接近参考速度时,其响应中出现了一些有趣的现象。在本课程最终评估的Carla模拟车辆中,你将看到更有趣的效果,换档会对纯PID控制带来巨大挑战。
在本视频中,我们介绍了用于定速巡航系统的纵向速度控制概念。这是在本课程中为自动驾驶汽车设计控制器以跟随期望前进速度的第一个案例。我们学习了高层和低层控制器的概念,并使用了PID控制与发动机图谱的组合来调节车速。

本节课中,我们一起学习了如何将PID控制应用于车辆的纵向速度控制,理解了完整的控制架构,并看到了一个从误差计算到最终油门命令的完整控制流程示例。
在下一个视频中,你将学习如何应用前馈控制来改善纵向控制系统的性能。我们下节课见。





自动驾驶汽车简介:3.6:前馈速度控制


在本节课中,我们将学习如何将前馈控制与反馈控制相结合,以提升自动驾驶汽车纵向速度跟踪的性能。我们将探讨前馈控制的基本原理,并将其整合到现有的控制架构中。
上一节我们介绍了使用PID反馈控制器进行纵向速度跟踪。本节中,我们来看看如何引入前馈控制来进一步提升性能。
首先,我们来比较反馈控制与前馈控制的框图结构。
反馈控制框图展示了典型的闭环结构。当前输出与参考信号进行比较,两者之间的误差被输入到反馈控制器,由控制器生成对受控对象的输入。
前馈控制框图则展示了一种开环结构。参考信号直接输入到前馈控制器,同样由它生成对受控对象的输入。前馈控制器通过建模受控过程(正如我们在本课程模块3中所做的那样)并直接施加相应的输入来生成控制信号。
在许多应用中,前馈和反馈回路会结合起来以提升控制器性能。
以下是一个典型的前馈-反馈控制结构的工作原理框图。
可以将前馈控制视为提供维持受控对象跟踪其参考信号所需的预期输入,而反馈控制器则用于纠正由干扰或前馈控制器所用模型不准确所导致的误差。对受控对象的输入就是前馈输入和反馈输入的简单相加。
总结这个概念,同时使用反馈和前馈控制器来控制一个系统的主要原因如下:
- 前馈控制器提供预测性响应,它们为达到特定的跟踪响应而生成参考输出,尤其是在所需输入非零的情况下。
- 反馈控制器提供反应性响应,能在干扰发生时消除由此产生的控制误差。
正是由于这种互补关系,反馈与前馈控制的结合被广泛使用。
因为自动驾驶汽车需要非零的转向指令来维持恒定半径转弯,以及恒定的油门或刹车指令来维持恒速或减速率,所以前馈指令对于提升自动驾驶中的跟踪性能极为有益。
现在,让我们看看如何结合反馈和前馈控制器来为纵向速度控制生成车辆执行指令。
参考速度或行驶循环由更高层的规划器定义,期望车辆能精确跟随参考速度。
参考速度是前馈模块的输入,而速度误差是反馈(或PID控制)模块的输入。两个控制器都会产生两个车辆执行信号:油门和刹车指令。
请注意,此框图中没有包含低级控制器,这与上一视频中纯PID反馈控制的情况不同。现在,通过从加速度到发动机指令的映射来实现期望加速度这一低级控制器的角色,将由前馈模块来处理。
前馈模块仅以参考信号作为输入,其主要目标是精确设置受控对象的输入。为此,我们可以将整个纵向动力学模型转换为一个固定的查找表或参考映射。
该映射在假设车辆处于稳态的情况下,将参考速度映射到相应的执行器信号。这种前馈方法在稳态下效果良好,但忽略了车辆动力总成的内部动态特性,并且也必须依赖当前的车辆状态估计来解析所用的一些力和动态模型。
让我们看看如何从前馈查找表生成执行器指令所需的步骤。
在我们的例子中,我们关注的是在每个时间步长跟随参考速度。
- 计算所需车轮角速度:基于车速与车轮角速度之间的运动学关系,我们可以计算出所需的车轮角速度。
- 计算发动机转速:车轮角速度通过变速箱、差速器和主减速器的传动比与发动机角速度(发动机转速RPM)相关联。因此,我们现在可以通过建模模块中定义的运动学关系,计算出与所需车轮角速度相对应的发动机转速。
- 计算所需发动机扭矩:假设为稳态运行,动力总成的动力学表明,发动机扭矩必须等于作用在车辆上的总负载扭矩。负载扭矩的来源包括空气阻力、滚动阻力和车辆重力阻力。我们可以使用车辆的当前状态(包括当前速度和道路坡度)来计算组合负载扭矩。
- 确定油门位置:现在我们有了所需的发动机扭矩,可以将其与当前的发动机运行转速(RPM)结合,来确定产生所需扭矩所需的油门位置。同样,发动机图谱是针对发动机扭矩和转速的离散稳态值定义的,并根据车辆当前运行点进行插值。
让我们看一下上一视频描述的PD控制方法与本节讨论的结合前馈-反馈方法之间的比较。我们使用了与上一视频相同的仿真参数,包括发动机图谱和动态模型元素。
两种响应之间的关键差异在参考速度变化时可见。因为PID控制器需要先存在误差才能进行纠正,所以其响应滞后于前馈方法,后者会立即施加相关的输入参考值。
然而,前馈跟踪仍然不完美,因为车辆响应最终受其惯性支配,而我们介绍的前馈方法依赖于汽车的稳态建模。
随着前馈模型变得更加精确,反馈组件可以专注于纯粹的干扰抑制,速度曲线跟踪也能以一致的精度完成。
在本节课中,我们一起学习了前馈控制器的概念,以及整合反馈与前馈控制器以提升参考跟踪性能的方法。我们还应用了反馈和前馈回路来实现自动驾驶汽车的速度控制。
恭喜你,现在已经完成了关于自动驾驶汽车纵向控制的这个模块。你回顾了经典控制的概念并定义了PID控制器。你构建了一个用于汽车纵向控制的PID控制器,并应用了前馈控制来改善参考速度跟踪。


在下一个模块中,我们将深入探讨横向车辆控制设计,以引导我们的车辆沿着参考路径行驶。我们下个模块见。
040:横向车辆控制导论 🚗


在本节课中,我们将要学习自动驾驶汽车横向控制的核心概念。我们将了解如何定义不同类型的参考路径,以及如何计算相对于这些路径的航向误差和横向跟踪误差。
在之前的模块中,我们学习了自动驾驶汽车纵向控制的一些基础知识。本节中,我们将进入横向控制的学习。本周我们将涵盖四节课。在第一课中,我们将看到横向车辆控制的介绍。在第二和第三课中,我们将介绍两种基于运动学模型无滑移假设的几何路径跟踪控制策略。最后,在最后一课中,我们将重点介绍模型预测控制,这是自动驾驶汽车中常用的一种高级控制策略示例。
具体到本课,我们将介绍执行横向控制所需的核心概念。你将学习如何定义不同类型的参考路径,以及如何计算相对于这些参考路径的航向和横向跟踪误差。
横向控制的目标
自动驾驶汽车的一个主要关注点是确保车辆能够精确地遵循预定义的路径,执行高层规划模块制定的运动计划。这是横向控制的主要目标,它必须选择所需的转向角来纠正累积的任何误差,并在路径方向出现变化时进行跟踪。
为了设计横向控制器,我们需要:
- 定义车辆位置与适当期望路径坐标之间的误差。
- 选择一种控制设计策略,该策略能在满足转向角限制的同时将误差驱动至零。
- 考虑车辆的动态限制和期望的行驶特性,例如最大横向加速度和最小急动度。
控制指令必须了解可用的轮胎力,并且在纠正跟踪误差时不能超过车辆的能力。
参考路径的定义
参考路径是规划系统和横向控制器之间的基本接口,可以通过多种方式定义。
以下是三种主要的路径定义方法:
- 线段序列:通过连接一系列端点顶点来定义直线段序列。这种路径定义非常紧凑且易于构建,假设点间距良好且环境允许大部分直线运动(如曼哈顿网格道路)。然而,该路径包含航向不连续性,这使得转向车辆的精确跟踪具有挑战性。
- 密集航点序列:提供一系列紧密间隔的航点。这种间距通常在距离或行驶时间上是固定的,并且航点的相对位置可以受到限制以满足近似的曲率约束。航点路径非常常见,因为它们易于使用,并且可以直接从特定路线早期运行中收集的状态估计或GPS航点构建。
- 参数化曲线序列:使用一系列连续参数化曲线来定义路径,这些曲线可以来自固定的运动基元集合,也可以在规划期间通过优化确定。这些曲线提供了连续变化运动的优点,并且可以构建具有平滑导数,以帮助误差和误差率计算的一致性。
在所有路径跟踪的情况下,控制器都试图消除车辆与期望路径的偏移,并使车辆航向与路径航向对齐。对于这些路径定义中的每一种,沿路径的行驶方向也会被提供,这可以通过点顺序或曲线顺序来编码。
横向控制设计的两大类别
现在我们来介绍自动驾驶汽车中广泛使用的两大类横向控制设计。
第一类控制器是几何控制器,它依赖于期望路径的几何形状、坐标以及车辆的运动学模型。我们将考虑两种几何控制器:纯追踪控制器和斯坦利控制器,我们将在本模块的后续课程中详细研究它们。
另一类控制器称为动态控制器。这类中最流行的高级控制器是模型预测控制器。它执行有限时域优化以确定要应用的控制指令。MPC之所以常用,是因为它能够处理各种约束,并能识别出不仅考虑当前误差的优化解决方案。我们将在本模块的最后一个视频中研究MPC设计。
路径跟踪中的误差定义
现在我们来研究路径跟踪控制中误差的定义。我们将使用运动学自行车模型作为讨论的基础。
运动学自行车模型是四轮车辆的一个合适的面向控制的模型,其中前左轮和前右轮组合成一个可转向轮,后左轮和后右轮组合成一个驱动轮。
对于本次讨论,我们将使用一个线段作为参考路径。为了横向控制的目的,我们重新定义了相对于当前路径线段的航向。变量 ψ 将被重新用来表示车辆相对于路径线的相对航向角。前轮速度 V 和相对于航向方向的转向角 δ 没有改变。
我们可以根据控制器设计,将车辆的参考坐标系放在后轴中心、前轴中心或重心处。
我们将介绍两种类型的误差:航向误差和横向跟踪误差。
航向误差等于沿路径参考点处的路径航向与车辆航向之差。它是衡量车辆与期望路径对齐并沿其方向行驶情况的主要指标。航向误差的变化率 ψ̇ 帮助我们理解航向误差如何随时间演变,并且可以从运动学自行车模型方程中计算出来。对于直线段,期望的航向变化率为零,可以移除。
另一种误差是偏移误差,称为横向跟踪误差。横向跟踪误差是车辆上的参考点与期望路径上最近点之间的距离。它是衡量车辆位置沿路径与期望位置接近程度的主要指标。为了使车辆正确跟踪期望路径,航向误差和横向跟踪误差都必须收敛到零。从车辆参考点到路径参考点的连线垂直于路径。
横向跟踪误差的变化率可以通过提取前进速度的横向分量来计算。从公式 ė = V * sin(ψ) 中,我们可以看到,随着速度增加,横向跟踪误差变化更快,这意味着纠正相同大小的横向跟踪误差所需的转向角更小。
将关于航向和横向跟踪误差的讨论扩展到曲线路径会增加一些额外的复杂性,因为曲线路径上的参考点应该位于何处并不立即明确。所需的几何关系超出了本视频的范围。
总结

本节课中,我们一起学习了横向控制的概念。你研究了定义参考路径的三种方法:线段、航点和曲线。你还学习了如何构建横向控制的误差度量,包括航向误差和横向跟踪误差。

在下一个视频中,我们将使用这些定义来构建我们的第一个横向车辆控制器——纯追踪控制器,以定义将跟踪我们参考路径的转向指令。
自动驾驶汽车简介:第二课:几何横向控制 - 纯追踪算法 🚗


在本节课中,我们将学习一种重要的横向控制方法——几何路径跟踪控制器,并详细推导其中的纯追踪算法。我们将利用上一课定义的车辆运动学模型和误差度量,来构建一个能够引导自动驾驶汽车跟踪参考路径的转向指令规则。
上一节我们介绍了与车辆横向控制相关的重要概念。本节中,我们将把这些概念付诸实践。
什么是几何路径跟踪控制器?
广义上讲,几何路径跟踪控制器是仅利用车辆运动学几何和参考路径的几何关系来实现路径跟踪的任何控制器。对于自动驾驶汽车而言,它是一种横向控制器,其特点是忽略车辆的动态力,并假设车轮满足无滑移条件。它依赖于运动学自行车模型和上一课定义的误差度量,来构建实现路径跟踪的转向指令规则。
由于其简单性,这种方法在机器人和自动驾驶领域非常流行和实用。然而,这种简单性也有其缺点:当车辆运动不符合无滑移假设时(例如在具有高横向加速度的激烈机动中),其性能会下降。在这些情况下,需要更深入地理解可用轮胎力的极限,并采用更复杂的控制策略。不过,当车辆在线性轮胎区域运行且轮胎未饱和时,几何路径跟踪控制器可以工作得很好。
几何路径跟踪控制器依赖于期望路径上的一个参考点。这个参考点可以是用于计算航向误差和横向误差的同一点,也可以是车辆前方路径上一定距离处的预瞄点。我们将要推导的纯追踪控制器就使用路径上的一个预瞄点,而下一课将介绍的斯坦利控制器则使用与误差计算相同的参考点。
纯追踪控制器详解
现在,让我们深入了解纯追踪控制器。在纯追踪方法中,核心思想是:在路径上车辆前方一个固定距离处设置一个参考点,然后计算出一个恒定的转向角,使车辆能够以圆弧轨迹驶向并经过该点。随着车辆转向以跟随这条曲线,预瞄点持续前移,从而减小转向角,平缓地将车辆引导回路径。
在此方法中,我们使用后轴中心作为车辆上的参考点。我们将后轴中心与目标参考点(预瞄点)连接的线段定义为固定距离 LD,称为预瞄距离。车辆航向与这条“预瞄线”之间的夹角记为 α。
为了构建纯追踪控制律,我们再次利用瞬时旋转中心的概念。轨迹上的目标点、后轴中心和瞬时旋转中心形成一个三角形,其中两条边长为 R(转弯半径),另一条边长为 LD。我们希望定义一条将车辆参考点带到路径上目标点的圆弧,该圆弧是覆盖角度 2α 的 ICR 圆的一部分。
基于正弦定理,我们可以写出以下方程:
LD / sin(2α) = R / sin(π/2 - α)
利用三角恒等式进行简化:
LD / (2 sinα cosα) = R / cosα
最终得到简洁表达式:
LD / sinα = 2R
因此,曲率 κ(即转弯半径 R 的倒数)为:
κ = 1/R = 2 sinα / LD
接下来,我们结合自行车模型来计算跟踪此圆弧所需的转向角。回顾之前内容,转向角定义了圆弧半径,关系式为:
tan(δ) = L / R
其中 L 为轴距。将此表达式与之前推导出的 R 的表达式结合,我们现在可以用易于计算的值来表示跟踪圆弧所需的转向角:
δ = arctan( (2L sinα) / LD )
这是一个易于实现的转向控制律,但它的性能如何呢?
控制律性能分析
为了理解其性能,我们需要深入分析误差值在闭环系统中的演变。对于纯追踪控制器,我们可以将横向误差 e 定义为车辆航向矢量与目标点之间的距离。由此,我们得到关系式:
sinα = e / LD
将此式与曲率表达式结合,表明纯追踪控制器产生的路径曲率与预瞄参考点处的横向误差成正比:
κ = 2e / LD²
随着误差增大,曲率也随之增大,从而更积极地将车辆带回路径。该方程证明,纯追踪控制器的工作方式类似于比例控制器,它使用路径曲率作为控制器输出来校正横向误差。比例增益取决于 2 / LD²。因此,随着预瞄距离增加,比例增益以非线性方式减小。
需要注意的是,采用固定 LD 值的纯追踪控制器产生的曲率控制律没有考虑车速。这意味着无论车辆以10公里/小时还是100公里/小时行驶,所选择的转向角都是相同的,但这会导致完全不同的横向加速度。为高速调校的控制器在低速时会过于迟钝,而为低速调校的控制器在高速时会危险地过于激进。
引入速度自适应
为了克服这个限制,我们对纯追踪控制律进行一项修改:根据车速动态调整预瞄距离 LD。我们定义预瞄距离随车辆前进速度 vf 成比例增加:
LD = K_pp * vf
其中 K_pp 是纯追踪预瞄增益。将这一调整代入转向角指令方程,我们得到了完整的纯追踪控制器:
δ = arctan( (2L sinα) / (K_pp * vf) )
该控制器选择能形成一条通往预瞄参考点的圆弧的转向角,并根据车速调整预瞄点的远近:车速越快,预瞄点越远。这种设计产生的转向指令和转弯速率在给定可用轮胎力的前提下是可实现的,但需要通过调参来达到最佳效果。
总结
本节课中,我们一起学习了几何路径跟踪控制器这一类方法,并推导了纯追踪控制器,这是本课程我们将研究的两种几何路径跟踪控制器中的第一种。你现在已经准备好开始为自动驾驶汽车构建几何横向控制器了。



在下一个视频中,我们将探索第二种几何路径跟踪控制器——斯坦利控制器。
042:几何横向控制-斯坦利算法


概述
在本节课中,我们将学习第二种几何路径跟踪控制器——斯坦利控制器。我们将推导其控制律,分析其在不同误差下的转向指令变化,并评估其从任意初始条件收敛到期望路径的性能。
斯坦利控制器简介
上一节我们介绍了纯追踪控制器,它是一种基于前瞻参考点定义转向输入的几何路径跟踪控制器。本节中,我们来看看另一种几何控制器——斯坦利控制器。该控制器由斯坦福大学赛车团队开发,并帮助他们赢得了第二届DARPA无人驾驶挑战赛。
斯坦利控制器是一种简单但实用的几何路径跟踪控制器,适用于自动驾驶机器人和汽车。其核心思想是改变控制器使用的车辆参考点,并同时考虑航向误差和横向跟踪误差。
控制器推导
斯坦利控制器由三个主要部分组成,旨在实现全局路径收敛和误差的稳定衰减。
以下是斯坦利控制器的三个核心组成部分:
- 航向误差校正:转向角直接设置为车辆航向与路径航向之间的误差角,以消除航向偏差。
- 横向误差校正:增加一个比例控制项,其增益与前进速度成反比,并通过反正切函数映射到转向角范围。
- 转向角限幅:最终的转向指令被限制在车辆的最小和最大转向角范围内。
最终的控制律结合了这三个元素,其公式如下:
δ = ψ + arctan( (k * e) / v )
其中,δ是转向角,ψ是航向误差,k是增益,e是横向跟踪误差,v是前进速度。
误差响应分析
现在,我们来分析斯坦利控制器对不同误差信号的响应。
对于航向误差,转向指令与航向误差方向相反,促使车辆转向以对齐路径。如果航向误差超过最大转向角,控制器将请求最大转向指令。
对于大的正向横向跟踪误差,(k * e) / v的值会很大,使得arctan项接近π/2。因此,控制律近似为δ ≈ ψ + π/2。这个较大的值会将转向指令限制在最大值,使车辆转向路径。这个转向动作会增加反方向的航向误差,因此当航向误差达到-π/2时,转向指令将降为零。随后,车辆将沿直线驶向路径,直到横向误差减小。
收敛性分析
我们可以利用本模块第一个视频中定义的横向误差动力学表达式,来理解斯坦利控制器的收敛特性。
横向跟踪误差的变化率满足一个一阶微分方程。其解是一个指数函数。由于增益k为正,误差会以指数形式衰减到零。这项分析最有趣的一点是,衰减率完全与速度无关。这意味着,速度较快的车辆在收敛到路径的过程中行驶距离会更远,但收敛所需的时间与速度较慢的车辆相同。
仿真示例
接下来,我们通过仿真示例来观察斯坦利控制器的收敛特性。我们将查看两种极端场景:大的初始横向误差和大的初始航向误差。
场景一:大的初始横向误差
假设初始横向误差为5米,最大允许转向角为25度,前进速度为5米/秒。仿真显示,斯坦利控制器能够有效纠正大的横向误差并收敛到期望路径。大的初始误差导致大的转向指令,使车辆快速转向路径。随后,航向误差项和横向误差项达到平衡,车辆沿直线驶向路径。随着横向误差减小,向路径的指数衰减变得明显,最终车辆在仿真后期稳定跟踪路径。
场景二:大的初始航向误差
参数与之前相同,但车辆起始于路径上,且指向错误的方向。仿真结果表明,斯坦利控制律首先纠正航向误差,转向指令达到限幅值。随后,随着横向误差开始增长,转向指令继续纠正车辆航向,使其超越与路径的对齐状态。最后,车辆像之前一样进入指数收敛阶段。
这些仿真结果很好地展示了斯坦利控制器纠正任意大误差的能力。事实上,该控制器具有全局稳定性证明,意味着无论初始条件如何,控制器都能引导车辆回到路径。
实际应用与增强
然而,斯坦利控制器仍然是一个几何路径跟踪控制器,因此没有考虑真实自动驾驶汽车的许多方面。例如,它不考虑测量噪声、执行器动力学或轮胎力效应,这些都可能在机动过程中导致不理想的行驶特性。
不过,我们可以对几何路径跟踪控制器进行一些调整,以帮助减轻一些最不理想的影响。
以下是几种增强方法:
- 低速软化:在低速运行时,当速度估计有噪声时,纯追踪和斯坦利控制器的行为可能非常激进。由于速度项位于反正切函数内部的分母中,低速估计误差往往会在转向指令中被放大。为了解决这个问题并提高低速下的稳定性,我们在分母中添加一个正的软化常数,确保分母始终有一个最小值。
- 高速阻尼:在高速下,转向指令需要缓慢变化以确保侧向力不过大。即使有速度缩放,斯坦利控制器在高速下的响应也可能过于激进。因此,可以增加一个航向变化率的阻尼项。这实质上将航向误差控制部分转换为一个比例控制器,同样的思想也可以应用于纯追踪的曲率控制。
- 前馈项:对于高曲率的弯曲路径,控制器可能无法很好地跟踪,因为几何控制器的推导中没有考虑参考路径的动力学。与纵向控制类似,可以通过向控制器添加前馈项来增强性能并更快地将误差驱动到零。在这种情况下,只需简单地包含维持期望路径曲率所需的转向角即可。
经过这些修改,只要车辆避免超出轮胎线性区域,斯坦利控制器就能成为执行中等驾驶任务的有用工具。
总结
本节课中,我们一起学习了如何将斯坦利控制器作为几何路径跟踪控制器来应用,了解了斯坦利控制器的收敛特性,以及如何通过添加增强功能来提高控制器的实际性能。


在下一个视频中,我们将介绍模型预测控制方法,这是一种先进的基于模型的控制方法,能够克服几何控制器的许多局限性。下次见。
044:CARLA概述与仿真入门 🚗


在本节课中,我们将学习自动驾驶汽车仿真的重要性,并详细介绍本课程将使用的仿真器——CARLA。我们将了解仿真如何帮助安全地测试自动驾驶系统的各个模块,并初步探索CARLA的功能与使用方法。
欢迎来到自动驾驶汽车专项课程第一课的最后一个模块。
在这个模块中,你将有机会综合运用并测试我们在整个课程中讨论过的概念。
我们将首先讨论各种自动驾驶汽车仿真环境。
然后,我将向你展示在本课程乃至整个专项课程中你将使用的仿真器。
一个逼真的仿真环境是开发自动驾驶汽车的重要工具,因为它能让我们在真正上车之前,确保车辆能够安全运行。

使用仿真器,我们可以测试构成系统的所有不同模块,包括感知、规划和控制,既可以一起测试,也可以独立测试。
我们可以运行涉及多辆AI控制车辆和行人的复杂场景。
我们可以对这些场景进行数百甚至数千次变体测试,以确保我们的汽车始终能做出正确决策。
最重要的是,我们可以在实际道路上过于危险的情况下测试我们的汽车。
市面上有各种各样的仿真器,由工业界和学术界的团队开发。在本课程中,我们将使用名为CARLA的仿真器。
CARLA是由巴塞罗那自治大学计算机视觉中心、英特尔和丰田研究所的成员团队共同开发的仿真器,并使用虚幻引擎构建。
它拥有高度详细的虚拟世界,包含道路、建筑、天气、车辆和行人代理。
这些环境的图像可以以多种格式捕获,包括深度图、分割图像等,你将在本专项课程的第三课中了解更多相关内容。
整个仿真可以通过外部客户端控制,该客户端可用于向车辆发送命令、记录数据以及自动执行场景以评估汽车的性能。
最重要的是,CARLA是开源的,任何人都可以自由修改代码的任何部分,以满足其特定的仿真需求。
对于本专项课程,我们开发了一个定制版本的CARLA,其中包含一些额外工具,以帮助你在仿真中实现和测试代码。
让我们来看看如何与仿真器交互并使用它。
无需担心后续操作,评估说明中有一份关于如何设置CARLA和运行Python客户端的详细指南。
我们已经下载并安装好所有内容,现在让我们直接进入仿真器本身。
启动CARLA最简单的方法是使用提供的启动脚本。
该脚本本身用于加载CARLA会话,并选择我们想要的地图或场景。在这里,我选择CARLA提供的城镇环境进行演示。
我们还可以更改仿真器会话的各种配置,例如仿真窗口大小,以及设置较小或较大的固定时间步长。
CARLA会话也可以在服务器模式下加载。
这允许一个可编程客户端连接到服务器,并发送命令来控制汽车或接收有关仿真环境的信息。
能够编程我们的客户端,为利用仿真器反馈开辟了多种可能性。从反馈中,我们可以知道地图上每辆车的位置,开发控制器和规划器以使我们的汽车平稳导航,甚至可以使用深度和分割图像来学习检测汽车和行人。
来自客户端的仿真结果也可以进行后处理,以评估我们当前软件算法和方法的性能。
这有助于深入了解仿真器和算法的改进空间与局限性。
对于我们即将开始的课程项目,我们将使用这些结果来评估你算法的性能。
并鼓励你探索所开发算法的优势和劣势。
我们讨论了仿真为何有用以及你可以用它做什么,并且认识了CARLA——这个我们将在整个专项课程中使用的仿真器。
我们还看到了CARLA的一些功能,你将在接下来的课程项目中使用它们。

现在,在我们进入项目细节之前,是时候让你更仔细地看看仿真器本身了。
并在你自己的电脑上设置它。现在是时候按照那些详细的说明,完成整个设置过程了。
如果你遇到任何问题,我也鼓励你查阅讨论论坛。很可能之前有人遇到过和你相同的问题。
一旦你成功运行仿真器,并且能够熟练地启动和运行客户端,你就准备好开始将其用于课程项目了。
在下一个视频中,我们将介绍最终项目的要求,并让你准备好开始为你的仿真自动驾驶汽车设计控制器。
我们下个视频见。
本节课总结

在本节课中,我们一起学习了自动驾驶汽车仿真的核心价值,并深入了解了CARLA仿真器。我们认识到仿真对于安全、高效地测试感知、规划和控制模块至关重要。CARLA作为一个开源、功能强大且高度可定制的仿真平台,为我们提供了逼真的虚拟环境和灵活的控制接口,是进行自动驾驶算法开发和测试的理想工具。现在,你已经为在仿真环境中动手实践做好了准备。
自动驾驶汽车简介:P45:期末项目概述 🚗


在本节课中,我们将概述本专项课程第一门课的期末项目。你将了解项目目标、需要实现的控制模块、代码结构以及评估方式。
现在你已经了解了Carla模拟器的一些功能,并且有机会下载模拟器并开始自行实验。
既然我们已经有了一个可运行的模拟环境,你就可以开始实现和测试在本课程中学到的概念了。
让我们来看看你将在本专项课程第一门课中完成的期末项目。
在这个项目中,你将用Python实现一个简单的控制器,并用它在Carla模拟器中驾驶汽车绕赛道行驶。
赛道是一个环形,如图所示。你将获得一个有序的路径点列表,这些路径点等间距地分布在赛道上。
每个路径点都包含其位置信息以及车辆应达到的速度。因此,这些路径点将成为你控制器的参考信号,成功导航到所有路径点即意味着完成了整条赛道。
由于控制器参考信号同时包含位置和速度,因此你需要同时实现纵向控制和横向控制。
在开始项目之前,你可能需要回顾一下关于纵向控制和横向控制的模块。
你的控制器输出将是车辆的油门、刹车和转向角指令。
油门和刹车指令将来自你的纵向速度控制,而转向指令将来自你的横向控制。
请务必从尽可能简单的控制器设计开始,只有在车辆未能按预期跟踪路径时,才增加复杂性。
当然,一旦你有了一个可工作的控制器,不要犹豫去挑战它的极限,看看它在赛道上究竟能表现如何。
那么,你该如何为这个项目构建你的代码呢?
我们为你准备了一个起始脚本,这样你就不需要担心任何Carla的实现细节,可以专注于编程实现控制器本身。
如果你打开模拟器目录并导航到“Course one final project”文件夹,你会看到一个名为 controller_2D.py 的文件。这就是你课程项目的起点。
当你打开这个文件时,你会看到车辆控制器被实现为一个Python类。
这个类包含了实现控制器所需的所有相关信息,车辆状态、期望路径点、期望速度和控制器输出都存储在变量中,随时可用。
该类还包含一些将直接与Carla交互的函数。
这些函数将持续更新车辆状态,并将控制器输出发送给Carla,使你能够将精力完全集中在控制器实现上。
现在你可能想知道你的代码将如何被评估,以及你将如何获得这个项目的成绩。
运行你的控制器后,将生成一个文本文件,记录车辆的整个行驶轨迹。
这个文件名为 trajectory.txt,位于“controller_output”子文件夹中。
你的控制器性能将基于这个轨迹文件进行评分。
Coursera平台将使用一个评分脚本来检查你的代码。它会绘制你的路径点、车辆轨迹以及车辆速度与期望速度的对比。
每个路径点都有一个距离阈值和一个速度阈值,在图中以绿色显示。😊
如果车辆轨迹同时在这两个阈值范围内,则认为成功到达该路径点。
评分脚本会告诉你成功到达了多少个路径点,如果你成功到达超过一半的路径点,就能通过评估。
一旦你的轨迹通过了评分脚本,你就可以将轨迹文本文件上传到Coursera,以正式完成项目。

现在,你已经拥有了实现你的第一个控制器并在模拟中测试它所需的一切。
这是开发自动驾驶汽车的重要一步,也是你将在该领域遇到的一个基本场景。
如果我在本视频中未能解答你的任何疑问,本模块的阅读材料中还有进一步的说明,你也可以随时在讨论区提问。
希望你在这个期末项目中玩得开心,等项目完成后,我们将再次见面来结束这门课程。

祝你好运。
046:期末项目解决方案 🚗


在本节课中,我们将一起学习期末评估项目的官方解决方案。我们将回顾如何结合纵向与横向控制器,使自动驾驶汽车能够同时跟踪目标速度和目标路径。
纵向控制:PID控制器
上一节我们介绍了控制器的设计思路,本节中我们来看看具体的实现。对于纵向控制,我们实现了一个PID控制器,其目标是以期望速度为参考,输出油门和刹车指令。由于目标速度较低且平稳,我们完全绕过了底层控制器。
PID控制器由三个部分组成:
- 比例项 (KP):根据速度误差按比例调整车辆加速度。公式为:
输出 = KP * 速度误差。这确保了车辆以与误差成比例的幅度朝正确方向加速。 - 积分项 (KI):根据累积的历史误差设定输出。公式为:
输出 += KI * 累积速度误差。这确保了对于斜坡参考信号,稳态误差能够被消除。 - 微分项 (KD):抑制由积分项引起的超调。公式为:
输出 += KD * 速度误差变化率。
为了完成纵向控制,我们需要将PID控制器输出的加速度转换为油门和刹车指令。为简化处理,我们规定:正输出对应油门,负输出对应刹车。
横向控制:Stanley控制器
完成了纵向速度跟踪,接下来我们需要控制车辆的方向以跟随路径。对于横向控制,我们实现了在横向控制模块中学到的Stanley控制器。
由于参考信号是给定的路径点位置,我们需要将它们转换为横向误差和航向误差。
以下是计算和控制步骤:
- 生成轨迹线:使用当前路径点和上一个路径点生成一条轨迹参考线。
- 计算横向误差:利用这条线的方程,确定车辆前轴中心到该线的垂直距离,这就是我们的横向误差。
- 计算转向角(来自横向误差):将横向误差乘以一个增益K,除以当前速度,然后取反正切。公式为:
δ_crosstrack = arctan(K * e / v),其中e是横向误差,v是当前速度。 - 计算航向误差:用轨迹线的角度减去车辆当前的横摆角。轨迹线角度可通过计算其斜率的反正切得到。
- 计算总转向角:将来自横向误差的转向角与航向误差相加,得到最终的总转向输入。公式为:
δ = δ_crosstrack + θ_heading_error。
至此,我们的横向控制器也设计完成。
综合表现与总结

将纵向PID控制器与横向Stanley控制器结合后,我们得到了以下速度曲线和轨迹跟踪结果。如图所示,控制器能很好地跟踪参考速度,并以极小的误差跟随路径。
当然,你也可以使用其他控制器来解决这个项目,例如纯追踪控制器、前馈控制器或模型预测控制器。如果你实现了这些控制器,欢迎分享它们的表现。
恭喜你!你已经完成了本课程的最终项目。这是你迈向自动驾驶汽车工程师道路上的一个重要里程碑。😊
你将在整个自动驾驶领域运用你新掌握的仿真和控制算法设计技能,请继续保持出色的工作。我们希望你在这个真实的编程场景中应用所学知识的过程,是一次愉快的学习体验。
在本系列的后续课程中,你将学习到更多关于编程实现自动驾驶汽车所需的知识。😊


本节课中我们一起学习了:期末项目的完整解决方案,包括使用PID控制器进行纵向速度跟踪,以及使用Stanley控制器进行横向路径跟踪。通过结合两者,自动驾驶汽车能够成功完成既定的速度和路径跟踪任务。
047:课程一总结与展望 🚗


在本节课中,我们将回顾并总结自动驾驶汽车专项课程第一门课的核心内容,并对后续课程进行展望。我们已共同学习了自动驾驶的基础架构、硬件软件栈、安全评估以及车辆建模与控制等关键概念。
课程一核心内容回顾
上一节我们完成了课程一的最终项目,本节中我们来系统回顾整个课程的学习成果。
以下是我们在课程一中学习的主要内容:
-
第一周:自动驾驶概述与需求框架
- 学习了自动驾驶汽车的分类法。
- 理解了自动驾驶对感知和规划的需求。
- 建立了车辆需求框架,以明确需要做出的驾驶决策以及实现这些决策所需的自动化等级。
-
第二周:硬件与软件架构
- 学习了用于感知的各种传感器(如摄像头、雷达、激光雷达)。
- 掌握了传感器配置设计的基础知识。
- 了解了典型自动驾驶软件栈的各个组件。
- 初步探索了自动驾驶的环境表示方法。
-
第三周:安全评估
- 探讨了自动驾驶汽车安全评估的重要性。
- 评估了硬件和软件栈的多个安全方面。
- 研究了一些行业内的安全方法,并讨论了流行的安全框架。
-
第四周:车辆建模与控制
- 学习了车辆的运动学和动力学建模。
- 建立了详细的纵向和横向模型,以描述车辆对转向、油门和刹车指令的响应。其核心关系可概括为:
- 纵向模型:描述车辆加速、减速,通常涉及力与加速度的关系,例如
F = m * a。 - 横向模型:描述车辆转向与轨迹变化,涉及转向角与路径曲率的关系。
- 纵向模型:描述车辆加速、减速,通常涉及力与加速度的关系,例如
- 基于模型开发了纵向和横向车辆控制器。
- 学习了如何设计速度调节控制器,以及路径跟踪控制器。
- 了解了用于安全高效执行复杂操作的预测轨迹控制器。
-
最终项目:综合应用
- 在Carla模拟器中,综合运用所学知识,成功操控自动驾驶汽车沿赛道行驶。
- 测试了车辆性能限制下的控制与设计考量。
总结与课程展望
本节课中,我们一起学习了自动驾驶汽车的基础知识体系。从概念分类到具体的硬件软件组成,从至关重要的安全评估到实现控制的车辆建模,我们构建了对自动驾驶系统初步但完整的认识。
然而,要实现L5级别的完全自动驾驶社会,我们仍有大量工作要做。现在,你应该已经对设计自动驾驶汽车时需要考虑的许多基础挑战有了清晰的认识。


在接下来的第二门课程中,Jonathan将为大家介绍状态估计与定位。
你将学习相关的数学和算法方法,例如最小二乘法及其与三种常见递归状态估计滤波器(如卡尔曼滤波器)的关系。代码实现可能涉及如下核心更新步骤:
# 卡尔曼滤波预测步骤示例(伪代码)
x_prior = F * x_posterior # 状态预测
P_prior = F * P_posterior * F.T + Q # 误差协方差预测
此外,你将更深入地了解自动驾驶汽车中常见的几种传感器,包括全球导航卫星系统(GNSS)和激光雷达(LiDAR),并学习如何进行传感器融合,即将多个数据源的信息组合成对自动驾驶汽车有用的信息。
我将在第三门课程中再次与大家见面,讨论自动驾驶的视觉感知。现在,你将跟随Jonathan继续深入学习。你们正在掌握这些重要的概念,这些知识将帮助我们共同构建自动驾驶的未来。

请继续保持出色的学习状态。😊
048:电车难题与安全伦理

概述
在本节课中,我们将探讨自动驾驶汽车领域一个广为人知且充满争议的话题——电车难题。我们将分析它为何更多是一个伦理与社会学问题,而非纯粹的技术挑战,并了解工程师与法律专家如何合作,为自动驾驶汽车制定合理的行为规则。
电车难题的提出
当我们开始讨论自动驾驶汽车的安全问题时,最先出现的问题之一就是电车难题。人们会问:未来的汽车真的需要决定谁生谁死吗?我们是否要将我们自己都不愿做出的抉择编程到这些车辆中?这部分问题究竟如何运作?
上一节我们引入了自动驾驶安全中的伦理困境,本节中我们来看看为何电车难题会引起如此广泛的讨论。
问题的本质:归责与伦理
我认为这个话题被广泛讨论,是因为它在社会中引起了强烈共鸣。这实质上更多是关于伦理学和社会学,而非技术话题。其中的关键方面是责任的归属。这正是律师与工程师沟通的核心,帮助工程师决定车辆应如何行为,以避免引发事故。这才是关键所在。
因此,你在MIT“道德机器”等网站上看到的各种情境——比如应该撞向狗还是人,或者是在一位母亲和一位老奶奶之间做选择——这些在现实生活中发生的可能性极低。更重要的是,目前的汽车甚至无法准确识别一群人中有多少人,因此我们无法制定“必须选择撞向人数更少群体”的规则。
然而,确实存在一些伦理规则。德国已经制定了一些,我认为它们是合理的。
具体的伦理规则
以下是德国提出的一些核心伦理规则要点:
- 禁止使用个人特征:例如,在决策中不能使用年龄等个人特征。这意味着必须将所有人类视为平等的个体,并将这一原则从一开始就编码到立法中。
- 区分直接与间接参与者:需要考虑一个人是交通场景的直接参与者还是间接参与者。例如,如果一辆车为了躲避道路上的行人而转向冲上人行道,那么人行道上潜在的行人,应比那个违规横穿马路、直接引发险情的行人受到更多保护。

总结
本节课中,我们一起学习了自动驾驶汽车面临的“电车难题”。我们了解到,这主要是一个涉及责任归属的伦理与社会学问题,而非当前技术能解决的精确计算问题。目前,像德国制定的规则那样,更可行的方向是确立基本原则,如人人平等和区分风险来源,而不是让汽车在极端且概率极低的道德困境中做出选择。工程师与法律专家的合作,旨在从系统设计上避免事故,而非在事故中抉择。
049:自动驾驶安全中的开放研究问题 🚗

在本节课中,我们将探讨自动驾驶汽车在实现完全无人驾驶之前,所面临的核心安全与开放性研究问题。我们将聚焦于机器学习的安全性、复杂交通环境下的行为预测,以及如何为这些系统构建可靠的安全论证。
现在,你已经拥有了这辆在公共道路上行驶超过100公里的Saanah Moose汽车。你对未来几年有何计划?你认为哪些是关键的研究问题,是你希望解答的?
关键的研究问题,首先,在安全方面,机器学习的安全性是一个重大课题。我们目前还没有足够的实践经验。实际上,有一些基础性工作需要完成来解决这个问题。
此外,交通中的行为也是一个重大课题。我们知道,今天的情况很具挑战性,因为道路上同时存在人类驾驶的车辆,自动驾驶汽车必须在可能非结构化的、复杂的交通环境中与这些车辆互动。
即使未来所有车辆都实现了自动化,我们仍然会有行人和自行车。这些因素使得预测他们的行为变得困难。例如,存在“机器人欺凌”的想法,即行人可能仅仅因为自动驾驶汽车会为他们停车,就随意横穿马路。我们如何解决这些问题?这是一个挑战。
那么,是这些超级复杂的情况,比如十字路口有20、30辆车,行人朝各个方向行走,阻碍了自动驾驶汽车的发布吗?还是说,这背后有更根本的原因,关乎我们如何设计这些系统,或者系统可能遇到的无限种变化?这仅仅是能力范围的最后边界,还是我们实际上无法确定是否已经做得足够多,或者是否覆盖了所有情况?
我们发现,所需的性能中最后的那几个百分点,是最难达到的。你可以将系统提升到每1万公里才需要一次人工干预的程度,但总会出现新的情况。
在某种意义上,我们有时将其称为长尾分布。这意味着可能有高达50%的关键情况实际上就分布在那条长尾中。因此,真正的问题是:我们该在哪里停止?我们必须致力于开发诸如加速测试之类的方法,通过强化或鲁棒性测试,或者寻找那些可信但依然困难的场景,去解决它们。
人类驾驶员带来了他们对世界的完整认知表征,他们生活了那么久,知道人们如何行为,知道车辆在某种程度上会如何行驶。这种认知似乎无法完全编码到软件中。这是一个我们能解决的机器学习问题吗?还是说,我们只是需要看到足够多的例子,并筛选出那些我们尚未正确处理的情况?我们能完全实现目标吗?还是说总会有新的变化阻止我们完成?
这是一个很好的问题,也是一个经验性问题。在真正完成之前,我无法给出答案。这取决于我们所做的测试。我们看到,通过机器学习,我们可以走得很远。但我们也知道,在机器学习失败的一些案例中,或者说今天的机器学习,它更像是一种蛮力模式匹配(或者说模式学习和匹配)。每当它失败时,人类通常会部署某种更高层次的思考。
最近,在我们的测试跑道上,我们正在进行物体检测和避障测试。我们的工程师需要设置一个静态障碍物,他们拿了一张桌子和两把椅子,以某种方式摆放,结果意外地看起来像一辆汽车。于是我们的分类器说:“嗯,这是一辆汽车。”从模式匹配的角度看,在相对较低的路面分辨率下,它确实有点像。要避免撞上它将会非常困难。而人类会有不同的假设,会说:“这看起来像椅子,这看起来像桌子,这不可能是汽车。”所以,常识的缺失是显而易见的。我认为短期内我们无法解决这个问题。
因此,未来可能仍将依赖大量模式的蛮力学习。我认为我们将能够满足许多功能需求,但总会存在一些情况,我们可能需要通过,例如,提示交通控制来解决。这对这些车辆的安全评估具有巨大影响。
机器学习系统只能真正表示或识别它们从先前数据中见过的答案。它们不一定能进行外推,或基于从未观察到的事物做出常识性推断。那么,你如何解决这个问题?我们如何为一个我们不一定能解释其思考过程的机器学习系统构建安全论证?
构建安全论证,这是一个很好的术语。在安全关键系统中采用的方法,是考虑整体方法论和架构。但最终,你需要提出一个安全论证或安全案例,说明你已经考虑了所有可能发生的情况,并且有证据表明你已经解决了所有这些情况。
因此,任何复杂系统(尤其是涉及软件和数据的系统)的安全案例,最终都依赖于严谨性。你必须严谨地展示你已经解决了所有可能导致危险的因素。
对于机器学习,关键在于训练数据集的设计,确保它确实覆盖了所有相关情况。这就是验证的用武之地,也是为什么你需要成千上万公里的测试来理解真实世界的数据分布。
本质上,你必须确保你的系统(例如感知系统)具有令人满意的性能。在这里,我们基本上取其中的一个子集,并说明那部分性能对安全至关重要,你必须证明那部分安全关键性能确实得到了保障。
接着,你必须审视所有可能影响该安全关键性能的因素。这可能不仅仅是数据覆盖不足,还可能是传感器校准的变化、影响场景的因素(如能见度),甚至是数据标注的错误。我们必须审视所有这些因素,看它们如何影响机器学习最终输出的不确定性。这是它们需要妥善处理的事情。

本节课中,我们一起学习了自动驾驶安全领域面临的几个核心开放性问题:机器学习本身的安全性验证、在复杂动态交通环境(尤其是与行人、自行车互动)中的行为预测与决策挑战,以及如何为基于数据驱动、缺乏常识推理能力的机器学习系统构建严谨的安全论证。研究重点在于通过加速测试应对长尾分布难题,并确保训练数据能充分覆盖安全关键场景。
050:安全驾驶员与“守护天使”系统

在本节课中,我们将探讨当前自动驾驶系统对安全驾驶员的依赖问题,并了解一种名为“守护天使”的替代性安全模型。我们将分析人类监控自动驾驶系统的局限性,并讨论如何通过技术手段来增强行车安全。
当前自动驾驶系统的现状
目前,道路上大多数自动驾驶系统仍然需要安全驾驶员在车内监控系统运行。只有少数几个案例实现了无安全员的自动驾驶。这些首批解决方案是否仍需要我们人类来监控系统?这种部分自动化或依赖人类来确保系统安全的模式将如何发展?这是否是让自动驾驶汽车更快落地、但可能不具备完全自主能力的一个可行解决方案?这是一个极好的问题,也是一个难题。
人类监控的局限性
这是一个需要实证研究的问题。为了回答它,我们必须积累足够的实践经验。我们正在收集关于高级驾驶辅助系统的经验,包括一些最先进的系统,例如二级自动驾驶系统(如Autopilot)。我们从中学到了很多。同时,也有研究基于这些经验展开。
我们知道,每当需要接管车辆时,驾驶员重建情境感知需要时间。我们也知道,驾驶时驾驶员可能会走神,这是一个大问题。人类不一定是自动驾驶系统的可靠监控者。航空领域也提供了重要的经验教训:如果驾驶员没有持续参与任务,就可能出现潜在的风险。
航空领域的经验与教训
在航空领域,我们自动化了简单和中等难度的任务。简单任务就是巡航,中等任务如起飞和降落。而我们将所有紧急情况都留给了飞行员处理。事实证明,我们为飞机引入的一些自动化系统,由于其增加的复杂性,反而使困难情况变得更加棘手。例如,需要覆盖自动驾驶系统,或者有时会创造出新的操作模式,这些模式现在需要飞行员去处理,而不是让他们始终拥有,比如说,几秒钟甚至一分钟的反应时间。
研究表明,在正常、放松的条件下,人类的平均失误间隔时间大约是半小时。如果处于压力下,或者任务复杂,这个时间可能缩短到大约五分钟。如果同时面临压力和复杂任务,失误可能每隔几秒就会发生。因此,研究显示,依赖人类在自动驾驶系统不知所措时进行接管,不是一个可持续的模式。
自动驾驶等级与人类参与度
从一级自动驾驶到二级自动驾驶是一个巨大的跨越。一级自动驾驶意味着系统至少负责转向或油门控制中的一项,这要求驾驶员持续参与。而到了二级,车辆基本上完成了大约90%的驾驶任务。这很容易导致驾驶员过度依赖系统、失去专注力,从而无法有效监控环境。这是一个挑战。
“守护天使”模型介绍
上一节我们讨论了人类监控的局限性,本节中我们来看看一种不同的安全理念。我认为丰田提出的“守护天使”模型是一个很好的范例。请详细介绍一下“守护天使”模型。
这个理念基本上是为车辆创建一个安全边界。这个概念源自航空航天领域。当你驾驶飞机时,一个基本准则是让飞机保持在空中,你不想让它失速。失速意味着飞机失去升力,会从空中坠落。像空客这样的公司在其飞机的安全理念中,就引入了计算机系统,该系统会覆盖飞行员的某些操作,以确保飞行员虽然可以给出指令,但系统能防止飞行员将飞机带入失速状态。
以下是“守护天使”系统的核心运作方式:
- 这个系统是在监控飞行员,而不是由飞行员监控系统。
- 它针对的是飞行中的关键部分。
- 当飞行员因任何原因犯错或无意中(例如,错误地断开自动驾驶)时,系统至少能始终在那里避免坠毁。
“守护天使”在自动驾驶中的应用
按照这个逻辑,在自动驾驶中的类比就是拥有一个非常可靠的防撞系统。我们知道防撞系统是存在的,例如零级系统中的自动紧急制动或紧急避让功能。但它们的功能非常有限。其设计初衷是避免误触发,因此它们被调校得相当保守,只有在碰撞迫在眉睫的最后时刻才会启动。
但如果我们能扩展这些系统的能力呢?例如,确保即使是反应能力可能不足的人(如老年人)也能通过给出指令来驾驶汽车。在棘手情况、碰撞风险或危险临近时(通常可能是因为其他道路使用者,例如突然加塞),车辆能像条件反射一样自动做出反应。我认为,当我们完善这种系统后,类似的机制可以围绕自动驾驶的便利性自动化系统建立起来。
总结

本节课中我们一起学习了当前自动驾驶对安全驾驶员的依赖及其挑战。我们分析了人类作为系统监控者的局限性,并借鉴了航空领域的经验教训。最后,我们探讨了“守护天使”这一创新安全模型,它通过让系统主动监控并保护驾驶员和车辆,为解决人机协同驾驶的安全问题提供了一种潜在路径。这提示我们,未来的自动驾驶安全可能更依赖于强大、可靠的主动安全系统,而非完全依赖人类的即时接管。

浙公网安备 33010602011771号