Cartographer学习记录:Ubuntu16.04安装运行及可能出现的问题

2023-05-16

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以及碰到的问题,后续会持续更新此系列,最后放上我实验时成功建图的图片,当然,道阻且长,尚需努力,这仅仅是个开始,加油!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cartographer学习记录:Ubuntu16.04安装运行及可能出现的问题 的相关文章

  • 3.时钟与GPIO【七天物联网智能家居训练营】

    本文是百问网七天物联网智能家居训练营学习笔记 xff0c 官网链接 1 时钟系统 首先我们要知道时钟的主要作用是用来同步 xff0c 现代的计算机系统是必然有时钟的 并且 xff0c 对于高级的单片机系统 xff0c 还会存在着不同频率的时
  • 4.中断与串口【七天物联网智能家居训练营】

    本文是百问网七天物联网智能家居训练营学习笔记 xff0c 官网链接 1 中断 我们先来看一下什么是中断 xff1a 其实这种就是前后台的程序设计模式 我们来看下CM3内核都有哪些中断 xff0c 如下表 xff1a 对于CM3内核的单片来说
  • APT Hash sum mismatch错误的常见解决方法总结

    APT Hash sum mismatch错误的常见解决方法总结 LINUX报这个错误的时候 xff0c 有很多的原因 xff0c 通常是出现在使用apt get update的时候 xff0c apt 的全称是Advanced Packa
  • 安装Nvidia驱动run文件

    本文系转载 xff0c 出处 xff1a https blog csdn net lhx 998 article details 76135936 下载指定NVIDIA驱动安装包 xff08 run格式 xff09 run格式文件安装有时比
  • 5.AT指令【七天物联网智能家居训练营】

    本文是百问网七天物联网智能家居训练营学习笔记 xff0c 官网链接 1 ESP8266 本文要使用的wifi模块为ESP8266 xff0c 我们直接使用官方提供的固件即可 xff0c 无须单独开发 直接通过串口和wifi模块进行通信 xf
  • 6.编写初步程序【七天物联网智能家居训练营】

    本文是百问网七天物联网智能家居训练营学习笔记 xff0c 官网链接 1 程序流程回顾 先来回顾下TCP连接的流程 xff1a 下面看下UDP连接的流程 xff1a 整个程序的框架如下 xff1a 2 代码实现 这里我们使用串口2来操作 xf
  • 7.进一步完善程序【七天物联网智能家居训练营】

    本文是百问网七天物联网智能家居训练营学习笔记 xff0c 官网链接 1 增加UDP发送函数 再来回顾下UDP发送的流程 xff1a 对于AT指令来说 xff0c 只是使用的具体指令不同而已 和TCP发送函数非常类似 xff0c 代码如下 x
  • ubuntu16 PL-SLAM编译 踩坑

    首先贴出pl slam readme的第一句话 xff1a 对pl slam的精度不要有太高要求 Notice that this repository is only an open source version of PL SLAM r
  • ROS kinetic 运行s_msckf和 vins_fusion

    s msckf xff1a 采用多状态约束的双目vio系统 注意 imuCallback xff1a 接收IMU数据 xff0c 将IMU数据存到imu msg buffer中 xff0c 这里只会利用开头200帧IMU数据进行静止初始化
  • 服务器查看配额限制: OSError: [Errno 122] Disk quota exceeded

    OSError Errno 122 Disk quota exceeded 是因为磁盘配额不够了 xff0c 即磁盘已满或超出了用户所能使用的配额上限 可以通过如下命令查看配额限制和已经使用的配额 xff1a quota uvs usern
  • colmap 已知pose 重建 kitti数据尝试

    Frequently Asked Questions COLMAP 3 7 documentation COLMAP已知相机内外参数重建稀疏 稠密模型 thronsbird 博客园 Colmap根据相机内外参数重建稀疏模型 m0 47677
  • Umap与 t-sne可视化CNN特征

    考虑到umap 比 t sne快 xff0c 而且全局结构更好 demo网站 Understanding UMAP doc xff1a https github com lmcinnes umap How to Use UMAP umap
  • nn.AdaptiveAvgPool2d() 与 nn.AvgPool2d() 模块的区别

    nn AdaptiveAvgPool2d 与 nn AvgPool2d 模块的区别 jinfeng2411的博客 CSDN博客 nn adaptiveavgpool
  • dataloader卡住

    pin memory 知乎 dataloader卡住 xff01 xff01 xff01 只会git clone的程序员的博客 CSDN博客 dataloader 卡死 PyTorch 训练时中遇到的卡住停住等问题 yyywxk的博客 CS
  • OpenCV单目视觉定位(测量)系统(新增 含代码)

    OpenCV单目视觉定位 xff08 测量 xff09 系统 The System of Vision Location with Signal Camera Abstract This passage mainly describes h
  • 异常检测——深度学习异常检测经典算法最终篇

    本文转载自 xff1a https blog csdn net smileyan9 article details 106587227 异常检测 从经典算法到深度学习 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3
  • Hbase2.1.0启动失败解决方案积累

    当前CentOS xff0c JDK和Hadoop版本 xff1a span class token punctuation span root 64 master span class token operator span span c
  • 7-2 求二叉树的叶子结点个数 (20分)

    以二叉链表作为二叉树的存储结构 xff0c 求二叉树的叶子结点个数 输入格式 输入二叉树的先序序列 提示 xff1a 一棵二叉树的先序序列是一个字符串 xff0c 若字符是 表示该二叉树是空树 xff0c 否则该字符是相应结点的数据元素 输
  • 7-5 IP地址转换 (20分)

    一个IP地址是用四个字节 xff08 每个字节8个位 xff09 的二进制码组 96 成 请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出 输入格式 xff1a 输入在一行中给出32位二进制字符串 输出格式 xff1a 在
  • Matlab读取csv文件绘制三维图

    a span class token operator 61 span span class token function xlsread span span class token punctuation span span class

随机推荐