18.08上安装使用g2o遇到问题的解决方案

问题:

undefined reference to symbol 'cs_di_calloc'
//usr/lib/x86_64-linux-gnu/libcxsparse.so.3: 无法添加符号: DSO missing from command line

原因:

应该是缺少了cxsparse

解决方法:

在CMakeLists.txt里最后面添加:

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 )

target_link_libraries(g2o_test ${G2O_LIBS})

 参考来源:

g2o最新版本使用LinearSolverCSparse时出错 · Issue #103 · gaoxiang12/slambook · GitHub

 问题:

error: 'index_sequence' is not a member of 'std'

原因:

SLAM十四讲中,编译带g2o库的文件采用C++ 11,而最新的g2o库采用了C++ 14的特性。

解决方法:

在CMakeLists.txt里添加,或者把原来的11改成14:

set(CMAKE_CXX_STANDARD 14)

参考来源:https://blog.csdn.net/weixin_44023934/article/details/122112827


问题:

no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::BlockSolver(g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::LinearSolverType*&)’

原因:

g2o版本对不上,SLAM书上和Github下载的g2o版本不对应。

解决方法:

原代码:

	    // 构建图优化,先设定g2o
    typedef g2o::BlockSolver< g2o::BlockSolverTraits<3,1> > Block;  // 每个误差项优化变量维度为3,误差值维度为1
    Block::LinearSolverType* linearSolver = new g2o::LinearSolverDense<Block::PoseMatrixType>(); // 线性方程求解器
    Block* solver_ptr = new Block( linearSolver );      // 矩阵块求解器
    // 梯度下降方法,从GN, LM, DogLeg 中选
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( solver_ptr );
    // g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton( solver_ptr );
    // g2o::OptimizationAlgorithmDogleg* solver = new g2o::OptimizationAlgorithmDogleg( solver_ptr );
    g2o::SparseOptimizer optimizer;     // 图模型
    optimizer.setAlgorithm( solver );   // 设置求解器
    optimizer.setVerbose( true );       // 打开调试输出

修改为:

	// 构建图优化,先设定g2o
    typedef g2o::BlockSolver< g2o::BlockSolverTraits<3,1> > Block;  // 每个误差项优化变量维度为3,误差值维度为1
    std::unique_ptr<Block::LinearSolverType> linearSolver(new g2o::LinearSolverDense<Block::PoseMatrixType>()); // 线性方程求解器
    std::unique_ptr<Block> solver_ptr (new Block(std::move(linearSolver)));      // 矩阵块求解器
    // 梯度下降方法,从GN, LM, DogLeg 中选
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(std::move(solver_ptr));
    // g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton(std::move(solver_ptr));
    // g2o::OptimizationAlgorithmDogleg* solver = new g2o::OptimizationAlgorithmDogleg(std::move(solver_ptr));
    g2o::SparseOptimizer optimizer;     // 图模型
    optimizer.setAlgorithm( solver );   // 设置求解器
    optimizer.setVerbose( true );       // 打开调试输出

参考来源:

https://blog.csdn.net/yongniao9185/article/details/112299119


问题:

error: ‘LinearSolverCSparse’ in namespace ‘g2o’ does not name a template type
源代码为:

std::unique_ptr<Block::LinearSolverType> linearSolver ( new g2o::LinearSolverCSparse<Block::PoseMatrixType>());

解决方法:

添加头文件:

#include <g2o/solvers/csparse/linear_solver_csparse.h>

参考来源:g2o library doesn't export suitesparse related include headers · Issue #182 · RainerKuemmerle/g2o · GitHub


 问题:‘VertexSBAPointXYZ’ is not a member of ‘g2o’

原因:新版g2o库中不再存在原先的VertexSBAPointXYZ

解决方法:

将所有报错的地方改为VertexPointXYZ

参考来源:在PnP后进行BA优化和使用G2O中所遇到的问题总结_不加辣先生的博客-CSDN博客


问题:

打开g2o_viewer时,g2o_viewer:未找到命令

原因:

在对g2o进行cmake时,会出现如下图的提示:Found unsuitable Qt version 和 Cound NOT find QGLVIEWER

解决方法:

首先删除qt4,再安装qt5,并装依赖库

sudo apt-get remove qt4-qmake
sudo apt-get install qt5-default qtcreator
sudo apt-get install libqglviewer-dev-qt5

重新cmake

cmake ..

出现以下情况就说明找到库了

重新编译安装 

make -j4
sudo make install

就可以了。

参考来源:

https://blog.csdn.net/qq_40424333/article/details/117449996


问题:

对‘Sophus::SO3::log() const’未定义的引用

原因:

安装Sophus时,有个lib文件“libSophus.so”会出现在/usr/local/lib/libSophus.so

解决方法:

在CMakeList.txt文件中添加:

set(Sophus_LIBRARIES libSophus.so)

参考文献:https://blog.csdn.net/u010003609/article/details/68961293


问题:

打开g2o_viewer时出现以下报错:

g2o_viewer: error while loading shared libraries: libg2o_viewer.so: cannot open shared object file: No such file or directory

原因:

在默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加 /usr/local/lib这个目录。

解决方法:

打开并编辑这个文件:

sudo gedit /etc/ld.so.conf

然后添加 /usr/local/lib这个目录:

include /usr/local/lib

之后运行(必不可少)

sudo ldconfig

参考来源:

https://www.cnblogs.com/gaoxiang12/p/4770813.html

### 安装 NVIDIA 驱动于 Ubuntu 18.08 对于在Ubuntu 18.08安装NVIDIA驱动遇到的问题,存在多种方法来处理可能出现的黑屏或是循环登录情况。 当通过Ubuntu自带工具尝试安装特定版本如470, 510或520系列驱动后遭遇重启后的显示异常时[^1],一种推荐的做法是采用命令行方式卸载现有驱动并重新安装指定版本。具体操作如下: #### 卸载旧版驱动程序 首先确保系统已更新至最新状态: ```bash sudo apt update && sudo apt upgrade -y ``` 接着移除当前所有的NVIDIA包以避免冲突: ```bash sudo apt-get purge nvidia* ``` #### 添加图形驱动PPA仓库 为了获取更稳定的驱动版本支持,可考虑加入官方认可的第三方PPA源: ```bash sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update ``` #### 安装新驱动程序 根据硬件需求和个人偏好选择合适的稳定版驱动进行安装;这里以`nvidia-driver-361`为例说明,实际可根据需要调整为其他版本号: ```bash sudo apt install nvidia-driver-361 ``` 完成上述步骤之后应当重启计算机使更改生效。如果仍然面临启动问题,则建议进入恢复模式禁用 nouveau 开机加载项作为临时措施之一[^3]。 另外,在某些情况下直接利用NVIDIA官方网站提供的.run文件也是一种可行方案,这允许绕过可能存在的依赖关系困扰。不过需要注意的是这种方式可能会破坏系统的默认设置,因此执行前务必阅读相关文档了解潜在风险,并备份重要数据以防万一[^4]。 最后值得注意的是,随着Linux内核以及各发行版的发展变化,具体的指令集和最佳实践也会有所改变。针对最新的环境条件适时查阅官方指南总是明智之举。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值