因为之前已经下了pangolin等库,就直接从后面的步骤开始了。。这篇主要是记录一下过程和报错应该如何解决。。
一、下载源码
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
二、编译第三方库
参考安装ORB-SLAM3教程_orbslam3 安装-CSDN博客中的(非ROS)编译部分
分别编译:
记得在文件中修改opencv的版本!!(本身自带的是4.2,但orb-slam3要求的好像是3.4.2或4.4,我下的3.4.2,可以运行)具体可见报错2~~
编译报错:
1.找不到文件
(1) 安装 OpenSSL 开发库
需要安装 OpenSSL 的开发库,这样编译器才能找到 openssl/md5.h
文件。在 Ubuntu 上,可以使用以下命令安装 OpenSSL 开发库:
sudo apt update
sudo apt install -y libssl-dev
(2) 确认头文件路径
安装完成后,确认 openssl/md5.h
文件是否存在。通常,它应该位于 /usr/include/openssl/
目录下。你可以使用以下命令检查:
ls /usr/include/openssl/md5.h
如果文件存在,说明安装成功。
2.又报错,opencv版本问题
安装opencv3.4.2
官网:https://opencv.org/releases/page/5/
参考:(2024)Ubuntu源码安装多个版本的opencv并切换使用_ubuntu系统opencv多版本共存和使用教程-CSDN博客 Ubuntu20.04环境下安装opencv3.4.2-CSDN博客
编译完成:
三、运行命令
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml /home/huang/Code/Open/ORB_SLAM3/Datasets/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
经历漫长的排错。。。。
报错1:Failed to load image at: /home/huang/Code/Open/ORB_SLAM3/Datasets/MH01/.png/cam0/data/1403636579763555584
参考解决方案:(我用的第二个)
ORB-SLAM3(Failed to load image)问题解决(WSL2配置)-CSDN博客
关于用自己的数据集运行ORB-SLAM3时打开图片失败报错的处理_orb-slam3 没有加载图片-CSDN博客
报错2 :(opencv的问题)
Loading ORB Vocabulary. This could take a while...
Vocabulary loaded!Initialization of Atlas from scratch
Creation of new map with id: 0
Creation of new map with last KF id: 0
Seq. Name:
There are 1 cameras in the atlas
Camera 0 is pinhole
ShutdownSaving trajectory to f_dataset-MH01_mono.txt ...
There are 1 maps in the atlasMap 0 has 0 KFs
段错误 (核心已转储)
Initialization of Atlas from scratch
Creation of new map with id: 0
Creation of new map with last KF id: 0
Seq. Name:
There are 1 cameras in the atlas
Camera 0 is pinhole
First KF:0; Map init KF:0
New Map created with 346 points
terminate called after throwing an instance of 'cv::Exception'what(): OpenCV(3.4.2) /home/huang/Software/opencv-3.4.2/modules/highgui/src/window.cpp:615: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'已放弃 (核心已转储)
参考解决方案:
从错误信息来看,问题出在 OpenCV 的窗口显示功能上。具体来说,OpenCV 抛出了一个异常,表明它没有正确配置以支持窗口显示功能。错误信息如下:
OpenCV(3.4.2) /home/huang/Software/opencv-3.4.2/modules/highgui/src/window.cpp:615: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'
这表明 OpenCV 没有正确配置以支持 GTK+ 2.x 或其他窗口显示库。
后面发现之前编译的有问题,不支持GTK+ 2.x,又重新编译了opencv ,结合上面的博文进行编译。
验证 OpenCV 配置
验证 OpenCV 是否正确配置了窗口显示功能。运行以下命令:
pkg-config --cflags --libs opencv
输出应该包含 GTK+ 2.x 的链接标志,例如:
-I/usr/include/opencv -I/usr/include/opencv2 -L/usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lopencv_highgui -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0
但是 ,又报错:
(base) huang@huang-System-Product-Name:~/Code/Open/ORB_SLAM3$ pkg-config --cflags --libs opencv Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found
从输出来看,`pkg-config` 无法找到 OpenCV 的配置文件 `opencv.pc`。这表明 OpenCV 没有正确安装,或者安装路径没有被正确配置到 `PKG_CONFIG_PATH` 环境变量中。
所以:去找opencv.pc,找到opencv.pc的位置/usr/local/opencv3.4.2/lib/pkgconfig
确保
PKG_CONFIG_PATH
环境变量包含这个路径,以便pkg-config
能够找到 OpenCV 的配置文件。设置
PKG_CONFIG_PATH
临时设置
PKG_CONFIG_PATH
: 在当前终端会话中设置PKG_CONFIG_PATH
,使其包含 OpenCV 的pkgconfig
目录:
export PKG_CONFIG_PATH=/usr/local/opencv3.4.2/lib/pkgconfig:$PKG_CONFIG_PATH
验证设置: 设置完成后,运行以下命令验证
pkg-config
是否能够找到 OpenCV:pkg-config --cflags --libs opencv
输出应该包含 OpenCV 的编译和链接标志,例如:
-I/usr/local/opencv3.4.2/include/opencv -I/usr/local/opencv3.4.2/include -L/usr/local/opencv3.4.2/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
- 2.永久设置
PKG_CONFIG_PATH
: 为了使设置永久生效,你可以将上述export
命令添加到你的 shell 配置文件中(例如.bashrc
或.zshrc
)。打开配置文件:nano ~/.bashrc
在文件末尾添加以下行:
export PKG_CONFIG_PATH=/usr/local/opencv3.4.2/lib/pkgconfig:$PKG_CONFIG_PATH
保存并关闭文件,然后重新加载配置文件:
source ~/.bashrc
又:
huang@huang-System-Product-Name:~/Software/opencv-3.4.2/build$ ldd /usr/bin/cmake | grep curl
/bin/bash: /home/huang/anaconda3/envs/sa_conet/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/usr/bin/cmake: /home/huang/anaconda3/envs/sa_conet/lib/libcurl.so.4: no version information available (required by /usr/bin/cmake)
libcurl.so.4 => /home/huang/anaconda3/envs/sa_conet/lib/libcurl.so.4 (0x00007f8c2d3a2000)
从输出来看,
cmake
依赖的libcurl.so.4
和其他库来自 Anaconda 环境,而不是系统默认的库路径。这可能会导致一些冲突或不兼容问题,特别是当系统中的库版本与 Anaconda 环境中的库版本不一致时。解决步骤:
1. 检查系统中的
libcurl
首先,检查系统中是否已经安装了
libcurl
,并确认其版本:dpkg -l | grep libcurl
如果系统中没有安装
libcurl
,可以安装它:sudo apt-get update sudo apt-get install libcurl4
2. 确认系统中的
libcurl
路径找到系统中
libcurl
的路径:ldd /usr/bin/cmake | grep curl
输出应该类似于:
libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f8c2d3a2000)
3. 清理 Anaconda 环境变量
Anaconda 环境变量可能会干扰系统库的加载。你可以尝试清理 Anaconda 环境变量,确保系统使用默认的库路径。
编辑你的
.bashrc
或.zshrc
文件,注释掉与 Anaconda 相关的环境变量:nano ~/.bashrc
找到类似以下的行并注释掉:
# >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/home/huang/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; theneval "$__conda_setup" elseif [ -f "/home/huang/anaconda3/etc/profile.d/conda.sh" ]; then. "/home/huang/anaconda3/etc/profile.d/conda.sh"elseexport PATH="/home/huang/anaconda3/bin:$PATH"fi fi unset __conda_setup # <<< conda initialize <<<
保存并关闭文件,然后重新加载配置文件:
source ~/.bashrc
4. 重新运行
ldd
检查重新运行
ldd
检查cmake
依赖的库是否正确加载:ldd /usr/bin/cmake | grep curl
输出应该显示系统中的
libcurl
路径,而不是 Anaconda 环境中的路径。
这个地方非常重要,前面我都是直接打开终端输入命令就运行了,并没有注意他都是在虚拟环境下运行的,可能会导致一些不兼容的问题,应该退出虚拟环境再进行编译和运行等操作!!!!
步骤 1:停用 Anaconda 环境
在编译前退出当前 Anaconda 环境,避免其库路径干扰系统工具:
conda deactivate
步骤 2:设置库路径优先级
临时屏蔽 Anaconda 的库路径,优先使用系统库:
export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
步骤 3:安装系统版 libcurl
确保系统已安装正确版本的 libcurl
:
sudo apt-get update
sudo apt-get install -y libcurl4-openssl-dev
步骤 4:验证 CMake 依赖
检查 cmake
是否链接到系统库:
ldd /usr/bin/cmake | grep curl
正常输出应指向系统路径(如 /usr/lib/x86_64-linux-gnu/libcurl.so.4
),而非 Anaconda 路径。
后面已经有点不耐烦了,重新编译了一下opencv3.4.2 orz..
查询库的位置但没查到
huang@huang-System-Product-Name:~/Software/opencv-3.4.2$ find /usr/lib /usr/local/lib -name "libgtk-2.0.so*"
huang@huang-System-Product-Name:~/Software/opencv-3.4.2$
确认 GTK+ 2.x 库是否安装:
dpkg -l | grep libgtk2.0
重新安装 GTK+ 2.x:
-
sudo apt-get update sudo apt-get install --reinstall libgtk2.0-0 libgtk2.0-dev
-
检查库路径:
find /usr/lib /usr/local/lib -name "libgtk-2.0.so*"
huang@huang-System-Product-Name:~/Software/opencv-3.4.2$ dpkg -l | grep libgtk2.0 ii libgtk2.0-0:amd64 2.24.32-4ubuntu4.1 amd64 GTK graphical user interface library - old version ii libgtk2.0-bin 2.24.32-4ubuntu4.1 amd64 programs for the GTK graphical user interface library ii libgtk2.0-common 2.24.32-4ubuntu4.1 all common files for the GTK graphical user interface library ii libgtk2.0-dev:amd64 2.24.32-4ubuntu4.1 amd64 development files for the GTK library
编译完opencv3.4.2后再重新编译ORB-SLAM3,重新运行即可。
四、 运行界面
okok~~~