• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
自动驾驶与机器人的slam技术(1)工程编译
 

 0 官网代码

https://github.com/gaoxiang12/slam_in_autonomous_driving

 

  • 第1章,概述
  • 第2章,数学基础知识回顾,几何学、运动学、KF滤波器理论,矩阵李群
  • 第3章,误差状态卡尔曼滤波器,惯性导航、卫星导航、组合导航
  • 第4章,预积分,图优化,基于预积分的组合导航
  • 第5章,点云基础处理,各种最近邻结构,点云线性拟合
  • 第6章,2D激光建图,scan matching, 似然场,子地图,2D回环检测,pose graph
  • 第7章,3D激光建图,ICP,变种ICP,NDT,NDT LO, Loam-like LO,LIO松耦合
  • 第8章,紧耦合LIO,IESKF,预积分紧耦合LIO
  • 第9章,离线建图,前端,后端,批量回环检测,地图优化,切片导出
  • 第10章,融合定位,激光定位,初始化搜索,切片地图加载,EKF融合

 

官网给教程 

  • 本书推荐的编译环境是Ubuntu 20.04。更老的Ubuntu版本需要适配gcc编译器,主要是C++17标准。更新的Ubuntu则需要您自己安装对应的ROS版本。
  • 在编译本书代码之前,请先安装以下库(如果您机器上没有安装的话)
  •  
    • Pangolin: 编译安装thirdparty/pangolin.zip,或者 https://github.com/stevenlovegrove/Pangolin
    • 编译thirdparty/g2o,或者自行编译安装 https://github.com/RainerKuemmerle/g2o
    • 通过cmake, make安装本repo下的thirdparty/g2o库
  • 之后,使用通常的cmake, make方式就可以编译本书所有内容了。例如


mkdir build cd build cmake .. make -j8
 

 0 开始以前如果装有aconda 首先从系统变量注销

aconda导致的报错

 

因为装了aconda 所以默认制定的是aconda的python3 需要切换会系统自带的python3,从而对于对应


编译制定python

cmake .. -DPYTHON_EXECUTABLE=/usr/bin/python3

或者直接进入环境变量 去除调aconda的默认信息 

1 安装ROS

  • ROS Noetic: http://wiki.ros.org/noetic/Installation/Ubuntu
  • 自己的教程 https://www.cnblogs.com/gooutlook/p/16363452.html
  • 使用以下指令安装其余的库
sudo apt install -y ros-noetic-pcl-ros ros-noetic-velodyne-msgs libopencv-dev libgoogle-glog-dev libeigen3-dev libsuitesparse-dev libpcl-dev libyaml-cpp-dev libbtbb-dev libgmock-dev

  

2安装Pangolin

2-1 编译库

  • Pangolin: 编译代码自带的thirdparty/pangolin.zip,或者 https://github.com/stevenlovegrove/Pangolin

 

 cmake-gui

设置默认安装路径

 

 指定安装位置

安装官网直接装到默认系统盘路径不用单独该安装地址。

 (因为我的电脑为了openvslam已经装了0.6版本的库,所以这里新的库装在指定位置,后期代码修改引用地址)

 

 

 分别设置和生成

 

然后进入build编译 

sudo make -j8

 

 

sudo make install  

 

 

 

 

 看到安装好的库和头文件

 

修改库属性(非必要)

 

 

 

 

 

2-2  cmake指定库路径

 

 在当前工程文件下打开CMakeLists.txt

在find_package(Pangolin REQUIRED)前边添加
set(Pangolin_DIR /xxx/xxx/Pangolin/build/src)
其中xxx/xxx为缺少文件的路径。

 

 

 

 这里注意 库安装位置是install文件夹, 但是给的具体位置是 instal/lib/cmake/Pangolin/

set(Pangolin_DIR ${PROJECT_SOURCE_DIR}/thirdparty/Pangolin/install/lib/cmake/Pangolin/)# 手动设置库路径
find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS})

  

  

3 安装g2o库

 

3-1 编译自带的G2O

 按照官网直接装在默认路径就好了,但是自己电脑因为openvslam之前装有别的版本,这里但需修改了库的安装位置

修改安装路径

 

编译 
sudo make -j8
安装
sudo make install

 

3-2 代码修改依赖库位置

# g2o 使用thirdparty中的
set(g2o_dir ${PROJECT_SOURCE_DIR}/thirdparty/g2o/install/lib/cmake/g2o/)# 手动设置库路径

  

  

 

 4 修改opencv路径

自己电脑有多版本的opencv 这里用opencv455

 

# opencv
set(OpenCV_DIR /home/r9000k/v1_software/opencv/opencv455/install/lib/cmake/opencv4/)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

  

 

 

 

5 确认tbb库路径

可忽略,有问题在来看

 安装包是自己带的,安装时候自动解压,但是目录可能多了一个2019_u8  这里是手动拷贝的tbb路径下的

 

记得在这个地方make下 

 

6 报错

 

问题一:

make[2]: *** 没有规则可制作目标“gmock”,由“../bin/test_preintegration” 需求。 停止。 make[1]: *** [CMakeFiles/Makefile2:4171:src/ch4/CMakeFiles/test_preintegration.dir/all] 错误 2 make: *** [Makefile:141:all] 错误 2

https://blog.csdn.net/ht_lf/article/details/134185779

解决方案:

其原因其实是gmock文件定位不准,解决方案如下,将/ch4/CmakeList.txt文件内容修改如下:

# 查找 Google Test,它应该也包含了 Google Mock
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
 
# 添加您的库
add_library(${PROJECT_NAME}.ch4
        gins_pre_integ.cc
        imu_preintegration.cc
        g2o_types.cc
)
 
# 添加您的测试可执行文件
add_executable(test_preintegration test_preintegration.cc)
 
# 链接 Google Test (它应该包含了 gmock) 以及其他依赖项
target_link_libraries(test_preintegration
        ${GTEST_BOTH_LIBRARIES}
        pthread glog gflags ${PROJECT_NAME}.ch4 ${PROJECT_NAME}.ch3 ${PROJECT_NAME}.common gomp
)
 
# 添加测试
add_test(NAME test_preintegration COMMAND test_preintegration)
 
# 添加其他可执行文件
add_executable(run_gins_pre_integ run_gins_pre_integ.cc)
target_link_libraries(run_gins_pre_integ
        ${PROJECT_NAME}.ch3
        ${PROJECT_NAME}.ch4
        ${G2O_LIBS}
        gomp
)

  

  

问题2:make[2]: *** 没有规则可制作目标“gmock”,由“../bin/test_nn” 需求。 停止。 make[1]: *** [CMakeFiles/Makefile2:4227:src/ch5/CMakeFiles/test_nn.dir/all] 错误 2 make: *** [Makefile:141:all] 错误 2

解决方案:这个问题和上一个是一样的也是因为gmock的定位问题修改/ch5/CMakeList.txt内容为:

 

find_package(GTest REQUIRED)
 
add_executable(point_cloud_load_and_vis point_cloud_load_and_vis.cc)
target_link_libraries(point_cloud_load_and_vis
        ${PCL_LIBRARIES}
        ${GLOG_LIBRARIES}
        gflags
        )
 
add_executable(pcd_to_bird_eye pcd_to_bird_eye.cc)
target_link_libraries(pcd_to_bird_eye
        ${PCL_LIBRARIES}
        ${GLOG_LIBRARIES}
        ${OpenCV_LIBS}
        gflags
        )
 
add_executable(scan_to_range_image scan_to_range_image.cc)
target_link_libraries(scan_to_range_image
        ${PCL_LIBRARIES}
        ${GLOG_LIBRARIES}
        ${OpenCV_LIBS}
        gflags
        )
 
add_library(${PROJECT_NAME}.ch5
        bfnn.cc
        kdtree.cc
        octo_tree.cc
        )
target_link_libraries(${PROJECT_NAME}.ch5
        tbb
        )
 
add_executable(linear_fitting linear_fitting.cc)
target_link_libraries(linear_fitting
        ${PCL_LIBRARIES}
        ${GLOG_LIBRARIES}
        ${OpenCV_LIBS}
        gflags
        )
 
add_executable(test_nn test_nn.cc)
add_test(NAME test_nn COMMAND test_nn)
 
target_link_libraries(test_nn
        GTest::GTest
        GTest::Main
        glog
        gflags
        ${PROJECT_NAME}.ch5
        ${PROJECT_NAME}.common
        ${PCL_LIBRARIES}
        tbb
)

问题3:[1] heirenlop. 错误:/usr/lib/x86_64-linux-gnu/libgomp.so.1: error adding symbols: DSO missing from command line [EB/OL].

https://blog.csdn.net/heirenlop/article/details/115960668, 2021-04-21/2022-03-24.
手动添加gomp 

# 链接 Google Test (它应该包含了 gmock) 以及其他依赖项
target_link_libraries(test_preintegration
        ${GTEST_BOTH_LIBRARIES}
        pthread glog gflags ${PROJECT_NAME}.ch4 ${PROJECT_NAME}.ch3 ${PROJECT_NAME}.common gomp
)

 

 7 编译

cmake ..

 

 中间报警忽视

 

 编译

make -j8

 

 调试编译可以逐个编译 ,卡纳可能报错出现在那个工程里

 

 

 可执行文件位置

 

 

 

8 运行测试 

8-1 

执行时候注意相对路径

书中的测试都是从  ./bin/run_imu_integration 

代码给的数据相对路径,是相对于你执行命令行的起始路径

相对于命令行的路径 否则不到文件地址

 

  

 

8-2 

因为自己的pangplin没有安装在系统盘

编译时候应该手动指定的安装位置

直接拷贝到可执行文件同一个目录

 

 执行的时候  必须从 bin文件夹下 去执行,否则可执行文件找不到这些动态库。

 

 

 

 9 测试例子

9-1 圆周运动

 

 

 

 9-2 测试imu积分计算位移

 

 

按照这个执行会找不到数据,改代码
ch2-ch3的代码里面指定了数据的相对路径,不是参数手动指定的,这里要该下位置(因为我们不是从 ./bin/节点名字 开始执行的)

 

 

 

重新编译
make
运行

 

 

 

9-3 eskf+gps测试

 ./run_eskf_gins --txt_path ../data/ch3/10.txt

  这个直接用参数指定了数据位置无需代码修改了

 

 

 

 

 






  

posted on 2023-12-09 03:46  MKT-porter  阅读(849)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3