Cartographer是Google开源的激光SLAM项目,目前是激光SLAM方案中较为稳定的,已应用于工业机器人激光建图定位,我之前是研究视觉SLAM的,后面转到激光SLAM方案,未来的研究重心是想放在激光、IMU和视觉多传感器融合的SLAM方案上,所以目前是准备将Ccartographer作为自己激光入门的项目来做,之前有在做,但是没有好好记录,趁着这段时间可以简单记录一下。好啦,废话不多说,开始进入正题。
在学习Cartographer之前,首先我们需要部署环境以及安装相应的依赖包和库文件,然后编译运行,在这过程中我会将自己遇到的问题展示出来并阐述下自己是如何解决的,但不一定能够解决小伙伴们碰到的所有问题,因为每个人原先环境的配置都是大相径庭的。本人是在Ubuntu16.04系统下进行安装配置的。
第一步,安装Cartographer的依赖
终端命令:
sudo apt-get install -y google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build protobuf-compiler python-sphinx ros-kinetic-tf2-eigen libatlas-base-dev libsuitesparse-dev liblapack-dev
第二步,安装Cartographer所依赖的库
Cartographer所依赖的库有4个,分别是Eigen,Ceres,Protobuf,Abseil。
(1)Eigen库编译安装
安装Eigen库之前,我们先要明确版本,需要Eigen3.2.9版本。附上Eigen官方的下载链接。
如果之前是已经装过Eigen3.2.9版本以上的其他版本,要先删除电脑原先存在的版本。
删除相应文件夹:
sudo rm -rf /usr/include/eigen3 /usr/include/Eigen
sudo rm -r /usr/local/share/eigen3/cmake/
若是报没有对应文件夹的错误,可以忽略,因为电脑中本身没有这个文件夹,对后续的版本切换没有影响。在完成后进入Eigen3.2.9的安装即可。
下载Eigen3.2.9之后,进入Eigen3.2.9文件夹下进行编译安装:
cd eigen3.2.9/
mkdir build
cd build
cmake ..
sudo make install
注意,Eigen的默认安装路径是在/usr/local/include下,若是遇到找不到Eigen库的原因,可以考虑下路径的问题,可以采用以下方式解决:
sudo cp -r /usr/local/include/eigen3 /usr/include/
sudo ln -s /usr/include/eigen3/Eigen /usr/include/
这里简单提一下查看Eigen版本的终端命令,可以用于判断是否安装正确版本Eigen库的依据。
pkg-config eigen3 --modversion
(2)Ceres库编译安装
Ceres库的版本必须是1.13.0,其它版本与Eigen3.2.9是不匹配的,在安装时会显示找不到Eigen3.2.9的依赖。相信很多小伙伴在后面安装Cartographer时会碰到此类问题,不妨先记下,回过头来可以看看。如下图所示:
此类问题定位在Eigen库和Ceres库版本不匹配之上,经过我的试验,Ceres1.13.0与Eigen3.2.9之间是相互匹配的,各位小伙伴可以安装这样的版本进行配置。下面给小伙伴们提供下Ceres库的各类版本下载地址。
若是小伙伴们之前安装过别的Ceres版本,可以采用如下终端命令进行更换:
sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a
sudo rm -r /usr/local/share/Ceres
同样,遇到没有对应文件夹的报错,请忽略进行下一步Ceres1.13.0的安装。
下载Ceres1.13.0后,进入对应文件夹安装编译:
cd ceres-solver-1.13.0
mkdir build
cd build
cmake ..
make -j8
sudo make install
查看Ceres版本是否为对应版本的方法是查看文件夹下的package.xml文件,如下所示为Ceres1.13.0版本的示意图,可以看到Version那一行后面对应1.13.0:
(3)protobuf库的安装
protobuf必须是3.0.0以上,protobuf安装方式比较特殊,为脚本安装,这里建议下载protobuf3.4.0版本,这是我尝试的经验。
首先在网上下载protocbuf3.4.0文件,然后在运行脚本./autogen.sh。在这一步可能会遇到报错,如果没有遇到这个问题的小伙伴可以跳过:
Google Mock not present. Fetching gmock-1.7.0 from the web…
这是在提示我们缺少gmock-1.7.0,按如下方式进行解决,第二行命令是个更改文件夹命名的命令,我是有点强迫症,所以改了下,能够习惯此类命名方式的小伙伴可以忽略第二行,相应第三行cd后面的文件夹名更改下进行:
git clone https://github.com/paulsapps/gmock-1.7.0
mv gmock-1.7.0 gmock
cd gmock
mkdir build
cd build
cmake ..
make
sudo make install
接下来需要需要对脚本进行更改。
sudo vi autogen.sh
进入后将如下代码注释掉:
if test ! -e gmock; then
echo "Google Mock not present. Fetching gmock-1.7.0 from the web..."
curl $curlopts -L -O https://github.com/google/googlemock/archive/release-1.7.0.zip
unzip -q release-1.7.0.zip
rm release-1.7.0.zip
mv googlemock-release-1.7.0 gmock
curl $curlopts -L -O https://github.com/google/googletest/archive/release-1.7.0.zip
unzip -q release-1.7.0.zip
rm release-1.7.0.zip
mv googletest-release-1.7.0 gmock/gtest
fi
最后按照如下命令进行安装即可。
./autogen.sh
./configure
make
make check
sudo make install
在这里进行./configure时可能会出现configure: WARNING: no configuration information is in third_party/googletest的错误。这里我是因为下载Protobuf时采用终端git clone的方式,导致部分文件缺失,小伙伴千万记得检查third_party/googletest下有没有googletest文件夹,没有请去网上重新下。
protoc安装过程中./configure失败截图如下:
protoc安装过程中./configure成功截图如下:
安装protobuf过程可能碰到的其他问题:
问题1:
解决方法:
安装如下工具:
sudo apt-get install autoconf automake libtool
sudo apt-get install libffi-dev
问题2:
报找不到protoc的错误。
分析:可能原因是protoc的位置不对,carto的搜索protoc的路径为/ usr/bin/protoc,默认下载位置为/usr/local/bin/protoc
解决方法:手动copy
sudo cp /usr/local/bin/protoc /usr/bin
问题3:
后面在编译cartographer时可能出现如下错误:
/usr/local/bin/protoc: error while loading shared libraries: libprotoc.so.14: cannot open shared object file: No such file or directory
分析:链接动态库的路径错误
解决办法:改下链接路径
export LD_LIBRARY_PATH=/usr/local/lib
将/usr/local/lib加入到环境变量 LD_LIBRARY_PATH中去。
(4)abseil库安装
cartographer对abseil没有版本要求,但是一定要有。
采用如下终端命令进行安装:
git clone https://github.com/abseil/abseil-cpp.git
mkdir build
cd build
cmake .. -DCMAKE_CXX_STANDARD=11
make -j8
sudo make install
第三步、安装Cartographer及Cartographer_ros
这里要千万注意carographer和cartographer _ros版本必须对应,下载的时候在同一个git上的往往是没有问题的,不要东拼西凑,在安装时会有各种不同的奇葩问题。
采用如下终端命令进行:
mkdir cartographer
cd cartographer
mkdir src
cd src
git clone https://github.com/hitcm/cartographer.git
git clone https://github.com/hitcm/cartographer_ros.git
catkin_make_isolated --install --use-ninja
下面对安装时遇到的问题进行归纳总结:
问题1:显示找不到lua
解决办法:
先在终端输入lua -v查看自己电脑里面是否有lua,若是出现以下情况,则执行sudo apt install lua5.2
若是显示版本号,但是版本低于5.2,也请重装lua5.2。还有个原因可能是文章开头的安装依赖(liblua5.2-dev)未成功安装,因为开头依赖这么多,可能未注意到此类依赖未成功安装,建议单独重新再装一遍。
以下便是安装成功的画面:
问题2:Cartogrpher安装过程中gtest失败,如下图所示:
解决方案:
protoc版本为2或者protoc3未成功安装(注意网上有些资源的git代码里面是少东西的,注意甄别),若是都未成功,建议尝试单独编译安装cartographer和cartographer_ros,如下所示:
首先安装Ccartographer:
git clone https://github.com/hitcm/cartographer.git
cd cartographer
mkdir build
cd build
cmake .. -G Ninja
ninja
ninja test
sudo ninja install
然后安装cartographer_ros:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
cd ~/catkin_ws/src
git clone https://github.com/hitcm/cartographer_ros.git
cd ~/catkin_ws
catkin_make
问题3:Cartographer_ros编译时遇到的错误:
解决方法:
sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/x86_64-linux-gnu/libproj.so
问题4:Ceres库报错
解决方法:请重新安装Ceres1.13.0和Eigen3.2.9。
以上就是我安装Cartographer以及碰到的问题,后续会持续更新此系列,最后放上我实验时成功建图的图片,当然,道阻且长,尚需努力,这仅仅是个开始,加油!!!