g2o 优化库

g2o: A General Framework for Graph Optimization

安装

环境:

  • Windows
  • Visual Studio 2022 + Toolset v141
  • Qt 5.12.10
  • Eigen 3.3.7
  1. 创建项目顶层目录 g2o/;
  2. 参考 Ceres 优化库 #安装 准备好依赖库 Eigen, suitesparse-metis-for-windows;
  3. 安装 Qt5, 以及相应的 VS 插件;
  4. 准备依赖库 libQGLViewer
    1. 下载 libQGLViewer-2.7.2.zip 放到 g2o/ 文件夹下解压得到 g2o/libQGLViewer-2.7.2/ 文件夹.
    2. 打开 VS, 点击 扩展 ->Qt VS Tools->Open Qt Project File (.pro), 打开 g2o\libQGLViewer-2.7.2\libQGLViewer-2.7.2.pro, 这将会在 VS 中打开名为 libQGLViewer 的解决方案, 其中包含 26 个项目, 首先将配置改为 Release | x64, 然后 选中所有项目 , 右键点击 属性 -> 配置属性 -> 常规 -> 平台工具集, 修改为 Visual Studio 2017 (v141)
    3. qglviewerplugin 项目中, 修改 libQGLViewer-2.7.2\designerPlugin\qglviewerPlugin.cpp文件第 53 行, 删除宏 QDESIGNER_WIDGET_EXPORT.
      qglviewerPlugin.cpp
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      // ------------------------------------------------------------- //
      // Change the base class name, as well as the include path above //
      // ------------------------------------------------------------- //
      - class QDESIGNER_WIDGET_EXPORT Viewer : public QGLViewer {
      + class Viewer : public QGLViewer {
      public:
      explicit Viewer(QWidget *parent = NULL) : QGLViewer(parent) {
      camera()->setPosition(qglviewer::Vec(1.29831f, 0.60826f, 1.78031f));
      camera()->setOrientation(
      qglviewer::Quaternion(0.35032, -0.135992, 0.471794, -0.797617));
      }
    4. 生成解决方案
      1
      2
      3
      4
      5
       已启动生成...
      1>------ 已启动生成: 项目: QGLViewer, 配置: Release x64 ------
      1>Reading Qt configuration (D:/ProgramFiles/Qt5.12.10/5.12.10/msvc2017_64/bin/qmake)
      ...
      ========== “生成”: 26 成功,0 失败,0 更新,0 已跳过 ==========
    5. 以上生成的全部 26 个项目中, QGLViewer 的项目编译后在 g2o\libQGLViewer-2.7.2\QGLViewer\ 文件夹下得到如下三个文件.
      1
      2
      3
      QGLViewer2.lib
      QGLViewer2.exp
      QGLViewer2.dll
    6. 测试 simpleViewer 项目: 将上一步生成的 QGLViewer2.dll 拷贝到 g2o\libQGLViewer-2.7.2\examples\simpleViewer\release\simpleViewer.exe 所在文件夹 (或者将 dll 所在路径添加到系统环境变量), 将simpleViewer 项目设置为启动项目, 开始运行, 将打开一个 simpleViewer 的三维可视化窗口, 表示运行成功.
    7. 安装控件, 将如下两个 dll 文件复制到相应路径下, 即可在 Qt Designer 界面左边控件栏看到 QGLViewer 控件, 且创建 UI 界面时可以拖拽使用.
      • 将生成的 qglviewerplugin.dll 复制到 D:\ProgramFiles\Qt5.12.10\5.12.10\msvc2017_64\plugins\designer 路径下
      • 将生成的 QGLViewer2.dll 复制到 C:\Windows\System32C:\Windows\SysWOW64
    8. 将配置属性改为 Debug | x64 再来一遍.
    9. 将 动态链接库 QGLViewer2.dllQGLViewerd2.dll 所在 路径 D:\Data\g2o\libQGLViewer-2.7.2\QGLViewer 添加到系统环境变量.
  5. 开始编译 g2o
    1. 下载 g2o-20201223_git.zip 放到 g2o/ 文件夹下解压得到 g2o/g2o-20201223_git/
    2. cmake-gui 将 source 和 build 目录分别设置为 g2o/g2o-20201223_git/g2o/g2o-20201223_git/build/, 点击 Configure 后将平台选为 x64, toolset 处填 v141(表示使用 VS2017 默认的平台工具集进行编译), 完成后再做如下修改, 此外检查并确保 suitesparse, qt 相关配置被正确设置.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Commandline options:
      -DQGLVIEWER_INCLUDE_DIR:PATH="D:/Data/g2o/libQGLViewer-2.7.2/QGLViewer" -DCMAKE_INSTALL_PREFIX:PATH="D:/Data/g2o/g2o-20201223_git/install" -DQGLVIEWER_LIBRARY_RELEASE:FILEPATH="D:/Data/g2o/libQGLViewer-2.7.2/QGLViewer/QGLViewer2.lib" -DEIGEN3_INCLUDE_DIR:PATH="D:/Data/ceres/eigen-3.3.7" -DQGLVIEWER_LIBRARY_DEBUG:FILEPATH="D:/Data/g2o/libQGLViewer-2.7.2/QGLViewer/QGLViewerd2.lib"


      Cache file:
      QGLVIEWER_INCLUDE_DIR:PATH=D:/Data/g2o/libQGLViewer-2.7.2/QGLViewer
      CMAKE_INSTALL_PREFIX:PATH=D:/Data/g2o/g2o-20201223_git/install
      QGLVIEWER_LIBRARY_RELEASE:FILEPATH=D:/Data/g2o/libQGLViewer-2.7.2/QGLViewer/QGLViewer2.lib
      EIGEN3_INCLUDE_DIR:PATH=D:/Data/ceres/eigen-3.3.7
      QGLVIEWER_LIBRARY_DEBUG:FILEPATH=D:/Data/g2o/libQGLViewer-2.7.2/QGLViewer/QGLViewerd2.lib
    3. configure, generate, open project
    4. 生成解决方案, 生成 INSTALL 项目(可选)
    5. 执行 g2o_viewer 项目, 或者在 D:\Data\g2o\g2o-20201223_git\bin\Debug 目录下双击 g2o_viewer.exe 可以打开窗口, 点击 File->Load 可以加载 *.g2o 数据集 文件, 然后点击 Optimize 即可看到该数据集的优化过程.

参考

作者

Luo Siyou

发布于

2023-01-14

更新于

2023-01-17

许可协议