说在前面:网上相干的教程很多,但和我实际碰到的标题还是各有异同,这里把自己的实际安装过程记录下来,以供参考。
一、ORB-SLAM3源码下载
在home下打开终端,终端执行以下命令。
- git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
复制代码 二、相干库文件安装
2.1 Eigen 3安装
在home下打开终端,执行以下命令下载源码:
- git clone https://github.com/eigenteam/eigen-git-mirror
复制代码 然后依次执行以下命令进行安装:
- cd eigen-git-mirror
- mkdir build && cd build
- cmake ..
- sudo make install
复制代码 2.2 Pangolin安装
起首执行以下命令安装所需依靠:
- sudo apt-get install libxkbcommon-dev
- sudo apt-get install wayland-protocols
- sudo apt install libglew-dev
复制代码 在home下打开终端,执行以下命令下载源码:
- git clone https://github.com/stevenlovegrove/Pangolin
复制代码 然后依次执行以下命令进行安装:
- mkdir build && cd build
- cmake ..
- make
- sudo make install
复制代码 2.3 OpenCV安装
终端执行以下命令,安装所需依靠:
- sudo apt update
- sudo apt install cmake
- sudo apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
- sudo apt install pkg-config
复制代码 通过以下链接到官网下载源码,我这里下载的是opencv-4.5.0:
https://github.com/opencv/opencv/releases?page=2
将下载的源码解压缩至home下,在opencv目录下打开终端,依次执行以下命令:
- mkdir build && cd build
- cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
- make -j4
- sudo make install
复制代码 终端执行以下命令:
- sudo gedit /etc/profile.d/pkgconfig.sh
复制代码 在打开的文件中参加以下代码:
- export PKG_CONFIG_PATH=/usr/local/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 生存并退出。终端执行以下命令,刷新一下:
终端执行以下命令验证是否成功:
- pkg-config --libs opencv4
复制代码 出现以下内容,则阐明成功:
终端执行以下命令:
- sudo gedit /etc/ld.so.conf.d/opencv4.conf
复制代码 在打开的文件中参加以下代码:
生存并退出。最后执行以下命令,使配置的路径见效。
在opencv/samples/cpp/example_cmake目录下,依次执行以下命令:
- cmake .
- make
- ./opencv_example
复制代码 若出现以下画面,则表示安装成功。
2.4 Boost安装
这里安装的是1.75.0版本,可通过下面链接下载源码:
https://archives.boost.io/release/1.75.0/source/boost_1_75_0.tar.gz
将下载的源码解压缩至home下,在boost目录下打开终端,依次执行以下命令:
- sudo ./bootstrap.sh
- sudo ./b2 install
复制代码 等待执行完成即可。
2.5 DBoW2 and g2o
DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。
ORB-SLAM3的源码包自带DBoW2 and g2o,编译时会自动安装,不用管。
三、ORB-SLAM3编译(非ROS)
在home下执行以下命令:
- cd ORB_SLAM3
- chmod +x build.sh
- ./build.sh
复制代码 如果编译时堕落,发起打开build.sh文件,对照其中的命令,一步一步在终端手动执行。(由于我这里没有堕落,就不列举错误了。)
进入如下链接,下载数据集,下载Machine Hall 01:
kmavvisualinertialdatasets – ASL Datasets
在ORB_SLAM3文件夹下,新建一文件夹并定名为dataset,将刚刚下载的数据集压缩包,解压缩至该文件夹下,将其定名为MH01,文件夹条理应如下:ORB_SLAM3/dataset/MH01/mav0
执行以下命令:
- ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
复制代码 发现可视化界面没有显示。
在ORB_SLAM3/Examples/Monocular文件夹下,打开mono_euroc.cc文件,将第83行:
- ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, false);
复制代码 修改为如下:
- ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true);
复制代码 改完之后生存,必要重新编译ORB_SLAM3(改动源码,都需重新编译)。在ORB_SLAM3下打开终端依次执行以下命令:
- sudo chmod +x build.sh
- sudo ./build.sh
复制代码 编译成功后,在终端执行以下命令:
- ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
复制代码 (以下命令也行)
- ./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi
复制代码 运行效果如下图所示:
四、在ROS中编译ORB-SLAM3
在终端执行以下命令:
会自动打开一个文件,在文件末尾添加以下语句(路径根据自己的实际路径来):
- export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ubuntu/ORB_SLAM3/Examples_old/ROS
复制代码 生存并退出。在终端执行以下命令,刷新下环境:
打开build_ros.sh文件,将里面的内容进行修改:
- cd Examples/ROS/ORB_SLAM3
复制代码 改为:
- cd Examples_old/ROS/ORB_SLAM3
复制代码 将ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt文件进行如下修改:
第2行增加如下代码:
第34行:
- 将find_package(OpenCV 3.0 QUIET)改为find_package(OpenCV 4.0 QUIET)
复制代码 第50行增加以下代码(在include_directories内):
- ${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
复制代码 将ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR下的ros_mono_ar.cc文件中的代码:
- cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
复制代码 改为:
- cv::Mat Tcw=ORB_SLAM3::Converter::toCvMat(mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()).matrix());
复制代码 将ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR下的ViewerAR.cc文件中的代码:
- vPoints.push_back(pMP->GetWorldPos());
复制代码- cv::Mat Xw = pMP->GetWorldPos();
复制代码 修改为:
- vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));
复制代码- cv::Mat Xw = ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos());
复制代码 终端执行以下命令,查看刚刚添加的路径会不会出现:
运行效果如下:
在home下依次执行以下命令:
- cd ORB_SLAM3
- chmod +x build_ros.sh
- ./build_ros.sh
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |