主要记录一下自己跑得时候遇见的问题的整合,自己搭建环境的时候差不多浏览了不下一百多个网站,整和一下资源提高大家的效率。参考链接里面的大佬都写的非常详细,可以看看他们的文章
- *Write by Evelyn Dou 2022/09/01
参考网址:https://www.jianshu.com/p/31c95d9a5f97
https://codingnote.cc/p/484790/
复现源码的过程遇见了很多编译器版本的坑,一开始使用C++14去解决,后面会出现一连串的问题,最终还是屈服使用pangolin 0.5 版本,换了版本之后编译就比较顺利
系统平台:
- ubuntu20.04
- gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
安装依赖项
opencv 3.4.10
各个版本opencv source:Releases – OpenCV 在opencv安装的时候踩了很多的坑,一开始安装最新版本的opencv4,导致 pkg-config –modversion opencv 命令运行的时候找不到版本,需要改变命令pkg-config –modversion opencv4就可以找到了。在安装完opencv之后一定要确认以下能否找到pkg,不然后面调用的时候会出现问题
我也尝试使用3.2.10,但是后面还是会出现问题,最终采用了3.4.10版本
- ubuntu20.04 + python3.8 安装过程中如果遇到 cuda 路径的问题,解决方案如下:安装opencv3.4.0报错 – thmx – 博客园
- 安装开发者工具
sudo apt update
sudo apt upgrade
sudo apt install build-essential cmake unzip pkg-config
sudo apt install libjpeg-dev libpng-dev libtiff-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install libxvidcore-dev libx264-dev
sudo apt install libgtk-3-dev
sudo apt install python3.8-dev
获取opencv
获取最新版本opencv可以直接从git获取文件:
cd ~
git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git
下载特定版本的压缩包(3.4.10)
wget https://github.com/opencv/opencv/archive/3.2.0.tar.gz
tar -xvzf 3.4.10.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip
unzip 3.4.10.zip
- *编译opencv
进入我们下载好的opencv文件,可以直接改成opencv比较方便,也可以是自己的文件名
cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_EXAMPLES=ON .. #个性化编译
其中编译也可以直接cmake ..
- 编译过程中遇见的errorr
- 网络问题导致很多文件下载不了,ippicv,可以在原来的下载网址前面添加代理就好了 GitHub Proxy 代理加速,如果遇见网络问题可以一个一个这样子解决,指定下载地址的文件在 opencv/3rdparty/ippicv/downloader.cmake 里面
- boostdesc, vgg 下载:将opencv_contrib/modules/xfeatures2d/cmake 路径下的两个文件 download_boostdesc.cmake 和 download_vgg.cmake 中的 raw.githubusercontent.com 网址也修改为添加代理的地址。
确保上述所有的步骤没有ERROR之后,进行编译安装 make -j16 # 使用多线程
sudo make install # 默认安装到 /usr/local/bin 目录中
sudo ldconfig # 更新动态链接库
检查是否安装成功:
ldconfig -p | grep opencv # -p = print
pkg-config --modversion opencv #结果应该是刚刚安装的版本,一定要可以找到,不然后面调用的时候会找不到opencv,需要添加路径和环境变量
ERROR: 安装完之后,可能会出现ERROR CMake Error at CMakeLists.txt:37 (message):OpenCV > 2.4.3 not found.
解决方案: CMakeLists.txt添加:
set(OpenCV_DIR /$PATH to opencv/build)
find_package(OpenCV QUIET)
使用上述办法可能会解决一部分的情况,如果还是解决不了,参考以下文章步骤解决
找不到pkg的解决方案:Comprehensive guide to installing OpenCV 4.1.0 on Ubuntu 18.04 from source – CV-Tricks.com
To verify that the variables are set:使用以下命令看看路径
echo $PKG_CONFIG_PATH
echo $LD_LIBRARY_PATH
卸载opencv(如果存在版本不兼容的情况,可能需要卸载open,但是sudo make uninstall只会卸载,不会删除相关的文件,我们需要使用以下命令),我卸载了很多次,血泪的教训
具体操作步骤:
1、在ubuntu系统桌面中使用快捷键【Ctrl+Alt+T】打开终端命令行模式。
2、在ubuntu终端命令行输入以下命令进入安装opencv的build目录并进行卸载操作。
sudo make uninstall
cd (安装opencv的build目录路径) #使用cd命令进入安装opencv的build目录
sudo rm -r build
3、最后在输入以下命令清理/usr中所有opencv相关项即可。
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
注意:可能有部分文件夹找不到,那就不用清理。
Eigen3 3.2.10版本
wget https://gitlab.com/libeigen/eigen/-/archive/3.2.10/eigen-3.2.10.tar.gz
tar -xvzf eigen-3.2.10.tar.gz
mkdir build
cd build
cmake ..
sudo make install
默认安装在/usr/local/include/eigen3 路径下。安装好之后可以看看自己的文件夹里面是否有,如果没有的话,需要重新安装
Pangolin 0.5
Pangolin版本真的是一个很大的坑,虽然最新版本的也可以用,我们可以用过修改cmake list里面的C++版本,即所有的C++11替换成C++14,后续也会出现相应的要修改的地方,在ORB SLAM2里面后续也会遇见判断C++11的语句,如果遇见相应报错,直接把判断语句删掉,留下原本的三个条件就好
Pangolin官网:https://github.com/stevenlovegrove/Pangolin
推荐使用Pangolin0.5版本:安装链接:https://github.com/stevenlovegrove/Pangolin/tree/v0.5 # OpenGL sudo apt install libgl1-mesa-dev
Glew
sudo apt install libglew-dev
CMake
sudo apt install cmake
python
sudo apt install libpython2.7-dev
sudo python -mpip install numpy pyopengl Pillow pybind11
Wayland
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
FFMPEG (For video decoding and image rescaling)
sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
DC1394 (For firewire input)
sudo apt install libdc1394-22-dev libraw1394-dev
libjpeg, libpng, libtiff, libopenexr (For reading still-image sequences)
sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev
build Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build . # 注意最后那个点
测试实例:
cd ~/Pangolin/build/examples/HelloPangolin
./HelloPangolin
测试实例会出现一个立方体,鼠标可以拖动,如果测试没有问题就是装好了,测试完不成的话,检查一下前面的几个步骤是不是都完全装好了
1.error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope
参考:https://github.com/stevenlovegrove/Pangolin/pull/318/files?diff=split&w=0
解决办法:在/Pangolin/CMakeModules/FindFFMPEG.cmake中63,64行
sizeof(AVFormatContext::max_analyze_duration2);
}" HAVE_FFMPEG_MAX_ANALYZE_DURATION2
换成
sizeof(AVFormatContext::max_analyze_duration);
}" HAVE_FFMPEG_MAX_ANALYZE_DURATION
/Pangolin/src/video/drivers/ffmpeg.cpp中第37行 namespace pangolin上面加上
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
第78,79行 TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC); TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
改为
#ifdef FF_API_XVMC
TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC);
TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
#endif
101-105行改为
#ifdef FF_API_VDPAU
TEST_PIX_FMT_RETURN(VDPAU_H264);
TEST_PIX_FMT_RETURN(VDPAU_MPEG1);
TEST_PIX_FMT_RETURN(VDPAU_MPEG2);
TEST_PIX_FMT_RETURN(VDPAU_WMV3);
TEST_PIX_FMT_RETURN(VDPAU_VC1);
#endif
127行改为
#ifdef FF_API_VDPAU
TEST_PIX_FMT_RETURN(VDPAU_MPEG4);
#endif
2.error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
解决办法,在Pangolin/include/pangolin/video/drivers/ffmpeg.h开头加上
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
参考: https://www.jianshu.com/p/da49a712410f
安装好上述的依赖项,我们就可以对SLAM进行编译了
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
常见ERROR:
1.找不到Eigen,可以在Cmakelist.txt里面的findpackage()的最后加上一个NO_MOUDLE参数
2.error: ‘slots_reference’ was not declared in this scope
- 这个是由于编译器版本不兼容导致的,最新版本的Pangolin使用了c++14,SLAM用的C++11,可以在Cmakelist.txt里面改一下编译器版本,但是不只是这一处需要修改,后续编译还是会出现这种问题,可以按照报错的代码段修改所有关于编译器版本的问题,
- 也可以直接卸载Pangolin装0.5版本
3.usleep问题:在include文件夹下 System.h 文件中加上
#include
error: static assertion failed: std::map must have the same value_type as its allocator
- 在LoopClosing.h中将
typedef map,
Eigen::aligned_allocator > > KeyFrameAndPose;
改为
typedef map,
Eigen::aligned_allocator > > KeyFrameAndPose;
然后重新编译一下,有可能更改之后还是无法成功编译,可以复制error在google中搜索,我记得有一个方案说明了明确的方案,但是忘记了
4.march=native大坑,有时候编译成功之后,跑demo会出现内存错误,报错是segamentation fault,
删除掉ORBSLAM的Cmakelists中的 -march=native 以及 g2o 的cmakelists中的 -march=native 重新执行ORBSLAM目录下的./build.sh 后就可以正常跑了
5.没有工具包:sudo apt install libcanberra-gtk-module -y
6.网上也看见了别人还遇见了一些坑以及解决方案:ORB-SLAM2运行时遇到的问题_Gone_float的博客-CSDN博客
运行示例
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
ORB_SLAM2_modified 稠密点云地图重建
除了上述的依赖项,构建点云地图还需要下载PCL库
安装PCL
sudo apt install libpcl-dev
下载源码,编译
git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git
下载之后单独把modified的文件提取出来就好,注意不是zip文件里的modified 把原本 ORB SLAM2 repo 中的 Vocabulary 文件夹和它里面的 ORBvoc.txt.tar.gz 文件拷贝过来,放到 ORB_SLAM2_modified 路径下,之后编译就好
命令为:
python associate.py rgb.txt depth.txt > association.txt
在对准深度信息和RGB信息的时候会出现一些小坑,是由于python版本不同导致的,报错为:’dict_keys’ object has no attribute ‘remove’
将代码的86,87行的前面加上一个list就好: 也就是改成以下形式
first_keys = list(first_list.keys())
运行实例命令
./bin/rgbd_tum Vocabulary/ORBvoc.bin path_to_settings path_to_sequence path_to_association
运行效果如上图。
建立彩色点云地图的方法https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map/issues/10#issuecomment-309663764
按照步骤修改 ~/ORB_SLAM2_modified/include/Tracking.h 和 ~/ORB_SLAM2_modified/src/Tracking.cc,重新编译系统
也会有少少的坑,大致跟着报错修改就好。重新编译就可以了
在黑白点云地图中加入颜色信息
1 ~/ORB_SLAM2_modified/include/Tracking.h
将105行的代码改成上述形式,加入颜色信息
2 ~/ORB_SLAM2_modified/src/Tracking.cc
将第210行代码改成上述形式。
以及第1142行代码改为以上形式之后,重新编译就可以了。
运行效果
Original: https://blog.csdn.net/weixin_54347747/article/details/126659089
Author: Evelyn 肥喵
Title: Ubuntu 20.04 编译ORB_SLAM2源码(普通模式) + 点云地图构建 + 增加颜色信息
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701510/
转载文章受原作者版权保护。转载请注明原作者出处!