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
这个直接用参数指定了数据位置无需代码修改了


浙公网安备 33010602011771号