【读书笔记】《视觉SLAM十四讲(高翔著)》 第11讲

文章目录

  • 1、安装gtsam
  • 2、程序编译
  • 3、程序运行
  • 4、用g2o viewer打开.g2o文件

本博客的内容是本章程序编译运行方法,记录调通本章程序的过程、处理遇到报错的解决方法。
本章程序的详细解析可参考robinhjwy的CSDN博客: 第十一章pose_graph_g2o_SE3

1、安装gtsam

本章程序运行前需要安装gtsam,不然会有相关报错。
安装方法:
打开终端,输入以下命令下载gtsam:

git clone https://bitbucket.org/gtborg/gtsam.git

gtsam的安装文件下载后,会位于所打开终端对应的文件路径下。
安装gtsam之前先安装一项依赖库:

sudo apt-get install libtbb-dev

之后解压、打开刚才所下载的gtsam文件,①编译②安装:

mkdir build
cd build
cmake ..
make
sudo make install

编译安装完之后,可以在/usr/local/include 中找到头文件,在/usr/local/lib下找到它的库文件。
至此完成gtsam的安装。

2、程序编译

编译程序,出现如下报错:

CMake Error at /usr/share/cmake-3.5/Modules/CMakeFindDependencyMacro.cmake:45 (message):
  Invalid arguments to find_dependency
Call Stack (most recent call first):
  /usr/local/lib/cmake/GTSAM/GTSAMConfig.cmake:17 (find_dependency)
  CMakeLists.txt:25 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/yuanchang/slambook-master/ch11/build/CMakeFiles/CMakeOutput.log".
See also "/home/yuanchang/slambook-master/ch11/build/CMakeFiles/CMakeError.log".

解决办法:
打开刚才①编译②安装gtsam时生成的build文件夹,打开该文件夹中的GTSAMConfig.cmake文件,对其进行修改:
把代码:

find_dependency(Boost 1.43 COMPONENTS serialization;system;filesystem;thread;program_options;date_time;timer;chrono;regex)

改成:

find_package(Boost 1.43 COMPONENTS serialization;system;filesystem;thread;program_options;date_time;timer;chrono;regex)

修改完毕之后,保存。
重新在该build文件夹中打开终端,依次输入指令:

make
sudo make install

重新安装gtsam,因为是再次安装,故安装速度比第一次快很多。注意:修改GTSAMConfig.cmake文件之后不要重新cmake …,直接make,若重新cmake …则修改后的GTSAMConfig.cmake文件会被覆盖。
重新安装gtsam之后,再编译程序则能正常通过。

以上方法参考网址:https://blog.csdn.net/qq_20526733/article/details/90756999

3、程序运行

11.2.1 g2o原生位姿图
在build文件夹中打开终端,执行以下命令:

./pose_graph_g2o_SE3 ../sphere.g2o

在build文件夹中生成result.g2o文件,即为优化的结果。

11.2.2 李代数上的位姿图优化
在build文件夹中打开终端,执行以下命令:

./pose_graph_g2o_lie ../sphere.g2o

在build文件夹中生成result_lie.g2o文件,即为优化的结果。

11.4.2 位姿图优化(因子图)
在build文件夹中打开终端,执行以下命令:

./pose_graph_gtsam ../sphere.g2o

在build文件夹中生成result_gtsam.g2o文件,即为优化的结果。

4、用g2o viewer打开.g2o文件

在build文件夹中打开终端,执行以下命令:

g2o_viewer ../sphere.g2o

该命令用于打开.g2o文件,出现报错:
g2o Error in `g2o_viewer’: realloc(): invalid pointer: 0x00007f6911493820
解决办法:

打开g2o安装源文件夹(本人的路径是:/home/yuanchang/slambook-master/3rdparty/g2o),打开文件夹中的cmake_modules文件夹,打开文件FindQGLViewer.cmake,在其中添加下面的加粗代码:

find_library(QGLVIEWER_LIBRARY_RELEASE
NAMES qglviewer-qt4 QGLViewer-qt4 qglviewer QGLViewer QGLViewer2
PATHS /usr/lib
/usr/local/lib
/usr/lib/x86_64-linux-gnu # Ubuntu 16.04 and derivatives
/opt/local/lib
/sw/lib

find_library(QGLVIEWER_LIBRARY_DEBUG
NAMES dqglviewer dQGLViewer dQGLViewer2 QGLViewerd2
PATHS /usr/lib
/usr/local/lib
/usr/lib/x86_64-linux-gnu # Ubuntu 16.04 and derivatives
/opt/local/lib
/sw/lib


安装依赖项:sudo apt-get install libqglviewer-dev-qt4

清除已安装的g2o,重新编译并安装g2o。
上述①②③步中,第①步、第②步其实说的很清楚,第③步清除g2o并重新编译,具体的方法是:
a. 执行指令,删除和g2o有关的文件,如提示不存在则说明已经删除了

sudo rm -r /usr/local/lib/libg2o* /usr/local/include/g2o /usr/local/lib/g2o /usr/local/bin/g2o*

b. 删除build文件夹里面的所有文件,如果不删除,可能会提示(我碰到了):

make[2]: No rule to make target ‘/usr/lib/x86_64-linux-gnu/libQGLViewer.so’, needed by ‘…/lib/libg2o_viewer.so’。 停止。
CMakeFiles/Makefile2:811: recipe for target ‘g2o/apps/g2o_viewer/CMakeFiles/viewer_library.dir/all’ failed
make[1]: [g2o/apps/g2o_viewer/CMakeFiles/viewer_library.dir/all] Error 2
Makefile:127: recipe for target ‘all’ failed
make: [all] Error 2

c. 重新编译安装:

cmake ..
make
sudo make install

大功告成,重新打开g2o viewer,已经可以显示了。

该方法源于网址:g2o Error in `g2o_viewer’: realloc(): invalid pointer: 0x00007f6911493820

解决上述问题后,即可成功打开.g2o文件:


在build文件夹中打开终端,执行以下命令:

g2o_viewer ../sphere.g2o

打开优化前的原始数据:
【读书笔记】《视觉SLAM十四讲(高翔著)》 第11讲_第1张图片

g2o_viewer ./result.g2o

打开程序pose_graph_g2o_SE3优化后的数据:
【读书笔记】《视觉SLAM十四讲(高翔著)》 第11讲_第2张图片

g2o_viewer ./result_lie.g2o

打开程序pose_graph_g2o_lie优化后的数据:
【读书笔记】《视觉SLAM十四讲(高翔著)》 第11讲_第3张图片

g2o_viewer ./result_gtsam.g2o

打开程序pose_graph_gtsam优化后的数据:
【读书笔记】《视觉SLAM十四讲(高翔著)》 第11讲_第4张图片

你可能感兴趣的:(SLAM学习笔记)