环境
联想台式机,配置很奇葩
- CPU Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
- NVIDIA Corporation GK208B [GeForce GT 730]
- 2 * 8G RAM
RK3399 SBC
- 4G RAM
路径
- mkdir -p build/orb_slam3
- cd build/orb_slam3/
- git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
准备依赖
Pangolin
这是一个轻量级的opengl 显示和交互开发库。demo code用到的。
然后apt 安装一些其它的依赖, 就可以编译安装Pangolin。
sudo apt install libgl1-mesa-dev libglew-dev
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo pip –no-cache install pyopengl Pillow pybind11
cd Pangolin; mkdir build; cd build; cmake ../; cmake –build .; sudo make install
Opencv 3.2
在更新的发行版本里,自带的opencv 4.x不能通过编译。。所以只能使用老一些的版本,比如ubuntu18.04,或者自行编译一套老版本的opencv
- sudo apt install libopencv-dev
DBoW2 / g2o
这里使用修改的版本,已经包含在源代码 的ORB_SLAM3/Thirdparty中,不需要额外下载。
编译
可以使用orb_slam3中自带的编译脚本“build.sh“
build.sh 其实就是分别编译DBoW2/ g2o, 解压特征字典,最后编译ORB_Slam自身。
但在RK3399上,需要将脚本内的make -j 参数修改成2,否则。。。。
运行
Orb_slam自带了测试程序,需要额外下载配套的数据集。
可以从这里获取
下载好后,修改一下 euroc_examples.sh,将文件开头的数据集路径修改成刚刚解压的位置。
直接运行就可以。
euroc_examples.sh 会顺序的以不同方式运行各种数据集。当然也可以挑其中单独一个来运行。
比如,以单摄像头配合IMU运行, 就类似这样:
1 | ./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml "$pathDatasetEuroc"/V102 ./Examples/Monocul\ |
首先会加载字典,需要等待一下下。。。
突然!
台式机加载字典时,单核100%,几秒钟,RK3399要久一点儿, 大概十几秒。 网上有针对ORB_SLAM2的优化,将字典binary,可以加速。
SLAM模式运行时,台式机双核工作(也可能是超线程), cpu 功耗13~15瓦左右,非常流畅。
但在RK3399上则卡顿很多, 两个大核已经很努力了, 但是四个小核心在吃瓜围观,目测5fps左右。 网上有针对ORB_SLAM2的 特殊优化,可以跑在CUDA上,以及使用优化的opencv库,据说有数倍的效能提升。
下一步:
- 尝试真实硬件运行
- 尝试整合程序
- 尝试优化速度
to be continued..