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是商业软件,但是对一般的小地图来说,也足够进行标注了,如果有志于开源的标注工具当然就更好了。
问题汇总
- 关于投影的设置问题?
因为点云地图是基于相对坐标,我们要把点云坐标加上GPS的偏移,得到点云在世界坐标系中的位置,我们拿拼图游戏来做比喻,点云地图就是一块拼图,需要放入地球中的一块区域。
2. 导出的时候有高度信息?
因为导出的地图带高度信息,因此在dreamview中会出现一部分地图在地上,一部分地图在地下的情况(没有显示),可以写个脚本去除高度信息。
标签:车道,高精度,地图,路口,点击,点云,apollo,标注 From: https://blog.csdn.net/NEON7788/article/details/139508713