无GPS下的自动驾驶系统解决方案

摘要:

随着自动驾驶技术的发展,在未知环境中智能汽车的定位技术成为该领域研究的核心。目前定位技术主要的解决方案是基于全球定位系统(GPS),但是在某些特殊的环境中如下车库,没有 GPS 信号如何解决定位问题就是本文研究的关键所在。

近年来,同步定位与地图构建(Simultaneous Localization and Mapping,SLAM)技术的日益成熟,配合多传感器融合解决方案,自动驾驶车辆在未知环境无 GPS 信号的情况下,完成路径规划的自动驾驶任务得以实现。

本文先介绍了自动驾驶系统概述、视觉激光融合的 SLAM 理论与算法,又基于 ROS 框架搭建了自动驾驶汽车的建图与路径规划仿真实验,最后完成了在地库中的实车算法验证实验,并做了论文结论总结与自动驾驶技术的未来展望。

1、自动驾驶系统概述

自动驾驶汽车即无人驾驶智能汽车,在没有人为参与的情况下,依靠车内的控制系统与智能算法,通过多重传感器数据融合控制汽车底层协议完成正常的车辆行驶功能。智能驾驶汽车是一个综合的集成系统,包括了自动泊车系统、自动驾驶系统、障碍物停障系统等,又分为了感知层、决策层和控制层三个部分如图 1 所示。

图片

图1 自动驾驶系统组成

其中感知层包括各路传感器的数据采集、处理与融合等,更加精确和全面的感知周围环境信息。决策层的输入包括感知层的信息、路径的规划以及控制层反馈回来的数据,通过增强学习算法下发决策指令。决策指令包括了循迹、跟车、超车、刹车、转向、调头等等;最终通过控制层下发 CAN 总线下发指令完成智能驾驶汽车的自动驾驶任务,包括油门与刹车的控制、方向盘与挡位的控制等等。

自动驾驶汽车发展与研发中的核心技术是车辆线控技术和车辆精确定位技术。本论文主要分析车辆的精确定位,目前最常用的解决方法就是使用 GPS,可以让汽车实时地得到自身的位置坐标。本文则基于 SLAM 技术研究了一种新的定位方法。

结合 SLAM 技术,自动驾驶汽车的传感器分别由摄像头、激光雷达、车载毫米波雷达、车载超声波雷达、惯导组合、工业控制器等组成,具体的安装位置如图 2 所示。

图片

图2 传感器安装图

使用的自动驾驶控制流程图如图 3 所示。

图片

图3 控制流程图

2、SLAM技术

SLAM(Simultaneous Localization and Mapping),同时定位与地图构建,主要解决的是自动驾驶汽车在未知环境中从未知位置开始移动,通过传感器的输入信号估计自身位姿并构建空间环境地图进行自身定位,实现自主导航。这里记自动驾驶汽车在各个时刻的状态为 x1,x2,…,xk,其中 k 表示离散时间下标。

下面分别用观测模型和运动模型描述自动驾驶汽车的 SLAM 问题:

图片

表示观测量,表示当前环境量,表示当前的位姿状态,表示当前运动传感器的读数,

图片

都是噪声值。

SLAM 技术是一个比较庞大的系统,其中包括前端里程计、后端优化、回环检测、建图四大部分。本文主要介绍基于视觉激光融合的 SLAM 前端里程计的位姿估计与定位技术。

3、位姿估计算

视觉激光的数据融合可以让自动驾驶汽车知道周围环境的情况,检测到障碍物的种类和对应的距离深度,假设两个关键帧图像数据之间已经匹配好的三维对应点:

图片

通过求解欧式变换 R,t, 使得

图片

图片

,求解上述表达式采用迭代最近邻点法(Iterative  Closest  Point,ICP), 具体 ICP 算法的求解方法有两种:线性代数法(SVD)和非线性优化法。

4、线性代数法(SVD)

图片

定义两组点的质心为:

图片

对应的平方项展开并去掉交叉项为零的部分,优化目标函数可以简化为:

图片

令:

图片

同样的方法展开只含有 R 的左侧式子的平方和,并消去与 R 无关的项,最终化简为需要优化的式子:

图片

先定义矩阵:

图片

W 是一个三维矩阵,对其进行 SVD 分解:

图片

其中 U 和 V 为对角阵,当 W 满秩时,

图片

求解 R 后,代回优化目标函数可求出 t。

5、非线性优化法

求解 ICP 用非线性优化的方法,是根据迭代思想寻找最优解,与 PnP 算法类似。优化过程中为了消除旋转矩阵的自身约束,使用了李代数表示位姿,构建的目标函数为:

图片

式子中只有一个未知量,所以可以采用李代数的扰动模型求解:

图片

因为 ICP 算法中特征点已经匹配好,所以构建的最小二乘方程一定有解析解,就可以不进行迭代优化。为了方便计算,可以采用两种算法放在一起考虑,例如:如果深度信息未知,可以采用 3D-2D 的 PNP 重投影误差;若深度信息已经被测出,就可以用3D-3D 的 ICP 算法完成建模与求解。

6、基于滤波的定位算法

通过观测模型解决了自动驾驶汽车的位姿估计和空间运动求解问题,还要解决自动驾驶汽车在构建地图中的定位问题。本论文主要采用的贝叶斯滤波中一种特殊滤波方式——粒子滤波。

贝叶斯滤波

自动驾驶汽车的当前定位存在观测值 z和位姿真实值 x,两者之间是存在误差的,从观测值到位姿真实值是一个概率分布问题,是所有空间环境定位中的可能性事件分布。贝叶斯滤波的流程是:已知状态量 t-1时刻的 xt-1概率分布和运动传感器值 ut-1,在给定 t 时刻的观测数据 zt的情况下,估计出状态量在 t 时刻的概率分布。对应的贝叶斯滤波公式为:

图片

化简可得:

图片

贝叶斯滤波的核心就是通过 t-1 时刻的后验概率推导在 t 时刻的先验概率,在通过 t 时刻的先验概率更新 t 时刻的后验概率。

粒子滤波算法

粒子滤波是基于蒙特卡洛的方法,用粒子集表示概率,寻找随机样本用来近似的描述概率密度函数,用样本均值代替积分运算,进而获得系统状态的最小方差估计的过程。由于粒子滤波在非高斯、非线性系统和多峰分布表现出来的优势,可以用来估计带噪声的观测数据中自动驾驶汽车的位姿和运动状态。

粒子滤波可表示为:

图片

其中表示自动驾驶汽车的位姿,表示当前位姿所处环境跟地图的匹配度的权重。如图 4 所示为粒子近似分布示意图。

图片

图4  粒子近似分布示意图

实现流程

本论文中实现自动驾驶系统中粒子滤波算法的流程分为以下三步:

1. 用粒子进行状态传播:

图片

2. 评价每一个粒子的权重:

图片

3. 根据权重进行重采样:

以概率接受,目的是去除低权重的粒子,其中粒子滤波的状态传播模型为:

图片

因为在没有 GPS 信号的情况下,无法知道自动驾驶汽车位姿的实际发布,从它的预测分布进行定位采样如图 5 所示,并用观测模型进行计算权重,联合权重再重新采样来近似自动驾驶汽车的后验概率分布。

图片

图5 定位采样原理

概率越大,权重越大,定位越准确,重定位需要复制的粒子越多,粒子权重就更符合后验概率分布如图 6,图 7 所示。

图片

图6 权重评估

图片

图7 重采样后的粒子分布

7、基于ROS的定位与建图仿真实验

本论文中应用以上的 SLAM 位姿估计算法和粒子滤波定位算法,结合机器人操作系统 ROS(Robot Operating System)进行算法验证与仿真实验。

ROS 是一个适用于自动驾驶汽车开源的元级操作系统。主要的优点是可以为代码复用提供支持、良好的通讯架构、具备插件仿真工具、有强大的库且兼容多种编程语言。它提供了操作系统应有的功能,包括硬件抽象、底层设备控制、共用功能执行、进程间消息传递,以及功能包管理。

在本仿真实验中,用 URDF 机器人统一描述平台构建了自动驾驶汽车的模型,然后把自动驾驶汽车模型加入 Gazebo 物理仿真平台进行仿真地下车库的环境如图 8 所示。

图片

图8 Gazebo物理环境仿真

通过粒子滤波算法进行模型定位仿真,用 gmapping 导航功能包在 Rviz 界面中显示地图的构建情况,并在地图中进行自主定位导航与路径规划如图 9所示。

图片

图9 Rviz地图构建与自主导航

8、实车测试和结果分析

进行了理论分析与实验算法仿真以后,用自动驾驶车辆进行测试与实验,选择的环境为没有 GPS 信号的地下车库如图 10所示。

图片

图10 试车测试验证图

首先通过自动驾驶车辆的相对位姿估计算法进行求解当前车的空间刚体运动矩阵,得到的位姿关系进行了整个地库地图拼接与构建并在 Rviz 中进行显示如图 11 所示,转换为 PCD 格式的点云地图如图 12 所示。

图片

图11 地库图RVIZ显示

图片

图12 地库点云地图

将构建好的整个车库地图选取部分路径进行定位与导航试验,通过 VL-SLAM 算法可以得到自动驾驶的位姿估计以及精度地图。为了精确定位自动驾驶汽车在精度地图中的位置关系,将 velodyne32 线激光雷达和单目视觉相机采集的数据融合后与精度地图进行匹配,根据匹配的权重大小确定当前的采集数据是在精度地图中的哪个位置。

已知自身定位,然后再设定目标位置,结合 ROS 中的gmapping 导航功能包就可以实现地图环境中的路径规划任务。在 RVIZ 中的实验结果如图 13 所示,用红色正方形标出自动驾驶车辆正在初始化,加载汽车模型。

图片

图片

图13 定位初始化

如图 14 所示,汽车模型加载成功,并且定位准确作为初始位置出发点。

图片

图14 确定初始位置

随后自动驾驶汽车开启自动驾驶功能,如图 15所示为运动过程中自动驾驶汽车的精确定位。

图片

图15 在运动中精确定位

转载自猛狮无人驾驶实验室,文中观点仅供分享交流,不代表本公众号立场,如涉及版权等问题,请您告知,我们将及时处理。

来源 | 智驾最前沿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/48315.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 day30(正则化参数λ对模型的影响)

λ对Jcv和Jtrain的影响 假设该模型为四阶多项式当λ很大时,在最小化J的过程中,w会很小且接近0,此时模型f(x)近似于一个常数,所以此时模型欠拟合,Jtrain和Jcv都很大当λ很小时,表示模型几乎没有正则化&…

如何在3ds max中创建可用于真人场景的巨型机器人:第 3 部分

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建腿部装备 步骤 1 打开 3ds Max。 打开在本教程最后一部分中保存的文件。 打开 3ds Max 步骤 2 转到创建> 系统并单击骨骼。 创建>系统 步骤 3 为的 侧视口中的腿,如下图所示…

蓝桥杯单片机第八届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…

static关键字和继承

1、static关键字 1.1案例题目 • 编程实现People类的封装&#xff0c;特征有&#xff1a;姓名、年龄、国籍&#xff0c;要求提供打印所有特征的方法。 • 编程实现PeopleTest类&#xff0c;main方法中使用有参方式构造两个对象并打印。 /*编程实现People类的封装*/ public cl…

Python基础教程:sklearn机器学习入门

1. sklearn基础介绍 sklearn&#xff08;全名为scikit-learn&#xff09;是一个建立在NumPy、SciPy和matplotlib等科学计算库的基础上&#xff0c;用于机器学习的Python开源库。它提供了丰富的工具和函数&#xff0c;用于处理各种机器学习任务&#xff0c;包括分类、回归、聚类…

【JavaEE初阶】Servlet (二) Servlet中常用的API

文章目录 HttpServlet核心方法 HttpServletRequest核心方法 HttpServletResponse核心方法 Servlet中常用的API有以下三个: HttpServletHttpServletRequestHttpServletResponse HttpServlet 我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其…

SpringBoot+Prometheus+Grafana实现系统可视化监控

场景 SpringBoot中集成Actuator实现监控系统运行状态&#xff1a; SpringBoot中集成Actuator实现监控系统运行状态_springboot actuator 获取系统运行时长_霸道流氓气质的博客-CSDN博客 基于以上Actuator实现系统监控&#xff0c;还可采用如下方案。 Prometheus Prometheu…

「2024」预备研究生mem-带绝对值的方程高次方程替代降次法

一、带绝对值的方程 二、高次方程替代降次法

用VMware给运行在VMware上的CentOS7生成一个以SSH方式连接VMware上的CentOS7的运行在Windows上的命令行窗口

2023年7月27日&#xff0c;周四早上 目录 一个发现生成方法如果上面的方法连接失败&#xff0c;就采取这个方法 一个发现 今天早上无意间发现VMware可以生成一个以SSH方式连接着CentOS7的Windows命令行窗口&#xff0c; 这样做可以带来一定的便利性 &#xff1a; 方便复制、…

Django模板语法和请求

1、在django关于模板文件加载顺序 创建的django项目下会有一个seeetings.py的文件 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’)&#xff0c;如果是pycharm创建的django项目会加上&#xff0c;就会默认先去根目录找templates目录下的html文件&#xff0c…

时间复杂度函数图像

复杂度一览 f(n)阶函数y1O(1)常数函数ylogxO(logn)对数函数yxO(n)线性函数yxlogxO(nlogn)线性对数函数yx^2O(n^2)二次函数yx^3O(n^3)三次函数y2^xO(2^n)指数函数 对比图一览 对比结果在线预览 参考 时间复杂度比较及时间复杂度对应函数&#xff0c;函数图像

【机器学习】 奇异值分解 (SVD) 和主成分分析 (PCA)

一、说明 在机器学习 &#xff08;ML&#xff09; 中&#xff0c;一些最重要的线性代数概念是奇异值分解 &#xff08;SVD&#xff09; 和主成分分析 &#xff08;PCA&#xff09;。收集到所有原始数据后&#xff0c;我们如何发现结构&#xff1f;例如&#xff0c;通过过去 6 天…

VirtualEnv 20.24.0 发布

导读VirtualEnv 20.24.0 现已发布&#xff0c;VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境&#xff0c;可隔离项目之间的第三方包依赖&#xff0c;为部署应用提供方便&#xff0c;把开发环境的虚拟环境打包到生产环境即可&#xff0c;不需要在服务器上再折腾一…

郑州Sectigo DV通配符SSL证书

我们在浏览器访问网页时或许不会注意到网站是http还是https链接&#xff0c;但是一定能注意到浏览器给我们展示的“不安全”警告&#xff0c;警告访问者网站未加密&#xff0c;访问网站会有泄露隐私的危险。SSL证书能将网站链接由http转为https&#xff0c;对网站传输数据加密&…

【redis】通过配置文件简述redis的rdb和aof

redis的持久化方式有2种&#xff0c;rdb&#xff0c;即通过快照的方式将全量数据以二进制记录在磁盘中&#xff0c;aof&#xff0c;仅追加文件&#xff0c;将增量的写命令追加在aof文件中。在恢复的时候&#xff0c;rdb要更快&#xff0c;但是会丢失一部分数据。aof丢失数据极少…

7.27 作业

1.闹钟 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);tid1 startTimer(1);//显示时间计时器ui->pushButton_2->setEnabled(false);//设置停止为不可用…

sketch如何在线打开?有没有什么软件可以辅助

Sketch 在线打开的方法有哪些&#xff1f;这个问题和我之前回答过的「Sketch 可以在线编辑吗&#xff1f;」是一样的答案&#xff0c;没有。很遗憾&#xff0c;Sketch 没有在线打开的方法&#xff0c;Sketch 也做不到可以在线编辑。那么&#xff0c;那些广告里出现的设计软件工…

【数据挖掘】PCA/LDA/ICA:A成分分析算法比较

一、说明 在深入研究和比较算法之前&#xff0c;让我们独立回顾一下它们。请注意&#xff0c;本文的目的不是深入解释每种算法&#xff0c;而是比较它们的目标和结果。 如果您想了解更多关于PCA和ZCA之间的区别&#xff0c;请查看我之前基于numpy的帖子&#xff1a; PCA 美白与…

LED芯片 VAS1260IB05E 带内部开关LED驱动器 汽车硬灯带灯条解决方案

VAS1260IB05E深力科LED芯片是一种连续模式电感降压转换器&#xff0c;设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作&#xff0c;并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路&#xff0c;该…

Cesium态势标绘专题-进攻箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…