一、前言

前段时间一直在学习Lio-sam的程序,在学习完源码后继续学习开源的自动驾驶软件Autoware,这个软件可以看作是很多功能包的集合,在一个人机交互界面对各个模块功能进行参数设置、启动和关闭。

本文主要记录使用Autoware软件部署在实车(Autolabor底盘)上进行定位,执行全局路径规划和局部路径规划并在行走时完成自主避障。由于网上对于Autoware的实车部署的资料比较少,在此记录一下实现过程,本次选用的底盘为串口通讯的成品底盘,只需要发布简单的/cmd_vel话题便可以完成控制。选用他而非CAN口通讯的底盘主要是因为控制上比较容易实现。

关于Autoware软件的安装和Demo的运行网上已经有了很多教程,这里也不花很多时间进行详细介绍了,只能说从安装到运行demo的过程都非常的折磨,非常麻烦和繁琐,还经常会出许多小问题,在这里假定已经成功运行了demo并取得预期的效果。(指quickstart的前三个选项,电脑比较拉跨功能没有开太多,能运行就好)

二、硬件平台以及准备工作

先对前期硬件进行简单说明,印象中Autoware对于硬件要求比较高,推荐内存16g和2070显卡没记错的话,但实测前期跑Demo是在台式机上进行,十代i5无显卡,内存8g以及小车工控机AMDRyzen3无显卡内存8g,程序都是可以运行的,在运行全局路径规划局部路径规划避障几个功能节点时,打开rviz可视化后明显卡顿,关闭点云后帧数明显上升。

首先要实现这些任务需要的文件有:环境的PCD点云图、环境点云图对应的矢量地图(高精地图)以及一份在该环境下实际录制的rosbag包(rosbag包非必须,只是测试用途,毕竟测试时的时候天还很冷,谁也不想在大冬天冷风里蹲着排错吧)。

首先是PCD点云图,Autoware内置了点云地图建立的模块,不过我暂时没有尝试过,感兴趣的可以在网上搜索一下相关的内容。由于前段时间学习Lio-sam,对于使用LIo-sam建立点云还算是比较熟悉,所以在这里我采用的LIo-sam建立需要的点云地图。对这个方法感兴趣的可以看一下我以前的博客。

在拿到点云地图后,需要根据点云地图建立对应的矢量地图,很遗憾,目前好像只有自己手动绘制的办法,自动生成的方法暂时没有找到。制作矢量地图的软件使用的是Autoware MapTool,这是基于Unity的一个工具包。而Unity是一款比较强大的游戏引擎,在制作矢量地图时需要使用这个引擎,但是并不需要有Unity的相关操作经验,大部分操作都是比较简单的。

首先下载Git,2.28版本以上都没有问题,这个在后面导入功能包会用到。

然后下载Autoware MapTool工具包,这里我踩了许多坑,也是花时间最多的部分。工具包下载地址:https://github.com/autocore-ai/MapToolbox/tree/master 。这里是第一个坑,许多网上博客给出的安装方式是下载好Unity后采用URL导入方式导入功能包,实测比较困难。建议从网站上直接下载好zip包采用从disk导入方式导入。第二个坑也在这里,许多博客给定的安装地址下载下来的安装包名称为MapToolbox-main。使用该工具包绘制矢量地图时,操作、界面与大部分教程都不同,在摸索了一段时间也没用弄明白使用方法,错误的工具包使用时加载插件是lanelet2map,没有white line,只有lanenet,trafficLight,trafficSign等等,故放弃。下载上述给定的下载地址下载的包名为MapToolbox-master,操作、界面与大部分博客教程吻合。下载好安装包后解压备用。

并没有摸清楚怎么用的main结尾工具包界面(左)以及 Master结尾工具箱界面(右)

 关于Unity安装,建议下载Unity Hub,利用Unity HUb下载编辑器,在这里我使用的Unity编辑器版本为2021.3.9f1c1。网上许多博客建议安装的版本为2019的子版本,在这里我有无法解决的报错故没有采用。下图为Unity Hub以及各版本的编辑器图标差异。

 下载好的Unity Hub界面如下,可以自己注册一个Unity的账号,注意Unity使用是需要许可证的,但是不要紧Unity提供免费的个人版许可证,只需要激活就可以使用Unity了,激活位置在左上角头像处,个人版许可证可以无限激活,不同许可证之间可以点右下了解不同许可证。最后在新建工程时可以选择已安装编辑器的版本。

 创建项目,最上方版本选择需要的版本(只下载一个版本编辑器的没得选),选择3D模板,最后取消勾选右下方的版本管理后创建项目。

​​​​​​​

创建好项目后,下半部分的界面如图所示,在project选项卡下左侧有一个package文件夹,右键它会弹出菜单,选择view in package manager选项。 

之后会弹出子页面,如下图,首先将左数第二个框改为图中所示的In Project。然后点击左边第一个框框里面的加号,点击后会有四种导入方式,首先选择从git URL导入,在弹出的框内输入com.unity.entities。导入成功后再次点击加号,这次选择从disk导入。找到刚才解压好的工具包文件夹,进入后导入文件夹内的json文件。导入成功后会像下图一样出现该功能包。(导入main结尾的功能包显示的版本为0.2.3)

如果没有从git URL导入com.unity.entities而直接导入了Autoware MapTool。会在最下面显示红色报错信息。

 按上述操作后之后出现一个warning,但并不影响。

到这一步的时候可以检查一下,点开任务栏的GameObject,查看弹出菜单是否包含Autoware且Autoware的子菜单为AutowareADASMap。如果这都没问题的话,终于可以进入到绘制矢量地图的环节了。

首先在下方的资源库中(assets)中导入点云地图,由于之前点云地图的建立采用的LIo-sam。保存的数据有五个,这里需要导入GlobalMap,因为这个地图的点云最为密集,画图的时候参考也比较多(通常我倾向于使用CornerMap,因为点云数量少在rviz中显示所用资源少,但是建议后续全部用GlobalMap)。

正常情况下会显示出点云地图,切记此时导入的地图不要修改他的位置以及进行旋转,否则后续绘制的矢量图在使用时可能会与点云地图错位。

打开任务栏的GameObject,选择Autoware-AutowareADASMap,将会载入到SampleScene内。单击AutowareADASMap,在界面右侧出现一系列选项,初次测试不考虑复杂应用,这次只采用必要的两个元素,即Add RoadEdge以及Add Lane两个选项。

两个元素顾名思义,一个是绘制道路边缘线一个是绘制行驶线,车辆会沿着Lane前进。分别是蓝色线和粉色箭头线。

在绘制前需要讲述下我遇到的坑,由于功能测试原因,能进行简化的目前尽可能进行了简化,所以在绘制点云地图时,如果要使用lio-sam制作,强烈建议设置参数时将建图z轴锁定为0,然后选择平缓路段建图,否则建立的地图带有z轴上的落差也就是坡度会对绘制矢量图带来困难,因为在直线路段绘图时通常采用将坐标置于路的两头,绘制的线条由于中间产生的坡度会出现离开路面或者沉入路面下的情况,虽然本次测试没有遇到问题,但不代表不会存在什么隐性问题。

比如这里就是因为这样的原因导致路中段出现了z轴上约两米的误差,要想贴合需要将直线改为曲线,工作量会变得很大。​​​​​​​

首先绘制边缘线,点击右侧的Add RoadEdge,在左侧AutowareADAS下会出现两级子菜单。

 

 同时在主界面出现一对重叠的坐标,将他们拉开就会生成蓝色的边缘线。

如果按照之前所言点云地图在Z轴上没有变动的话,那么只需要拖动坐标系的绿色下平面就可以在水平面上运动,否则需要同时调整XYZ三轴对齐路的两端。该软件的3D视角下非常难以对齐,经常出现这个视角下对齐后换一个视角又发现在另外的轴上没有对齐的情况。

在这里简单介绍下Unity的视角操作,由于我惯用的Soildwork等软件,Unity操作逻辑我感觉相当别扭。转动视角为右键,转动基点为自身而非对象,中间按下为视角平移,滑动为缩放,视角操作基本基于这两个按键。由于需要对齐,所以经常用得到滑轮进行缩放,有的时候就会发现划不动了,滑轮划好久才能缩放一点点,而且平移也很难操作了,这种情况下需要先随便选中一个对象(随便一根画的线就可以),按一下F键就可以了。

第一条线画好后,可以点击下图所示的具体线,在右侧菜单选择addafter,便可以继续画下一条线了。画线时弯道处先画好直线代替,然后点击右侧Subdivision,直线中段会出现两个坐标用以调整弯曲程度,调整好后点击Normal way生成,最好是从头到尾按顺序画,因为直线只会生成一个对象,但是一旦转化为曲线就会生成许多对象,因为曲线本质就是被切分了好多段。

路边线绘制完后同理绘制Lane线,但是需要注意Lane线有方向,而且如果绘制环形路段时,也不能一个lane对象画到底,必须要有两个以上防止运行到对接处出现问题。

绘制完地图后,点击ADASMap选择右侧的保存便可以得到矢量地图了。

​​​​​​​ 在拿到点云地图和矢量地图后接下来就可以进行实车测试了。

2023/4/27更新

按上文内容制作的矢量地图虽说可以用,但是还是有很多Bug和不好用的地方,前期注重功能的实现,现在回过头来重新对这个过程研究了一下。

之前我遇到的问题主要是这样:在只测试了长方形全局道路条件下,在路径规划时,给出的路径并不是当前位置到目标位置,而是所在的这一整条直线全部被规划为了蓝色,也就是说规划的位置并不是需要的目标点到终止点的路径,而是在画矢量地图时的最短线条单位。表现在我实车在一条直线路段1/3处,给定目标点是同直线路段2/3处。规划路径却是从直线路段起始位置到直道最后位置。这显然是不合理且不能接受的问题。

这个问题也会衍生出新的问题,比如,如果当初直线路段花了一整根直线,在路径规划时起点在这条线段中间,总之就是远离端点处时,给出目标点后后台终端会发生找不到起始位置的报错

Can‘t Generate Global Path for Start(XXX........)

报错原因也简单,起始位置要在线段端点多少米以内才行,这个参数程序内有设置,本意是为了防止汽车启动时离主路不要太远,但是矢量地图没搞好反而成了离线段端点多少米以内才能启动的意思了。所以这个问题也要解决。

这段时间主要研究这么几个问题:

1、能不能找到一种办法根据PCD地图直接生成矢量地图,自己画也太麻烦了。

2、这个矢量地图如果要自己画,那么怎么才能避免上面那种情况的发生,进一步了解一下到底应该怎么画。

3、有没有什么办法能单独测试一下这个地图好不好使,而不是麻麻烦烦的画一次就真得拉出去实测。

下面安顺序慢慢来说,首先是第一个问题:

1、很遗憾,我是没有找到开源的算法,但也了解了一些高精地图之类的信息,了解了一些,并不多。目前高精地图一般是有测绘资质的单位才被允许在公共道路内测绘(貌似是甲级?),且设备昂贵,可能也是因为这个原因所以没有开源的相关算法吧,虽说有众包模式下的地图采集但是并没有找到相关算法。百度的阿波罗框架内好像是有开源的矢量地图绘制,但是生成地图格式不一样也米有进行尝试。

同时顺着这个线索,找到了一个可以在选绘制高精地图的网站,画了些功夫绘制了一张,结果是osm格式的并不能用在ros1下的autoware。网站先放这万一后期用的到呢。

Vector Map Builder (Lanelet2 Format) - Autoware Tools
MGRS Mapper (Free Version) | Operational Graphics Tool for Junior Military Leaders

所以最后还是回到之前用的基于Unity的工具箱来绘制。

2、后来简单测试了一下,貌似道路边缘线(就是蓝色的线)并没有什么卵用对于我单车道的情况下,所以干脆先不做了反正也是测试对不对。这样最后的道路线只剩下了lane线(粉色的带箭头的线),至于白色的车道线还有其他的用到了再说吧。

最后制作的地图大概长这样,就是一条lane线, 


 

这次与之前的绘制有所不同,首先是使用lio-sam建立点云地图时在配置文件里锁定了Z轴,地图可以保证没有Z轴上的偏差,这样绘图时只需要考虑平面位置了。

注意绘制第一条线的时候还是要看一下默认位置是否与地面高度吻合,如果不吻合,调整高度时不要拖动线条两端的端点调节高度,因为如果这样调整,高度差将会继承在使用add after后生成的下一条线段 。所以要对整条线段进行调整,选中ADASGoSlicesLane,也就是选中这条线段,调整下图的参数,调整Transform下的Position的Y值至合适位置,记下当前数值,以后每生成一段lane都直接修改这个值就可以了。

调整后直接点击上图中上位置的坐标轴(大概叫这个?),调整为俯视,然后坐标轴的右上有个不起眼的小锁,锁定他,接下来的绘图全部变成的2D绘图了。

剩下的操作几乎和之前没差了,唯一需要注意的是,还记得之前在画转弯圆弧时的操作吗,画线时弯道处先画好直线代替,然后点击右侧Subdivision。这一步,在画直线时也需要加入这一步骤,将直线切成小段才可以解决之前遇到的问题。但是点击Subdivision不需要调整坐标改变形状,直接点击Normal way即可。另外分支部分以及两段线段连接处,可以把前后两条线重合部分画的略长一点。

3、测试部分是这样的(可以先看完后面的博客再回来看这一部分),先打开autoware程序,在map子选项卡下,载入TF,ref输入画好的矢量地图然后载入。接下来进入computing子选项卡,打开vel_pose_connect,但是这次不一样需要进去设置打开仿真模式。然后开启op_planner全局路径规划。到这一步打开rviz,画的lane线不会显示,但是不要急像之前一样在rviz的add中通过by topic添加道路中线后就看得见了。这个时候在rviz中给初始位置和目标点,就可以规划出路径了。看了一下效果还是可以的。

想看一下模拟跑一跑也可以打开局部路径规划和追踪节点看看效果。目前测试了分叉和道路外规划,效果都还不错:

 

 

​​​​​​​

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐