基于Autoware制作高精地图(一)
开始进入正题,也是最近在忙的一件事,制作高精地图。
高精地图的制作大概分为以下四个流程(不一定完全正确):
1.构建点云地图;
2.点云地图标注;
3.制作OpenDrive地图;
4.地图存储索引。
这篇文章主要讲解如何构建点云地图。
首先我们要有一段自己录制的激光雷达点云数据,这里推荐大家采用Velodyne16线激光雷达,因为这里我们构建的点云底图是三维的,而采用Velodyne而不是速腾聚创(rslidar)等其他品牌的原因是Autoware里面有一个选项是Velodyne。
不过影响不大,因为github上有大佬写了一个包可以将rslidar采集到的点云数据转为velodyne点云数据,然后我们采用rosbag去播放录制就行了。
Autoware导入激光雷达点云数据包的时候要求点云数据的话题是/points_raw而不是/points_cloud,这里有两种做法,其中一种就是通过Autoware来录制数据,这样录制保存后的数据的Topic就是/points_raw了,无需我们后续处理就可以直接使用了,如果想这么执行的小伙伴上网搜一搜就有教程了;
另一种方法正好是我昨天得到的一丝灵感实现的!它的好处在于即便我们录制的数据包不是纯激光雷达录制的也没关系,我们可以只提取其中激光雷达的数据保存就行了;在Ubuntu系统中录制的点云数据包是以.bag为后缀结尾的,我们要想播放这个包就需要执行
rosbag play xxx.bag
查看包内的话题等参数命令行为
rosbag info xxx.bag
首先先查看点云数据包的话题,如果发现是velodyne录制的/points_cloud话题,则我们运行以下命令行更改数据包话题:
roscore #终端1
rosparam set use_sim_time true #终端2
rosbag record /points_raw #终端2
rosbag play --clock xxx.bag /points_cloud:=/points_raw #终端3
这里一共需要开启三个终端,其中第一个是启动ROS;
终端2先要对use_sim_time进行设置,也就是使用我们所说的仿真时间,然后使用rosbag record进行录制,注意我们在后面还加上了一个/points_raw话题,那么问题来了,前面说到了我们并没有这个话题,我们的话题是/points_cloud,怎么录制/points_raw这个话题呢,解决方法在终端3中。
终端3是播放点云数据包,–clock是跟我们前面设置的use_sim_time有关联的,感兴趣的小伙伴可以上网搜搜,这里不过多阐述了。但是后面还有语句“/points_cloud:=/points_raw”,这一句的意思是把xxx.bag包中的话题/points_cloud改为话题/points_raw,这样我们在终端2就可以录制到只包含/points_raw话题的数据包了。
进行下一步,放入Autoware中构建点云地图。
这里我们采用Autoware中已经写好的一个简单的TF关系,所以基本不用大家写代码文件,只要动动鼠标即可;
设置TF关系
在Setup菜单中,选Localizer为Velodyne(一般默认就是这个),点击下方Baselink to Localizer的TF按钮(一般后面默认的数值是1.2、0、2、0、0、0);再点击下方的Vehicle Model,Autoware会自动加载一个默认模型(在rviz显示时,如果有激光雷达数据,车辆会显示为黑色);
设置ndt_mappint
在Compulting菜单中找到lidar_localizer下的Ndt_Mapping选项,点击后面的app进行设置,将Method_Type选为pcl_generic,有的教程推荐选择pcl_anh_gpu,也就是说用GPU,这个我用的时候有的时候能成功,有的时候会报错,显示进程杀死,但是generic一般就没这个问题;
设置TF转换
在Map中点击TF的ref选择加载文件的路径,如果你安装的是Autoware1.14,应该选择的是,这是加载默认world到map的坐标转换,再点击TF按钮;
autoware.ai/src/autoware/documentation/autoware_quickstart_examples/launch/tf_local.launch
制作点云地图
点击Simulation页面,点击页面右上方的ref按钮,加载之前录制的bag文件(点云话题要是/points_raw),点击Play按钮播放,然后在右方playing后面有数字显示时点击Pause暂停,再点击右下方的Rviz按钮,启动Rviz,在Rviz中加载配置文件,配置文件路径为:
autoware.ai/src/car_demo/car_demo/rviz/default.rviz
再回到runtime_manager的simulation页面再次点击Pause页面就可以播放了。
界面如下:
保存点云地图
当点云地图构建完后点击compulting中的Ndt_Mappint后面的app,最下方有一个保存路径,点击右边的ref设置保存路径,将Filter Resolution设置为0.2,点击PCD OUTPUT输出.pcd文件。
如果要查看构建的点云地图,点击runtime maneger的Map菜单,点击Point Cloud右边的ref按钮加载保存的.pcd文件,点击Point Cloud按钮,当下面的进度条右边显示OK的时候则加载结束,然后点击右下角的Rviz启动Rviz模块,通过Add加载/points_map话题即可显示图像(注意加载的路径以及pcd文件一定要是全英文的,否则加载不成功的,亲测!)
如图示:
另一种查看方式是通过PCL库查看的,在终端输入
pcl_viewer xxx.pcd
显示的图片如下:
至此,点云地图构建完毕!