当前位置: 移动技术网 > IT编程>数据库>Oracle > 手撕自动驾驶(一)自动驾驶初探

手撕自动驾驶(一)自动驾驶初探

2020年07月28日  | 移动技术网IT编程  | 我要评论

     以下都是我的个人理解,说的不对的欢迎狂怼。

     借用apollo的架构说事:

  

   自动驾驶由这7部分组成:

1.感知。就是指传感器的输入,包括激光雷达、视觉图像、GPS、惯导、毫米波雷达等都可以归类为感知。

2.地图。就是指高精度地图,它与普通导航地图的最大区别是:高精度地图主要用于定位,是给机器看的。导航地图主要用于路径规划,是给人看的。高精度地图有着20cm绝对精度,5cm相对精度,具有全要素,车道集级等等,在我看来其就是对真实世界的标注而已,跟图像标注没有什么本质区别。它的形似是多种多样的,由纯矢量的,比如:

也有点云形式的(压缩点云),也叫定位图层,它工作起来可能是这样的:

当然,还有很多很多的形式,比如将图像特征点存下来据说也可以定位,这里就不赘述了。

3.定位。我认为定位模块是这7个模块里最重要的模块。顾名思义,定位就是确定无人车自身的位置,注意这里的位置并不是指它在真实世界种的位置,而是它在高精度地图种的位置,这也解释了为什么高精度地图可以加偏,不必使用真实位置,否则国家测绘局肯定不干的。一旦确定了无人车在高精度地图中的位置,高精度地图就像两根铁轨一样,把无人车夹在里面,就跟火车一样,是不是比汽车要安全多了,就是这个道理。

        根据感知传感器的不同,定位方法也是不同的。比如传感器是GPS+IMU,那定位方法就是组合导航,卡尔曼滤波。如果传感器是点云,那定位方法就是直方图滤波NDT,它是将高精度地图看成许多空间分布的集合,用的最多的是正态分布,点云中每一个点映射到空间分布中,都可以得到一个概率值。不同的定位姿态会得到不同的映射,那最佳的定位姿态就是每个点概率值之和最大的那个姿态,这可以通过EM算法进行迭代优化,效率也很高,上面所讲的定位图层就是用了这种办法。

       接下来讲到本系列的重点:视觉定位,通常视觉定位就是指SLAM,它是指根据同名点计算后一帧相对于前一帧的相对位姿,从而将定位位姿传导下去,获取每一帧相对于第一帧的相对位姿的方法。根据求同名点的方法可以分为特征点法和直接法,根据前后位姿优化的不同可分为卡尔曼滤波和bunder adjustment。另外,它还通过回环检测保证第二次进入场景与第一次进入时的位姿是一致的。看起来它并不需要高精度地图,但这也是他的致命弱点,它只能得到相对于前一帧的位姿,推下去也只是知道相对于第一帧的位姿,它只能知道自己有没有变道,对于究竟处于第几车道,前面100米还是200米需要变道没有概念。而且随着误差累计,它与第一帧的位姿也越来越不准确。它并没有一个宏观的认识,扫地机器人还好,毕竟就屁大点地方,多跑几次就有了。在真实世界中往往只给一次机会,所以光有帧间位姿是不够的。而且对于单目SLAM来说,还有尺度漂移问题,有GPS+IMU作为修正会好一点。

      因此,我认为视觉定位也是需要高精度地图的,高精度地图就会提供给无人车一个参照。那么问题来了,假如有了高精度地图,那么问题转变为怎么获取无人车与高精度地图的相对位姿,那它与第一帧的相对位姿就显得不那么重要了。我认为消耗那么大算力去优化帧间相对误差并没有太大意义,我认为其意义在于可以平滑前后帧的位姿,而这也就用卡尔曼滤波就足够了,不需要SLAM这么重型的东西。

4.预测。无人车除了要知道自己的位置之外,还需要预测其他车的运动轨迹,人、自行车、摩托车等非静态物接下来想要干什么,比如前方车要变道,你就要慢慢减速,等等。这个不难理解,我们人就是这样的,知己知彼么,开车不能只管一股脑往前开,得随时变通。当然,这里得预测只是针对非静态物,静态物就不需要预测了,因为它是不会动的,这里高精度地图也有一个作用,它可以帮助无人车区分哪些是静态物。因为高精度地图就是静态的,只要能跟高精度地图匹配上的地物,那就不用预测了,这就减轻了预测的负担,节省了算力,算力对无人车是极其重要的。

5.规划、导航、控制。这三个我就不多讲了,实际上我也不懂,大概就是路径规划,车辆控制等。

接下来,我要说一个我做过的项目,项目目的就是通过普通相机拍摄的照片、行车轨迹(只有简单的GPS位置)、高精度地图三样输入,完成无人车定位的目的。

本文地址:https://blog.csdn.net/qingcaichongchong/article/details/107590048

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网