g2o在ubuntu16.04安装及初步使用

3589人阅读 评论(1) 收藏 举报

转载自:http://www.linuxdiyf.com/linux/25329.html       http://blog.csdn.net/jasmine_shine/article/details/50205503

1.首先确保你已经安装了最新版本的cmake。
验证方法:在终端输入:cmake -version即
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~$ cmake -version
cmake version 3.5.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
就可以看到自己的版本了。
 
2.以源代码安装的形式安装g2o。
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~$ Git clone https://github.com/RainerKuemmerle/g2o.git
默认是装在用户主目录下的,其目录名为g2o。
进入g2o:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~$ cd ~/g2o
显示如下:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o$
在g2o目录下创建一个新的名字为build的子目录,并进入build;
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o$  mkdir build
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o$  cd build
显示如下:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o/build$
安装一些依赖项:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o/build$  sudo apt-get install build-essential cmake libcholmod2.1.2 libsuitesparse-metis-3.1.0 libsuitesparse-metis-dbg libsuitesparse-metis-dev freeglut3 freeglut3-dev freeglut3-dbg qt4-qmake libqglviewer2 libqglviewer-dev libqglviewer-doc libeigen3-dev libeigen3-doc
其中libcholmod2.1.2 libsuitesparse-metis-3.1.0 libsuitesparse-metis-dbg libsuitesparse-metis-dev在Ubuntu 16.04中装不了,可用其他相关的package代替。那么怎么找出这些相关的package呢?
可以使用apt-cache search <package_name>寻找。
例如在终端输入
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o/build$ apt-cache search libcholmod,
这时终端显示:
libcholmod3.0.6 - sparse Cholesky factorization library for sparse matrices
这时可以安装libcholmod3.0.6代替libcholmod2.1.2。名字里有libsuitesparse的依赖项也类似操作
依赖项都安装完后,执行:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o/build$ cmake ..
则终端会显示如下类似内容:
--The C compiler identification is GNU 4.8.2
--The CXX compiler identification is GNU 4.8.2
--Check for working C compiler: /usr/bin/cc
--Check for working C compiler: /usr/bin/cc -- works
--Detecting C compiler ABI info
--Detecting C compiler ABI info - done
--Check for working CXX compiler: /usr/bin/c++
--Check for working CXX compiler: /usr/bin/c++ -- works
--Detecting CXX compiler ABI info
--Detecting CXX compiler ABI info - done
--Compiling on Unix
--Found CHOLMOD: /usr/include/suitesparse 
--Looking for sgemm_
--Looking for sgemm_ - found
--A library with BLAS API found.
--Looking for cheev_
--Looking for cheev_ - found
--A library with LAPACK API found.
--Found CHOLMOD and its dependencies
--Found CSPARSE: /usr/include/suitesparse 
--Try OpenMP C flag = [-fopenmp]
--Performing Test OpenMP_FLAG_DETECTED
--Performing Test OpenMP_FLAG_DETECTED - Success
--Try OpenMP CXX flag = [-fopenmp]
--Performing Test OpenMP_FLAG_DETECTED
--Performing Test OpenMP_FLAG_DETECTED - Success
--Found OpenMP: -fopenmp 
--Looking for XOpenDisplay in/usr/lib/x86_64-Linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
--Looking for XOpenDisplay in/usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so- found
--Looking for gethostbyname
--Looking for gethostbyname - found
--Looking for connect
--Looking for connect - found
--Looking for remove
--Looking for remove - found
--Looking for shmat
--Looking for shmat - found
--Looking for IceConnectionNumber in ICE
--Looking for IceConnectionNumber in ICE - found
--Found X11: /usr/lib/x86_64-linux-gnu/libX11.so
--Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so 
--Compiling with OpenGL support
--Looking for Q_WS_X11
--Looking for Q_WS_X11 - found
--Looking for Q_WS_WIN
--Looking for Q_WS_WIN - not found
--Looking for Q_WS_QWS
--Looking for Q_WS_QWS - not found
--Looking for Q_WS_MAC
--Looking for Q_WS_MAC - not found
--Found Qt4: /usr/bin/qmake (found version "4.8.6")
--Found QGLVIEWER: /usr/include/QGLViewer 
--Compiling g2o apps
--Compiling g2o examples
--Compiling with GCC
--Performing Test COMPILER_SUPPORTS_CXX11
--Performing Test COMPILER_SUPPORTS_CXX11 - Success
--Performing Test COMPILER_SUPPORTS_CXX0X
--Performing Test COMPILER_SUPPORTS_CXX0X - Success
--Found Eigen3: /usr/include/eigen3 (Required is at least version"2.91.0")
--Configuring done
--Generating done
--Build files have been written to: /home/zhuquan/g2o/build
然后在终端输入make:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o/build$ make
最后,在终端输入sudo make install 安装:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/g2o/build$ sudo make install
如果编译没有出错,就会在/usr/local/include看到g2o的包含文件,在usr/local/lib看到g2o的库文件,在usr/local/bin看到g2o的可执行文件。




二、g2o的小试牛刀
g2o是一些大牛们封装好的一个可以计算图优化的一个库,因此只需要输入一组点和边的信息,g2o就可以进一步优化你的这些点和边。下面是一个优化圆的例子。
在Ubuntu环境下,要先创建一个文件夹,代表一个工程。这个工程必须包含几个子文件夹,分别是bin(生成的可执行文件的存放路径),include(包含的头文件,也就是.h文件),data(提取的实验数据), src(源文件,也就是.cpp文件), CMakeLists.txt(编译环境设置)。
此时的CMakeList.txt与源文件中的不同,只需设置一些简单的编译条件即可:

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
PROJECT( g2o_test )

SET(CMAKE_CXX_COMPILER "g++")
SET( CMAKE_BUILD_TYPE Debug  )
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include )
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)

ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src )

在这里,我们值涉及到一个简单的main.cpp文件,如下:

#include "g2o/core/sparse_optimizer.h"
#include "g2o/core/block_solver.h"
#include "g2o/core/factory.h"
#include "g2o/core/optimization_algorithm_levenberg.h"
#include "g2o/solvers/csparse/linear_solver_csparse.h"

#include "g2o/types/slam3d/vertex_se3.h"
//#include "g2o/types/slam3d/edge_se3.h"
// 使用 宏函数 声明边和顶点类型,注意注释掉了上面两个头文件 
G2O_USE_TYPE_GROUP(slam3d);
//G2O_USE_TYPE_GROUP(slam2d); //2d平面

#include <iostream>

using namespace std;
using namespace g2o;

#define MAXITERATION 50
int main()
{
    cout<< "Hello g2o"<<endl;
    // create the linear solver
    BlockSolverX::LinearSolverType * linearSolver = new LinearSolverCSparse<BlockSolverX::PoseMatrixType>();

    // create the block solver on the top of the linear solver
    BlockSolverX* blockSolver = new BlockSolverX(linearSolver);

    //create the algorithm to carry out the optimization
    OptimizationAlgorithmLevenberg* optimizationAlgorithm = new OptimizationAlgorithmLevenberg(blockSolver);

/*  //如果没用前面的宏函数,而是调用的是edge_se3和vertex_se3头文件
    //想让程序能识别VertexSE3这些数据类型,就要显示的调用它们,如下
    //如果只用了头文件,而没用显示调用,那么这些数据类型将不会link进来
    //在下面的optimizer.load函数将不能识别这些数据类型
    for(int f=0; f<10;++f)
    {
        VertexSE3* v = new VertexSE3;
        v->setId(f++);
    }
*/
    // create the optimizer
    SparseOptimizer optimizer;

    if(!optimizer.load("../data/sphere_bignoise_vertex3.g2o"))
    {
        cout<<"Error loading graph"<<endl;
        return -1;
    }else
    {
        cout<<"Loaded "<<optimizer.vertices().size()<<" vertices"<<endl;
        cout<<"Loaded "<<optimizer.edges().size()<<" edges"<<endl;
    }

    //优化过程中,第一个点固定,不做优化; 也可以不固定。
    VertexSE3* firstRobotPose = dynamic_cast<VertexSE3*>(optimizer.vertex(0));
    firstRobotPose->setFixed(true);

    optimizer.setAlgorithm(optimizationAlgorithm);
    optimizer.setVerbose(true);
    optimizer.initializeOptimization();
    cerr<<"Optimizing ..."<<endl;
    optimizer.optimize(MAXITERATION);
    cerr<<"done."<<endl;

    optimizer.save("../data/sphere_after.g2o");
    //optimizer.clear();

    return 0;
}

此外,在src文件夹下必须建一个CMakeList.txt文件,用于编译main.cpp。


# 添加g2o的依赖
# 因为g2o不是常用库,要添加它的findg2o.cmake文件
LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )
SET( G2O_ROOT /usr/local/include/g2o )
FIND_PACKAGE( G2O )


# CSparse
FIND_PACKAGE( CSparse )
INCLUDE_DIRECTORIES( ${G2O_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR} )


find_package(Eigen3 REQUIRED)
find_package(CSparse REQUIRED)
#find_package(Cholmod REQUIRED)
include_directories(${CSPARSE_INCLUDE_DIR})
include_directories(${EIGEN3_INCLUDE_DIR})
#include_directories(${CHOLMOD_INCLUDE_DIR})

SET(G2O_LIBS g2o_cli g2o_ext_freeglut_minimal g2o_simulator g2o_solver_slam2d_linear g2o_types_icp g2o_types_slam2d g2o_core g2o_interface g2o_solver_csparse g2o_solver_structure_only g2o_types_sba g2o_types_slam3d g2o_csparse_extension g2o_opengl_helper g2o_solver_dense g2o_stuff g2o_types_sclam2d g2o_parser g2o_solver_pcg g2o_types_data g2o_types_sim3 cxsparse )

ADD_EXECUTABLE(g2o_test main.cpp)
target_link_libraries(g2o_test ${G2O_LIBS})
#target_link_libraries(g2o_test csparse g2o_core g2o_solver_cholmod g2o_solver_csparse g2o_types_slam3d)

到目前为止,main.cpp以及编译配置都已经完成,数据的输入data提取的是这个网址里的数据:https://github.com/HeYijia/GraphSLAM_tutorials_code/tree/master/g2o_test/data

一般情况下,编译所需的文件都已经差不多了,但是这个程序依赖很多库,所以需额外在工程文件夹下添加一个cmake_modules文件夹,里面包含很多cmake文件。下载地址为:https://github.com/HeYijia/GraphSLAM_tutorials_code/tree/master/g2o_test/cmake_modules

so,你现在可以执行

mkdir build
cd build
cmake ..
make

到目前为止,如果没有意外的话,应该在bin文件夹下生成了一个跟工程名相同的可执行文件,只需要执行这个文件./g2o_test,就会在data文件夹下生成一个.g2o的文件。采用g2o_viewer 即可看到生成的文件。但是由于个人在安装的时候在/usr/local/bin没有生成g2o_viewer这个可执行文件,所以不能可视化这个文件。

后续的话,可能会更注重g2o的原理了,毕竟操作是最简单的,先从形象话了解一些g2o的使用,对之后的理解可能是好的。


查看评论

在Ubuntu KyLin 16.04上安装g2o

1.首先确保你已经安装了最新版本的cmake。验证方法:在终端输入:cmake -version即zhuquan@zhuquan-HP-Z230-Tower-Workstation:~$ cmake ...
  • zhuquan945
  • zhuquan945
  • 2016-10-22 20:25:28
  • 1955

ubuntu16.04安装g2o时出现 E: 无法定位软件包 libcholmod-dev

最近在学习slam ,在安装g2o库的时候总是出现E: 无法定位软件包 libcholmod-dev这样的问题。 查资料查了一下午才知道原来输入sudo apt-get install libcho...
  • WUYIDUER
  • WUYIDUER
  • 2018-01-15 12:09:03
  • 1005

在Ubuntu 16.04下安装g2o

在Ubuntu 16.04下安装g2o
  • jz1570551401
  • jz1570551401
  • 2017-10-11 21:22:49
  • 439

g2o安装教程

安装依赖sudo apt-get install libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake libqglviewer-dev 使用cm...
  • Iriving_shu
  • Iriving_shu
  • 2016-12-24 15:31:36
  • 651

ubuntu 16.04 编译安装g2o出错的解决方案

在学习高博的《一起做RGB-D SLAM》第六讲的时候,按照如下步骤编译安装g2o出现错误。mkdir build cd build cmake .. make sudo make install最...
  • rsvp2012
  • rsvp2012
  • 2016-12-22 17:36:22
  • 1325

解析“ubuntu.cn99.com:http”时,出现了某些故障(-5 - 没有与主机名关联的地址)

局域网里的服务器(Ubuntu 10.04)除了装系统时上外网下载软件,一直在内部访问。今天想在服务器上再装个软件,通过SecureCRT登录上去安装,却发现以下问题: 解析“ubuntu.cn99...
  • BoArmy
  • BoArmy
  • 2013-05-31 19:29:48
  • 4061

g2o的安装及初步使用

g2o的安装及初步使用 运行环境:ubuntu12.04 + g2o 个人原创,转载请注明来自Jasmine_shine的专栏:一、g2o的安装 1、安装依赖项: sudo apt-get i...
  • Jasmine_shine
  • Jasmine_shine
  • 2015-12-07 14:37:45
  • 13802

G2O 与rgbdslam在ubuntu16.04下安装

G2O rgbdslam在ubuntu16.04下的安装
  • Nksjc
  • Nksjc
  • 2017-06-16 16:29:31
  • 1415

G2O中g2o_viewer的编译

SLAM G2O
  • spacegrass
  • spacegrass
  • 2016-08-13 23:45:46
  • 2190

Ubuntu14.04安装g2o库(跑高翔大神的14讲的g2o例程时,出现的问题的解决方案)

跑高翔的14讲的第6讲的g2o例程出问题,包括 1,g2o库make不成功 2,g2o库make成功,install成功,以为g2o安装好了,编译例程就会出现如下错误 一下我记录解决问题的过程:...
  • j_____j
  • j_____j
  • 2017-12-10 21:48:12
  • 738
    个人资料
    等级:
    访问量: 2万+
    积分: 475
    排名: 10万+
    文章分类
    最新评论