自动驾驶学习之建图

建图算法选择

在Autoware中提供的构建点云地图的算法是ndt_mapping,属于比较基础的算法,速度会比较慢(没有GPU加速的情况下),最近几年LOAM系列的算法比较火,我周围做SLAM的同学推荐我试试LeGO_LOAM,以下的内容就主要基于这两个算法进行。

一 . NDT_mapping

1. 首先启动autoware:

$ roslaunch runtime_mananger runtime_mananger

由于NDT_mapping的实时性不是很好(CPU),自己电脑GPU算力不够,没测试过。。所以建议先用雷达录制Bag文件,再进行建图

2. 在Simulation界面点击Ref加在录制好的Bag

点击Play 后等个1 ~ 2秒后点击Pause

在这里插入图片描述

3. Computing界面

选择ndt_mapping 节点后面的[app]进行参数设置,参数含义后边再补充,最常用的就是GPU算力足够的话,Method Type选择pcl_anh_gpu,其他参数默认即可

在这里插入图片描述
设置完参数,回到Computing界面,启动ndt_mapping这个节点

在这里插入图片描述

4. 开始建图

回到Simulation界面,点击pause恢复播放bag,此时在终端会有以下界面:

在这里插入图片描述
要注意的是Processed/Input: 33/39这条显示,表示的是读入的点云数据和已经处理的点云的数据,两者之间相差不要过大,之前看有人说8G显存的GPU在两个数字相差500左右就要暂停等待一下,我用自己电脑CPU的话一直控制不让他相差超过300,要不然处理后输出的点云会很奇怪。。。

剩下时间等待建图成功之后即可,等建完点云地图之后,回到Computing界面,点击ndt_mapping后面的app, 点击下方的Ref选择自己想要保存PCD文件的为知,并点击PCD OUTPUT 就可以在自己选择的目录下看到绘制好的点云地图了。

二 . LeGO_LOAM

刚拿到小车的时候,我想要在学校围着一栋楼建个图跑一跑,但是NDT_Mapping实在是太慢了,加上我没有GPU可以加速,每次跑都要半个多小时,还要盯着终端看读入的点云数目不能超过处理的点云数目太多,烦死个人,然后我周围的小伙伴给我推荐了LeGO_LOAM,果然又快又好用

1. LeGO_LOAM 的安装

安装过程在LeGO_LOAM的官方github(传送门)上都有,这里记录我的安装过程和踩的小坑~

(1)首先需要先安装ROS和 gtsam.

安装ROS我在上一篇博客中有写(传送门),这里提一下安装gtsam,步骤如下:

wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install

我遇到的第一个坑出现了,出现了下面这个问题:
在这里插入图片描述
经过排查后是gtsam的问题,原因是我按照上面那个步骤安装的gtsam不对,但我同学就没事,,我又重新找了一版,分享到(这里).

(2)安装LeGO_LOAM

cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make

2. Demo

官方Bag地址:Google Drive

启动LeGO_LOAM:

 roslaunch lego_loam run.launch

播放Bag:

rosbag play *.bag --clock --topic /velodyne_points /imu/data

3. 自用建图

首先原始LeGO_LOAM建出的图是没办法直接拿来用的,因为它的坐标系与咱们正常使用的坐标系朝向不同,所以在输出的时候需要对其进行下转换

在mapOptmization.cpp文件中添加一些代码使得最后输出的pcd文件的坐标系为常用坐标系:

保存地图:

在源码中找到这句话,注释掉,每次跑完算法之后就会自动保存pcd文件,需要的是finalpcd

突然发现自己电脑上的LeGO_LOAM删掉了,只有SC_LeGO_LOAM,反正也差不多,并且使用来说SC_LeGO_LOAM更好用留个坑,以后再用LeGO的时候补上

三 . SC_LeGO_LOAM

相比LeGO_LOAM,回环检测的效果更优,建出的地图更方便使用(标注)。

1. 安装

同LeGO_LOAM

2. 使用

主要在mapOptmization.cpp增加了DS1指针用于最后输出finalCloud.pcd

pcl::PointCloud<PointType>::Ptr globalMapKeyFramesDS1;

在这里插入图片描述

进行坐标变换的代码:

globalMapKeyFramesDS1->width = globalMapKeyFramesDS->points.size();
globalMapKeyFramesDS1->height = 1;
for(int i = 0; i < globalMapKeyFramesDS->points.size(); ++i)
{
     thisPoint.y = globalMapKeyFramesDS->points[i].x;
     thisPoint.z = globalMapKeyFramesDS->points[i].y;
     thisPoint.x = globalMapKeyFramesDS->points[i].z;
     thisPoint.intensity = globalMapKeyFramesDS->points[i].intensity;
     globalMapKeyFramesDS1->points.push_back(thisPoint);
}

在这里插入图片描述
修改了下采样参数使得最后输出的点云更加稠密:(方便标注)

在这里插入图片描述

详情可以见自用备份:https://github.com/HereQ/SC_LeGO_LOAM_Convert_coordinate.git

参考

  1. https://github.com/RobustFieldAutonomyLab/LeGO-LOAM
  2. https://blog.csdn.net/Kamfai_Row/article/details/106893979
  3. https://www.cnblogs.com/hgl0417/p/11130747.html
  4. https://blog.csdn.net/JZJHfc/article/details/105318182

版权声明:本文为qq_33971022原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。