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

news2024/9/22 13:28:38

摘要:

随着自动驾驶技术的发展,在未知环境中智能汽车的定位技术成为该领域研究的核心。目前定位技术主要的解决方案是基于全球定位系统(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 在运动中精确定位

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

来源 | 智驾最前沿

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(MYSQL)数据库服务端的启动与停止,登录与退出

MYSQL服务的启动与停止 方式一:右击左下角win图标——选择计算机管理——选择计算机管理(本地)——选择服务和应用程序——找到mysql(此方法不好用) 方式二:通过管理员身份运行(必须是管理员身…

【C++11】——列表初始化、声明及STL变化

目录 1. C11简介 2. 统一的列表初始化 2.1 {}初始化 2.2 initializer_list容器 3. 声明 auto decltype nullptr 4. STL 中的一些变化 1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之前的最新C标…

正则表达式方法学习

正则表达式学习 1.能干嘛2.创建正则表达式3.关于正则表达式的方法3.1 正则的方法3.1.1 test3.1.2 compile3.1.3 exec捕获组对象具名捕获组对象非捕获组对象 3.2 String类型的对象的正则相关的方法3.2.1 search()3.2.2 replace()3.2.3 split()3.2.4 match()3.2.5 matchAll() 1.能…

电子科技大学入驻飞桨AI Studio高校专区,AI优质课程等你来学!

近日,电子科技大学高校专区在飞桨人工智能学习与实训社区AI Studio上线,双方将携手搭建人工智能教学实训平台专区,汇集优质教学实训资源,校企共同培育复合型 AI 人才,为国家输送高质量人才,促进国家智能化进…

13 Linux实操篇-Linux网络配置

13 Linux实操篇-Linux网络配置 文章目录 13 Linux实操篇-Linux网络配置13.1 NAT网络配置13.1.1 原理图讲解13.1.2 VMware虚拟网络编辑器13.1.3 查看Windows的网络配置-ipconfig13.1.4 查看Linux的网络配置-ifconfig13.1.5 网络检测检测工具-ping 13.2 Linux网络环境配置13.2.1 …

1400*B. Karen and Coffee

Examples input 3 2 4 91 94 92 97 97 99 92 94 93 97 95 96 90 100 output 3 3 0 4 input 2 1 1 1 1 200000 200000 90 100 output 0 解析: 题意为,给你多个区间(会有重叠),每个区间的每个值都会为这个值累加…

server.max-http-header-size设置不当引发的线上OOM案例分析

问题现象 后台服务日志,大量报出如下异常,关键字:java.lang.OutOfMemoryError: Java heap space,问题指向:o.a.c.h.Http11NioProtocol [DirectJDKLog.java:175] Failed to complete processing of a request 问题定…

1071. 字符串的最大公因子

题目描述: 主要思路: ①:暴力依次判断每一段字符是否可以构成s和t ②:计算st串长度的最大公因子,判断是否可以构成 class Solution { public:bool check(string t,string s){string ans"";while(ans.lengt…

Squid代理配置

某些平台的服务需要配置白名单IP或服务器,我们配置了某个服务器,但是其他服务器也想访问这个平台,可以在白名单服务器上安装Squid,将其他服务器的服务代理到目标平台。 一、安装配置squid 首先在白名单服务器上安装squid: 1.切换…

pycharm粘贴代码出现zwsp

pycharm复制粘贴代码会出现zwsp pycharm复制粘贴代码会出现zwsp,这个不要担心, 解决方法一 选中 2.ctrlr跳出页面点击全部替换 3.全部替换完成,完美解决:

助力企业数字化转型的利器——奥威BI系统

如今,随着信息技术的迅猛发展,企业数字化转型已经成为不可回避的趋势。在这个数字化时代,企业需要根据大量的数据来做出准确的决策,抢占市场先机。而BI系统则成为一种帮助企业实现数字化转型的利器,其中以奥威BI系统为…

C. Tree Permutation

Problem - C - Codeforces 思路:这是一个树排列问题,只要求出所有的排列对应的情况然后除以排列的种类就可以了,对于一个排列来说n!来说,因为每个数的地位都是相等的,每条边的地位也是相等的(相邻的两个数为…

Java-方法的使用

一、方法的概念和使用 1.1方法的含义 方法就是一个代码片段. 类似 C语言中的函数. 方法的作用: 1.能够模块化的组织代码(当代码规模比较复杂时)。 2.代码被重复使用, 一份代码可以在多个位置使用。 3.让代码更好理解更简单…

【Linux命令200例】indent对C语言代码进行缩进和格式化

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

力扣算法数学类—剑指 Offer 44. 数字序列中某一位的数字

目录 剑指 Offer 44. 数字序列中某一位的数字 题解: 代码: 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4&am…

24考研数据结构-栈和队列的应用

目录 3.3.1栈在括号匹配中的应用流程图算法代码 3.3.2栈在表达式求值中的应用1. 中缀表达式 (需要界限符)2. 后缀表达式 (逆波兰表达式)中缀表达式转后缀表达式-手算重点:中缀表达式转后缀表达式-机算重点:后缀表达式的计算—机算 3.前缀表达式 (波兰表达…

Linux中Anaconda安装失败(Failed to execute script entry_point)的解决方法

Linux中Anaconda安装失败(Failed to execute script entry_point)的解决方法 报错信息: Failed to execute script entry_point 解决办法: 清理硬盘空间,确定区间内空间足够 Linux文件按大小排序 du -hs * | sort …

已解决:多线程环境中,新线程在使用cout函数打印输出到显示器出现数据混乱的情况

错误展示错误原因解决办法1. 在本问题情况下:使用printf函数替代cout:2. 使用互斥锁使 cout函数线程保持原子状态 什么是原子操作? 错误展示 最近学习多线程的时候,创建了一堆线程,然后每个线程都运行这个方法&#x…

了解Unity编辑器之组件篇Miscellaneous(九)

一、Aim Constraint:是一种动画约束,用于使一个对象朝向另一个对象或一个指定的矢量方向 Activate按钮:用于激活或停用Aim Constraint。当Aim Constraint处于激活状态时,其约束效果将应用于目标对象。 Zero按钮:用于将…

一款8000MHz的国产DDR5电竞内存条,光威神策系列DDR5只需900即可入手,

光威近期发布了一款能到8000MHz的DDR5内存新品,相比市场上现有的DDR5内存条,光威神策系列DDR5在性能和产品设计方面都有了较大的突破,是国产内存的典范型产品。这款内存DDR5以唐代“神策军”命名,国风色彩很明显,也是光…