编译PCM之前,需要先安装mrpt、mrpt-bridge。
1. 安装mrpt、mrpt-bridge。
由于通过apt-get install的方式没有安装成功mrpt-bridge,因此下载mrpt-bridge的源码进行安装。
mrpt-bridge的源码地址为:
mrpt_bridge源码https://github.com/mrpt-ros-pkg/mrpt_bridge下载好源码,在编译源码之前,先输入如下命令安装marker_msgs和mrpt_msgs:
sudo apt-get install ros-melodic-marker-msgs
sudo apt-get install ros-melodic-mrpt-msgs
接下来可以正常完成mrpt-bridge-msgs的源码编译。
2. 编译PCM
编译中出现如下问题:
在PCM的github上有人问同样问题,需要安装另一个代码SE-Sync。
SE-Sync的源码如下:
SE-Synchttps://github.com/david-m-rosen/SE-Sync按照步骤安装即可。
接下来将SE-Sync中的C++整个目录改名为SE-Sync,复制进robust_multirobot_map_merging-master/src/third_parties中,替换掉该目录下的SE-Sync。
catkin_make在baseline_ws下编译即可成功。
3.PCM运行例子时遇到的问题
第一次运行直接在/pose_graph_datasets下运行,结果出错,原因是代码中需将优化结果输出到/result文件夹下,而/pose_graph_datasets下没有\result。
之后发现应该将输入文件复制到\robust_multirobot_map_merging-master下,并在该文件夹下运行node,就可以运行成功。
但是运行中出现了问题,最大团的优化结果应该是错的,因为输出的inlier_loop只有一个。。。
后续
4. 编译PCM最原始的代码
找到PCM最原始的代码,编译报错:
解决方法是在报错的代码中加入 #include<vector>,如下:
成功解决该报错,但是出现了其他报错,如下图:
查了一下 iota()是c++的赋值函数,用于对一定范围的数据进行赋值,需要加入头文件:
#include <numeric>
通过在报错的cpp文件中加入该头文件,正确完成编译。