环境配置

1.安装依赖项

sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libpng-dev

2.安装Pangolin

根据经验运行ORB——SLAM2,Pangolin不能太高,选择05版本,下载地址如下:

https://github.com/stevenlovegrove/Pangolin/releases/tag/v0.5

编译运行

cd Pangolin-0.5
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make -j2
sudo make install

(没有使用make-j,使用了2个线程,避免系统卡死)

验证

cd ..
cd examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

安装成功的话,会出现以下图片:

安装05版本遇到的问题,例如:

//1.error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope
/home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp: In function ‘std::__cxx11::string pangolin::FfmpegFmtToString(AVPixelFormat)’:
/home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp:41:41: error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope

//2.error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
#define TEST_PIX_FMT_RETURN(fmt) case AV_PIX_FMT_##fmt: return #fmt; /home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp: In member
function ‘void
pangolin::FfmpegVideoOutputStream::WriteFrame(AVFrame*)’:
/home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp:572:39:
error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
if (recorder.oc->oformat->flags & AVFMT_RAWPICTURE) {

都可以参考如下帖子解决:
视觉SLAM十四讲 Ubuntu20.04 Pangolin 环境配置

3.安装 Eigen(负责矩阵运算)

可以通过一下命令来安装Eigen库。

sudo apt-get install libeigen3-dev

4.安装opencv-3.4.5

这里给出官方的地址
https://github.com/opencv/opencv/archive/3.4.5.zip

在终端下进入该文件夹


安装依赖

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 
sudo apt install libcanberra-gtk-module libcanberra-gtk3-module

发现第一个命令就报错:

add-apt-repository: command not found

输入以下指令解决:

sudo apt-get install software-properties-common
sudo apt-get update

重新执行sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main",又报错 E: Failed to fetch
使用命令

sudo vim /etc/apt/sources.list

用下面替换全部内容(,替换了两次源,最后换成中科大的源,很成功!!!!)

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

(这是重写的内容,发现写的直接发表没有更新,码的几页全没了)
(第三次重写)
又重新尝试了 清华的源,但是反反复复的报各种错,最后发现这是一个大坑,切记无脑换源
先查看自己板卡是什么系统,如下:

bullseye/sid 2019年07月06日,Debian代号为“buster”发布Stable稳定版本,同日Debian代号为“bullseye”进入testing版本通道,2019年10月24日,Ubuntu20.04LTS建立代号“FocalFossa”,所以Ubuntu20.04LTS基于Debian代号为“bullseye”的Testing通道,而不是基于Unstable通道。

所以真正的问题在这里,我们之前使用中科大,阿里,清华的源,比如:

中科大 deb https://mirrors.ustc.edu.cn/archive.raspberrypi.org/ stretch main ui 

清华 deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui 

默认官方源 deb http://archive.raspberrypi.org/debian/ stretch main ui

可以看到是stretch,而不是我们的bullseye/sid
这里给出了国内一些 bullseye/sid 依赖下载源
后面解决了证书信任等等问题,更新了证书,同时将deb中 https换为http,才将所有依赖下载成功
不过由于板子性能有限,在OpenCV编译过程中,SSH连接总是中断,只能开两个线程,但是又有点慢,这个还是比较难受的,可能也确实不太适合,毕竟这算是拿来测试极限性能了

另外板子只有4G,不确定我的ORB_SLAM整个项目上传后会不会崩,估计大大概率会崩,刚看了我的ORBslam2文件夹大小为500M,测试压力很大。

芯片当前的结温温度、CPU运行频率、BPU运行频率和BPU使用率

使用make -j,温度直接飙到 60℃,最高约65℃并且SSH连接断开,应该是板子过载了

编译又是好几个小时的等待,枯萎ing
加持了小风扇,为了速度,重新调成了8线程,慢慢也能运行,不过目测未发挥出8线程实力,虽然是make -j8,但是速度感觉还是不太够。

终于编译成功!!!,功夫不负有心人,ORB——SLAM2 运行环境到这里配置完毕

ORB_SLAM2 编译运行

cd ORB_SLAM2
chmod +x build.sh
./build.sh

报错

/usr/include/c++/9/bits/stl_map.h:122:71: error: static assertion failed: std::map must have the same value_type as its allocator
122 | static_assert(is_same<typename _Alloc::value_type, value_type>::value,

解决:

typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;

换为:

typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;

接下来出现了

内存不足的问题出现C++: fatal error: Killed signal terminated program cc1plus导致编译中断

还是挺不容易的,既要解决调试环境遇到的bug,还要兼顾硬件性能

测试大概就到这里,因为比较慢,所以就不继续进行等待编译了