ORB_SLAM2与传感器之间是相互独立,提取特征之后,图像不需要被保存而是直接丢弃。
git clone https://github.com/raulmur/ORB_SLAM2.git
ORB_SLAM2将编译出libORB_SLAM2.so安装在lib目录中
并且生成可执行的数据集测试样例
mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc,stereo_euroc
有19个库文件、6个可执行文件:
分别是 rgbd_tum, stereo_kitti, stereo_euroc, mono_tum,mono_kitti,mono_euroc
/src 中包含的是ORB_SLAM2的SLAM定位建图子程序函数源库文件
/include 中包含的是ORB_SLAM2的SLAM定位建图子程序函数源库文件对应的头文件
/Examples 中的是各个数据集的测试调用程序以及相机标定文件
链接到的内部库
src/System.cc
src/LoopClosing.cc
src/FrameDrawer.cc
src/KeyFrame.cc
src/Optimizer.cc
src/KeyFrameDatabase.cc
src/Viewer.cc
链接到的外部库
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
首先更改 camke 编译文件 CMakeLists.txt
git clone https://github.com/raulmur/ORB_SLAM2
cd /ORB_SLAM2
gedit CMakeLists.txt
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
删除 -march=native 编译环境的优化选项
cd /ORB_SLAM2
gedit /Thirdparty/g2o/CMakeLists.txt
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -march=native")
删除“-march=native” 编译环境的优化选项
cd /ORB_SLAM2
gedit /Thirdparty/DBoW2/CMakeLists.txt
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
删除“-march=native” 编译环境的优化选项
编译过程中可能报错
'_ZN5boost6system15system_categoryEv'
解决办法,找到下面共享库的目录
locate boost_system
/usr/lib/x86_64-linux-gnu/libboost_system.a
/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
locate boost_filesystem
/usr/lib/x86_64-linux-gnu/libboost_filesystem.a
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
更改 camke 编译文件 CMakeLists.txt
cd /ORB_SLAM2/Examples/ROS/ORB_SLAM2
gedit CMakeLists.txt
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/x86_64-linux-gnu/libboost_system.so)
删除下面路径下的 build 目录
Thirdparty/DBoW2/build
Thirdparty/g2o/build
ORB_SLAM2/build
Examples/ROS/ORB_SLAM2/build
方法一在编译和执行终端添加环境变量
ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/q/projects/ORB_SLAM2/Examples/ROS/ORB_SLAM2
方法二在bashrc添加环境变量
gedit ~/.bashrc
export ORB_SLAM2_ROOT_DIR=/home/q/projects/ORB_SLAM2
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/q/projects/ORB_SLAM2/Examples/ROS/ORB_SLAM2
source ~/.bashrc
sudo updatedb
开始编译
chmod 777 ./build.sh
将 make -j 改成 make -j4 否则编译过程中有可能死机
编译非ROS版本
./build.sh
编译ROS版本
./build_ros.sh
更多编译问题请参考下面文章
EuRoC Dataset 数据集下载地址
/home/q/ORB_SLAM2/Examples/Stereo/MH_01_easy
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/q/ORB_SLAM2/EuRoC_Dataset/mav0/cam0/data /home/q/ORB_SLAM2/EuRoC_Dataset/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt
/home/q/ORB_SLAM2/Vocabulary/ORBvoc.txt
/home/q/ORB_SLAM2/Examples/Stereo/EuRoC.yaml
/home/q/ORB_SLAM2/Examples/Stereo/MH_01_easy/mav0/cam0/data
/home/q/ORB_SLAM2/Examples/Stereo/MH_01_easy/mav0/cam1/data
/home/q/ORB_SLAM2/Examples/Stereo/EuRoC_TimeStamps/MH01.txt
stereo_euroc运行视频
跑高博十四讲里面的代码需要的eigen版本是3.3.0 否则sophus编译不会通过
git clone 的仓库才可以在目录下输入下面命令下载第三方库
git submodule init
git submodule update
[submodule "3rdparty/Pangolin"]
path = 3rdparty/Pangolin
url = https://github.com/stevenlovegrove/Pangolin
[submodule "3rdparty/Sophus"]
path = 3rdparty/Sophus
url = https://github.com/strasdat/Sophus
[submodule "3rdparty/ceres-solver"]
path = 3rdparty/ceres-solver
url = https://github.com/ceres-solver/ceres-solver
[submodule "3rdparty/g2o"]
path = 3rdparty/g2o
url = https://github.com/RainerKuemmerle/g2o
[submodule "3rdparty/DBoW3"]
path = 3rdparty/DBoW3
url = https://github.com/rmsalinas/DBow3
[submodule "3rdparty/googletest"]
path = 3rdparty/googletest
url = https://github.com/google/googletest.git
cmake ..
make -j2|4|8
sudo make install|sudo make install DESTDIR= /home/build
# OpenCV
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_DIRS} )
include_directories(${OpenCV_INCLUDE_DIRS})
# find_package(G2O REQUIRED)
set(G2O_INCLUDE_DIRS /home/q/CLionProjects/slambook2/3rdparty/g2o/)
set(CERES_LIBRARIES /home/q/CLionProjects/slambook2/3rdparty/g2o/lib/)
include_directories(${G2O_INCLUDE_DIRS})
# find_package(Ceres REQUIRED)
set(CERES_INCLUDE_DIRS /usr/local/include/ceres)
set(CERES_LIBRARIES /usr/local/lib/libceres.a)
include_directories(${CERES_INCLUDE_DIRS})
# find_package(Eigen3 REQUIRED)
set( EIGEN3_INCLUDE_DIRS /usr/local/include/eigen3)
include_directories(${EIGEN3_INCLUDE_DIRS})
或者这样指定
# Eigen
include_directories("/usr/local/include/eigen3")
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
find_package(Pangolin REQUIRED)
set(Pangolin_INCLUDE_DIRS /usr/local/include/pangolin)
set(Pangolin_LIBRARIES /usr/local/lib/libpangolin.so)
# pcl
find_package( PCL REQUIRED COMPONENT common io )
include_directories( ${PCL_INCLUDE_DIRS} )
add_definitions( ${PCL_DEFINITIONS} )
add_executable( curve_fitting main.cpp )
# 与Ceres和OpenCV链接
target_link_libraries( curve_fitting ${CERES_LIBRARIES} ${OpenCV_LIBS} ${G2O_INCLUDE_DIRS})
add_executable(joinMap joinMap.cpp)
target_link_libraries(joinMap ${OpenCV_LIBS} ${Pangolin_LIBRARIES} ${PCL_LIBRARIES})
官方安装教程:https://docs.opencv.org/3.4.0/d7/d9f/tutorial_linux_install.html
cd /opencv3.4.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -DWITH_GTK_2_X=ON -DWITH_VTK=ON ..
make -j4
sudo make install
CMakeLists.txt多版本OpenCV切换
系统安装多版本opencv的时候,在CMakeLists.txt文件中指定
默认路径:/usr/local/include
指定路径:/usr/local/opencv-3.4.0
find_package找默认路径下的OpenCV
find_package( OpenCV REQUIRED )
include_directories( ${OPENCV_INCLUDE_DIR} )
find_package找到指定路径下的opencv-3.4.0
set(OpenCV_DIR "CMAKE_INSTALL_PREFIX")
OpenCV_DIR 就是你刚才给CMAKE_INSTALL_PREFIX指定的安装地址
set( OpenCV_DIR /usr/local/opencv-3.4.0)
find_package(OpenCV 3.4.0 REQUIRED)
include_directories(${OPENCV_INCLUDE_DIR})
MESSAGE("OPENCV_INCLUDE_DIR " ${OPENCV_INCLUDE_DIR})
target_link_libraries(vo_simulate ${OpenCV_LIBS})
http://ceres-solver.org/installation.html
sudo apt-get install libgoogle-glog-dev
感觉只装这一个就够了
sudo apt-get install cmake
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
https://zhuanlan.zhihu.com/p/394088042
sudo apt-get install libqglviewer-dev
主要就是删除库文件 头文件 和可执行程序
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*
set(Sophus_INCLUDE_DIR “/usr/local/sophus-template/include”)
set(Sophus_LIBS )
include_directories(${Sophus_INCLUDE_DIRS})
target_link_libraries(test ${Sophus_LIBS})
set(Sophus_LIBRARIES “/usr/local/lib/libSophus.so”)
target_link_libraries( P R O J E C T N A M E {PROJECT_NAME} PROJECTNAME{Sophus_LIBRARIES})
https://github.com/borglab/gtsam
Prerequisites:
Boost >= 1.43 (Ubuntu: sudo apt-get install libboost-all-dev)
CMake >= 3.0 (Ubuntu: sudo apt-get install cmake)
Optional prerequisites
Ubuntu: sudo apt-get install libtbb-dev
https://github.com/OctoMap/octomap
sudo apt install libpcl-dev
TUM数据集RGBD-Benchmark工具之associate.py
TUM数据集RGBD-Benchmark工具之evaluate_ate.py
TUM数据集RGBD-Benchmark工具之evaluate_rpe.py
「原理+实践」从文件或终端读写yaml和txt文件
视觉SLAM十四讲实践系列笔记之SLAM轨迹可视化
ORB_SLAM2的可视化是怎么实现的?
https://zhuanlan.zhihu.com/p/61738607
视觉SLAM十四讲实践系列笔记之ubuntu16.04系统下高频使用命令
视觉SLAM十四讲实践系列笔记之安装和如何使用C++集成开环境Clion调试C++和ROS项目
视觉SLAM十四讲实践系列笔记之安装和如何使用Visual Studio Code调试C++和ROS项目
视觉SLAM十四讲实践系列笔记之ubuntu16.04下如何搭建开发环境安装OpenCV等开源算法库
视觉SLAM十四讲实践系列笔记之如何使用cmake组织编译大型C++源码项目
视觉SLAM十四讲实践系列笔记之gdb如何调试C++源码项目
ubuntu16.04下如何使用git创建代码仓库对本地代码进行版本控制
eigen下的位姿表示显示变换
视觉SLAM十四讲实践系列笔记之eigen表示四种位姿以及相互转换
视觉SLAM十四讲实践系列之坐标系之间的欧式变换
李群李代数sophus下位姿的优化
视觉SLAM十四讲实践系列之Sophus下的位姿表示和更新优化和修正
轨迹可视化与评估
视觉SLAM十四讲实践系列笔记之轨迹可视化
视觉SLAM十四讲实践笔记系列之真实轨迹和估计轨迹均方根误差
TUM数据集RGBD-Benchmark工具之associate.py
TUM数据集RGBD-Benchmark工具之evaluate_ate.py
TUM数据集RGBD-Benchmark工具之evaluate_rpe.py
如何使用evo工具评估位姿轨迹精度?
传感器
TOF的工作原理是什么
RealSense D435i RGBD英特尔® 实感™ D435i 深度摄像头 硬件结构及各个组件原理详解 SDK ROS
SLAM领域传感器工作原理与使用场景汇总
扫地机器人工作原理、传感器原理、结构、工作流程、路径规划技术
小觅双目摄像头MYNTEYE-S1030-IR和自制双目摄像头测试ORB-SLAM2和RTAB-Map的运行效果对比
文件 yaml
「原理+实践」从文件或终端读写yaml和txt文件
图像 opencv
模拟图像、数字图像、OpenCV表示图像
视觉SLAM十四讲系列之图像的基本操作
视觉SLAM十四讲实践笔记系列之图像去畸变
用直方图统计图像的像素和计算图像的矩
高斯平滑和高斯模糊的算法
离散傅里叶变换和仿射变换Affine Transformation在图像处理中的应用及原理
循环读取rgbd_dataset_freiburg1_desk数据集每一张图片并且重命名的两种方法
视觉SLAM十四讲实践系列之OpenCV实现特征点检测和匹配
G2O优化问题 视觉SLAM十四讲系列之第七讲pose_estimation_2d2d.cpp
视觉SLAM十四讲实践系列之三角化方法求深度
视觉SLAM十四讲实践笔记系列之双目图像如何生成视差图和点云图
[视觉SLAM十四讲实践系列之两张图像拼接成点云]
如何理解概率密度函数以及概率论的一些总结
视觉SLAM十四讲实践系列之曲线拟合高斯牛顿优化
G2O优化问题 视觉SLAM十四讲系列之第七讲pose_estimation_2d2d.cpp
视觉SLAM十四讲实践系列之三角化方法求深度
视觉SLAM十四讲实践笔记系列之双目图像如何生成视差图和点云图
视觉SLAM十四讲实践系列之两张图像拼接成点云
一文帮你理解SLAM的投影模型、像素坐标系、图像坐标系、相机坐标系、世界坐标系
视觉SLAM十四讲实践系列之3D-2D求位姿用高斯牛顿和最小二乘法优化
视觉SLAM里的最小二乘Bundle Adjustment问题
Bundle adjustment 总结
视觉SLAM十四讲实践笔记系列之3D-3D求解位姿并用g2o优化
g2o之非线性优化(一)
视觉SLAM十四讲实践笔记系列之g2o_viewer
视觉SLAM十四讲实践系列之VIZ可视化
OpenCV Viz 代码实战详解
视觉SLAM十四讲实践笔记系列之视觉里程计前端基本数据结构
视觉SLAM十四讲实践系列之两帧之间的视觉里程计
视觉SLAM十四讲实践系列之g2o优化两帧之间的视觉里程计
BA问题用g2o求解重新投影误差优化相机位姿和路标点的源码注释版本来了
什么是路标点?
视觉SLAM十四讲实践系列之两帧之间的视觉里程计g2o优化并保存mappiont路标点
精确率、精度(Precision) 召回率(recall)你真的理解吗?
SLAM 后端优化 算法 简单描述
欧氏距离、汉明距离、余弦相似度
一起做RGB-D SLAM (1)-(7) 代码实践
我的 一起做RGB-D SLAM (1)-(7) 代码实践
高博博客
高博代码