Ubuntu18.04下Sophus库的安装(非模板库模式)

1,147 阅读1分钟

作者: 边城量子 ( shihezichen@live.cn )

简介

本文主要介绍非模板方式的Sophus库在Ubuntu18.04下的安装

Sophus的安装

# g++ : C++编译环境
sudo apt-get install g++

# Eigen : 线性代数库
sudo apt install libeigen3-dev

# git: git 客户端命令行
sudo apt install git

# Sophus:  回滚到 a621ff 非模板版本
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
mkdir build
cd build
cmake ..
make 
sudo make install

在 ubuntu 18.04 下回遇到如下问题: unit_complex_.real() = 1.;   unit_complex_.imag() = 0. ;

解决办法: sophus/so2.cpp文件中, 将:

unit_complex_.real() = 1. ;
unit_complex_.imag() = 0. ;

改为:

unit_complex_.real(1.) ;
unit_complex_.imag(0.) = ;

然后重新 make 编译即可 或者把 gcc/g++ 恢复为以前的版本: 卸载 gcc,g++, 安装gcc5, g++5

Sophus库的引用

在 CmakeLists.txt 文件中添加

cmake_minimum_required(VERSION 3.4)
project(useSophus)

#find_package(Sophus REQUIRED)

set(CMAKE_BUILD_TYPE "Debug")
set(Sophus_INCLUDE_DIRS /usr/local/include/sophus)
set(SOPHUS_LIBRARIES /usr/local/lib/libSophus.so)
set(ALL_CODE_LIST Sophus.cpp)

MESSAGE(STATUS "sophus include: " ${Sophus_INCLUDE_DIRS})
MESSAGE(STATUS "sophus lib: " ${SOPHUS_LIBRARIES})

include_directories(${Sophus_INCLUDE_DIRS})
add_executable(useSophus useSophus.cpp)
target_link_libraries(useSophus ${SOPHUS_LIBRARIES})   ## 连接工程与依赖

Sophus库的使用

useSophus.cpp 文件:

#include <iostream>
#include <cmath>
#include <Eigen/Core>
#include <Eigen/Geometry>
#include "sophus/se3.h"

using namespace std;
using namespace Eigen;

int main(int argc, char** argv) {
    // 沿z轴选装90°的旋转矩阵
    Matrix3d R = AngleAxisd(M_PI/2, Vector3d(0,0,1)).toRotationMatrix();


    // 转成四元数
    Quaterniond q(R);
    Sophus::SO3 SO3_R(R);  // 旋转矩阵转SO3
    Sophus::SO3 SO3_q(q);  // 四元数转SO3
    //
    cout << "SO(3) from atrix:\n" << SO3_R.matrix() << endl;
    cout << "SO(3) from quaternion:\n" << SO3_q.matrix() << endl;

}

需注意如下几点:

  • 包含头文件为 #include "sophus/se3.h" 而不是模板类的 #include "sophus/se3.hpp". 若需要 so3.hpp 改为相同处理方式
  • 代码中为 Sophus ::SO3 而不是 Sophus::SO3d