ubuntu上Sophus库的安装

下载链接:strasdat/Sophus: C++ implementation of Lie Groups using Eigen. (github.com)

什么是Sophus库?

Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。但是Eigen库提供了集合模块,但没有提供李代数的支持。一个较好的李群和李代数的库是Sophus库,它很好的支持了SO(3),so(3),SE(3)和se(3)。Sophus库是基于Eigen基础上开发的,继承了Eigen库中的定义的各个类。因此在使用Eigen库中的类时,既可以使用Eigen命名空间,也可以使用Sophus命名空间。

什么是李代数?

李代数是挪威数学家索菲斯·李在19世纪后期研究连续变换群时引进的一个数学概念,它与李群的研究密切相关。在更早些时候,它曾以含蓄的形式出现在力学中,其先决条件是“无穷小变换”概念,这至少可追溯到微积分的发端时代。可用李代数语言表述的最早事实之一是关于哈密顿方程的积分问题。李是从探讨具有r个参数的有限单群的结构开始的,并发现李代数的四种主要类型。法国数学家嘉当在1894年的论文中给出变数和参变数在复数域中的全部单李代数的一个完全分类。他和德国数学家基灵都发现,全部单李代数分成4个类型和5个例外代数,嘉当还构造出这些例外代数。嘉当和德国数学家外尔还用表示论来研究李代数,后者得到一个关键性的结果。“李代数”这个术语是1934年由外尔引进的。随着时间的推移,李代数在数学以及古典力学和量子力学中的地位不断上升。到20世纪80年代,李代数不再仅仅被理解为群论问题线性化的工具,它还是有限群理论及线性代数中许多重要问题的来源。李代数的理论不断得到完善和发展,其理论与方法已渗透到数学和理论物理的许多领域。

如何安装Sophus库?

1 先安装Eigen库(源码编译安装)

官网地址:Eigen 3.3.7版本;

选择Source code(tar.bz2);

cd eigen-3.3.7

mkdir build

cd build

cmake…

make

sudo make install

sudo cp -r /usr/local/include/eigen3 /usr/include

补充:

如果之前装过其他版本,想删除老版本再装新版本,可以参考如下步骤,

查找老版本

sudo updatedb

locate eigen3

删除老版本文件

将列举出来的文件逐个删除,筛选条件(必删除项)为:

/usr/include/eigen3

/usr/lib/cmake/eigen3

/usr/share/doc/libeigen3-dev

/usr/share/pkgconfig/eigen3.pc

/var/lib/dpkg/info/libeigen3-dev.list

/var/lib/dpkg/info/libeigen3-dev.md5sums

2 再安装Sophus库(源码编译安装)

最新Sophus模板库默认是依赖fmt库的,但是如果不使用fmt库则可以在cmake时去掉对fmt库的依赖。

-DUSE_BASIC_LOGGING=ON

在cmake的时候,执行cmake …/ -DUSE_BASIC_LOGGING=ON 可以避免预先安装fmt库

git clone https://github.com/strasdat/Sophus.git

cd ./Sophus/

mkdir build

cd ./build

cmake …/ -DUSE_BASIC_LOGGING=ON

make

sudo make install

3 使用Sophus库时遇到的问题及解决办法

1)fatal error:sophus/se3.h:No such file or directory

sophus库已经安装,但是编译代码报错。这是sophus库的版本问题。老版本是非模板类的Sophus,最新Sophus是模板类的。

解决办法:改安装Sophus库的历史版本,步骤如下,

git clone https://github.com/strasdat/Sophus.git

cd Sophus

git checkout a621ff #版本回溯

mkdir build && cd build && cmake … && make && sudo make install

2)在make时,如果出现error: lvalue required as left operand of assignment这种报错,

解决办法:

修改Sophus/Sophus/so2.cpp这个文件,将

SO2::SO2()

{

unit_complex_.real() = 1.;

unit_complex_.imag() = 0.;

}

改为

SO2::SO2()

{

unit_complex_.real(1.);

unit_complex_.imag(0.);

}

3)undefined reference to `Sophus::SO3::SO3(double, double, double)’

安装Sophus时,有个lib文件“libSophus.so”会出现在/usr/local/lib/libSophus.so (本人编译时最后执行了 sudo make install, 因此在系统文件夹里面有该lib文件)。 当执行FIND_PACKAGE(sophus REQUIRED)时,libSophus.so 应该被链接到 Sophus_LIBRARIES, 但cmake却没链接上(原因未知),因此出现这个错误。

解决办法:

显式将Sophus_LIBRARIES 链接到libSophus.so,CMakeLists.txt的代码如下:

FIND_PACKAGE(sophus REQUIRED)

set(Sophus_LIBRARIES libSophus.so)

TARGET_LINK_LIBRARIES(${PROJECT_NAME}

${Sophus_LIBRARIES})

参考链接:

https://blog.csdn.net/u011092188/article/details/77833022

李代数(挪威数学家索菲斯·李发现的非结合代数)_百度百科 (baidu.com)

https://blog.csdn.net/fb_941219/article/details/104590842

(81条消息) Sophus 编译错误_u010003609的博客-CSDN博客

如何安装Eigen库和Sophus库 - BNTU - 博客园 (cnblogs.com)

Eigen 3.3.7 · libeigen / eigen · GitLab

作者:萱儿妈
链接:https://www.jianshu.com/p/c1e094df8e26
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值