反光板导航SLAM(一)安装VEnus

最近在做反光板导航,从网上看到一个案例:反光柱建图venus和我的方案
这里面讲述了一个反光板导航的一个示例,主要使用的是一个开源的项目包venus,这个代码的源码是在这里。由于它不是一个ROS库,所以安装方式与ROS的安装方式略有不同。简单记录一下:

1、下载源码

home目录下,在终端执行下述命令

git clone https://gitee.com/dustinksi/VEnus.git --depth=1

2、编译

进入刚才下好的文件夹下,注意这里可能文件夹内会存在一个build文件夹。如果有的话需要先删除掉。要不然后面的步骤会出现很多问题。然后执行下述操作:

mkdir build && cd build
cmake .. -DBUILD_VENUS_TEST=true
make -j1
make test
sudo make install

这里在执行安装命令的时候会检查依赖项,关于ceres的问题,可以参考上一篇博文中的ceres的安装过程。另外如果是要求opencv版本依赖问题,可以在CMAKEList文件中将关于opencv的那一行改为:

find_package(OpenCV REQUIRED QUIET)

其他的应该就没有什么问题了。

3、envus基本思路

安装完成后当然是要看一下别人的代码具体实现啦,详细的介绍下一篇展开讲,这里简单介绍其中几个比较重要的函数:

3.1 IntensityExtraction::Extract

Extract函数可以算是envus的起始函数,这个函数的作用是从激光点云中提取出反光柱的中心点。它的基本思路是对激光点云取连续的点,比如3个或者5个,然后如果这里面有超过一半的点的强度instensite都超过阈值。则认为这个点是一个反光柱点可能的位置。最后数据会被保存到candidate_cloud里面

3.2 DBscanAssociation::Association

Association是其中的第二个函数。前面我们提取出了反光柱的中心点,但是这个点是不是反光柱以及它属于哪个反光柱我们还不知道,所以这个函数的作用就是区分出这个强光点是属于噪声点还是反光柱点。

3.3 CartoMapping::InsertFeatureList

InsertFeatureList函数所执行的东西有点多,它包含了:

3.3.1 InsertToFeatureGraph

插入一个新的反光柱

3.3.2 SiftNewFeaturePoints

判断当前获取的反光柱中心与反光柱集合中的哪个反光柱所匹配

3.3.3 ComputeCurrentPose

这里输入为匹配上的当前反光柱与全局反光柱的集合,返回出一个大致的机器人位姿

3.3.4 OptimizeCurrentPose

然后根据预估的位姿关系以及匹配关系进一步优化最终位姿,得到机器人的实际位姿。

从这里我们大致可以看到整个算法的整体流程。它主要是通过反光柱与反光柱之间的匹配得到预估位姿,然后再通过匹配关系以及预估位姿调用ceres得到优化后的位姿。这里最关键的点再于第二步的匹配不能出错,要不然的话会导致后面的位姿出现偏差。另外这个算法只是采用了激光数据,可以考虑以里程计作为预估。最后对于位姿跳变也应该做一定判断。

你可能感兴趣的:(反光板导航SLAM,人工智能)