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