首页 > 其他分享 >camke(11)配置g2o

camke(11)配置g2o

时间:2024-07-18 17:51:40浏览次数:11  
标签:11 lib SOLVER local LIBRARY G2O g2o camke FIND

 

适配 openvslam和 slam14讲解代码版本

1. Eigen安装(最新3.3.7)

wget -q https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.bz2
tar xf eigen-3.3.7.tar.bz2
rm -rf eigen-3.3.7.tar.bz2
cd eigen-3.3.7
mkdir -p build && cd build
cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    ..
make -j4
make install

  

2 g2o

不能下载最新版本,可能因为太新编译slam会报错

1:删除g2o的头文件,位于/usr/local/include/g2o下
 
sudo rm -r /usr/local/include/g2o
 
2:删除g2o的库文件,位于/usr/local/lib下
 
sudo rm -r /usr/local/lib/libg2o*
 
3:删除g2o的可执行文件,位于/usr/local/bin下
 
sudo rm -r /usr/local/bin/g2o*

  下载老版本呢

https://codeload.github.com/RainerKuemmerle/g2o/zip/refs/tags/20200410_git

  编译

报错的话直接 camke ..

mkdir build && cd build
cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_CXX_FLAGS=-std=c++11 \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_UNITTESTS=OFF \
    -DBUILD_WITH_MARCH_NATIVE=ON \
    -DG2O_USE_CHOLMOD=OFF \
    -DG2O_USE_CSPARSE=ON \
    -DG2O_USE_OPENGL=OFF \
    -DG2O_USE_OPENMP=ON \
    ..
make -j8
make install

  

 

 

代码调用

默认安装没有把FindG2O.cmake一并放入系统盘,需要两种方式手动导入

 

 简单方式1 指定安装包的FindG2O.cmake

工程

安装包

 对应

list( APPEND CMAKE_MODULE_PATH "/home/r9000k/v1_software/openvslam/g2o-master/cmake_modules" ) #添加搜索路径

  

 

 CMakeLists.txt

#声明要求的cmake最低版本
cmake_minimum_required(VERSION 3.0)
project( SLAM )

set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "-std=c++14 -O3")

# OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

# Eigen
include_directories("/usr/include/eigen3")

# g2o
list( APPEND CMAKE_MODULE_PATH "/home/r9000k/v1_software/openvslam/g2o-master/cmake_modules" ) #添加搜索路径
find_package(G2O )
include_directories(${G2O_INCLUDE_DIRS})

SET(G2O_LIBRARIES ${G2O_STUFF_LIBRARY} ${G2O_CORE_LIBRARY} ${G2O_CLI_LIBRARY} ${G2O_SOLVER_CHOLMOD} ${G2O_SOLVER_CSPARSE} ${G2O_SOLVER_CSPARSE_EXTENSION} 
${G2O_SOLVER_DENSE} ${G2O_SOLVER_PCG} ${G2O_SOLVER_SLAM2D_LINEAR} ${G2O_SOLVER_STRUCTURE_ONLY} ${G2O_SOLVER_EIGEN} ${G2O_TYPES_DATA} ${G2O_TYPES_ICP} ${G2O_TYPES_SBA}
${G2O_TYPES_SCLAM2D} ${G2O_TYPES_SIM3} ${G2O_TYPES_SLAM2D} ${G2O_TYPES_SLAM3D})



#给工程添加一个可执行程序
add_executable(SLAM main.cpp)

#给工程链接库
# Eigen3就是一堆头文件没有连接库
target_link_libraries(SLAM ${OpenCV_LIBS}) 
target_link_libraries(SLAM ${CERES_LIBRARIES})
target_link_libraries(SLAM ${G2O_LIBRARIES} )

  

 简单方式2 手动给文件

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(untitled2)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)

set(ALL_TARGET_LIBRARIES "")

include(cmake/FindEigen3.cmake)
include(cmake/FindG2O.cmake)

add_executable(fit_curve fit_curve.cpp)
target_link_libraries(fit_curve ${ALL_TARGET_LIBRARIES})

  

 cmake/FindG2O.cmake

# Find the header files

find_path(G2O_INCLUDE_DIR g2o/core/base_vertex.h
        ${G2O_ROOT}/include
        $ENV{G2O_ROOT}/include
        $ENV{G2O_ROOT}
        /usr/local/include
        /usr/include
        /opt/local/include
        /sw/local/include
        /sw/include
        NO_DEFAULT_PATH
        )

# Macro to unify finding both the debug and release versions of the
# libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY
# macro.

macro(FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME)

    find_library("${MYLIBRARY}_DEBUG"
            NAMES "g2o_${MYLIBRARYNAME}_d"
            PATHS
            ${G2O_ROOT}/lib/Debug
            ${G2O_ROOT}/lib
            $ENV{G2O_ROOT}/lib/Debug
            $ENV{G2O_ROOT}/lib
            NO_DEFAULT_PATH
            )

    find_library("${MYLIBRARY}_DEBUG"
            NAMES "g2o_${MYLIBRARYNAME}_d"
            PATHS
            ~/Library/Frameworks
            /Library/Frameworks
            /usr/local/lib
            /usr/local/lib64
            /usr/lib
            /usr/lib64
            /opt/local/lib
            /sw/local/lib
            /sw/lib
            )

    find_library(${MYLIBRARY}
            NAMES "g2o_${MYLIBRARYNAME}"
            PATHS
            ${G2O_ROOT}/lib/Release
            ${G2O_ROOT}/lib
            $ENV{G2O_ROOT}/lib/Release
            $ENV{G2O_ROOT}/lib
            NO_DEFAULT_PATH
            )

    find_library(${MYLIBRARY}
            NAMES "g2o_${MYLIBRARYNAME}"
            PATHS
            ~/Library/Frameworks
            /Library/Frameworks
            /usr/local/lib
            /usr/local/lib64
            /usr/lib
            /usr/lib64
            /opt/local/lib
            /sw/local/lib
            /sw/lib
            )

    if (NOT ${MYLIBRARY}_DEBUG)
        if (MYLIBRARY)
            set(${MYLIBRARY}_DEBUG ${MYLIBRARY})
        endif (MYLIBRARY)
    endif (NOT ${MYLIBRARY}_DEBUG)

endmacro(FIND_G2O_LIBRARY LIBRARY LIBRARYNAME)

# Find the core elements
FIND_G2O_LIBRARY(G2O_STUFF_LIBRARY stuff)
FIND_G2O_LIBRARY(G2O_CORE_LIBRARY core)

# Find the CLI library
FIND_G2O_LIBRARY(G2O_CLI_LIBRARY cli)

# Find the pluggable solvers
FIND_G2O_LIBRARY(G2O_SOLVER_CHOLMOD solver_cholmod)
FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE solver_csparse)
FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE_EXTENSION csparse_extension)
FIND_G2O_LIBRARY(G2O_SOLVER_DENSE solver_dense)
FIND_G2O_LIBRARY(G2O_SOLVER_PCG solver_pcg)
FIND_G2O_LIBRARY(G2O_SOLVER_SLAM2D_LINEAR solver_slam2d_linear)
FIND_G2O_LIBRARY(G2O_SOLVER_STRUCTURE_ONLY solver_structure_only)
FIND_G2O_LIBRARY(G2O_SOLVER_EIGEN solver_eigen)

# Find the predefined types
FIND_G2O_LIBRARY(G2O_TYPES_DATA types_data)
FIND_G2O_LIBRARY(G2O_TYPES_ICP types_icp)
FIND_G2O_LIBRARY(G2O_TYPES_SBA types_sba)
FIND_G2O_LIBRARY(G2O_TYPES_SCLAM2D types_sclam2d)
FIND_G2O_LIBRARY(G2O_TYPES_SIM3 types_sim3)
FIND_G2O_LIBRARY(G2O_TYPES_SLAM2D types_slam2d)
FIND_G2O_LIBRARY(G2O_TYPES_SLAM3D types_slam3d)

# G2O solvers declared found if we found at least one solver
set(G2O_SOLVERS_FOUND "NO")
if (G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)
    set(G2O_SOLVERS_FOUND "YES")
endif (G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)

# G2O itself declared found if we found the core libraries and at least one solver
set(G2O_FOUND "NO")
if (G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)
    set(G2O_FOUND "YES")
endif (G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)

include_directories(SYSTEM ${G2O_INCLUDE_DIR})
list(APPEND ALL_TARGET_LIBRARIES
        ${G2O_TYPES_DATA}
        ${G2O_CORE_LIBRARY}
        ${G2O_STUFF_LIBRARY}
        ${G2O_SOLVER_PCG}
        ${G2O_SOLVER_CSPARSE}
        ${G2O_SOLVER_CHOLMOD}
        ${G2O_TYPES_SLAM3D}
        ${G2O_TYPES_SLAM3D_ADDONS})

  

 

标签:11,lib,SOLVER,local,LIBRARY,G2O,g2o,camke,FIND
From: https://www.cnblogs.com/gooutlook/p/18310143

相关文章

  • Windows 11开始菜单变了!应用分类显示 更好找
    Windows11重新设计了开始菜单,虽然备受争议,但其实也挺好用的,只是有一个槽点,安装了太多应用软件之后,滚动列表会非常长,很难找到自己需要的。在最新的Windows1122635.3930测试版本中,微软隐藏了一个新功能,尝试重新设计开始菜单的应用列表,增加了一个“类别”(Category)模式。在这......
  • Intel和AMD用户再等等!微软确认Win11 24H2年底前登陆
    微软近日确认,Windows1124H2版本将于2024年底前正式登陆使用英特尔和AMD处理器的PC。根据微软介绍,Windows1124H2将作为传统功能更新,将在今年晚些时候提供给所有设备。此前,微软已向搭载骁龙XPlus和XElite系列处理器的Copilot+设备推送了24H2更新。该更新带来了大量AI功能,如......
  • 代码随想录算法训练营第16天|LeetCode112路径总和LeetCode113路径总和iiLeetCode106.
    代码随想录算法训练营Day16代码随想录算法训练营第16天|LeetCode112路径总和LeetCode113路径总和iiLeetCode106.从中序与后序遍历序列构造二叉树LeetCode105.从前序与中序遍历序列构造二叉树目录代码随想录算法训练营前言LeetCode112路径总和,LeetCode113路径......
  • 代码随想录算法训练营第 15 天 |LeetCode110平衡二叉树 LeetCode257二叉树的所有路径
    代码随想录算法训练营Day15代码随想录算法训练营第15天|LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左叶子之和LeetCode222完全二叉树节点之和目录代码随想录算法训练营前言LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左......
  • WCHNET_SocketSend返回0x11原因及解决方法
    问题描述:TCPCLIENT模式使用WCHNET_SocketSend发送有概率会返回0x11按wchnet.h定义为内存溢出错误。异常分析:通过WCHNET_QueryUnack查看,发现异常时发送队列或缓冲区已经占满,导致再次发送时报发送内存溢出错误。 解决方法:如果项目对RAM需求不大,可适当将WCHNET_NUM_TCP_SE......
  • Python数据可视化之numpy的11个常用的创建数组的函数
    numpy库在处理成千上万的数据时,Python的1维列表已经不适合来对数据进行处理,效率会很慢,所以numpy就诞生了,他可以将列表变成数组,而数组可以是1维、2维、3维甚至更高纬度,可用于存储和处理大型的矩阵,此外numpy提供了大量的数学函数,包括数学、逻辑、形态操作、排序、选择,输出和......
  • (nice!!!)LeetCode 3112. 访问消失节点的最少时间(图论、边的dijkstra、堆优化)
    3112.访问消失节点的最少时间思路:节点n的个数非常大,用普通的dijkstra算法对节点进行枚举是会超时的,时间复杂度为0(n^2)。这里边的数量最大为10^5,可以对边使用dijkstra算法+堆优化操作,时间复杂度为0(mlogm)。节点消失问题,只需要加一个判断条件,判断到每个节点的最小时......
  • 实验11 数据库日志及数据库恢复
    一、实验目的了解Mysql数据库系统中数据恢复机制和主要方法。二、实验环境操作系统:MicrosoftWindows7旗舰版(32&64位)/Linux。硬件:容量足以满足MySQL5.7(8.0)安装及后续实验的使用。软件:数据库版本:MySQL5.7(8.0)。三、实验内容(1)利用配置文件开启各种MYSQL日志需要......
  • Android 11 NavigationBar && Status Bar 如果改变背景颜色
    SystemUI的导航栏和状态栏的背景是大部分是根据当前应用的主题显示的,状态有黑,白,透明,半透明等.需求:要求背景不跟随栈顶应用主题变化,始终固定成一个颜色!/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java//NavigationBarView初始化pub......
  • 记录一次在欧拉(openEuler22.03LTS-SP4)系统下安装(踩坑)Freeswitch1.10.11的全过程
    目录前言安装环境1.下载Freeswitch1.1gitclone下载freeswitch库1.2官网下载2.开始安装前的工作2.1安装编译时需要的环境【先安装这个!】2.2configure前需要安装的库2.2.1.spandsp2.2.2.sofia-sip2.2.3.libks2.2.4.signalwire-c2.2.5x2642.2.6.libav2.2.6.1可能出现......