自动驾驶车辆控制 最终项目作业 实现分析

自动驾驶车辆控制 最终项目作业 实现分析

本项目是多伦多大学在Coursera上提供的自动驾驶汽车入门课程的最终项目作业。“controller2d.py”文件包含一个控制器对象。我在 update_controls 方法中实现了控制器。[视频]

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析

自动驾驶汽车纵向和横向控制设计

在这个项目中,我用 Python 实现了一个控制器,并使用它在 Carla Simulator 中自动驾驶汽车绕轨道行驶。控制器的输出将是车辆油门、刹车和转向角指令。油门和刹车来自纵向速度控制,转向来自横向控制。

1.纵向控制

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析


对于纵向控制,我实现了一个 PID 控制器,该 PID 控制器将以所需的速度作为参考并输出油门和刹车。

PID 控制器由三个组件组成。首先,纯增益 Kp 根据速度误差缩放车辆加速度。这确保车辆在正确的方向上加速,其幅度与误差成正比。

其次,在积分项 KI 中,根据累积的过去误差设置输出。这可确保消除斜坡参考的稳态误差。

最后,微分项 KD 抑制了由积分项引起的过冲。

为了完成纵向控制,我们必须将PID控制器的加速度输出转换为油门和刹车指令。为简单起见,正输出将是油门,负输出将对应于刹车。

PID控制器

PID 控制器背后的基本思想是读取传感器,然后通过计算比例、积分和微分响应并将这三个分量相加以计算输出来计算所需的执行器输出。

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析

P - 比例部分

  • 比例部分最容易理解:比例部分的输出是增益与测量误差 e 的乘积。因此,比例增益或误差越大,比例部分的输出越大。将比例增益设置得太高会导致控制器反复超过设定值,从而导致振荡。
  • e = r – y e:误差,r:用户输入参考,y:实际测量输出
  • 比例部分 = Kp * e Kp:P 的输入增益 – 调节器(比例调节器)
# Proportional part
Proportional = kp * e_current

I - 整体部分

  • 将积分视为一个篮子,其中循环将所有测量的误差存储在 E 中。请记住,误差可以是正的也可以是负的,因此有时误差会填满篮子(当正误差添加到正误差或负误差添加到负时)有时它会清空篮子——就像正误差被添加到负误差,反之亦然。
  • 随着时间的推移收集所有这些错误(随着时间的推移采取积分)。
  • 积分部分 = Ki * E
    其中 E = E + e(current) * ∆t,回路将所有测量误差存储在 E 中
# integral part
self.vars.E = self.vars.E + e_current * delta_t 
integral = ki * self.vars.E

D - 衍生部分

  • 导数正在查看误差的变化率。误差变化越大,导数因子就越大。
  • Kd 必须小于 1。
  • 导数部分 = Kd * ((e(current) - e(previous)) / ∆t)
# derivative part
if delta_t == 0:
  derivate = 0
else:
  derivate = kd * ((e_current - self.vars.e_previous)/delta_t)

u - 系统输入信号(PID控制器输出信号)

u = Proportional + integral + derivate    # u : input signal

if u >= 0:
  throttle_output = u
  brake_output    = 0
elif u < 0:
  throttle_output = 0
  brake_output    = -u

pid 控制器输出图

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析

上升时间:达到参考值的90%所需的时间。

Th 过冲:输出超过此参考值的最大百分比。

稳定时间:稳定到参考值 5% 以内的时间。

稳态误差: te 输出与稳态参考值之间的误差。

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析

2. 横向控制

对于横向控制,我实现了 Stanley 控制器。Stanley 方法是斯坦福大学自动驾驶汽车在 DARPA 大挑战赛中使用的路径跟踪方法,Stanley。Stanley 方法是横向误差的非线性反馈函数,从前轴中心到最近的路径点测量。

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析
  • e:交叉跟踪误差
  • θ_c:车辆的航向(偏航)。
  • ψ + θ_c:路径的航向(路径偏航)。
  • ψ:航向错误。
  • δ:转向角。
  • v:当前前进速度(米每秒)。
  • x_c:当前 X 位置(米)
  • y_c:当前 Y 位置(米)

由此产生的转向控制律给出为

www.zeeklog.com  - 自动驾驶车辆控制 最终项目作业 实现分析


当 e 不为零时,第二项调整 δ 以使预期轨迹与距离前轴 kv(t) 单位的路径切线相交。

参考

https://github.com/ahmedmoawad124/Self-Driving-Vehicle-Control

Read more

使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序

使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序

手把手教你如何使用 Prometheus 和  监控 Spring Boot 应用程序的过程。 在本文中,我们将研究如何使用 Grafana 监控 Spring Boot 应用程序。我们将研究整个设置并创建一个简单的仪表板来查看一些指标。 部署在生产环境中的每个应用程序都需要某种监控来了解应用程序的执行情况。这将使您了解应用程序是否按方面执行,或者您是否需要采取一些措施以获得所需的性能水平。在现代世界中,这些数据称为应用程序性能指标 (APM)。现在已经有相当多的商业工具如Newrelic、Datadog APM等,都是提供这种能力的SAAS服务。 今天我们将研究两个开源工具,称为Grafana和Prometheus。Prometheus 以时间序列格式收集和存储指标数据,而 Grafana 使用 Prometheus 作为数据源在仪表板上可视化数据。 有了这个,让我们首先创建一个应用程序并使用 Grafana 对其进行监控。 创建一个 Spring Boot 应用程序 让我们访问https://start.spring.io并创建一个具有以下依赖项的简单应用程序。

By Ne0inhk
2022 年值得了解的基础设施即代码工具清单

2022 年值得了解的基础设施即代码工具清单

云计算的出现彻底改变了每个 IT 领域。不排除 IT 基础设施。管理员不得不手动配置资源并管理大型 Excel 表格中的数据的日子已经一去不复返了。在当今动态变化的网络需求下,人工维护 IT 基础设施的想法非常可怕。这就是基础设施即代码工具的用武之地。 简单地说,IaC 是关于使用代码的基础设施自动化。在 IaC 环境中,管理员编写和部署机器可读的配置文件,用于自动配置 IT 基础架构并将基础架构始终保持在所需状态。使用 IaC 配置文件,您可以自动部署网络、虚拟机、服务器、数据库等。 主要分享低代码、微服务、容器化、SAAS‬、系统架构方面的的‬内容‬‬,希望‬大家‬点赞‬,评论,关注‬。 对基础设施即代码工具的需求 最初,IT 管理员手动放置服务器,并在这些服务器上配置和部署应用程序。配置详细信息由网络团队手动存储和管理。这个过程是重复的和耗时的。此外,

By Ne0inhk
Spring经典的面试题,你值得拥有!!

Spring经典的面试题,你值得拥有!!

一、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。 Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。 Spring框架至今已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。 二、使用Spring框架能带来哪些好处? 下面列举了一些使用Spring框架带来的主要好处: 1、Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。 2、与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。 3、Spring并没有闭门造车,Spring利用了已有的技术比如ORM

By Ne0inhk
金三银四面试季,程序员常见的14个Java面试题,必须得收藏!!!

金三银四面试季,程序员常见的14个Java面试题,必须得收藏!!!

跳槽不算频繁,但参加过不少面试(电话面试、face to face面试),面过大/小公司、互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实、追本溯源、持续改进的习惯,特此将自己经历过、构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中。 1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Monitor对象实现 reentrantlock通过CAS、ASQ(AbstractQueuedSynchronizer)和locksupport(用于阻塞和解除阻塞)实现 synchronized依赖jvm内存模型保证包含共享变量的多线程内存可见性 reentrantlock通过ASQ的volatile state保证包含共享变量的多线程内存可见性 使用方式不同 synchronized可以修饰实例方法(锁住实例对象

By Ne0inhk