首页 > 其他分享 >apollo高精度地图标注

apollo高精度地图标注

时间:2024-06-06 19:59:42浏览次数:26  
标签:车道 高精度 地图 路口 点击 点云 apollo 标注

apollo高精度地图标注

附赠自动驾驶最全的学习资料和量产经验:链接

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

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

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

导入点云

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

image

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

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

image

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

image

那么如何设置投影呢?我们先搞清楚点云的坐标转换原理,我们上一个步骤生成的点云是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比较好),根据强度还是颜色渲染等。

image

调整画布

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

image

标注车道

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

选择车道材质

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

image

绘制车道

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

image

调整高度

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

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

image

调整车道宽度

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

image

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

标注路口

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

十字路口

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

image

标注T型路口

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

image

调整路口

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

image

路口车道线

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

image

标注斑马线

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

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

image

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

image

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

image

标注红绿灯

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

image

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

image

标注车道标识

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

image

导出地图

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

image

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

总结

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

问题汇总

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

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

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

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

标签:车道,高精度,地图,路口,点击,点云,apollo,标注
From: https://blog.csdn.net/NEON7788/article/details/139508713

相关文章

  • 高精度滚珠丝杆在自动化生产中的关键因素!
    如今,自动化技术正以前所未有的速度改变着人们的生活和工作方式,特别是在高精度精密设备的制造与应用领域,提高生产效率和优化生产流程正变得越来越重要。在自动化生产中,滚珠丝杆的优化应用对于提高生产效率、保证产品质量至关重要。滚珠丝杆的优化应用一般是由材料选择与制造工......
  • 「C++」论高精度
    大家好,我是Charzie。在编程领域,高精度计算是一个常见的问题。当标准的整型或浮点型无法满足我们的计算需求时,高精度计算就显得尤为重要。在C++中,虽然标准库没有直接提供高精度数据类型,但我们可以通过一些技巧和工具类来实现高精度计算。为什么需要高精度?在编程中,我们经常会遇到......
  • LED车灯驱动IC高精度电流输出±3%以内降压恒流芯片AP5161
    概述AP5161是一款高精度降压型大功率LED恒流驱动芯片。适用于输入电压100V以内的大功率LED恒流驱动电源。专利的高端电流检测、固定频率、电流模PWM控制方式,具有优异的线性调整率和负载调整率。芯片采用的特有恒流控制方式,使得LED输出电流精度达到±3%以内。芯片内部集......
  • OpenCv之简单的人脸识别项目(特征标注页面)
    人脸识别准备八、特征标注页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件3.定义两个全局变量4.定义选择图片的函数4.1函数定义和全局变量声明4.2打开文件对话框并获取文件路径4.3处理图片并创建标签4.4显示图......
  • 1134高精度阶乘(数组)
    #include<stdio.h>#defineN3000//定义数组长度intmain(){inta[N],i,j,k,n;while(scanf("%d",&n)!=EOF){ for(i=0;i<N;i++)//初始化数组 a[i]=0; a[0]=1;//第一位设为1 k=0;//记录进位坐标 for(i=1;i<=n;i++)//计算阶乘......
  • candence17.4 板框、原点、尺寸标注的图文步骤
    一、板框  1、在右侧Optins,选择BoardGeometryClass(父类)中OutlineSubclass(子类)  2、Add→line随便画一个图形,由于直接使用Add->Line或者Add下的绘制工具都是不能绘制成功,Allegro不认它是封闭图形,需要通过用Composeshape把外框做成封闭图形才行。  3、在......
  • YOLOv8: 标注石头、识别边缘及计算面积的方案
    YOLOv8:标注石头、识别边缘及计算面积的方案引言YOLO(YouOnlyLookOnce)是一种非常有效的实时目标检测算法,自其首次发布以来就受到了广泛的关注和应用。YOLOv8是这一系列算法的最新版本,继承了之前版本的高效性和准确性,同时在模型结构和性能上进行了优化。在本文中,我们......
  • 高精度-高精度(信息学奥赛1169)
    #include<iostream>#include<cmath>#include<vector>usingnamespacestd;intmain(){stringa,b;cin>>a>>b;vector<int>x,y,sum;for(inti=a.size()-1;i>=0;i--){x.push_back(a[i]-'0&#......
  • 高精度 加+ 高精度
    #include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>a,b;stringm,n;cin>>m>>n;for(inti=m.size()-1;i>=0;i--){a.push_back(m[i]-'0');}for(inti=n.si......
  • 高精度 加+ 低精度
    #include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>a;stringm;intn;cin>>m>>n;for(inti=m.size()-1;i>=0;i--){a.push_back(m[i]-'0');}vector&......