Autoware 培训笔记 No. 1——构建点云地图

1. 首记

相信许多刚开始玩无人驾驶的人都用过Autoware,对runtime manager都比较熟悉,虽然可以通过各种渠道了解到有些设置,甚至有些设置的app下参数的含义,但是,在真车的使用过程中,不是每个人能将这些配置,以及配置下的参数设置正确。我最近刚刚参加Udacity、PIX以及Autoware三方发起的培训活动,培训针对Autoware最基本的“可以让车跑起来”这件事的最基本设置(包括设置勾选与参数设置)做了详细的讲解,对于Autoware的初学者真的有很大帮助,通过这次培训,我们培训team可以让一部真车沿着地图上的waypoints跑起来,收获很大。

我会把这次培训针对Autoware的部分充分整理出来,供大家参考,有真车的人可以试试。

我用到的数据的地址为:链接: https://pan.baidu.com/s/10oW1THdu7_g5-7VWoFHq6Q 提取码: qcum

 

2. 致谢

感谢我们team中的勤劳的老司机理想、聪明伶俐可爱的geek明明、一直默默付出的Miss黄为我们成功完成项目作出的努力。感谢Udacity的腿哥在背后的付出与支持,感谢PIX辛勤的为我们服务,感谢Autoware的导师Alex对我们的指导,Alex对我提出的问题总是能给予详细耐心的回答。

特别感谢曾sir,我的整理是在曾sir的前期工作之上的。曾sir的博客地址为:dowson.live

 

3. 地图构建

玩自动驾驶的都应该明白为什么要构建地图,这里就赘述了。直接上操作

3.1. 首先启动runtime manager,进入autoware/ros/文件夹运行

./run

 

3.2. 启动激光雷达

(1)针对velodyne 多线lidar

如果你有velodyne激光可以启动默认配置:[Sensing] 页面下 [Lidars] 选项下针对你的velodyne选择,velodyne激光对应的发布的点云topic:/velodyne_packets,frame_id:velodyne,topic会被重映射成为/points_raw。

例如:假如你有16线激光,点选 [velodyne VLP-16] 的 [config],点选[ref],加载/home/pix/Autoware/ros/src/sensing/drivers/lid ar/packages/velodyne/velodyne_pointcloud/param s/VLP16db.yaml路径下的配置文件(自己多线激光雷达可以针对这个配置改写),退出 [config],勾选 [velodyne VLP-16] 选项(一般的操作都是先修改config或者app下的配置或参数文件,然后勾选选项)。

                

这是你可以通过,命令

rostopic echo /points_raw 

查看是否有点云数据输出。

当然也可以通过autoware提供的 [Topics] 工具进行查看,这里介绍一下这个工具。[Topics] 工具不仅可以查看Topic输出,还可以查看Topic的一些详细信息。

 

以上左图是 [Topics] 工具,左侧是Topic,新打开一个节点后可以点击 [Refresh],会刷新Topic。如果查看某个topic,比如,上图我点开了左侧的/points_raw topic,勾选 [echo],对话框中会显示topic中的内容,[Info] 中会显示topic(/points_raw)对应的类型,以及发布者和订阅者。

 

(2)针对其他品牌多线lidar

如果你有其他品牌的激光,他们发布的topic不是/velodyne_packets,且frame_id同样不对应,这时可以自己写个程序转一下,参照:https://www.cnblogs.com/hgl0417/p/11067660.html。然后单独运行你的lidar driver node,将你的点云数据模拟成velodyne数据。此时,不需要点选runtime manager上的lidar配置文件(每个配置文件对应一个package或者node,意义在于将对应的topic发布,此时你已经发布了topic,所以不需要在点选上述配置文件)。

 

3.3. 录制点云数据

点击runtime manager右下角 [ROSBAG] 按钮,在弹出的对话框中点击下方点击 [Refresh] 按钮刷新话题列表,找到/points_raw 并勾选,如下图。

老司机开车,点击 [Start] 按钮,等数据录完,点击 [Stop],此时数据会保存在autoware/ros目录下。此时,数据录制完毕。

 

3.4. 回放点云数据

为了查看数据录制效果,需要数据回放数据。

 

(1)点击进入 [Simulaton] 页面,点击界面右上方 [Ref] 按钮,加载之前录制的 bag 文件。

 

(2)点击 [Play] 按钮播放数据,然后再点击 [Pause] 暂停播放。此时你会发现右边进度条有数值出现,如下所示。 

注意:在进行此步骤的时候确保之前启动的 [Sensing] 下的传感器驱动关闭,或者关闭自己的lidar driver

 

(3)右下方的 Rviz 按钮,启动 Rviz 可视化窗口。 Rviz 界面中左菜单栏中找到 Fixed Frame, 在该栏目中修改 world velodyne点击左下角 [Add] 按钮,加载 By Topic /points_raw 话题的 PointCloud2 选项。

点击 runtime manager 下的 [Simulation] 菜单的 [Pause] 按钮,此时在 Rviz 中可以看到之前记录的数据被显示出来。如下所示。

 

3.5. 建图

这里,需要先讲一下autoware的建图用坐标系之间的关系,基本坐标系有四类:分别为世界坐标系:world;地图坐标系:map;车的坐标系base_link;传感器坐标系:velodyne。他们之间的转换关系,如下:

从world到map的坐标系转换与从base_link到velodyne的坐标系转换是固定的,用ROS的TF即可。从map到base_link的映射就需要scan-to-map的算法,autoware在建图采用的是ndt matching。

 

(1)设置从base_link到velodyne坐标系的TF。

在 [Setup] 菜单中,确保 [Localizer] 下选项为 [Velodyne],在 [Baselink to Localizer] 中设置好各个参数之后点击 TF 按钮,其中x、y、z、yaw、pitch、roll表示真车雷达中心点与车身后轴中心点的相对位置关系(右手坐标系,真车后车轴为原点),此时可以点击[Vehicle Model],如果[Vehicle Model]为空,那么会加载一个默认模型(在rviz显示时,如果有激光雷达数据,车辆会显示为黑色)。如下所示。

 

(2)设置map到base_link转换

 [Compulting] 菜单栏中找到 [lidar_localizer]下的 [Ndt_Mapping] 选项,设置 [app],并勾选。Ndt_Mapping会有一些设置需要注意一下,如下图:

          

参数用默认,如果有GPU(一定有,因为没有CUDA不能安装autoware),可以选择 [pcl_anh_gpu]。

 

(3)设置从world到map转换

点击 [Map] 页面,点击 [TF] 的 [ref] 选择 autoware/ros/src/.config/tf/tf_local.launch 文件,这是加载默认world到map的坐标转换,打开tf_local.launch文件如下: 

<launch>

    <node pkg="tf" type="static_transform_publisher" name="world_to_map" args="0 0 0 0 0 0 /world /map 10" />

</launch>

 args的参数“0 0 0 0 0 0 /world /map 10”表示:从/world坐标系转换到/map坐标系的x, y, z, roll, pitch, yaw转换,且频率为10Hz。

点击 [TF] 按钮,如下图:

 

(4)制作点云地图

和回放点云数据一样,点击进入 [Simulaton] 页面,点击界面右上方 [Ref] 按钮,加载之前录制的 bag 文件,点击 [Play] 按钮播放数据,然后再点击 [Pause] 暂停播放。点击runtime manager右下方的 [Rviz] 按钮,启动 Rviz 可视化窗口。加载Rviz的配置文件,路径为:autoware/ros/src/.config/rviz/ndt_mapping.rviz。加载后rviz的配置文件后,回到runtime manager的 [Simulaton] 页面,再次点击 [Pause] 开始播放,这是可以看到Rviz 可视化窗口显示如下:

可以看到有一辆黑色小车在跑,而且它的激光雷达数据在RViz中不断累加。

注意:由于rviz会占用大量的系统资源,所以在见图过程中不需要打开rviz的显示,只需要查看terminal上的显示即可,如下所示

注意:上图的最下面的(Process/Input): (1688 / 1697),这两个数字前一个数字表示正在处理的点云帧数,后一个表示加载的点云帧数。如果两个数字相差过大,会出现运行错误。我们使用的gpu是gtx1080,根据曾sir的描述,针对gtx1080,如果前后两个数字相差1000以上,就要按[Simulaton] 页面的[Pause] 按键,暂停加载,等待一下正在处理的数字,两个数字重新接近之后,可以再次按 [Pause] 按键运行。

运行停止,表示地图生成完毕。

 

(5)保存点云地图

打开 [Compulting] 下的 [Ndt_Mapping] 选项的 [app],如下所示:

点击 [ref] 选择保存地图的路径,将 [Filter Resolution] 参数设置为0.2,点击 [PCD OUTPUT]按钮,开始保存pcd文件。此时,可以在保存的路径里看到一个.pcd文件,该文件就是地图文件。

 

(6)查看地图文件

选择runtime manager的 [Map] 菜单,点击 [Point Cloud] 按钮的 [ref],加载刚才保存.pcd文件,并点击 [Point Cloud] 按钮,进度条显示OK,则加载完毕,如下所示:

点击runtime manager 右下角的 [RViz] ,在RViz显示界面点击左下角的 [Add] 按钮,通过 [By Topic] 找到/points_map 并打开,在rviz中显示如下:

到此为止,点云地图制作完毕。

 

(7)点云地图评价

总结为一下几点:

  • 地图是否扭曲变形
  • 地图在闭合处z方向是否对齐
  • 扫描在墙壁上的点是否很粗
  • 扫描在树木上的点是否有从影

 

引用:

dowson.live

 

原创文章,转载请引用。

posted on 2019-07-06 15:11  LeonHuo  阅读(22932)  评论(14编辑  收藏  举报

导航