美文网首页
SLAM-Sophus模板库安装总结

SLAM-Sophus模板库安装总结

作者: 酵母小木 | 来源:发表于2020-02-22 16:13 被阅读0次

【问题】由于自己买的书《视觉SLAM十四讲:从理论到实践》,也就是《视觉SLAM十四讲》的第二版,书中Sophus库用的是模板版本,而之前我下载书籍代码是第一版书籍的代码仓库,没办法,只能重新安装Sophus库(其实无论是模板库还是非模板库都是一样,只不过在程序写法上有些变化)。第二版书籍代码仓库中也有第三方的Sophus代码包,但是在编译安装的时候,总是报错。具体每一步报的错误,我忘记截屏了,只记得过程。
【结果】sophus库安装了两个版本:模板库和非模板库。eigen库安装了两个版本,一个是3.2.9的,一个是3.3.7的。

【模板类和非模板类的区别】

至于在使用上的差异,我就不多说了。只讨论下在安装过程中和使用配置上的差异。模板类的Sophus中可以使用不同精度的李群/李代数,而非模板类的Sophus只提供双精度的李群/李代数。

git clone https://github.com/strasdat/Sophus.git                  // 首先下载代码仓库
cd Sophus
git checkout a621ff                                                              // 切换到对应的版本中去
// a621ff是非模板类的版本
// 00f3fd9是2018年的一个模板类的版本                            //这是我安装的版本
// git checkout master                                                          // 可以切换会最新的版本
// git log                             // 可以查看提交版本记录

在非模板类中,库是利用.c.h的方式实现的;而在模板类库中是集合在一个.hpp中实现的

1. 手动安装Eigen-3.3.7

# 在书籍的第一版中,eigen的安装十分简单:
$ sudo apt-get install libeigen3-dev
# 但是默认安装eigen版本是3.2.9版本的,这不满足模板类的Sophus的安装要求

进入Eigen的下载网址,右侧正中有一个下载链接(Get it),这里选择tar.gz.

eigen下载网站
我选择的是Eigen 3.3.7版本的,懒得找了,就随便下的这个最新版本。下载完之后,安装过程十分简单,因为eigen也是一个cmake项目
cd [ path-to-eigen ]
mkdir build
cd build
cmake ..
make
sudo make install

安装的时候,我看了一下安装位置。通过apt-get安装的位置在/usr/include/,但是自己手动安装的eigen3安装在了/usr/locla/include/文件夹下,所以两者并不存在冲突问题,但是在CMakeLists.txt文件使用find_package()查找库一定要小心,所以如果要使用eigen库的时候,建议在CMakeLists.txt文件中采用include_directories("/usr/local/include/eigen3")这条指令

2. 安装模板库版本的Sophus

# 安装本身是十分简单的
cd [ path-to-sophus ]
mkdir build
cd build
cmake ..
make
sudo make install

但是这样的步骤会导致在/usr/local/include/sophus/中出现对应的两组头文件,同时会在/usr/local/lib中出现共享库的覆盖问题,即libSophus.so文件只能保存一个版本的共享库文件,根据对模板库和非模板库文件的分析可知,模板库只需要头文件即可,而无需库文件,也就是不需要target_link_libraries()。所以安装的时候,需要先安装模板类的Sophus,然后再安装非模板类的Sophus


当然你也可以像我这样做,同时保留模板类和非模板类的Sophus库文件,只需要在编译非模板类的时候,修改下Sophus文件下的CMakeLists.txt文件。

# 将第一行的Sophus替换为SophusNormal
SET(PROJECT_NAME Sophus)
# =====================================================
SET(PROJECT_NAME SophusNormal)

这种情况还是会产生新的问题,就编译项目文件的时候,总是提示无法找到相关变量,未定义的引用


未定义引用

这个错误的原因是程序没有在系统共享库中找到libSophusNormal.so文件,可以通过如下操作更新系统共享库索引目录。

# 更新/etc/ld.so.cache文件(库配置文件)
$ sudo ldconfig  

3. CMakeLists.txt文件和main.cpp文件中的不同

  • CMakeLists.txt文件
# 非模板类库,为了尽可能减少问题,尽量将环境配置完善
cmake_minimum_required( VERSION 2.8 )
project( useSophus )

set(CMAKE_CXX_STANDARD 11)

# 为使用 sophus,您需要使用find_package命令找到它
# include_directories( "/usr/local/include/sophus" )
find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )

add_executable( useSophus useSophus.cpp )
# 这里的target_link_libraries()至关重要
# 因函数只在头文件中声明了,却没有找到具体的函数内容,会导致编译器报错。因此需要将so包链接到项目中来
# 而根据书中第二章内容可知,target_link_libraries()是为了链接上对应的共享库文件(路径是“/usr/local/lib”)
target_link_libraries( useSophus SophusNormal )

cmake_minimum_required(VERSION 2.8)
project(useSophus)

set(CMAKE_CXX_STANDARD 11)

# 为使用 sophus,需要使用find_package命令找到它
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})

add_executable(useSophus useSophus.cpp)
  • main.cpp文件
    在非模板类的Sophus库中,库使用.c.h,而在模板类的Sophus库中是集合在一个.hpp中实现的
//引用非模板类库
#include “sophus/so3.h”
#include “sophus/se3.h”

//引用模板类库
#include “sophus/so3.hpp”
#include “sophus/se3.hpp”

参考资料

【0】Sophus代码仓库:开发Sophus这个库的小哥哥酷酷的
【1】李群与李代数及Sophus的安装使用:该博主安装的sophus版本是非模板类的
【2】libXXX.so.X: cannot open shared object file: No such file:解决共享库索引不到问题
【3】Sophus库CMakeLists.txt内容详解笔记:对CMakeLists.txt解析清晰
【4】Sopus库中FindEigen3.cmake内容详解笔记
【5】ubuntu16.04+eigen3安装:这篇博客提示了几个重要的文件路径,至于文章中关于怎么安装的操作可以忽视
【6】Sophus库模板类的使用问题:阐述了模板类和非模板类的不同,特别是文件结构上的差异辨析
【7】Sophus-issues187:这里讨论了libeigen3-dev的版本问题

相关文章

  • SLAM-Sophus模板库安装总结

    【问题】由于自己买的书《视觉SLAM十四讲:从理论到实践》,也就是《视觉SLAM十四讲》的第二版,书中Sophus...

  • 2019-03-02派森学习第104天

    机器学习视频课程总结: 安装scikit-learn库 在安装此库之前 要先安装Numpy和pypi库 通过数据的...

  • php菜鸟笔记,laravel 入门教程

    安装 Laravel: 配置 Laravel: 配置路由: 视图传值: Blade模板: Model操作: 数据库:

  • Pod私有库制作

    ##Pod私有库制作 ####目录 +安装CocoaPods +创建远程内部私有Spec Repo仓库 +模板创建...

  • 微信公众号发送模板消息

    1、添加模板消息插件 2、添加我的模板 点击模板消息之后呢会出现我的模板和模板库,我们点击模板库在模板库中选择自己...

  • 【geekband】STL冰山一角

    STL是一个泛型程序库,所有组件均有模板构成(关于模板的总结笔记,见我的博客SUMMERY OF TEMPLATE...

  • 提交自建库到github中

    使用pod lib create <库名称> 创建模板库创建模板库.png 配置对应的事项模板库项目配置.png ...

  • C++的STL库

    c++的STL库(即标准模板库),简单来说就是帮你总结数据结构和算法,以实现代码的复用的类库。stl库的相关概念:...

  • 网站建设-1

    网站模板复制粘贴到根目录 http://127.0.0.1/install/ 安装 数据库 用户名和密码 ...

  • 2021-08-05

    vscode中快速生成vue模板 1.安装插件 在插件库搜索vetur,然后点击安装。如下图 2.新建代码片段 点...

网友评论

      本文标题:SLAM-Sophus模板库安装总结

      本文链接:https://www.haomeiwen.com/subject/thflqhtx.html