一、Sophus库简介: Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。但是Eigen库提供了集合模块,但没有提供李代数的支持。一个较好的李群和李代数的库是Sophus库,它很好的支持了SO(3),so(3),SE(3)和se(3)。Sophus库是基于Eigen基础上开发的,继承了Eigen库中的定义的各个类。因此在使用Eigen库中的类时,既可以使用Eigen命名空间,也可以使用Sophus命名空间。比如
Eigen::Matrix3d和Sophus::Matrix3d
Eigen::Vector3d和Sophus::Vector3d
此外,为了方便说明SE(4)和se(4),Sophus库还typedef了Vector4d、Matrix4d、Vector6d和Matrix6d等,即:
Sophus::Vector4d
Sophus::Matrix4d
Sophus::Vector6d
Sophus::Matrix6d
现如今sophus需要依赖fmt库、eigen库,因此优先安装fmt、eigen(3.3以上)
git clone <https://github.com/strasdat/Sophus.git>
cd Sophus
git checkout a621ff
mkdir build
cd build
cmake ..
make
解决方法:打开 Sophus/sophus/so2.cpp文件修改报错内容
//将
SO2::SO2()
{
unit_complex_.real() = 1.;
unit_complex_.imag() = 0.;
}
//改为
SO2::SO2()
{
unit_complex_.real(1.);
unit_complex_.imag(0.);
}