该文章与我另一篇文章类似,只不过该篇是在jetson nano上编译的方法,
两者有细微差异
一、 前期准备
- 创建一个工作目录
cd..
mkdir myslam && cd myslam
- 安装依赖
sudo apt-get update
#安装git和cmake
sudo apt-get install git cmake
#安装opencv
sudo apt-get install libopencv-dev
#安装glew
sudo apt-get install libglew-dev
sudo apt-get install glew-utils
#安装boost
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng12-dev libcurl4-gnutls-dev libfontconfig1-dev libsqlite3-dev libglew*-dev libssl-dev
注意,根据官方提示,DBoW2 和 g2o都不需要自行安装,官方有修改版本的,放在Thirdparty目录下,在编译安装SLAM时就会自行编译
二、 编译安装Panglin
Pangolin主要作用是可视化,用户界面相关API
官方GitHub https://github.com/stevenlovegrove/Pangolin
- 首先克隆代码,以下方式二选一
#直连方式
git clone https://github.com/stevenlovegrove/Pangolin.git
#加速代理方式
git clone https://hub.fastgit.org/stevenlovegrove/Pangolin.git
注意,如果以上方式克隆的代码编译有问题并且无法解决,请到下面这个网址下载稳定发行版
点击进入 https://github.com/stevenlovegrove/Pangolin/tags
笔者下载的版本是v0.6,下载后解压到当前目录下
- 进行编译
cd Pangolin
#安装依赖
./scripts/install_prerequisites.sh
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
cmake --build .
不出意外编译完成后,使用以下命令安装
sudo make install
如果你没有注意,在执行make -j时,会出现:
make: *** 没有指明目标并且找不到 makefile。 停止。
解决办法:
sudo apt-get install libxkbcommon-x11-dev
再执行语句
cmake -DCPP11_NO_BOOST=1 …
make -j
就安装成功了
三、安装Eigen 3安装
sudo apt-get install libeigen3-dev
如果在编译ORB-SLAM3时报错找不到Eigen 3则使用编译安装
#github 有个mirror,版本3.3.4 from 2017
git clone https://github.com/eigenteam/eigen-git-mirror
#安装
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
#安装后,头文件安装在/usr/local/include/eigen3/
四、编译安装OPENCV
笔者安装的是opencv3.4.10
参考链接:https://blog.csdn.net/wup422457601/article/details/113087266
按照该博主要求安装即可,但是要注意一点
!除了三.3 将download文件夹中的*.i文件全部放入/home//opencv/opencv_contrib-3.4.10/modules/xfeatures2d/src目录 之外
!还需要将下载的download文件夹里面的以.i为后缀的文件全部放进/opencv/opencv-3.4.10/release/downloads/xfeatures2d文件夹下,没有该目录就创建该目录
五、编译安装ORB_SLAM3
官方GitHub https://github.com/Lu-tju/ORB_SLAM3
- 首先克隆代码,以下方式二选一
#直连方式
git clone https://github.com/Lu-tju/ORB_SLAM3.git
#加速代理方式
git clone https://hub.fastgit.org/Lu-tju/ORB_SLAM3.git
- 进行编译
cd ORB_SLAM3
chmod +x build.sh
./build.sh
#编译ros版本
cd ORB_SLAM3
chmod +x build_ros.sh
./build_ros.sh
- 添加环境变量
nano ~/.bashrc
#在最后添加并保存退出
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/.../ORB_SLAM3/Examples/ROS
#上面...填上ORB_SLAM3的具体路径
source ~/.bashrc
编译过程中,如报错如下:
OpenCV > 2.4.3 not found.
解决方案:修改两处CMakeLists.txt
nano ORB_SLAM3/CMakeLists.txt
nano ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt
找到 "find_package(OpenCV"字样
修改为自身OPENCV版本号
笔者为4.1.0,注释掉原来的,则修改如下
#find_package(OpenCV 3.0 QUIET)
find_package(OpenCV 4.1 QUIET)
编译过程中,如报错如下:
error: no match for ‘operator/’
解决方案:修改以下两个文件的代码
nano ORB_SLAM3/src/LocalMapping.cc
nano ORB_SLAM3/src/CameraModels/KannalaBrandt8.cpp
在原有的#include与namespace之间 加入以下代码
namespace cv
{
template<typename _Tp, int m, int n> static inline
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
{
return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
}
}
编译过程中,可能会卡死,解决方案就是手动编译make -j1
漫长的等待……
cd ORB_SLAM3/build
make -j1
五、测试
- 修改代码订阅话题名(当然也可以编写launch文件remap话题名称)
在ORB_SLAM3/Examples/ROS/ORB_SLAM3/src目录下找到:ros_mono.cc文件,打开并修改成自己的订阅名称
ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
如果想使用Imu融合,则修改ros_mono_inertial.cc文件
ros::Subscriber sub_imu = n.subscribe("/imu", 1000, &ImuGrabber::GrabImu, &imugb);
ros::Subscriber sub_img0 = n.subscribe("/camera/image_raw", 100, &ImageGrabber::GrabImage,&igb);
回到ORB_SLAM3主目录执行编译
sh build_ros.sh
- 单目摄像头
#没IMU
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
#有IMU
rosrun ORB_SLAM3 Mono_inertial Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
双目IMU:
- 双目摄像头(博主未测试)
#没IMU
rosrun ORB_SLAM3 Stereo_inertial Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
#有IMU
rosrun ORB_SLAM3 Stereo_inertial Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
可用功能一览
单目效果
其他资料
基于ROS下的安卓手机图像和IMU跑ORB-SLAM3 https://blog.csdn.net/h_372101/article/details/108235178
后续如果还有什么遗留问题,可留言