如何搭建一个开源ADAS项目

关注公众号,点击公众号主页右上角“ ··· ”,设置星标,实时关注智能汽车电子与软件最新资讯


来源 车端

一、项目范围

该项目是一个高级驾驶辅助系统的原型,专注于感知算法(目标检测、车道线分割和交通标志分类)。它提供了3个主要功能:

  • 前方碰撞警告
  • 车道偏离警告
  • 交通标志检测及超速预警

它还提供了有限的虚拟硬件访问权限,作为迈向商业产品的一步:

  • 通过 LAN 中的 GPS 源的 GPS 读取器
  • 一个 CAN 读取器,用于从虚拟 can 总线读取车速和转向信号

但是,可以使用 GPS 模块或 CAN 转 USB 电缆收集 GPS 和 CAN 信号。我将提供一些关于如何设置这些设备的说明。

二。硬件设置

处理该项目所有输入的中心组件是中央处理器。这台计算机接收两个输入:(i) 来自相机的图像,以及 (ii) 汽车底盘数据,例如汽车速度和转向信号。中央处理负责处理这些输入以在需要时发出警告。在这个项目的范围内,由于实验条件有限,我们实施了一个模拟模块来提供相机和传感器读取器输入的替代方案在商业产品中,传感器读取器模块可以通过 GPS 模块和 CAN 总线读取器(例如 CAN 转 USB 电缆)来实现;可以使用 USB 摄像头提供摄像头输入。

硬件清单:

  • Jetson Nano 开发者套件
  • Sandisk Ultra 64GB class-10 SD 卡
  • Wareshare 5寸液晶触摸屏
  • Wareshare 8Ω 5W 喇叭
  • Jetson Nano 2寸5V散热风扇
  • 透明外壳。

1.如何获取汽车传感器(速度,转向灯)

使用 GPS 模块

出于开发和教育目的:

  • 从您的手机共享 GPS:
    • 从 Google Play 商店下载共享 GPS应用程序。
    • 设置您的手机局域网地址,src/sensors/car_gps_reader.cpp并使用此应用程序与您的 Jetson Nano 共享 GPS 信息。这样,我们就可以获取GPS信号,估计车速。
  • 使用 USB GPS 接收器:https://www.amazon.com/GlobalSat-BU-353-S4-USB-Receiver-Black/dp/B008200LHW

对于商业产品:

  • 查看此模块:https: //www.adafruit.com/product/746精度:< 3m。

如何设置CAN总线以读取车速和转向信号

基本信息

在这个项目中,我们没有在真车上设置物理 CAN 总线(只是一个使用 socket CAN 的仿真系统)。但是,它可以通过使用 CAN 转 USB 电缆来实现。

CAN总线的一些信息:

  • 一般信息:https://www.csselectronics.com/screen/page/simple-intro-to-can-bus/language/en
  • 如何侵入您的车辆?:hacking-can-bus.pdf
  • 开源 CAN 电缆:CANtact。这将支持您将 CAN 总线连接到 linux 套接字,我的 ADAS 源代码已经支持该套接字
    • 硬件设计:https: //github.com/linklayer/cantact-hw
    • 固件:
    • 在韩国:http://vctec.co.kr/product/cantact-open-source-canusb-converter-cantact-open-source-can-to-usb-converter/11137/category/161/display/1/
    • 您还需要 OBD-II 到 DB9 电缆来连接汽车 OBD-II:http://vctec.co.kr/product/obd-ii-케이블obd-ii-to-db9-cable/817/category/ 81/显示/1/
    • 一旦 CANtact 设备处理了来自车辆的 CAN 消息,它们就会通过 USB B 型端口输出。因此,这需要 USB-B 到 USB-A 电缆:https://www.amazon.com/AmazonBasics-USB-2-0-Cable-Male/dp/B00NH11KIK

我们在哪里可以找到要连接的 CAN 总线?

在这个项目中,我们只使用虚拟 CAN 总线,因此项目源代码仍然不支持与汽车 CAN 总线的真实连接。不幸的是,虽然 CAN 总线是汽车行业的标准,但如果您想找到您的 can 线在哪里,您通常需要查看汽车电气图才能找到内部 CAN 总线。自 1996 年以来,有一个名为 OBD2 的汽车标准,可以提供一种方便的方式连接到 CAN 总线。您可以在以下链接中找到有关 OBD2 的信息:

https://www.csselectronics.com/screen/page/simple-intro-obd2-explained/language/en

OBD2接口在哪里?

OBD-II 端口通常位于仪表板下方,方向盘柱下方(下图中的 1 - 3)。如果端口不在转向柱下方,请在数字 4 - 9 指示的区域中寻找端口。

我怎样才能反转CAN工程并读取速度?

资源:

  • hacking-can-bus.pdf
  • https://fabiobaltieri.com/2013/07/23/hacking-into-a-vehicle-can-bus-toyothack-and-socketcan/

您可以使用 Wireshark 或 candump 查找车速和转向灯在哪里。CAN总线是没有加密的,大家可以根据下面的说明尝试查找。

2. 如何标定相机

将 USB 摄像头连接到 Jetson Nano 板后,我们需要运行 OpenADAS 软件来校准摄像头。校准实际上是基于透视变换的距离估计。这是为距离计算校准相机的便捷方式。

变换参数包括从真实世界距离到鸟瞰图像空间的米到像素映射,以及鸟瞰图像到相机图像之间的透视变换矩阵。为了计算这些参数,我们使用以下解决方案:在汽车前面放一块红地毯,测量距离 W1、W2、L1、L2。地毯应该足够大,并且必须对称地放置在汽车的长轴上。

单击设置按钮以打开相机校准。

在 UI 中输入 L1、L2、W1、W2。

之后,通过单击重新拍摄照片选择 4 个点,选择一个点并移动滑块。这些点必须以正确的顺序拾取。相机标定后,标定文件将被保存data/camera_calib.txt并在每次启动程序时加载回来。

三、感知模型和算法

1. 物体检测与交通标志分类模型

该物体检测模块负责检测前方障碍物物体,如其他车辆或行人,以及交通标志。这些结果可用于前方碰撞预警和超速预警。为了提供这些功能,该模块包含两个主要组件:基于 CenterNet 的对象检测神经网络和基于 ResNet-18 的交通标志分类网络。因此,我们将在下图中看到 2 个深度学习模型。

1.1. 使用 CenterNet 进行目标检测

CenterNet 是一种简单但高效的对象检测模型。与其他流行的目标检测模型相比,CenterNet 可以非常有效地适应速度-精度权衡。与其他流行的基于锚框的对象检测网络不同,CenterNet 依靠关键点检测器来检测对象的中心,然后回归其他属性。

CenterNet管道
论文:作为点的对象 - Xingyi Zhou、Dequan Wang、Philipp Krähenbühl https://arxiv.org/abs/1904.07850

训练

我使用 CenterNet 作者的官方存储库来训练对象检测器(进行了一些修改)。请阅读此处的安装步骤以安装培训所需的环境。

笔记:

  • 我建议使用 Anaconda 或 Miniconda 为每个任务创建一个虚拟环境。不要混合你的环境,因为我们必须使用不同的 Python 和包版本。
  • 必须使用PyTorch v0.4.1 并将其设置为此处的说明:https: //github.com/xingyizhou/CenterNet/blob/master/readme/INSTALL.md不保证其他版本有效。

我修改了官方存储库以使用 Berkeley DeepDrive (BDD) 数据集](https://bdd-data.berkeley.edu/)。您可以在此处克隆源代码以开始训练。在我的存储库中,10个类训练了 CenterNet person、、、、、、、、、ridercarbustruckbikemotortraffic lighttraffic signtrain

使用 TensorRT 进行模型优化

使用 PyTorch 框架训练 CenterNet 后,我们获得 PyTorch 模型格式(.pth)的模型文件。为了优化 NVIDIA Jetson Nano 上的推理速度,我们需要将这些模型转换为 TensorRT 引擎文件。转换是通过称为 ONNX(开放式神经网络交换)的中间格式完成的。首先使用 PyTorch ONNX 模块将 PyTorch 模型转换为 ONNX 格式(步骤 1)。之后,我们将 ONNX 模型转换为每个推理平台的 TensorRT 引擎(步骤 2)。因为从ONNX到TensorRT引擎的转换时间比较长,所以在我的实现中,我将TensorRT引擎转换后序列化到硬盘,每次程序启动时加载。在此步骤中,我们必须注意 TensorRT 引擎在不同计算机硬件上的构建方式不同。所以,

使用此存储库将预训练模型转换为 ONNX 格式:https: //github.com/vietanhdev/centernet-bdd-data-onnx-conversion

笔记:

  • 创建另一个虚拟环境,这与培训不同。这个新的 Python 环境应该使用 Pytorch v1.0 或 v1.1。我为上面的这个转换任务准备了一个存储库。您可以使用此处的说明来设置您自己的环境。
  • 您可以从该文件夹convert_to_onnx_mobilenet.py中阅读(对于 MobileNetv2 主干)和convert_to_onnx_rescdn18.py(对于 ResNet-18 主干)中的一些转换示例源代码
  • 拥有 ONNX 模型后,转到 OpenADAS 以更新配置文件中新对象检测模型的路径:src/configs/config_object_detection.h您还可以使用此存储库进行转换。

1.2. 交通标志分类

由于BDD 数据集的限制——它只包含 1 类交通标志(未指定标志类型),我不得不训练另一个神经网络来识别标志类型。由于速度和准确性高,因此也选择了ResNet-18来完成这项任务。我使用 Tensorflow 和 Keras 框架训练了模型。

数据集

在这个项目中,我只设计了对最大速度标志进行分类的系统,并将每个速度级别视为一个单独的对象类。为了收集足够的训练数据,我使用了 2 个数据集:Mapillary Traffic Sign Dataset (MTSD) 和 German Traffic Sign Recognition (GRSRB) 数据集。由于 MTSD 是一个交通标志检测数据集,我使用标志边界框来裁剪它们以进行分类任务。裁剪后,我合并了 2 个数据集,得到 18,581 个最高限速交通标志图像分为 13 个类别,以及 879 个末端限速标志(将所有末端限速标志仅视为 1 类)。此外,我使用来自其他交通标志和物体的 20,000 张裁剪图像作为“未知”类别。该数据集中共有 15 个类别:最大速度标志(5km/h、10km/h、20km/h、30km/h、40km/h、50km/h、60km/h、70km/h、80km/h , 90 公里/小时, 100 公里/小时, 110km/h、120km/h)、限速终点(EOSL)等标志(OTHER)。之后,这个数据集被分成 3 个子集:训练集(80%)、验证集(10%)和测试集(10%)。每个交通标志类别的分布是随机的。

训练步骤

使用此存储库中的源代码来训练交通标志分类器:https://github.com/vietanhdev/traffic-sign-classification-uff-tensorrt

  • 第一步:初始化环境

创建anaconda环境:

conda create --name python=3.6

激活创建的环境并安装所有要求:

pip install requirements.txt

  • 第 2 步:训练模型

准备如下结构的数据集:


使用以下命令训练模型:

python train.py

使用 TensorRT 进行模型优化

转换为 UFF

  • convert_h5_to_pb.py修改和中的模型路径convert_pb_to_uff.py

  • .h5模型转换为.pb, 最后.uff:

pip install requirements-h5-to-uff.txt
python convert_h5_to_pb.py
python convert_pb_to_uff.py
  • 拥有 ONNX 模型后,转到 OpenADAS 以更新配置文件中新交通标志分类模型的路径:src/configs/config_sign_classification.h.

2.车道线分割模型

车道线检测模块负责检测车道线和车道偏离情况。然后将该结果用于车道偏离警告。我使用深度神经网络和霍夫变换线检测器进行车道线检测。下面介绍车道线检测的流程。

车道线检测流水线

用于车道线分割的 U-Net 模型

U-Net 是一种在生物医学图像分割中表现良好的全卷积网络,它可以用较少的训练图像数据展示高精度的分割结果。我将 U-Net 应用于车道线分割问题,并结合霍夫变换以线方程的形式找到车道线。

U网模型

为了在嵌入式硬件上运行轻量级分割模型,我对原始 U-Net 模型进行了两次修改:

  • (1) 将decoder filters的数量调整为128, 64, 32, 16, 8个filters,从decoder的顶部到网络的输出;

  • (2) 用 ResNet-18 主干替换原来的主干。

这些修改减少了 U-Net 中的参数数量,并为我们提供了一个可以超过 200 帧每秒 (FPS) 运行的轻量级模型(模型 U-Net ResNet-18 输入大小 384x382,RTX 2070 GPU 上的 TensorRT float 16 ).

数据集

数据集是从Mapillary Vista 数据集准备的,并进行了一些修改。原始数据集包含训练集中约 18000 张图像和验证集中约 2000 张图像。我合并这些集合,删除一些不包含车道线或有太多噪音的图像。最终数据集有 15303 张图像。我将这个集合随机分成三个子集:10712 张图像用于训练(~70%),2296 张图像用于验证(~15%)和 2295 张图像用于测试(~15%)。因为 Mapillary Vista 的标签包含很多对象类,所以我只保留车道线类来生成二值分割掩码作为新标签。

Mapillary Vistas 数据集预处理——图像 A、B 来自 Mapillary Vitas

训练

使用我的存储库训练 U-Net 进行车道线分割:https://github.com/vietanhdev/unet-uff-tensorrt

  • 第一步:初始化环境

创建anaconda环境:

conda create --name python=3.6

激活创建的环境并安装所有要求:

pip install requirements.txt

  • 第 2 步:训练模型

在目录中创建新的配置文件list_config请不要修改旧的配置文件,以便我们更好地观察,模型和训练历史将自动保存到saved_models文件夹中。

对于培训,只需运行:

python model/train.py

或者

./train.sh

使用 TensorRT 进行模型优化

转换为 UFF

  • 为此任务创建另一个虚拟环境。

  • convert_h5_to_pb.py修改和中的模型路径convert_pb_to_uff.py

  • .h5将模型转换为.pb,并最终使用这些命令(请更新.uff中模型的正确路径convert_h5_to_pb.pyconvert_pb_to_uff.py

pip install requirements-h5-to-uff.txt
python convert_h5_to_pb.py
python convert_pb_to_uff.py
  • 拥有 UFF 模型后,转到 OpenADAS 以在车道检测配置文件中更新该新模型的路径:src/configs/config_lane_detection.h.

使用霍夫变换进行车道线检测

霍夫变换是一种在图像处理中非常有效的线检测算法。该算法的总体思想是创建从图像空间(A)到新空间(B)的映射,空间(A)中的每条线对应空间中的一个点(B),空间中的每个点(A)对应空间中的正弦曲线 (B)。将 (A) 中的所有点投影到空间 (B) 中的正弦曲线后,我们找到交点密度最高的地方。然后将这些位置投影到 (A) 成线。通过这种方式,霍夫线变换算法可以在图像空间(A)中找到线。

寻找候选车道线的过程如下图所示。从线分割网络产生的分割掩码,车道线检测模块使用概率霍夫变换来检测原始线段(1)。之后,使用由 Bernard A. Galler 和 Michael J. Fischer 在 1964 年反转的不相交集/联合查找森林算法将这些线划分为组。我们使用线之间的空间距离和角度差将属于一个线段分组同一条线。经过步骤(2),我们可以看到不同的线组被绘制成不同的颜色。步骤 (3) 接收这些线组作为输入,并使用具有 L2 距离的最大似然估计在每个组中拟合一条线。

线候选检测

该系统将车道分割模型与上述车道检测算法相结合,可以检测不同环境下的车道线,判断车道偏离情况。它为车道偏离警告模块创建可靠的输入。

4.警告规则

该系统使用基于规则的警告算法。请在以下博客文章和源代码中查看一些警告规则:

https://aicurious.io/posts/adas-jetson-nano-software/#iii-software-implementation

参考

  • 在此处详细了解我的深度神经网络结果:https://aicurious.io/posts/adas-jetson-nano-deep-neural-networks/ 。


关注公众号,点击公众号主页右上角“ ··· ”,设置星标,实时关注智能汽车电子与软件最新资讯

智能汽车电子与软件 专注于汽车电子领域的信息交融平台,涵盖汽车电子行业资讯、市场动态、技术干货、知识见解、行业趋势等资讯深度覆盖。
评论
  • 汽车驾驶员监控系统又称DMS,是一种集中在车辆中的技术,用于实时跟踪和评估驾驶员状态及驾驶行为。随着汽车产业智能化转型,整合AI技术的DMS逐渐成为主流,AI模型通过大量数据进行持续训练,使得驾驶监控更加高效和精准。 驾驶员监测系统主要通过传感器、摄像头收集驾驶员的面部图像,定位头部姿势、人脸特征及行为特征,并通过各种异常驾驶行为检测模型运算来识别驾驶员的当前状态。如果出现任何异常驾驶行为(如疲劳,分心,抽烟,接打电话,无安全带等),将发出声音及视觉警报。此外,驾驶员的行为数据会被记录
    启扬ARM嵌入式 2024-12-20 09:14 98浏览
  • 耳机虽看似一个简单的设备,但不仅只是听音乐功能,它已经成为日常生活和专业领域中不可或缺的一部分。从个人娱乐到专业录音,再到公共和私人通讯,耳机的使用无处不在。使用高质量的耳机不仅可以提供优良的声音体验,还能在长时间使用中保护使用者听力健康。耳机产品的质量,除了验证产品是否符合法规标准,也能透过全面性的测试和认证过程,确保耳机在各方面:从音质到耐用性,再到用户舒适度,都能达到或超越行业标准。这不仅保护了消费者的投资,也提升了该公司在整个行业的产品质量和信誉!客户面临到的各种困难一家耳机制造商想要透
    百佳泰测试实验室 2024-12-20 10:37 152浏览
  • 国产数字隔离器已成为现代电子产品中的关键部件,以增强的性能和可靠性取代了传统的光耦合器。这些隔离器广泛应用于医疗设备、汽车电子、工业自动化和其他需要强大信号隔离的领域。准确测试这些设备是确保其质量和性能的基本步骤。如何测试数字隔离器测试数字隔离器需要精度和正确的工具集来评估其在各种条件下的功能和性能。以下设备对于这项任务至关重要:示波器:用于可视化信号波形并测量时序特性,如传播延迟、上升时间和下降时间。允许验证输入输出信号的完整性。频谱分析仪:测量电磁干扰(EMI)和其他频域特性。有助于识别信号
    克里雅半导体科技 2024-12-20 16:35 67浏览
  • ALINX 正式发布 AMD Virtex UltraScale+ 系列 FPGA PCIe 3.0 综合开发平台 AXVU13P!这款搭载 AMD 16nm 工艺 XCVU13P 芯片的高性能开发验证平台,凭借卓越的计算能力和灵活的扩展性,专为应对复杂应用场景和高带宽需求而设计,助力技术开发者加速产品创新与部署。随着 5G、人工智能和高性能计算等领域的迅猛发展,各行业对计算能力、灵活性和高速数据传输的需求持续攀升。FPGA 凭借其高度可编程性和实时并行处理能力,已成为解决行业痛点的关
    ALINX 2024-12-20 17:44 84浏览
  • //```c #include "..\..\comm\AI8051U.h"  // 包含头文件,定义了硬件寄存器和常量 #include "stdio.h"              // 标准输入输出库 #include "intrins.h"         &n
    丙丁先生 2024-12-20 10:18 84浏览
  • 光耦固态继电器(SSR)作为现代电子控制系统中不可或缺的关键组件,正逐步取代传统机械继电器。通过利用光耦合技术,SSR不仅能够提供更高的可靠性,还能适应更加复杂和严苛的应用环境。在本文中,我们将深入探讨光耦固态继电器的工作原理、优势、挑战以及未来发展趋势。光耦固态继电器:如何工作并打破传统继电器的局限?光耦固态继电器通过光电隔离技术,实现输入信号与负载之间的电气隔离。其工作原理包括三个关键步骤:光激活:LED接收输入电流并发出与其成比例的光信号。光传输:光电传感器(如光电二极管或光电晶体管)接收
    腾恩科技-彭工 2024-12-20 16:30 49浏览
  • Supernode与艾迈斯欧司朗携手,通过Belago红外LED实现精准扫地机器人避障;得益于Belago出色的红外补光功能,使扫地机器人能够大大提升其识别物体的能力,实现精准避障;Belago点阵照明器采用迷你封装,兼容标准无铅回流工艺,适用于各种3D传感平台,包括移动设备、物联网设备和机器人。全球领先的光学解决方案供应商艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)近日宣布,与国内领先的多行业三维视觉方案提供商超节点创新科技(Supernode)双方联合推出采用艾迈斯欧司朗先进Belago红
    艾迈斯欧司朗 2024-12-20 18:55 78浏览
  • 光耦合器,也称为光隔离器,是用于电气隔离和信号传输的多功能组件。其应用之一是测量电路中的电压。本文介绍了如何利用光耦合器进行电压测量,阐明了其操作和实际用途。使用光耦合器进行电压测量的工作原理使用光耦合器进行电压测量依赖于其在通过光传输信号的同时隔离输入和输出电路的能力。该过程包括:连接到电压源光耦合器连接在电压源上。输入电压施加到光耦合器的LED,LED发出的光与施加的电压成比例。光电二极管响应LED发出的光由输出侧的光电二极管或光电晶体管检测。随着LED亮度的变化,光电二极管的电阻相应减小,
    腾恩科技-彭工 2024-12-20 16:31 69浏览
  • 随着工业自动化和智能化的发展,电机控制系统正向更高精度、更快响应和更高稳定性的方向发展。高速光耦作为一种电气隔离与信号传输的核心器件,在现代电机控制中扮演着至关重要的角色。本文将详细介绍高速光耦在电机控制中的应用优势及其在实际工控系统中的重要性。高速光耦的基本原理及优势高速光耦是一种光电耦合器件,通过光信号传递电信号,实现输入输出端的电气隔离。这种隔离可以有效保护电路免受高压、电流浪涌等干扰。相比传统的光耦,高速光耦具备更快的响应速度,通常可以达到几百纳秒到几微秒级别的传输延迟。电气隔离:高速光
    晶台光耦 2024-12-20 10:18 142浏览
  • 百佳泰特为您整理2024年12月各大Logo的最新规格信息。——————————USB▶ 百佳泰获授权进行 USB Active Cable 认证。▶ 所有符合 USB PD 3.2 标准的产品都有资格获得USB-IF 认证——————————Bluetooth®▶ Remote UPF Testing针对所有低功耗音频(LE Audio)和网格(Mesh)规范的远程互操作性测试已开放,蓝牙会员可使用该测试,这是随时测试产品的又一绝佳途径。——————————PCI Express▶ 2025年
    百佳泰测试实验室 2024-12-20 10:33 116浏览
  • 汽车行业的变革正愈演愈烈,由交通工具到“第三生活空间”。业内逐渐凝聚共识:汽车的下半场在于智能化。而智能化的核心在于集成先进的传感器,以实现高等级的智能驾驶乃至自动驾驶,以及更个性、舒适、交互体验更优的智能座舱。毕马威中国《聚焦电动化下半场 智能座舱白皮书》数据指出,2026年中国智能座舱市场规模将达到2127亿元,5年复合增长率超过17%。2022年到2026年,智能座舱渗透率将从59%上升至82%。近日,在SENSOR CHINA与琻捷电子联合举办的“汽车传感系列交流会-智能传感专场”上,艾
    艾迈斯欧司朗 2024-12-20 19:45 97浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦