网络知识 娱乐 一个实例了解自动驾驶路径规划——自动泊车实例介绍及A*算法代码

一个实例了解自动驾驶路径规划——自动泊车实例介绍及A*算法代码

在转往自动驾驶的道路上,我遇到了三个问题:

1、学习路线问题:不知道学什么,不知道学习顺序,或者是感觉要学的太多,战线被拉得很长,往往学着A,却发现B是基础,就转而学B,最后感觉什么都没有学;

2、学习资料问题:资料太多,不知道该看哪个,又或者没有找到很通透的资料。

在这两个问题上纠结很久,最终也没有多少进步,后来让我感觉有所收获的,反而是深入一个具体实例,完整的复现下来。一个好的实例会包含众多相关知识,好处主要有两个,一是省去了书本上大量的其他知识,节约了时间,二是有助于理清脉络,建立立体的分析思维,这也是此系列博客的分享原因。

博客初步计划通过自动泊车讲解自动驾驶的路径规划,涉及A*,HybridA*,RS曲线(ompl库),并做一些资料推荐(如使用工具的教程,工具书),力求细致,通透,主要为了帮助像我一样初次学习的人快速入门。

一、自动泊车介绍

言归正传,自动泊车是目前(2021年)自动驾驶ADAS中非常火热的一环,与ACC,AEB不同的是,自动泊车是低速自动驾驶,安全问题要小的多。自动泊车主要涉及的领域有:

1、感知:计算机视觉——车位识别,AVM车位(视觉检测的白线车位);超声波雷达——检测障碍物车位(处理没有白线,或者压住白线导致车位检测不到);

2、融合:视觉车位与超声波雷达车位的信息融合;

3、定位:用以确定车辆实时位置,判断车辆是否停到位等;

4、路径规划:结合感知和定位给出合理路径,主要应用HybridA*(自动泊车属于狭窄空间路径规划,还是挺难的);

5、控制:泊车执行环节,控制车的方向盘,车速,使车辆根据给出的路径到达终点,stanly算法,纯跟踪算法,PID控制基本都属于这一环节。

可见,自动泊车涉及的自动驾驶领域还是很全的。自动泊车的车位主要分为三类:

  • 垂直车位
  • 水平车位
  • 斜列车位

其中斜列车位可以和垂直车位看做一体,可以把垂直车位看做特殊的斜列车位。

在现在的市场中,可以听到小马智行,百度apollo,AutoX这样的科技公司运营自动驾驶出租车,也可以看到小鹏、比亚迪、特斯拉这样上市的辅助驾驶车,自动泊车属于辅助驾驶,需要注意的是,根据车辆成本,实现自动驾驶的方案是不一样的,进而导致算法不一样。比如AutoX的出租车,成本很高,可以做到高级自动驾驶,多采用激光雷达和毫米波雷达等,车顶上都有个大盖子。这样的配置在十几万的国产车上是不现实的,因此就有了低成本方案,通过十几块钱的板子、结合摄像头、超声波雷达来做自动泊车这样的辅助驾驶。很明显,板子的算力有限,因此自动泊车的算法要与AUtoX这样的出租车中的算法有明显不同。

自动泊车分为很多类,有APA、记忆泊车、AVP代客泊车等等,简要的说,就是自动泊车是从帮助人停车往自动寻找车位,自动停车,自动泊出的方向进化的,最终的理想状态可以想象这样一幅场景:

1、驾车前往商场,到商场门口后下车购物,同时下达自动泊车指令,车辆开始巡航,寻找商场停车位并完成泊车;购物结束后,从另外一个门出来,手机给车辆发送定位,车辆自动泊出,并前往上车地点。

2、到家后,犹豫很久未充电,车辆电力不足,下达充电指令,车辆搜索附近充电桩占用情况,发现一小时后有空位,于是一小时后自动启动,前往充电桩充电,省去人排队的时间,充电完毕后结合支付设定完成付费,再次自动泊车至家中位置。

可以看到,自动泊车解决了自动驾驶的开始和结束的问题,这里也可以发现一个明显问题,车辆如何知道附近有车位,或者充电桩信息呢?于是就有了车端和场端的概念,停车场,充电桩也智能化,与汽车完成通信,发送自身的信息,如车位信息,充电桩占用信息等,这就是场端。

随之而来的下一个问题,就是在到达车位、充电桩的过程中,要走怎样的路径,这就涉及到本次主题路径规划了,路径规划分全局路径规划和局部路径规划,个人认为不需要如此细分,细分过多反而带来理解上个困难,两者用的其实都是同一原理,算法稍有不同,但目的就是为了找到一条路。粗略理解可以按以下理解:

1、全局规划:停车场告知车位位置,车辆从自身位置到车位附近这一段是全局路径规划(如S1到S3),感知的信息是周围的环境信息。

2、局部规划:车道车位附近后,比如在S3点,要停到车位的中间点A5,那么S3到A5的路线就是局部规划。

二、A*算法

自动泊车主要应用的是HybridA*算法,此算法的基础仍然是A*算法,A*算法资料较多,不再赘述,推荐以下文章:

第一组:

D*算法(*https://www.guyuehome.com/5652)

A*算法(*https://www.guyuehome.com/6560)

第二组:

A*算法(*https://guyuehome.com/33666)

第三组:

A*算法英文版(*http://www.gamedev.net/reference/articles/article2003.asp)

翻译版(*https://blog.csdn.net/crayondeng/article/details/12342989)

以上三组任意一组均可较好理解算法原理,至于源代码,推荐以下链接内的源代码,因为后续的泊车算法将采用以下版本的代码。

A*源代码来自文章《Hybrid A Star 路径规划(1)》(*https://zhuanlan.zhihu.com/p/40487222)

代码地址(*https://github.com/wanghuohuo0716/hybrid_A_star)

此代码是完整的HybridA*算法代码,A*部分在文章《Hybrid A Star 路径规划(1)》中有粘贴。