apollo_logo
3
0

apollo高精度地图标注(二十四)

上一篇文章已经介绍点云地图的制作方法,完成之后就可以得到城市或园区的三维地图了,之后需要标注语义信息,提供给自动驾驶车辆使用。

目前暂时没有找到非常好用的开源语义标注工具,本文采用RoadRunner[1],它是商业软件,包含在matlab中,需要单独的license,高校可以申请试用。

那么下面我们开始介绍RoadRunner的语义标注过程,标注完成之后RoadRunner支持多种格式地图的导出,包括apollo,autoware,osm等。当然最重要的是RoadRunner可以直接导出模型文件和高精度地图,直接给仿真系统使用

导入点云

先创建工程,然后在Assets中新建pointcloud目录,把点云文件拖动到该文件夹下。

导入点云之前需要设置点云的投影,否则不能导入到Roadrunner。

点击点云,按照下列步骤设置经纬度坐标,设置完成之后点击Use Tranverse Mercator At生成投影

最后生成的投影如下图所示

那么如何设置投影呢?我们先搞清楚点云的坐标转换原理,我们上一个步骤生成的点云是UTM坐标系,点云的原点坐标需要加上初始位姿的偏移。

坐标系原理

这里详细解释下坐标系,我们知道雷达坐标系和车辆坐标系(IMU)之间有一个转换关系,但它们都是相对自动驾驶车本身的,也就是说雷达坐标系下车辆的坐标永远为(0, 0),而世界坐标系是相对地球原点的,例如自动驾驶车GPS的位置为(110, 20),这样我们可以得到雷达到世界坐标系的关系

lidar_to_world = car_to_world(gps) + lidar_to_car(雷达到IMU)

我们的点云地图实际上是相对雷达的初始位置(0, 0)来说的,是相对制作地图的起点来说的,而不是地球的原点,因此也被称为相对地图,也就是相对起点的地图。而我们要得到世界坐标系下的地图就要用起点的GPS坐标加上lidar的初始坐标,相当于拼图游戏中把世界地图的一小块放到地球上合适的位置

上面为了表述方便,我们只考虑了平移,没有考虑旋转,实际上也要考虑旋转,例如起点不是正北方向,而是有一定的角度,那么我们就要把相对地图旋转一定的角度(再想想拼图游戏吧)。

代码中已经对点云进行了旋转,因此我们只需要根据UTM坐标转换到GPS坐标(因为RoaderRunner只支持输入GPS坐标),最后在RoadRunner的世界坐标中设置偏移就可以了。

前面说了这么多主要是想让大家搞清楚点云的坐标和标注坐标,不然到时候导出的坐标和实际对不上。

接下来拖动点云到窗口,就会出现加载图标,如果点云比较大,加载过程会比较慢,下图是导入好点云之后的效果图。可以点击工具栏的点云图标,对点云进行编辑,包括点的大小(默认为5,调整为1比较好),根据强度还是颜色渲染等。

调整画布

如果发现点云的大小超出画布,没有显示完全,可以通过以下方式Fit Bounds To Selected调整画布大小,让点云显示完整。

标注车道

接下来就可以在点云之上进行车道标注了,一般是采用俯视视角,根据车道线进行标注。

选择车道材质

Roadrunner自带有一些车道模型可以直接采用,也可以自定义一些车道。

绘制车道

先在工具栏选择车道图标,然后沿着车道边沿点击鼠标右键,这样就会生成一段道路,继续上述过程就可以得到一条车道。

调整高度

如果不调整高度,放大缩小的时候感觉路面会移动,调整高度在车道在左下角的小窗口进行调整,调整完高度之后,对路面横向距离再做微调就可以了。

调整的过程就是拖动点对齐到点云,如果中途需要增加点,可以点击鼠标右键,然后再拖动该点,添加点的方式同样适用于其它情况(包括道路,路口等)。

调整车道宽度

点击车道宽度图标可以调节车道宽度,可以先通过标尺工具来测量车道的宽度,然后适当的进行调整。

还有其它的车道设置包括增加车道,拆分车道,合并,分割等,这些可以根据情况使用。

标注路口

标注完车道之后,我们接下来主要是标注路口,标注路口分为2种情况,十字路口和T型路口。

十字路口

点击自定义路口图标,然后鼠标右键依次点击十字路口道路的连接面,会生成空心框,连接好之后点击空格键,路口就生成好了。

标注T型路口

T型路口的标注和上述类型,主要的区别是先点击道路,然后右键再需要汇入的道路选择2个横截面。

调整路口

如果觉得路口的区域需要微调,可以点击路口调节图标,通过拖动边界线的点来调节,如果需要增加点,可以在线上点击鼠标右键。

路口车道线

通过路口车道线图标可以查看路口的虚拟车道线,也可以调整车道,路口的车道目前是自动生成的,目前可以直接手动连接2个蓝色的点,但是也要交通规则支持,如果交通规则不支持也不会生成虚拟车道,目前还有遇到双向车道生成不了虚拟车道的情况

标注斑马线

标注路中间的斑马线,斑马线有2种情况,一种是十字路口的斑马线,一种是单个单路中间的斑马线。

十字路口的斑马线相对比较简单,选择斑马线模型,然后点击人行横道图标,在路口点击右键就可以了。

接下来是单个路口的人行横道,现在道路中间生成虚拟路口

然后选择人行横道图标和模型,在上面生成的路口点击鼠标右键,最后的效果如下

标注红绿灯

点击红绿灯图标[2],按照下图的顺序就可以自动创建红绿灯,同时还可以设置每条lane的相位

下面是添加完成之后的效果图。

标注车道标识

当然为了更好的导出模型文件,这部分只是视觉效果(如果只是做高精度地图,可以忽略),主要是为了给仿真器中的城市或者道路模型使用的,可以在车道上增加一些标识。

导出地图

接着选择菜单File->Export,就可以选择需要导出的高精度地图格式了。

当然RoadRunner最大的好处在于可以直接导出模型和高精度地图,这样就可以直接导入仿真器和自动驾驶系统进行仿真了,这是它最大的优势。

总结

由于RoadRunner是商业软件,但是对一般的小地图来说,也足够进行标注了,如果有志于开源的标注工具当然就更好了。

问题汇总

  1. 关于投影的设置问题?

因为点云地图是基于相对坐标,我们要把点云坐标加上GPS的偏移,得到点云在世界坐标系中的位置,我们拿拼图游戏来做比喻,点云地图就是一块拼图,需要放入地球中的一块区域。

2. 导出的时候有高度信息?

因为导出的地图带高度信息,因此在dreamview中会出现一部分地图在地上,一部分地图在地下的情况(没有显示),可以写个脚本去除高度信息。

原创声明,本文由作者授权发布于Apollo开发者社区,未经许可,不得转载。
发表评论已发表 0 条评论
登录后可评论,请前往 登录
暂无评论~快去发表自己的独特见解吧!
目录
导入点云
坐标系原理
调整画布
标注车道
标注路口
标注斑马线
标注红绿灯
标注车道标识
导出地图
总结
问题汇总