当前位置:首页>自动驾驶>基于ASIL场景的自动驾驶控制算法开发(上):架构和方法

基于ASIL场景的自动驾驶控制算法开发(上):架构和方法

  • 2026-08-26 04:21:58
基于ASIL场景的自动驾驶控制算法开发(上):架构和方法

摘要:自动驾驶系统的进步催化了各个行业的重大变革,尤其是汽车行业。这种颠覆性技术已成为创新的基石,从根本上重塑了传统的交通和出行模式。将自动驾驶功能整合到车辆中具有巨大的潜力,可以提高效率、舒适性,最重要的是,可以提高道路的安全性。

本研究旨在通过包括感知、运动规划、控制和驱动在内的系统方法实现自动驾驶功能。主要目的是评估不同控制和运动规划算法在自动驾驶关键方面的有效性和结果:安全性。

对于安全评估,该研究将遵守ISO 26262中概述的汽车安全完整性等级(ASIL)标准。通过危害分析和风险评估(HARA)确定的危害场景将用于比较最复杂和最不复杂的控制算法(PID和MPC)。由于卡拉模拟环境具有场景建模能力,因此将在卡拉模拟环境中模拟代表城市和农村环境的真实世界场景。

路径规划将利用Carla模拟器API,同时模拟器的摄像机和障碍物传感器将用于感知任务。汽车模型将基于自行车模型,运动规划将利用自适应巡航控制。

该项目将采用Python编程开发,遵循PEP8标准,并在Ubuntu操作系统上执行。代码质量和可读性将使用Pylint linting分析进行评估,以日志和CSV文件格式记录和输出跟踪,以存储操作数据。

该研究将最终在卡拉模拟器中对现实生活场景进行实际探索,然后对结果进行比较分析,包括交叉轨迹和航向误差。这些参数将用于ISO 26262安全防护,通过使用HARA来评估控制算法的安全参数。

提示:本文分为“上、下”两个部分

此为文章“上部分”,主要阐述基础理论及架构和方法,深入探讨与自动驾驶汽车、控制算法和安全标准相关的理论、概念和技术进步。

在后续发布的“下部分”中,我们将阐述具体实施及评估,详细介绍开发过程、使用的软件工具和克服的挑战。

原文作者:Cihan YURTSEVER

编译:猿东东,猿西西

01. 简介

自动驾驶汽车的概念可能看起来很未来主义,但它的根源可以追溯到中世纪好奇的头脑。纵观历史,人类一直对自动驾驶怀有好奇心。然而,直到20世纪初,人们才迈出了自动驾驶汽车的第一步,尽管由于对物理定律的技术理解有限,这些步骤还处于初级阶段。

1920年,进行了一项关于粗比率控制器汽车的早期实验,旨在控制一辆1926年款的Chandler,该车配备了一个发射天线。这辆车由另一辆车里的人操作,发出无线电脉冲来控制它的运动。

快进到1948年,随着时任汽车工程师学会(SAE)主席的Ralph Teetor发明了巡航控制,先进的驾驶员辅助系统出现了。这项开创性的技术于1958年首次在克莱斯勒的豪华车型“自动驾驶”中投入商业应用,后来被称为巡航控制。

1977年,日本筑波机械工程实验室在高架铁路的支持下,开发了第一辆半自动驾驶汽车,取得了重大进展。到1995年,美国的Navlab5已经开发出控制转向的神经网络,这标志着自动驾驶汽车技术的一个里程碑,尽管油门和刹车是由人类控制的,主要是出于安全原因。

21世纪初,自动驾驶汽车项目中开始出现避障系统的集成。到2005年,将光探测和测距(LiDAR)传感器用于运动规划变得普遍。2007年,DARPA的挑战在城市环境中展开,见证了各种控制方法的引入,每种方法都为控制算法的一个重要里程碑做出了贡献。技术进步和创新的快速步伐推动了汽车公司加大对自动驾驶汽车项目的投入。然而,使用“自主”一词的项目激增令人困惑,因此有必要建立标准化的定义。因此,在2014年汽车工程师协会(SAE)引入了包括六个级别的Autonomy标准,如图1.1所示。

图1.1:SAE驾驶自动化水平

在接下来的几年里,自动驾驶汽车项目的发展开始遵循这些标准化的定义。2017年,主要汽车公司选择发布开源软件模块和接口汽车开放系统架构(AUTOSAR)。2019年,当欧洲、美国、英国、日本和其他各国开始进行法律调整时,这一倡议势头强劲。目前,自动驾驶技术的部署和标准化是根据具体的部署模式进行监管的。自动驾驶任务通常分为定位和映射、感知、运动规划和控制。在接下来的页面中,我们将深入研究这些步骤以及在Carla模拟器中开发的应用程序。

1.1自动驾驶

自动驾驶代表了赋予车辆独立导航不同场景的能力的努力。这种期望伴随着挑战和局限性:安全问题和监管障碍。此外,还存在技术限制,例如传感器在恶劣天气条件下的可靠性。这些挑战意味着遇到危害情况,车辆必须迅速做出决定。因此,在任何情况下,车辆都必须:

• 自我意识到自己的位置;

• 了解其环境中的动态和静态对象;

• 适应位置和环境,确定要到达的实时路径;

• 实施车辆运行的计划路径。

如图1.2所示,车辆配备了硬件和软件元件,以确保其安全性和效率,以满足前面列出的预期条件。硬件包括电子控制单元(ECU)、摄像头、激光雷达和各种其他传感器。同时,该软件由定位、感知、运动规划和控制算法组成。这四个主要软件组件有助于车辆达到不同的SAE自主水平。

图1.2:自动驾驶流水线

随着SAE自主性的提高,危害情况和风险的复杂性也在增加。在此背景下,采用危害和风险评估(HARA)分析来验证是否满足预期。HARA评估不同的情况,并期望车辆在每种情况下都能表现得适当,以避免危害和危害情况。因此,定位、感知、运动规划和控制软件的任务在车辆的运行中具有重要意义。

1.1.1自动驾驶软件栈

自动驾驶汽车的梦想取决于软件的力量。该软件充当车辆的“大脑”,将原始数据转化为智能决策,最终实现自主操作。自动驾驶软件栈(AD Stack)包括四个协同工作的关键功能:感知、定位、运动规划和控制。

图1.3:自动驾驶的软件堆栈流水线

感知

感知是负责解释来自各种传感器的数据以了解车辆周围环境的软件组件。它涉及处理来自摄像头、激光雷达、雷达和其他传感器的信息,以识别车辆、行人和路标等物体。感知算法分析传感器数据以检测和分类物体,估计它们的位置和速度,并预测它们未来的运动,如图1.4所示。这些信息构成了自动驾驶系统中更高级别决策的基础。

图1.4:感知检测

定位与建图

定位和测绘软件使车辆能够准确地确定其在环境中的位置和方向,通常称为“姿态”。定位算法使用传感器数据,如GPS(全球定位系统)和惯性测量单元(IMU),来估计车辆相对于已知环境图的姿态。同时,映射算法创建和更新周围环境的详细地图,结合来自传感器的信息来表示道路、车道和地标等特征。通过不断将传感器数据与地图进行比较,定位和绘图软件确保了精确的导航,并使车辆能够安全地遵循计划的轨迹。

图1.5:定位与建图示意图

运动规划

运动规划是自动驾驶软件的一个关键方面,负责为车辆生成可行和安全的轨迹。这个过程涉及计算通过环境的最佳路径,同时考虑各种因素,如车辆的当前位置、目的地、周围的障碍物和动态约束。运动规划算法旨在找到最小化行驶时间、与其他物体保持安全距离、遵守交通法规并优化整体效率的路径。这些算法利用概率路线图、潜在领域和优化方法等先进技术来导航复杂环境,确保可靠的自动驾驶。

图1.6:(a)路径规划,(b)机动规划,以及(c)轨迹规划

控制

运动规划是自动驾驶软件的一个关键方面,负责为车辆生成可行和安全的轨迹。这个过程涉及计算通过环境的最佳路径,同时考虑各种因素,如车辆的当前位置、目的地、周围的障碍物和动态约束。运动规划算法旨在找到最小化行驶时间、与其他物体保持安全距离、遵守交通法规并优化整体效率的路径。这些算法利用概率路线图、潜在领域和优化方法等先进技术来导航复杂环境,确保可靠的自动驾驶。

图1.7:闭环PID控制器

1.1.2汽车安全完整性等级(ASIL)

自动驾驶汽车发展的首要问题是安全。汽车行业采用ISO 26262标准中的基本原则——汽车安全完整性等级(ASIL)来衡量安全水平。ASIL对车辆电气和电子系统故障可能引起的潜在危害严重程度进行了分类。这些分类直接影响开发过程,规定了实现必要安全目标所需的严格程度。ASIL是一个分层系统,从A(最不严重)到D(最严重),每个级别都要求越来越严格的安全需求。

与ASIL协同工作的是危害分析和风险评估。HARA通过系统地识别和评估可能由系统故障引起的潜在危害,为ASIL分类奠定了基础。该过程涉及定义安全目标,并为不同的操作场景分配相应的ASIL级别。从本质上讲,HARA通过识别潜在危害、评估其严重程度以及定义适当的安全目标和ASIL分类来指导风险评估过程。ASIL和HARA之间的这种合作方式构成了自动驾驶汽车安全协议的基础,确保了在各种驾驶条件下的可靠和安全运行。HARA分析示例见表1.1。在本表中,从严重性、暴露和可控性方面分析了情景和危害。最后一列显示了分析结果,表明了他们的ASIL得分。

表1.1:HARA分析涉及严重性、暴露和可控性概率的情景(1-9)

这两个ISO 26262标准都进一步强调了在整个开发生命周期中对安全的系统方法,不仅包括设计和生产阶段,还包括运营、服务和退役。本研究将利用HARA在Carla Sim环境中创建特定的运行场景,以促进各种自动驾驶汽车控制算法的测试和比较。

1.2新技术

自动驾驶汽车的格局正在经历一场深刻的变革,这是由一系列技术领域的不懈进步推动的。在这项全面的探索中,我们深入研究了自动驾驶汽车软件栈中每个关键组件的当前最新技术,即感知、定位和映射、运动规划和控制算法。

感知

现代自动驾驶汽车采用一系列传感器,包括摄像头、激光雷达、雷达和超声波传感器,以全面了解周围环境。传感器融合整合了来自这些不同来源的数据,使自动驾驶汽车能够全面感知其环境。深度学习算法在这一过程中发挥了重要作用,促进了准确的物体检测、分类和跟踪,从而使自动驾驶汽车能够高精度地识别车辆、行人、交通标志和其他相关物体。

• 用于高分辨率感知的激光雷达:激光雷达传感器为自动驾驶汽车提供精确的3D点云数据,实现细致的物体检测和定位。这种能力在导航复杂的城市环境和具有挑战性的天气条件时尤其有价值,因为传统传感器可能会遇到困难。通过利用激光雷达技术,自动驾驶汽车可以提高其操作的精度和信心。

• 基于摄像头的深度学习感知:摄像头是自动驾驶汽车中无处不在的传感器,因为它们价格实惠,能够捕获丰富的视觉数据。深度学习算法彻底改变了基于摄像头的感知任务,包括物体检测、车道识别和交通标志识别。通过利用深度神经网络,自动驾驶汽车可以从视觉场景中提取关键信息,以无与伦比的准确性促进实时决策。

定位与建图

• 同步定位和测绘(SLAM):SLAM算法对于自主导航系统至关重要,使自动驾驶汽车能够构建周围环境的实时地图,同时确定它们在这些地图中的精确位置。通过综合激光雷达和视觉里程计的数据,SLAM算法在确保自动驾驶汽车的可靠路径规划和避障能力方面发挥着至关重要的作用。

• 高清(HD)地图:高清地图提供了环境的详细表示,包括车道标记、交通标志和地标。这些精心制作的地图与SLAM算法结合使用,以提高定位精度并克服车载传感器的潜在局限性。通过利用高清地图,自动驾驶汽车可以更精确、更自信地在复杂环境中导航。

运动规划

• 概率路线图(PRM):PRM是自动驾驶汽车的一种基本运动规划技术,为在复杂环境中生成可行路径提供了一个强大的框架。通过对环境进行概率采样,PRM算法构建了一个潜在路径的路线图,使自动驾驶汽车能够高效地驶向目的地,同时避开障碍物并遵守安全约束。

• 快速探索随机树(RRT):RRT算法为动态环境中的运动规划提供了一种有效的方法,在环境中逐步生长树状结构。通过迭代探索配置空间,RRT算法使自动驾驶汽车能够适应不断变化的环境,同时确保无碰撞的轨迹。

• 基于学习的运动规划:强化学习算法正在成为开发自动驾驶汽车自适应运动规划策略的有前景的工具。通过从模拟驾驶体验中学习,这些算法可以迭代地完善其策略,从而产生敏捷高效的运动规划策略,可以轻松处理各种驾驶场景。

控制算法

• 比例积分微分(PID)控制:由于其简单有效,PID控制仍然是调节车辆运动的流行选择。通过调整比例、积分和导数项,PID控制器可以保持所需的车辆动态,如速度和轨迹。然而,PID控制在高度动态的环境中或面对复杂的车辆动态时可能会遇到困难。

• 模型预测控制(MPC):MPC算法利用车辆的数学模型来预测其未来的行为,并在有限的时间范围内优化控制输入。这种主动控制策略使自动驾驶汽车能够预测和减轻潜在风险,使其非常适合自信地处理复杂的动态和不确定的环境。

• 基于学习的控制:深度强化学习技术在自动驾驶汽车控制算法领域越来越受欢迎,为开发稳健和适应性强的控制策略提供了一种数据驱动的方法。通过直接从模拟驾驶体验中学习,这些算法可以自主获取最佳控制策略,从而在各种驾驶场景中提高性能和安全性。

本综合概述强调了自动驾驶汽车在感知、定位和映射、运动规划和控制算法方面的重大进展和持续创新。

自动驾驶汽车技术的ASIL分析

ASIL分析是一个迭代过程,随着自动驾驶汽车技术的进步而发展。随着新功能的引入和算法的完善,持续的ASIL评估对于适应新出现的风险和保持最高的安全标准至关重要。

通过细致的风险评估和分类,ASIL分析将潜在危害分为四个级别:ASIL A、B、C和D,ASIL D代表最高级别的风险。通过为自动驾驶系统中的不同组件和功能分配ASIL级别,工程师可以优先考虑安全关键要素,并相应地分配资源,以确保鲁棒性和可靠性。

ASIL标准HARA分析对于估计和评估道路车辆中电子设备带来的风险至关重要。随着自动驾驶汽车的能力不断扩大,有必要扩大分析范围,以涵盖更复杂的场景。随着自动驾驶汽车的发展,对不同和更具体的场景的需求不断增长,促使研究工作专注于对制动、加速和其他一些操作等特定功能的影响。一些研究表明,自动驾驶中的实时决策需要使用具有后果类别的定量风险规范(QRN)进行定制,每个后果类别都有明确的发生频率限制。然后将事件类型分类并分配给这些后果类别,要求作为实施的安全目标。QRN方法确保了安全目标的完整性,并防止了自动驾驶系统(ADS)安全目标制定不当造成的限制。

1.3文章动机

在自动驾驶汽车日益增长的潜力推动下,交通格局正在经历深刻的变革。这些先进的车辆有望在未来实现更高的安全性、效率和便利性。然而,确保乘客和路上其他人的安全仍然至关重要。为了实现这一目标,严格的开发流程和稳健的控制系统是必不可少的。

ISO 26262标准及其HARA方法在确保自动驾驶汽车开发的安全性方面发挥着至关重要的作用。传统上用于评估自动驾驶汽车的电子设备,本文的目标是利用HARA分析来衡量不同控制算法的安全性能。

鉴于我们时间和资源有限,我们将重点比较最复杂和最简单的广泛使用的控制算法的安全方面:比例积分微分(PID)和模型预测控制(MPC)。

在AD软件栈中,两个关键组件对安全性有重大影响:控制算法和运动规划。控制算法负责将高级运动计划转化为车辆的实时转向、加速和制动命令。同时,运动规划确定了车辆在遵守交通规则和避开障碍物的同时导航的最佳路径。

本文在自适应巡航控制(ACC)的背景下对PID和MPC算法进行了比较分析,ACC是保持与前方车辆安全距离的基本技术。此外,我们将探索这些避障算法的实现,这是确保动态驾驶场景中安全的关键功能。

为了便于进行这种比较分析,我们将利用CARLA模拟器,该模拟器为测试和评估自动驾驶汽车控制系统提供了一个逼真且适应性强的虚拟环境。Python是一种用途广泛的编程语言,将作为Ubuntu操作系统中的主要开发平台。

通过在HARA框架内全面评估PID和MPC算法在ACC和避障场景中的性能,我们的文章旨在强调这些算法在自动驾驶汽车控制背景下的差异。我们的研究结果将揭示每种算法在各种驾驶场景中的不同优势和局限性,提供有价值的见解,使这项研究有别于现有的研究。这些见解有可能为更有效地选择和优化旨在提高自动驾驶汽车安全性的控制策略提供信息,从而促进该领域的进步。

02. 背景

在本章中,我们为理解在ASIL HARA场景中运行的自动驾驶汽车的控制和运动规划算法的复杂性奠定了基础。自动驾驶汽车代表了交通领域的范式转变,有望提供更安全、更高效的出行解决方案。其操作的核心是复杂的控制算法和运动规划策略,使车辆能够感知环境、做出决策和自主导航。

首先,我们深入研究了车辆动力学的基本原理,探索了控制车辆运动和行为的原理。了解车辆动力学对于设计有效的控制系统至关重要,该系统可以在各种驾驶条件下稳定车辆并优化其性能。

接下来,我们概述了控制理论,该理论构成了设计自动驾驶汽车控制算法的理论框架。控制理论涵盖了一系列调节动态系统行为的方法,为如何设计能够实现预期目标的控制器提供了见解,同时考虑了不确定性和干扰。

此外,我们还研究了运动规划算法的基础知识,这些算法在确定自动驾驶汽车在环境中导航时的轨迹方面起着至关重要的作用。运动规划算法为车辆生成可行且安全的路径,考虑障碍物、交通规则和车辆动力学约束等因素。

最后,我们介绍了ASIL(汽车安全完整性等级)和HARA(危害分析和风险评估)标准,它们为确保自动驾驶汽车的安全性和可靠性提供了系统的方法。ASIL和HARA标准指导开发过程,帮助工程师识别和减轻系统故障和外部因素引起的潜在危害。

通过探索这些基本概念,本章为后续讨论ASIL HARA场景中自动驾驶车辆的控制和运动规划算法奠定了基础。

2.1车辆动力学

在本节中,我们将深入研究控制车辆运动和行为的复杂动力学。了解车辆动力学对于自动驾驶汽车的设计、控制和优化至关重要,因为它直接影响其稳定性、机动性和整体性能。

2.1.1轮胎力和力矩

轮胎通过在车辆和路面之间提供牵引力和传递力和力矩,在车辆动力学中起着至关重要的作用。轮胎和道路之间的相互作用可以使用各种轮胎模型进行建模,例如Pacejka魔术公式。

图2.1:轮胎力和力矩

车辆动力学中的一个关键关系是轮胎力和力矩之间的关系。例如,轮胎产生的横向力Fy与滑移角α和垂直载荷Fz的关系如下:

其中Cα是轮胎的转弯刚度。

同样,轮胎产生的纵向力Fx与纵向滑移β和垂直载荷Fz的关系如下:

其中Cβ是轮胎的纵向刚度。

2.1.2自行车模型

自行车模型是车辆动力学的简化表示,通常用于自动驾驶汽车的控制和运动规划算法。考虑到轮胎的左右两侧表现完全相同,它确实有效。在自行车模型中,车辆被表示为具有两个车轮的单轨,允许对纵向和横向动力学进行建模。

图2.2:自行车模型

自行车模型的运动方程可以表示如下:

其中

• x和y:车辆质心的坐标

• θ:车辆的偏航角(航向角)

• v:速度

• β:侧滑角

• δ:转向角

• L:前后轴之间的距离(轴距)

• a:纵向加速度

自行车模型提供了一种简化但有效的车辆动力学表示,用于控制和运动规划算法,允许在各种驾驶场景中有效地模拟和优化车辆行为。

2.1.3纵向和横向运动

纵向运动是指车辆沿其纵轴向前或向后移动,该纵轴平行于其行驶方向。这种运动涉及速度或速度的变化,通常称为加速或减速。它受到各种因素的影响,如发动机推进、空气动力阻力、滚动阻力、道路坡度和制动。这些力的精确建模对于自主控制系统确保车辆平稳高效运行至关重要。

纵向运动由以下方程式控制:

其中:

• m为车辆质量(kg)

• v˙是纵向加速度(m/s2• Fprop是发动机推进力(N)

• Fdrag是空气动力阻力(N)

• Frolling是滚动阻力(N)

• Fgrade是由道路坡度(N)引起的力(正上坡,负下坡)

• Fbrake是施加在车轮上的制动力(N)

对于自主控制,对这些力进行精确建模至关重要。它涉及结合阻力系数、滚动阻力参数和精确的发动机扭矩特性,以实现可靠的性能。此外,必须考虑阵风和不同道路坡度等因素,以确保安全运行。横向移动对于执行转弯、变道和避开道路障碍物等机动动作至关重要。影响横向运动的因素包括转向输入、轮胎力、路况和车辆动力学。

图2.3:横向和纵向距离

精确控制侧向力至关重要,特别是对于自动驾驶中的ASIL HARA安全水平。这需要考虑轮胎滑移角、侧向力饱和和外倾角推力等因素进行精确的轮胎建模。控制系统必须管理转向输入,以在机动过程中保持稳定性,并确保车辆遵循计划的轨迹。

控制横向动力学的方程为:

其中:

• Iz是车辆的横摆惯性矩(kg·m2

• ¨ψ是偏航加速度(rad/s2

• Mz是围绕车辆偏航轴作用的总力矩(N·m)

了解和控制纵向和横向运动对于确保车辆的稳定性、机动性和安全性至关重要,特别是在需要精确控制的自动驾驶系统中。

2.1.4车辆稳定性

车辆稳定性是车辆动力学的一个关键方面,特别是对于自动驾驶汽车来说,保持控制对于安全运行至关重要。即使自动驾驶汽车遵循计划的轨迹,外部因素和固有的系统限制也会影响其稳定性。这些因素包括:质量分布、悬架几何形状和控制系统的复杂性。为了减轻这些因素的影响,有必要尽量减少路径跟踪和航向误差。

图2.4:航向误差

即使是通过安全操作将车辆保持在计划轨迹内也很重要。当车辆因不可预见的情况偏离路径时,控制系统应做出明智的决定,以确保乘客和周围车辆的安全。实现这一点需要对可能发生的错误有深入的了解。影响稳定性的两个关键误差是交叉跟踪误差和航向(偏航)误差。

航向误差的主要方面是横摆力矩,它表明车辆绕其垂直轴旋转的趋势。偏航稳定性与重心定位和车辆内质量分布等因素密切相关,对于保持控制至关重要。它通过偏航航向误差的测量来量化,偏航航向误差表示车辆航向与其预期行驶方向的偏差。尽量减少偏航航向误差对于精确导航和轨迹跟踪至关重要,可确保车辆保持航向。

航向误差通常表示为ψ,表示车辆的实际航向角δ与其期望或参考航向角δref之间的偏差。

从数学上讲,航向误差公式可以表示为:

其中:

• ψ是航向误差;

• δref是期望或参考偏航角;

• δ是车辆的实际横摆角(航向角)。

此外,交叉轨道误差(CTE)在评估稳定性方面起着关键作用。CTE测量车辆与其期望轨迹或路径的横向偏差。最小化CTE对于保持有效的车道保持和轨迹跟踪性能至关重要,可确保车辆在车道内保持对齐或准确遵守指定路径。

图2.5:交叉跟踪误差

交叉轨迹误差(CTE)表示为eCTE,它量化了车辆实际位置与其期望轨迹或路径之间的横向偏差。从数学上讲,交叉跟踪误差公式可以表示为:

其中;

• eCTE是交叉跟踪误差。

• yactual是车辆的实际横向位置。

• ydesired是沿计划轨迹或路径的理想横向位置。

• d是车辆位置和所需轨迹之间的垂直距离。

• ψ理想值是车辆沿计划轨迹的理想偏航角(航向角)。

• ψactual是车辆的实际横摆角(航向角)。

总之,车辆动力学领域包括控制车辆运动和行为的各种现象和原理。对这些动态的深入了解,再加上对其基本方程的了解,使工程师能够开发自动驾驶汽车的控制系统,不仅提高了效率,还提高了道路上的性能和安全标准。

2.2控制动力学

控制理论是研究动力系统行为的工程和数学领域。动力系统是根据一组规则或方程随时间演化的系统。这些系统可以使用数学模型来描述,例如微分方程或差分方程。控制理论的主要目标是设计控制器,操纵系统的输入以调节其输出。

2.2.1自动驾驶汽车的控制理论

与其他领域一样,控制理论在自动驾驶汽车的开发和运营中起着至关重要的作用,是其功能和安全性的重要组成部分。在自动驾驶汽车的背景下,控制理论对于协调各个子系统、传感器、执行器和环境因素之间的复杂交互以确保安全高效运行是不可或缺的。

自动驾驶汽车(也称为自动驾驶汽车)在很大程度上依赖于控制理论来自主导航复杂和动态的环境。这些车辆必须感知周围环境,解释感官数据,规划最佳轨迹,并实时执行控制动作,以安全地将乘客从一个位置运送到另一个位置。控制理论为实现这些目标提供了必要的数学基础和算法。

例如,在自动驾驶汽车导航中,控制理论被用来设计控制器,根据传感器反馈和高级命令调节转向、加速和制动输入。这些控制器必须考虑车辆动态、路况、交通模式和避障等因素,以确保平稳安全运行。

此外,控制理论有助于在自动驾驶汽车系统中集成各种控制算法和决策过程。这包括对不可预见事件做出即时反应的反应性控制策略,以及用于长期规划和轨迹优化的最佳控制技术。

通过利用控制理论原理,自动驾驶汽车可以适应各种驾驶场景,最大限度地降低能耗,优化乘客舒适度,并提高整体性能和安全性。

2.2.2自动驾驶汽车的反应控制

在自动驾驶汽车的背景下,反应式控制是指一种控制策略,它能够对即时的感官输入做出实时响应,而无需明确参考预定义的全局计划。反应式控制算法不依赖于复杂的环境预测模型,而是仅根据车辆当前的传感器读数和局部感知做出决策。这种方法使自动驾驶汽车能够快速应对不断变化的道路状况、动态障碍和意外事件,而无需进行广泛的规划或审议。

图2.6:无功控制示例

在自动驾驶汽车中,反应式控制在驾驶的各个方面都起着至关重要的作用,包括避障、车道保持、自适应巡航控制和碰撞缓解。通过持续监测激光雷达、雷达和摄像头等传感器数据,反应式控制算法可以调整车辆轨迹、速度和行为,以确保在复杂环境中安全高效地导航。

2.2.3比例积分微分(PID)控制

PID控制是各种工程应用中使用最广泛的反馈控制算法之一,因为它在调节系统行为方面简单有效。PID控制器根据三个项计算控制信号:比例、积分和微分,每个项都有助于整体控制动作。

比例(P)期限

PID控制器中的比例项产生与期望设定点和实际输出之间的当前误差成比例的控制信号。从数学上讲,它表示为:

其中;

• P(t)是时间t时控制信号的比例项。

• Kp是比例增益。

• e(t)是时间t的误差,计算为期望设定点和实际输出之间的差值。

比例项对误差信号的变化提供即时响应,确保系统快速接近所需的设定点。然而,它本身可能会导致稳态误差,即系统稳定在非零误差值。

积分(一)项

积分项解释了过去误差随时间的累积和,旨在消除稳态误差。它随着时间的推移对误差信号进行积分,并应用控制动作来减少累积误差。从数学上讲,积分项由下式给出:

其中;

• I(t)是时间t时控制信号的积分项。

• Ki是积分增益。

• e(τ)是时间τ时的误差。

• 积分在0到t的区间内进行评估。

随着时间的推移,积分项对于持续误差变得越来越重要,有效地将系统推向所需的设定点。然而,如果没有正确调整,它也会引入不稳定性,导致过冲或振荡。

衍生(D)术语

导数项通过测量误差信号的变化率来预测其未来趋势。它根据变化率抑制控制动作,从而提高系统稳定性并减少超调。从数学上讲,导数项表示为:

其中:• D(t)是时间t处控制信号的导数项,

• Kd是导数增益,

• de(t)/dt表示误差相对于时间的导数。

导数项有助于平滑误差信号的快速变化,从而增强系统的瞬态响应,同时最大限度地减少过冲和振荡。

PID控制信号

PID控制器产生的总控制信号u(t)是比例、积分和微分项的总和:

调整PID控制器涉及调整比例、积分和微分增益(Kp、Ki和Kd),以实现所需的系统性能,如稳定性、响应性和最小稳态误差。适当的调谐对于优化控制器在各种操作条件和干扰下的性能至关重要。

PID控制在需要精确控制的系统中得到了广泛的应用,如温度调节、电机速度控制、机器人、过程控制和汽车控制系统。它的通用性、简单性和有效性使其成为控制工程中的基本工具。

2.2.4最优控制

最优控制是控制理论的一个分支,专注于寻找优化特定性能标准的控制输入。与直接响应当前感官输入的反应性控制策略不同,最优控制算法考虑未来状态和系统动态,以确定最合适的控制动作。通过制定和解决优化问题,最优控制旨在在满足系统约束的同时最小化或最大化定义的目标函数。

图2.7:最优控制示例

在自动驾驶汽车的背景下,最优控制在轨迹规划、路径优化和能量管理中起着至关重要的作用。通过在有限或无限的时间范围内优化控制输入,最优控制算法可以提高车辆效率,降低油耗,提高安全性。

2.2.5模型预测控制(MPC)

模型预测控制(MPC)是一种先进的控制策略,它利用系统的动态模型来预测未来的行为,并在有限的时间范围内优化控制动作。与实时计算控制输入的传统控制方法不同,MPC在每个时间步长解决优化问题,以确定在满足系统约束的同时最小化成本函数的最佳控制输入序列。

在自动驾驶汽车的背景下,MPC通过考虑车辆的动态、环境条件和任务目标来做出积极的决策。通过结合车辆运动和外部因素(如交通和道路状况)的预测模型,MPC可以生成最佳控制命令,预测未来事件并相应地优化车辆行为。

非线性模型预测控制

非线性模型预测控制(NMPC)将MPC的原理扩展到具有非线性动力学和约束的系统。与依赖于系统线性化模型的线性MPC不同,NMPC直接处理系统动力学和约束中的非线性,从而可以进行更准确的预测和控制动作。

NMPC制定了一个具有非线性目标函数和约束的优化问题,通常使用基于梯度的方法或数值优化算法等非线性优化技术来解决。通过考虑系统的完全非线性动力学,与线性MPC相比,NMPC可以实现更优的性能和鲁棒性,特别是在自动驾驶汽车等高度非线性系统中。

NMPC在各种自动驾驶汽车任务中都有应用,包括轨迹跟踪、避障和车辆稳定。通过利用精确的非线性模型和复杂的优化算法,NMPC能够在复杂和动态的环境中对自动驾驶汽车进行精确和敏捷的控制。

公式和解释

最优控制问题的一般表述涉及在系统动力学和约束条件下最小化或最大化目标函数J。

从数学上讲,它可以表示为:

从属于:

其中:

• x是状态向量,

• u是控制输入向量,

• J是成本函数,

• f是系统动力学模型,

• umin和umax分别是控制输入的下限和上限。

对于模型预测控制(MPC),优化问题在滚动时域框架内的每个时间步求解。在满足约束的同时最小化成本函数的控制输入序列u∗计算如下:

从属于:

NMPC扩展了这一框架,直接处理非线性动力学和约束,允许在高度非线性系统中进行更准确的预测和控制动作。

这些优化问题通常使用数值优化技术来解决,如基于梯度的方法、非线性规划或凸优化算法,具体取决于系统动力学和约束的复杂性。

2.2.6控制算法

控制算法是用于在实践中实现控制策略的计算过程。这些算法基于传感器的反馈和期望的设定点计算控制信号,从而能够实时调整系统输入以实现期望的结果。有各种类型的控制算法,每种算法都适合不同类型的系统和控制目标。

图2.8:自动驾驶汽车流程图示例

自动驾驶汽车控制的一个关键挑战是,在复杂和动态的环境中导航时,需要平衡安全、舒适和效率等相互竞争的目标。控制算法必须对传感器测量、道路状况和其他道路使用者的行为中的不确定性具有鲁棒性。他们还应该能够适应快速变化的情况,并快速可靠地做出决策。

自动驾驶汽车中的控制算法通常采用反应性和预测性方法的组合。反应式控制策略能够对本地感官输入做出即时响应,使车辆能够对障碍物和意外事件做出快速反应。另一方面,预测控制技术使用车辆动力学和环境模型来预测未来状态并规划最佳轨迹。

模型预测控制(MPC)等先进控制算法正越来越多地部署在自动驾驶汽车中,以应对这些挑战。MPC考虑了车辆的动力学、环境约束和期望目标,以在有限的时间范围内优化控制动作。通过考虑未来的状态和系统约束,MPC能够实现更平稳、更高效的车辆运行,同时确保安全性和舒适性。

控制算法的发展步骤

控制算法通常是通过涉及几个关键步骤的系统过程开发的。最初,工程师分析控制系统的要求和目标,考虑系统动力学、性能标准和操作约束等因素。基于这些要求,他们设计了描述系统行为及其与环境相互作用的数学模型。

一旦建立了模型,工程师们就会着手设计实现所需系统行为的控制策略。这通常涉及选择适当的控制架构,如反馈或前馈控制,并选择最适合应用需求的控制算法。例如,在自动驾驶汽车的背景下,控制算法必须能够处理现实世界驾驶场景的复杂性,同时确保安全性和效率。

在选择候选算法后,工程师进行模拟和实验,以评估它们在各种条件下的性能。这种迭代过程使他们能够改进算法并调整参数,以优化系统性能。此外,工程师可能会采用基于模型的设计等技术,在实施之前,使用计算机辅助设计工具开发和验证控制算法。

一旦控制算法经过彻底测试和验证,它们就会在自动驾驶汽车控制系统的软件或硬件组件中实现。在集成过程中,工程师确保算法与其他车辆子系统(如感知、规划和执行)无缝交互,以实现协调有效的控制。

在整个开发过程中,工程师还必须考虑计算效率、实时性能和可扩展性等因素,以确保控制算法满足自动驾驶汽车平台的要求。

持续的测试、验证和改进对于确保控制算法在现实驾驶条件下可靠安全地运行至关重要。总体而言,自动驾驶汽车控制算法的开发需要多学科的方法,结合控制理论、机器人技术、计算机科学和汽车工程方面的专业知识。通过利用技术和研究的进步,工程师可以继续提高自动驾驶汽车的能力,为实现安全高效的自动驾驶交通铺平道路。

2.3运动规划基础

运动规划和算法是自主系统的基本组成部分,使它们能够在复杂的环境中导航,安全有效地达到预期目标。这些算法旨在通过考虑各种因素,如障碍物、动态约束和环境条件,为机器人或车辆生成轨迹或路径。

运动规划的主要目标之一是找到从起始配置到目标配置的可行路径,同时避免与环境中的障碍物碰撞。这些障碍物可以是静态的,如墙壁或障碍物,也可以是动态的,如移动的车辆或行人。运动规划算法必须考虑环境中的不确定性和干扰,以确保在现实世界场景中的鲁棒性和可靠性。

运动规划算法有几种类型,每种都有自己的优点和局限性。一些常用的类型包括:

1.基于采样的算法:这些算法,如概率路线图(PRM)和快速探索随机树(RRT),通过随机采样机器人的配置空间来构建路线图或树结构。然后,他们将这些样本连接起来,形成一个表示可行路径的图。基于采样的算法特别适用于高维配置空间和具有复杂障碍物的环境。

2.基于优化算法:基于优化的算法将运动规划表述为一个优化问题,其目标是使受约束的成本函数最小化。示例包括轨迹优化和最优控制技术。这些算法通常用于生成平滑且动态可行的轨迹,特别是在连续和时变环境中。

3.网格算法:基于网格的算法将环境离散化为网格或格子结构,并使用Dijkstra算法或a*搜索等技术搜索无碰撞路径。虽然这些算法在计算上高效且易于实现,但它们可能会在高维配置空间中遭受维数灾难。

4.混合方法:混合方法结合了不同类型的运动规划算法的元素,以利用它们各自的优势。例如,混合算法可以使用基于采样的技术来探索配置空间,使用基于优化的技术来细化生成的路径。

实施运动规划算法和控制系统涉及几个步骤,包括环境的表示、适当算法的选择以及与感知和控制系统的集成。工程师使用各种数据结构和算法来表示环境,如占用网格、体素网格或点云。然后,他们根据计算复杂性、实时性能和环境特征等因素选择合适的运动规划算法。

一旦选定,所选算法就会在软件或嵌入式系统中实现,通常使用C++或Python等编程语言。工程师们进行了广泛的测试和验证,以确保运动规划系统在各种情况下可靠安全地运行,考虑到传感器噪声、定位误差和环境中的不确定性等因素。

总体而言,运动规划算法和控制系统在机器人和自主系统的自主性和智能化中起着至关重要的作用,使它们能够有效地导航、与周围环境交互,并在各个领域保持安全高效的运行。

2.3.1自适应巡航控制(ACC)

自适应巡航控制(ACC)是一种复杂的巡航控制形式,可自动调整车辆速度,以保持与前方车辆的安全跟车距离。该系统在提高驾驶舒适性和安全性方面至关重要,特别是在不同的交通条件下。ACC利用控制理论原理,根据实时传感器数据动态调整车辆速度。

图2.9:自适应巡航控制

ACC原则

ACC系统依靠雷达、激光雷达和摄像头等传感器来检测前方车辆的距离和相对速度。ACC的主要目标是在确保平稳加速和减速的同时保持预定的安全距离。该系统持续监测交通状况,并调整油门和刹车,以保持所需的间隙。

ACC控制策略

自适应巡航控制(ACC)的控制策略大致可分为三种模式:速度控制、距离控制和自主紧急制动。

• 速度控制(SC):当ACC范围内没有前方车辆时,系统的功能类似于传统的巡航控制,保持设定速度。

• 距离控制(DC):当检测到前方有车辆时,ACC会调整速度以保持安全的跟车距离,该距离通常由驾驶员设置或由系统预定义。

自适应巡航控制系统的模式选择如下:

其中:

• mode表示自适应巡航控制系统的当前模式。

• d是与前方车辆的当前距离。

• dtar是与前方车辆的目标距离。

• 此外,atar,VC是车辆控制模式(VC)下的目标加速度。

• atar,SC是速度控制模式(SC)下的目标加速度。

出于安全原因,紧急制动的布置是ACC的一个重要方面:

• 紧急制动:如果行人穿过主车和领头车之间,控制算法必须安全反应并制动以避免碰撞。

安全最小减速距离由下式给出:

其中:

• xdect,min是最小减速距离。

• v0是初始速度。

• ah,min是最小减速度(为了安全起见,最大减速度应为2 m/s2)。

• xsafe是安全距离。

ACC中的控制算法

ACC中使用的控制算法通常涉及比例积分微分(PID)控制或模型预测控制(MPC),具体取决于系统的复杂性和所需的性能。这些算法有助于调节车辆的速度并保持安全距离。

ACC中的PID控制

在ACC中,PID控制用于根据与前方车辆的期望距离和实际距离之间的误差来调整车辆的速度。控制信号u(t)计算如下:

其中:

• e(t)=ddesired-dactual是时间t的距离误差。

• ddesired是理想的跟车距离。

• dactual是与前方车辆的实际距离。

• Kp、Ki和Kd分别是比例增益、积分增益和微分增益。

比例项Kpe(t)提供对当前误差的即时响应。积分项

解决了过去累积的误差,以消除稳态误差。导数项

通过考虑误差的变化率来预测未来的误差。

ACC中的模型预测控制(MPC)

MPC是ACC系统中使用的一种更先进的控制策略,用于处理复杂和动态的驾驶环境。MPC预测未来的车辆状态,并在有限的时间范围内优化控制输入。

ACC的MPC问题可以表述为:

其中:

• x(k)是时间步长k处的状态向量。

• u(k)是时间步长k处的控制输入向量。

• J(x(k),u(k))是要最小化的成本函数,通常包括

速度误差、距离误差和控制力的术语。

• f(x(k),u(k))表示系统动力学。

• umin和umax分别是控制输入的下限和上限。

• dmin和dmax是与前方车辆的最小和最大允许距离,确保安全和舒适。

MPC在每个时间步迭代地解决这个优化问题,使用当前状态和预测的未来状态来确定控制输入的最佳顺序。这种方法允许ACC系统主动调整车辆速度,考虑交通状况和车辆动态的变化。

公式和解释

MPC中的目标函数J(x,u)旨在平衡多个标准,如最小化速度偏差、保持安全距离和减少控制工作量。典型的成本函数可能是:

其中:

• Qd和Qv分别是距离和速度误差的权重。

• R是控制力的权重。

• d(k)和v(k)分别是到前方车辆的距离和时间步长k处的车辆速度。

• vdesired是所需的速度。

通过解决这个优化问题,MPC提供控制输入,确保车辆保持安全的跟车距离,适应交通状况,并实现平稳高效的驾驶行为。

总之,自适应巡航控制(ACC)是自动驾驶汽车的一个关键特性,它利用PID和MPC等先进控制算法来保持安全舒适的驾驶条件。这些算法能够实时调整车辆的速度,确保在各种驾驶场景中达到最佳性能。

2.4 ASIL和HARA标准

汽车安全完整性等级(ASIL)和危害分析与风险评估(HARA)是汽车安全工程中的基本概念,特别是在开发高级驾驶员辅助系统(ADAS)和自动驾驶汽车时。这些标准为识别、分析和减轻与汽车系统相关的潜在危害提供了一个系统框架,从而确保道路上车辆的安全性和可靠性。

ASIL标准

ISO 26262标准定义的汽车安全完整性等级(ASIL)分类是评估和管理汽车系统安全性的关键框架。ASIL的四个级别——A、B、C和D——根据其对车辆乘客和其他道路使用者的潜在风险对安全功能进行分类。

ASIL A代表了分类中最低的风险水平,表示对乘员和其他道路使用者造成严重伤害或伤害的风险相对较低的安全功能。这些功能通常涉及基本的车辆控制和操作,如转向信号激活或内部照明。ASIL B表示中等风险水平,安全功能可能涉及更关键的车辆系统,如果发生故障,可能会导致轻伤或事故。ASIL B功能的示例包括自适应巡航控制和车道偏离警告系统。

ASIL C表示更高的风险水平,表示安全功能,如果受到损害,可能会导致重大伤亡。这些功能通常涉及先进的驾驶员辅助系统(ADAS),如自动紧急制动或盲点检测。

ASIL D代表最高级别的风险,需要最严格的安全措施。被归类为ASIL D的安全功能是指,如果它们发生故障或失灵,可能会导致灾难性后果,包括多人死亡或广泛的财产损失。ASIL D功能的示例包括自动驾驶系统和车对车通信系统。

HARA标准

危害分析和风险评估(HARA)是一个系统化的过程,用于识别和评估与汽车系统运行相关的潜在危害。它涉及分析各种系统组件、功能和故障模式,以识别潜在危害,评估其严重程度,并估计相关风险。HARA旨在确保在汽车系统的整个开发生命周期中定义并实现安全目标。

实施

ASIL和HARA标准的实施涉及几个关键步骤。首先,对所考虑的汽车系统进行深入分析,以识别潜在的危害和故障模式。该分析可能涉及故障模式和影响分析(FMEA)和故障树分析(FTA)等技术,以系统地识别和评估潜在风险。确定特定安全功能的ASIL涉及评估三个HARA关键因素:

1.潜在伤害的严重程度:该因素考虑了安全功能失效时可能发生的潜在伤害或伤害。它评估在发生故障时对车辆乘客、行人和其他道路使用者的伤害严重程度。

图2.10:ISO开发周期

2.暴露于危害的概率:该因素评估安全功能在正常运行期间遇到危害情况的可能性。它考虑了驾驶条件、交通密度和环境因素等因素,这些因素可能会增加暴露于潜在危害的可能性。

3.驾驶员或系统的可控性:该因素考察驾驶员或自动化系统在检测到危害后减轻或控制危害的能力。它评估安全措施的有效性,如警告信号、紧急制动或车辆操纵,以防止或尽量减少危害事件的后果。通过考虑这些因素,汽车研究人员可以为安全功能分配适当的ASIL级别,并实施必要的安全措施来降低风险,确保道路上车辆的整体安全性和可靠性。

在整个开发过程中,进行严格的验证和确认活动,以确保安全目标得到有效实施和验证。这可能涉及在各种操作条件下测试系统,模拟潜在的故障场景,并评估系统对安全关键事件的响应。

总体而言,ASIL和HARA标准是汽车安全工程过程的重要组成部分,为识别、分析和减轻潜在危害提供了一种系统的方法,以确保道路上车辆的安全性和可靠性。

03. 架构和方法

在本节中,我们将从研究的理论方面过渡到实际实施,详细介绍研究方法和架构。我们的方法基于在CARLA模拟器中创建和测试危害分析和风险评估(HARA)场景,使用Python编程在Ubuntu Linux操作系统上执行。我们在整个开发过程中强调干净的代码实践,使用Pylint严格评估代码质量,以确保遵守Python PEP8标准。

该方法包括几个关键组成部分。我们从CARLA仿真环境的设置和配置开始,该环境经过了细致的设计,以明确初始条件和系统要求。在此之后,我们深入研究了HARA场景的设计和实施,这些场景是我们风险评估和危害分析过程的基础。

然后在这些场景中应用各种控制和运动规划算法,记录过程的每个步骤,以确保全面了解实验设置、数据收集方法和算法评估所使用的标准。

我们的方法是迭代和结构化的,遵循敏捷方法论。这允许对已实施的解决方案进行持续改进和细化,确保每次迭代都能使我们更接近实现我们的研究目标。

敏捷框架促进了适应性规划、渐进式开发、早期交付和持续改进,鼓励对变化做出灵活的反应。除了方法论,我们还概述了支撑我们研究框架的架构(如图3.1所示)。架构部分详细介绍了整体系统设计,包括我们实验中使用的硬件和软件组件。为了解决兼容性问题,我们在Conda环境中运行应用程序,确保一致和隔离的设置,避免不同软件依赖关系之间的冲突。CARLA环境和客户端从shell脚本调用,简化了设置过程,并确保所有必要的组件都正确初始化。

我们讨论了CARLA模拟器与其他工具和库的集成、Ubuntu Linux操作系统的配置以及使用Python进行脚本编写和自动化。架构设计确保了一个强大且可扩展的平台,能够支持复杂的仿真场景和广泛的数据分析。

此外,我们对软件架构进行了深入的研究,突出了模块化设计,便于扩展和维护。每个模块都设计用于执行特定的任务,从数据采集和预处理到算法执行和结果分析。这些模块之间的互连被明确定义,确保了平稳的数据流和高效的处理。

通过将详细的方法论与定义良好的架构相结合,我们为我们的研究奠定了坚实的基础。这种综合方法不仅有助于在CARLA模拟器中有效实施HARA场景,而且确保我们的系统具有可扩展性、可维护性,能够适应未来的研究需求。本节介绍了方法和架构的各个方面,为复制和构建我们的工作提供了清晰的路线图。

3.0.1使用Conda进行环境管理

Conda是一个多功能的软件包和环境管理工具,可简化各种环境中软件包和依赖关系的安装、组织和利用。由于CARLA与3.7以上Python版本的兼容性限制,它对于管理此项目中的Python环境和依赖关系特别有用。

创建和管理环境

Conda的主要优势在于其创建隔离环境的能力。此功能允许创建具有不同包版本的多个Python环境,从而能够同时执行具有独特要求的不同项目,而不会遇到冲突。

图3.1:项目系统架构

3.1.1 Python

Python的多功能性和广泛的库支持使其成为实现和测试控制算法的理想选择。以下小节详细介绍了用于维护代码质量和管理开发环境的具体工具和库。

3.1.2代码抓取和格式化

为了保持高代码质量、标准化和可读性,开发工作流程中集成了几个工具。

PEP8合规性

PEP8是Python增强提案,概述了Python代码风格的约定。遵循PEP8确保代码的一致性和可读性,这对于协同开发和长期维护至关重要。

在本文中,所有Python脚本都遵循PEP8准则,提高了整体代码质量。

Pylint

Pylint是一个静态代码分析工具,用于执行编码标准和检测编程错误。通过将Pylint集成到开发过程中,可以不断分析代码中的潜在问题,如编码标准违规、潜在错误和其他错误。这种主动的方法有助于保持高标准的代码质量,防止常见的编程错误,确保在这项工作中开发的控制算法的鲁棒性。

Black

Black是Python的一个不妥协的代码格式化器,可以自动格式化代码以符合PEP8标准。使用Black增强了代码的可读性和一致性,使团队成员更容易理解和修改代码。通过自动化格式化过程,Black节省了时间并降低了格式化相关错误的可能性,从而将重点放在控制算法的开发和改进上。

绘图

为了可视化和比较PID和MPC控制器的性能,使用了绘图功能。这些函数生成描述关键性能指标(如航向和交叉航迹误差)的图形。可视化在本文中至关重要,因为它们提供了一种直观的方法来评估不同控制策略的有效性,促进了对各种方法的分析和比较。

3.2 CARLA模拟器

CARLA是一个开源的、逼真的模拟器,旨在促进自动驾驶算法的训练、验证和测试。CARLA使用C++和虚幻引擎构建,提供了一个丰富的模拟环境,具有广泛的功能,包括对参与者的全面控制、环境条件调整、多功能传感器套件、地图生成功能、灵活的API和基于服务器-客户端的通信。

核心模拟,包括所有控制逻辑、渲染、物理和参与者属性,由CARLA模拟器处理。此外,CARLA提供了一个Python API模块,允许用户与模拟器接口。在该体系结构中,模拟器充当服务器,而客户端与服务器的通信则通过Python API进行管理。通过Python API,用户可以访问模拟的大部分方面。Python脚本允许从附着在自我车辆上的CARLA传感器中检索原始数据,处理这些数据,计算控制参数,并将油门、刹车和转向命令传输回模拟器。

图3.2:CARLA模拟器

客户端Python脚本通常分为两个主要部分:

1.世界和客户端:CARLA中的客户端是用户运行以请求信息或在模拟中进行更改的关键模块。每个客户端都使用指定的IP地址和端口号进行操作,通过终端与服务器通信。多个客户端可以同时运行,但对这些客户端的高级管理需要对CARLA和同步技术有深入的了解。

要设置客户端,您需要启动它与CARLA服务器通信。此设置允许客户端与服务器交互,无论服务器是在本地运行还是在其他网络机器上运行。客户端加载新地图、记录模拟和初始化交通管理器的能力展示了其对模拟环境的多功能性和控制能力。

客户端-服务器链接至关重要,因为它实现了对仿真世界的动态和灵活控制。通过客户端,用户可以加载不同的地图,调整模拟设置,并管理环境中的各种参与者。这种交互对于自动驾驶算法的实时测试和验证至关重要,因为它允许立即进行调整和数据检索。

在CARLA中,世界是一个代表整个模拟的对象。它作为一个抽象层,包含生成参与者、改变天气条件、检索模拟的当前状态等所需的主要方法。每个模拟只有一个世界,每当地图发生变化时,它都会被重新创建。

客户端检索世界对象,然后可用于访问和操纵模拟中的各种元素。这包括调整天气、控制车辆、管理交通信号灯、与建筑物互动以及在地图上导航。

通过连接客户端和服务器,用户可以有效地管理模拟的环境和参与者,从而为测试自动驾驶系统创建逼真和多样化的场景。这种交互是迭代开发和验证过程的基础,确保算法在各种条件下可靠运行。

2.同步和异步模式:CARLA在客户端-服务器架构上运行,服务器运行模拟,客户端检索信息并请求模拟中的更改。本节介绍客户端和服务器之间的通信动态,重点介绍操作模式及其对仿真控制和数据完整性的影响。

默认情况下,CARLA在异步模式下运行,服务器尽可能快地运行,动态处理客户端请求。异步模式适用于实验设置或初始模拟,用户可以自由导航地图并放置演员。然而,在生成训练数据或在模拟中部署代理时,建议使用同步模式以获得更好的控制和可预测性。

在同步模式下,运行Python代码的客户端指示服务器何时更新。这种模式对于保持不同元件(如传感器)之间的同步尤为重要,确保所有传感器使用来自同一模拟时刻的数据。如果客户端应用程序运行缓慢,服务器没有等待,则可能会发生信息溢出,导致数据丢失或混合。

同步模式通过让服务器等待客户端的滴答声来帮助防止这种情况,确保客户端能够有效地管理传入的数据。在多客户端架构中,只有一个客户端应该控制滴答声。服务器将收到的每个滴答声视为来自同一客户端,多个客户端滴答声可能会在服务器和客户端之间造成不一致。

在同步和异步模式之间切换涉及更改模拟设置中的布尔状态。启用同步模式可确保服务器等待客户端滴答声,从而更好地控制模拟。但是,如果启用了同步模式并且正在运行流量管理器,则流量管理器也必须设置为同步模式以保持一致性。

使用同步模式对于需要各种传感器之间同步的应用尤其重要。例如,基于GPU的传感器(如相机)通常会产生轻微延迟的数据,因此同步对于确保数据准确性至关重要。CARLA中的世界对象提供了让客户端等待服务器滴答声或在收到滴答声后执行特定操作的方法,确保所有模拟元素保持协调。

通过保持客户端-服务器通信的同步,用户可以产生更可靠和一致的仿真结果,这对于开发和测试自动驾驶算法至关重要。

除了这两个方面,CARLA的渲染能力对其仿真环境至关重要,有助于虚拟场景的真实感和沉浸感。CARLA利用虚幻引擎的强大功能,提供了一系列渲染选项,从史诗级质量到低质量不等。渲染质量在准确模拟真实世界环境中起着至关重要的作用。高质量的图形增强了模拟的保真度,允许更详细和视觉丰富的场景。这种真实感水平对于感知训练等任务至关重要,在这些任务中,需要根据视觉线索准确识别物体。

图3.3:CARLA模拟器的渲染质量低

但是,渲染质量也可以调整以满足特定要求。较低质量的渲染设置可以减少计算需求,从而可以在功能较弱的硬件上或以更高的速度运行模拟。这种灵活性允许用户根据其计算资源和性能需求优化其模拟设置。

因此,与其他模拟器相比,CARLA作为一个仿真平台,提供了无与伦比的自由度和生成高度逼真场景的能力。其先进的功能和灵活性使其成为我们研究中实施HARA场景的理想选择。通过利用CARLA,我们可以创建各种详细的驾驶环境,这些环境可以密切模仿现实世界的条件,从而能够更准确、更稳健地评估各种控制算法的安全性能。这种能力对我们的研究至关重要,因为它确保了测试的场景不仅变化多样,而且栩栩如生,为不同驾驶条件下PID和MPC算法的有效性提供了有意义的见解。因此,CARLA的综合仿真环境有助于我们通过细致的HARA分析来增强自动驾驶汽车的安全协议。

最后,在我们的研究中,我们将使用同步模式来确保每次迭代的结果一致,因为它也适用于运行CARLA模拟的计算机。由于计算机的图形功能,渲染将设置为低。

图3.4:CARLA模拟器的史诗级渲染质量

3.2.1客户与Carla环境本地主机的高效交互沟通

该项目采用模块化设计理念,将核心控制器逻辑与仿真环境(如CARLA)分离。这种方法有几个优点:

• 清晰的关注点分离:模块化设计通过将控制器逻辑与模拟器的复杂性隔离开来,促进了更清晰的代码。这有助于控制器的独立开发和测试,降低了意外后果的风险。增强的可重用性:隔离的控制器模块可以在未来与不同的模拟器甚至真实硬件重用,从而增强项目的灵活性。

为了进一步增强这些优势并促进协作,该项目利用了Git,一种版本控制系统,如本文其他部分所述。CARLA是所选的仿真平台,在开发和测试期间利用本地主机通信实现控制器和仿真环境之间的交互。这种通信促进了几个功能:

• 传感器数据可视化:与CARLA在同一台机器上运行的单独应用程序充当客户端。CARLA模拟器充当服务器,从模拟环境中连续生成传感器数据(例如,相机图像、LiDAR点云)。客户端连接到本地主机上的CARLA服务器,并实时接收传感器数据流,从而可以可视化和分析车辆对环境的感知。根据数据格式和实时要求,可以采用TCP或UDP等通信协议。

• 模拟器的外部控制:在本地主机上运行的外部控制应用程序可以通过本地主机向CARLA服务器发送控制命令(例如,转向命令、加速/减速)。服务器解释这些命令并相应地修改模拟车辆的行为。

此设置便于开发和测试控制模拟的外部应用程序。根据所需的控制级别和实时响应性,TCP或自定义二进制协议可能是合适的选择。

本地主机通信为开发和测试提供了几个好处:

• 简化的开发和测试:它允许快速开发和测试与CARLA数据交互或控制模拟的应用程序。

• 快速数据传输:与使用外部网络相比,同一台机器内的通信可确保更快的数据传输。安全环境:数据交换仍然局限于本地计算机,提供了一个安全的测试环境。

然而,也存在局限性:

• 可访问性有限:客户端应用程序只能访问在同一台机器上运行的CARLA服务器,限制了不同设备之间的协作。

• 部署注意事项:本地主机通信主要用于开发和测试。现实世界的部署可能需要通过网络与外部系统进行通信,需要调整通信设置。

总之,该项目的模块化设计和利用本地主机与CARLA的通信促进了高效的开发、测试和协作。模块化设计促进了干净、可维护的代码,而本地主机通信允许与仿真环境快速交互。这些策略为结构良好、适应性强的自动驾驶汽车控制系统铺平了道路。

3.3 Linux Ubuntu操作系统和Shell脚本

在这项工作中,Linux Ubuntu操作系统因其对开发环境的强大支持和广泛的库支持而被使用。Ubuntu提供了一个稳定安全的平台,使其成为高效运行模拟和管理软件依赖关系的理想选择。

Ubuntu特别适合CARLA模拟环境,因为它提供了增强的兼容性和性能。Ubuntu的开源特性提供了更多的自由来定制和优化系统,以满足特定的模拟需求,确保无缝高效的工作流程。

为了简化工作流程并提高生产率,使用了各种shell命令。Shell命令为自动化任务、管理文件和执行脚本提供了强大的功能,所有这些对于处理复杂的仿真环境和数据处理任务都至关重要。

此外,还创建了一个界面,以方便使用更短、更直观的命令。此接口充当常用shell命令的包装器,可以更快地执行并减少错误的可能性。通过简化命令语法,该接口显著提高了效率和可访问性,特别是对于重复性任务。这种方法不仅优化了与Linux操作系统的交互,而且确保了开发过程保持平稳和用户友好,从而增强了整体项目管理和执行。

项目Shell命令工具包

如前所述,CARLA模拟器可能对用户有点不友好,需要大量的shell命令来执行甚至是简单的任务。当编写长脚本或反复测试功能和部分代码段时,这变得特别乏味。为了解决这个问题,开发了一个名为luxad_toolkit.sh的项目工具包。

luxad_toolkit.sh脚本简化并自动化了运行CARLA模拟所需的许多重复和复杂的shell命令。该工具包通过减少手动命令输入量来提高生产率,从而最大限度地减少错误并节省宝贵的开发时间。要激活该工具包,每次使用时都必须将其引入Linux系统。这是通过以下命令实现的:

通过获取此脚本,Linux操作系统将脚本中的命令视为直接键入终端。这使得工具包的功能立即可用,大大简化了工作流程。

使用luxad_toolkit.sh的主要好处包括:

• 效率:自动化重复命令,减少每次模拟运行所需的时间和精力。

• 一致性:确保每次使用相同的命令,降低人为错误的可能性。

• 便利性:简化运行和测试CARLA模拟的过程,使其更加用户友好和易于访问。

总体而言,luxad_toolkit.sh脚本是对开发环境的宝贵补充,提高了CARLA模拟过程的可用性和效率。

luxad_toolkit.sh的实现如下:

导出命令对于设置路径和版本控制问题至关重要。

它们确保CARLA模拟器目录的有效性和正确的Python版本。当执行源代码luxad_toolkit.sh命令时,脚本首先验证Python版本,该版本应该是3.7或更早的版本。验证脚本如下:

在这个脚本中,变量是:

• python_version:检查正在使用的python版本。

• major_version:提取主版本号。

• minor_version:提取次要版本号。

• 然后将这些变量与所需的3.7版本进行比较。如果版本

如果匹配,则可以激活该工具包。

如果版本正确,脚本将按如下方式激活工具包:

如前所述,CARLA因.egg文件而出现问题。export命令旨在将此目录设置为CARLA的PYTHON_PATH。

如前所述,CARLA使用服务器-客户端通信模型进行操作。

在服务器命令中:

• CARLA_BINARIES:这是根目录。

• CarlaUE4通过以下方式激活:

- prefernvidia:表示首选Nvidia GPU。

- 质量级别=低:将渲染质量设置为低以确保性能。

- 命令的最后一部分确保服务器进程在后台作为子进程运行。

这些命令可确保服务器端使用指定的选项正确运行。执行这些命令后,服务器屏幕将打开,如图3.5所示。

图3.5:CARLA(UE4)服务器接口

客户端部分需要被激活,它负责通过本地通信发送命令。要激活客户端应用程序,函数luxad_run_client包括:

• 首先,该函数检查是否提供了参数。

• 如果在luxad_run_client之后没有提供其他命令,它会发送消息:“用法:luxad_un_client<controller_type>”,表示需要控制器类型。

• 通过指示PID,我们运行PID控制器。

• 或者,使用MPC命令,我们运行一个模型预测控制器。

这些命令使客户端能够正常运行,确保与服务器的有效通信。

CARLA模拟器API允许创建城市交通场景。生成流量的命令如下:

此命令意味着:

• –asynch:以异步模式运行流量API,因为在CARLA中,一次只能有一个客户端以同步模式运行。

• -s 2:设置种子编号,以便每次CARLA运行时产生相同的场景。

• -n 40-w 0:指定将生产40辆车用于交通,道路上没有行人。

值和安排可能会根据所产生的场景而变化。因此,代码的版本控制对于跟踪不同的设置非常重要,这是通过luxad_version函数管理的。其中可以区分不同的场景和绘图类型。

3.3.1项目文件目录;模块和子模块

该项目采用模块化设计理念,将核心控制器逻辑与仿真环境(如CARLA)分离。这种方法有几个优点。它通过促进关注点的明确分离来促进更清晰的代码。

控制器模块的开发和测试独立于模拟器,降低了意外后果的风险。此外,隔离的控制器模块可以在未来与不同的模拟器甚至真实硬件重复使用,从而增强项目的灵活性。

为了进一步增强这些优势并促进协作,该项目利用了Git,一个版本控制系统。Git提供了几个关键功能:

• 跟踪更改:Git会仔细跟踪对代码库所做的所有修改,使开发人员能够在必要时恢复到以前的版本。这确保了开发和实验过程中的安全网。

• 分支和合并:Git便于创建分支,允许开发人员在不影响主代码库的情况下开发独立功能或修复错误。一旦满足,这些分支可以合并回主代码库,促进高效协作。

• 版本控制历史:Git保存了对代码库所做所有更改的完整历史记录。这段历史为项目的发展提供了宝贵的见解,对于调试或识别特定代码段的起源至关重要。

该项目的模块化设计转化为组织良好的Git存储库结构。控制器代码位于存储库中的一个单独目录中,可能命名为“控制器”。模拟器子模块(例如CARLA集成代码)可能位于控制器目录中的子目录中,甚至可能作为一个单独的Git子模块。这种结构反映了模块化设计,简化了代码管理。

将Git与模块化设计结合使用可以带来几个额外的好处:

• 协作:Git简化了开发人员之间的协作,使他们能够同时处理代码库的不同部分,同时保持同步的代码历史记录。

• 可重复性:使用Git,可以很容易地在任何时间点重新创建项目的状态,从而促进结果和调试工作的可重复性。

• 备份和灾难恢复:Git是一个强大的备份解决方案,可以恢复丢失或损坏的代码。

• 虽然采用模块化设计和Git可能会在设置和学习曲线方面引入一些初始开销,但可维护性、协作和代码组织方面的长期好处超过了这些开销。这种组合为结构良好、可维护且面向未来的自动驾驶汽车控制系统奠定了基础。

后续发布的文章“下部分”中,我们将阐述具体实施及评估,详细介绍开发过程、使用的软件工具和克服的挑战。请持续关注“猿力部落”公众号后续发布的该文的“下部分”。

免责声明:文中观点仅供分享交流,文章版权及解释权归原作者及发布单位所有,如涉及版权等问题,请您联系alpha.yuan@houwa-tech.com告知,我们会在第一时间做出处理。

相关推荐 

基于ISO 26262的ADAS功能安全分析与验证

车载网络的网络攻击与应对措施

AUTOSAR时序分析模型构建方法及案例

符合功能安全的电动助力转向系统设计与开发

基于ISO 26262的安全需求规范参考实例

汽车AI功能的概念性安全建模方法和安全论证

自动驾驶系统安全工程(四):安全架构模式

面向汽车安全的软件FMEA指南

车载信息娱乐系统的渗透测试

融合ROS2与AUTOSAR的自动驾驶系统架构

自动驾驶开发的统一安全框架

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-26 10:56:29 HTTP/2.0 GET : https://e.mffb.com.cn/a/546553.html
  2. 运行时间 : 0.112150s [ 吞吐率:8.92req/s ] 内存消耗:4,457.56kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a248eaf66a1183ed781ef3e7749c9528
  1. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/runtime/temp/600e51726691ba7063b44bb89d9aaaff.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000616s ] mysql:host=127.0.0.1;port=3306;dbname=e_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000743s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000275s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000325s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000534s ]
  6. SELECT * FROM `set` [ RunTime:0.000215s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000534s ]
  8. SELECT * FROM `article` WHERE `id` = 546553 LIMIT 1 [ RunTime:0.001036s ]
  9. UPDATE `article` SET `lasttime` = 1787712989 WHERE `id` = 546553 [ RunTime:0.015654s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000629s ]
  11. SELECT * FROM `article` WHERE `id` < 546553 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000557s ]
  12. SELECT * FROM `article` WHERE `id` > 546553 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.014560s ]
  13. SELECT * FROM `article` WHERE `id` < 546553 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006889s ]
  14. SELECT * FROM `article` WHERE `id` < 546553 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000703s ]
  15. SELECT * FROM `article` WHERE `id` < 546553 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002081s ]
0.113842s