欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

OpenAI] Python:基于健身房赛车的自动驾驶项目 (1) | 前期知识介绍 | 项目环境准备 | 逐步动手实施

最编程 2024-04-29 16:03:54
...

网络异常,图片无法展示
|
猛戳!跟哥们一起玩蛇啊 ???? 《一起玩蛇》????

网络异常,图片无法展示
|

???? 写在前面: 本篇是关于多伦多大学自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上行驶的物理过程。由于内容比较多所以分多次更新,本篇是关于前置知识介绍,以及项目环境准备的。具体如下:

  • 自动驾驶的背景知识介绍。
  • 然后会讲解本项目可能所需的知识点,需要用到图像处理算法和基础车道线检测算法,这里的讲解并不会太细,读者如果对不熟悉可以在单独搜索,C站上也有不少介绍这些算法的博客。
  • 项目所需的环境安装教程(这个部分是我在博客审阅阶段临时增添的),因为该项目需要 Conda 和 gym 环境和一堆必不可少的软件包(少一个都跑不了)。我看了网上有不少朋友在做该项目时,在环境安装上踩了不少坑。所以为了方便需要做该项目的同学、对该项目感兴趣的朋友,我这里准备了环境安装的教程。

???? 多伦多大学自动驾驶专项课程:Motion Planning for Self-Driving Cars | Coursera

???? Gym Car Racing 文档:Car Racing - Gym Documentation

网络异常,图片无法展示
|
  本篇博客全站热榜排名:4


Ⅰ. 背景知识介绍

0x00 引入: 什么是自动驾驶?

" Autonomous(自动)+  driving(驾驶) "

网络异常,图片无法展示
|
 自动驾驶,即汽车自主认知周边环境并安全行驶的技术。

Self-driving car, autonomous vehicle, driver-less car, or robotic car……

0x01 自动驾驶的基本组件

  • 汽车(Car):实际移动的车辆,代理人应该控制它
  • 传感器(Sensors):探测周围环境的设备
  • 代理人(Agent):一个在给定的周围环境中安全地驱动 var 的物体

网络异常,图片无法展示
|

传感器(Sensors on self-driving cars):

  • 460 个激光雷达摄像机、RGB 摄像机

网络异常,图片无法展示
|

自动驾驶的目标(Goal of Autonomous Driving):

  • 在给定的情况下的安全驾驶
  • 根据给定的情况 (state) 安全驾驶汽车

网络异常,图片无法展示
|

映射函数:Sensor Input → Action

网络异常,图片无法展示
|

  • 模块化管线(modular Pipelines)
  • 端到端训练(End-to-End Learning)
  • 直接感知(Direct Perception)

0x02 模块化组件(Modular Pipeline)

网络异常,图片无法展示
|

每个模块连接下一个模块的输入:低级感知、场景解析、路径训练、车辆控制。

网络异常,图片无法展示
|

❓ 需要思考的问题:为遵循选定的路径,我们应将手柄转多少度?我们应该以什么速度前进?

网络异常,图片无法展示
|

Ⅱ. 前置知识

0x00 车道标记与车道检测(Lane marking & Lane detection)

  • 使用梯度图或边缘过滤的图像,我们可以通过阈值处理来检测车道标记。
  • 考虑在附近存在相反梯度的点。

网络异常,图片无法展示
|

0x01 边缘检测(Edge Detection)

  • 通过用边缘过滤器对图像进行卷积,得到两个方向的梯度图。
  • 这里也可以使用其他的边缘核进行边缘检测。  
    网络异常,图片无法展示
    |

网络异常,图片无法展示
|

边缘检测是图像处理的一种常见技术,用于检测图像中的边缘和边界。这对于自动驾驶系统来说是非常重要的,因为边缘检测可以帮助系统识别道路、车辆、行人等重要物体。

通常边缘检测是通过使用边缘过滤器对图像进行卷积来实现的,边缘过滤器是一种特殊的卷积核,其中包含了两个方向的梯度图,可以检测出图像中的垂直和水平边缘。比如图中显示的 Sobel 过滤器,就可以得到一张图像的

网络异常,图片无法展示
|
方向和
网络异常,图片无法展示
|
方向的梯度图,其中
网络异常,图片无法展示
|
方向的梯度图可以检测出图像中的垂直边缘,
网络异常,图片无法展示
|
方向的梯度图可以检测出图像中的水平边缘。

除了 Sobel 过滤器之外,还有许多其他的边缘核可以用于边缘检测。比如 Canny 边缘检测算法,这是一种非常流行的边缘检测算法,它可以有效地消除噪声并提供清晰的边缘检测结果。

Canny 边缘检测是由 John F. Canny 在 1986 年提出的一种边缘检测算法。

它是一种多步骤的边缘检测算法,包括以下几个步骤:

  • 图像高斯滤波:使用高斯滤波器对图像进行模糊处理,以减少噪声并使边缘更加明显。
  • 计算图像梯度:使用 Sobel 过滤器或其他方法计算图像的梯度,并使用梯度的方向和大小来表示图像中的边缘。
  • 非极大值抑制:使用非极大值抑制算法来去除图像中的假边缘。
  • 双阈值检测:使用两个阈值来区分真正的边缘和假边缘。
  • 边缘连接:将检测到的边缘连接起来,以形成完整的边缘。

Canny 边缘检测算法的优点是它能够有效地消除噪声,并提供清晰的边缘检测结果。但是,由于它是一种多步骤的算法,所以它的计算复杂度较高,不太适用于实时边缘检测场景。

0x02 IPM 逆透视变换(Inverse Perspective Mapping)

IPM(Inverse Perspective Mapping)是一种图像处理技术,它可以将一张透视变换后的图像进行逆变换,使其看起来像是从俯视角度拍摄的。这对于自动驾驶系统来说非常重要,因为它可以帮助系统更准确地识别道路、车辆、行人等物体。

  • 在通常情况下,道路是在平面上的。
  • 如果三维变换是已知的,我们就可以将道路图像投射到地面平面上。

0x03 车道线检测:参数化车道标线估算(Parametric Lane Marking Estimation)

为了给汽车导航,我们需要将检测到的标记像素与一个更有语义的曲线模型与之相匹。

0x04 贝塞尔曲线(Bezier Curve)

贝塞尔曲线(Bézier curve)是一种数学曲线,贝塞尔曲线常用于计算机图形学中,因为它们可以用于创建平滑的曲线和图形。贝塞尔曲线是通过控制点来描述曲线形状的,其中一个或多个控制点用于指定曲线的形状。

贝塞尔曲线可以通过控制点的位置来控制曲线的形状,并可以通过改变控制点的位置来改变曲线的形状。这使得贝塞尔曲线非常适用于创建复杂的曲线和图形。

  • 一个由控制点定义的多项式曲线

0x05 线性贝塞尔曲线(Linear Bezier Curve)

线性贝塞尔曲线是一种特殊的贝塞尔曲线,它由两个控制点和一个起始点和一个终止点组成。线性贝塞尔曲线是最简单的贝塞尔曲线之一,它可以用来描述直线。线性贝塞尔曲线的方程:

其中,  是贝塞尔曲线上的点, 是参数, 是控制点。

  • 类似线性插值法(linear interpolation)

0x06 二次贝塞尔曲线(Quadratic Bezier Curve)

由一个起始点、一个终止点和两个控制点组成。二次贝塞尔曲线是一种二次方程,可用来描述曲线和复杂的形状。二次贝塞尔曲线的方程:

其中, 是贝塞尔曲线上的点, 是参数, 是控制点。

  • 两个线性内插点的内插

上一篇: 影响气膜体育场工程造价的因素有哪些?-光空间

下一篇: scRNA+bulk+MR:动脉粥样硬化五个 GEO 数据集 + GWAS,工作量非常到位 - 小结