马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
ORB-SLAM3 是 UZ-SLAMLab 开源的一套视觉 + 视觉惯性 SLAM 方案,自带回环检测(DBoW2)和图优化(g2o),官方脚本一键编译,但对 Eigen、Pangolin、OpenCV、Boost 这几个依赖的版本比较挑。这篇记录在 Ubuntu 20.04 上从拉源码到跑通 EuRoC 数据集(MH01)的全过程,以及 ROS 版编译时那几个必改的行。
一、拉源码
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
二、装依赖库
1. Eigen3
git clone https://github.com/eigenteam/eigen-git-mirror
cd eigen-git-mirror
mkdir build && cd build
cmake ..
sudo make install
2. Pangolin
sudo apt-get install libxkbcommon-dev
sudo apt-get install wayland-protocols
sudo apt install libglew-dev
git clone https://github.com/stevenlovegrove/Pangolin
cd Pangolin
mkdir build && cd build
cmake ..
make
sudo make install
3. OpenCV 4.5.0
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 的 releases 页下源码(这里用的是 4.5.0),解压到 home 下:
cd opencv
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_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
source /etc/profile
pkg-config --libs opencv4
sudo gedit /etc/ld.so.conf.d/opencv4.conf # 写入 /usr/local/lib
sudo ldconfig
再用自带的 sample 验一次:cmake . && make && ./opencv_example 能出窗口就成。
4. Boost 1.75.0
从 Boost 归档站下 1.75.0:
tar xf boost_1_75_0.tar.gz
cd boost_1_75_0
sudo ./bootstrap.sh
sudo ./b2 install
5. DBoW2 与 g2o
这两者 ORB-SLAM3 源码包里已经自带,编译时会一起编出来,不需要单独装。
三、编译 ORB-SLAM3(非 ROS)
cd ORB_SLAM3
chmod +x build.sh
./build.sh
如果编译挂了,打开 build.sh 对照里面的命令一条条手动敲执行,定位更快。编译通过后下载数据集(比如 EuRoC 的 Machine Hall 01),在 ORB_SLAM3 下建 dataset 目录解压成 MH01/mav0 结构:
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
这时常见现象是算法在跑但可视化窗口不显示。原因是传给 System 的最后一个参数(是否启用GUI)是 false。打开 Examples/Monocular/mono_euroc.cc 第 83 行:
ORB_SLAM3::System SLAM(argv[1], argv[2], ORB_SLAM3::System::MONOCULAR, false);
把最后一个参数改成 true,保存后必须重新编译(改源码就要重新 build.sh),再跑同一条命令:
chmod +x build.sh
./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 ...。
四、ROS 版编译
gedit ~/.bashrc # 末尾加 export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/你的用户名/ORB_SLAM3/Examples_old/ROS
source ~/.bashrc
然后改 build_ros.sh,把 cd Examples/ROS/ORB_SLAM3 换成 cd Examples_old/ROS/ORB_SLAM3。CMakeLists.txt 里:
- 第 2 行加
project(ORB_SLAM3);
- 第 34 行
find_package(OpenCV 3.0 QUIET) 改成 find_package(OpenCV 4.0 QUIET);
- 第 50 行的 include_directories 里加
${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus。
还有两处源码要改(ROS 与裸版接口不一致):
// src/AR/ros_mono_ar.cc
cv::Mat Tcw = ORB_SLAM3::Converter::toCvMat(mpSLAM->TrackMonocular(cv_ptr->image, cv_ptr->header.stamp.toSec()).matrix());
// src/AR/ViewerAR.cc
vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));
cv::Mat Xw = ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos());
最后 chmod +x build_ros.sh && ./build_ros.sh。echo $ROS_PACKAGE_PATH 能看到加进去的路径再开始编。
五、踩坑备忘
- Eigen 装成 3.4 而 ORB-SLAM3 期望 3.3,编译期会报模板错误,用上面那条 eigenteam 镜像的路径装 3.3;
- OpenCV 用 3.x 而不是 4.x,ROS 版会找不到
cv::Mat 转换,务必 4.x;
- Pangolin 从老仓库 clone 下来缺子模块,注意
git submodule update --init;
- 运行时报缺少
libPangolin.so,多半是 ldconfig 没刷新,sudo ldconfig 再跑。
qidao123.com企服评测-应用市场 编辑提示 |