欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > (25.05)Ubuntu 20.04上安装和运行ORB-SLAM3(非ROS)

(25.05)Ubuntu 20.04上安装和运行ORB-SLAM3(非ROS)

2025/5/9 0:44:15 来源:https://blog.csdn.net/m0_69023437/article/details/147727845  浏览:    关键词:(25.05)Ubuntu 20.04上安装和运行ORB-SLAM3(非ROS)

    因为之前已经下了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

  1. 临时设置 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~~~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词