Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。但是Eigen库提供了集合模块,但没有提供李代数的支持。一个较好的李群和李代数的库是Sophus库,它很好的支持了SO(3),so(3),SE(3)和se(3)。Sophus库是基于Eigen基础上开发的,继承了Eigen库中的定义的各个类。因此在使用Eigen库中的类时,既可以使用Eigen命名空间,也可以使用Sophus命名空间。
1、因为sophus的使用必须依赖eigen库,因此先下载eigen,但是如果你有 3.3 以下的版本的eigen,那么请先卸载。
注意,千万不要使用 sudo apt-get install libeigen3-dev
,因为这个命令下载的是3.2版本的eigen,从而无法与模板类的sophus相匹配。
2、现如今sophus需要依赖fmt库,因此优先安装fmt:
git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build
cd build
cmake ..
make
sudo make install
3、安装sophus库:
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
mkdir build
cd build
cmake ..
make
sudo make install
在这里强调!不要回滚git checkout a621ff,否则会装成老版本的非模板sophus(网上大多教程都有回滚)
CMakeLists.txt为:
FIND_PACKAGE(Sophus REQUIRED)
INCLUDE_DIRECTORIES(${Sophus_INCLUDE_DIRS})
类 | 函数 | 函数释义 |
---|---|---|
Sophus::SO3d | 李群李代数最直接的用法就是表达为位姿,如何对特征点进行变换,值得注意的是,此时的特征点必须是Eigen的Vector类型。 | |
Sophus::SE3d | 李群李代数最直接的用法就是表达为位姿,如何对特征点进行变换,值得注意的是,此时的特征点必须是Eigen的Vector类型。 | |