本章程序运行前需要安装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的安装。
编译程序,出现如下报错:
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
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文件,即为优化的结果。
在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
g2o_viewer ./result.g2o
打开程序pose_graph_g2o_SE3优化后的数据:
③
g2o_viewer ./result_lie.g2o
打开程序pose_graph_g2o_lie优化后的数据:
④
g2o_viewer ./result_gtsam.g2o