ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署

文章目录

      • 前言
      • 编译环境
      • 配置环境
        • 1. C++11
        • 2. Pangolon
        • 3.Eigen3
        • 4.DBoW2 and g2o
        • 5.ORB_SLAM3
        • 6.ROS
        • 7. librealsense
        • 8. 相机驱动realsense-ros
        • 9.ROS测试环境
        • 10. 编译ROS版ORB-SLAM3
      • 运行结果
        • 无ros版运行官方样例
        • 基于ros版本orb-slam3运行的D455相机

前言

ORB-SLAM3直接按照官网的教程进行编译会有一些错误报出,在此总结编译orb-slam3的整体流程以及中间遇到的一些问题。

编译环境

Ubuntu 18.04 LTS
OpenCV 3.4.5(之前是3.2.0但有问题,重装新的版本)
Pangolin
OpenGL
Glew
Eigen3
DBoW2 and g2o

配置环境

1. C++11

检查G++版本,查看是否支持C++11
一般g++版本大于4.7即可

g++ -v
2. Pangolon

地址:https://github.com/stevenlovegrove/Pangolin
先安装OpenGL,Glew

### 编译orb-slam3发现pangolin编译错误排查的环境问题
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt-get install doxygen
######################################################

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build . --target pangolin_doc
sudo make install
3.Eigen3

需要最少3.1.0
Eigen是用于线性代数的C ++模板库:矩阵,向量,数值解算器和相关算法。这里使用命令行安装。

sudo apt install libeigen3-dev
 
//若默认安装的是/usr/local/include/eigen3/Eigen 下,将Eigen文件夹拷贝一份到/usr/local/include 下
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
4.DBoW2 and g2o

虽然orb-slam3项目中自带,但还是先源码编译了一遍,对后面的编译五影响。

  • 下载编译 DBoW2
git clone https://github.com/dorian3d/DBoW2.git DBoW2
cd DBoW2
mkdir build
cd build
cmake ..
make
sudo make install
  • 下载编译 g2o
git clone https://github.com/RainerKuemmerle/g2o.git g2o
cd g2o
mkdir build
cd build
cmake ..
make
sudo make install
5.ORB_SLAM3

在上述环境没差错,即可编译orb-slam3项目。

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
chmod +x build.sh
./build.sh
6.ROS
  • 前言
    操作系统为Ubuntu 18.04 LTS 64bit应采用ROS版本为ROS Melodic。
    需按照对应版本安装对应的ROS。(16系统的需要把有melodic全部改为kinetic)
    ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署_第1张图片
  • 步骤
  1. 设置软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 设置密钥(免费)
sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
  1. 更新原地址
sudo apt-get update
  1. 安装ros,这里选择安装完整版,时间较长
 sudo apt-get install ros-melodic-desktop-full
  1. 初始化rosdep,这里报了一个错,主要是域名设置问题
sudo rosdep init
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

解决方法:参考https://blog.csdn.net/weixin_44692299/article/details/105869229
(不用新建文件,但如果路径不存在还是要创建路径,本次编译无创建路径或者文件)
https://blog.csdn.net/qq_44830040/article/details/106049992

cd /etc
sudo vim hosts

在文件末尾添加:

151.101.84.133 raw.githubusercontent.com

然后保存文件退出即可。

如果出现错误(我觉得这个错误是我在网上搜解决办法的时候自己手动新建了/etc/ros/rosdep/sources.list.d目录,并且还在这个目录下编辑了20-default.list的相关内容,我通过上面的方法正确解决了之后,产生了相同的文件20-default.list,二者发生冲突。嗯…就是需要删掉以前强制新建的。)
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize

sudo rm /etc/ros/rosdep/sources.list.d/20-default.list

然后再重新运行命令sudo rosdep init,可见就成功解决了!

  1. 执行rosdep update更新,如果出现超时的问题,大概是网络的问题,反复执行rosdep update命令即可。
rosdep update
  1. 添加ros环境变量
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 为了构建和管理开发者自己的ROS工作空间,还需安装rosinstall
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
  • 测试
# 第一个终端运行如下命令
roscore
# 打开第二个终端,这时你会看见一只静止的小海龟
rosrun turtlesim turtlesim_node
# 如果希望小海龟能够移动,打开第三个终端
rosrun turtlesim turtle_teleop_key
7. librealsense

这里使用官方方法安装

sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev

测试:

realsense-viewer
8. 相机驱动realsense-ros

这里推荐直接从ROS安装

sudo apt-get install ros-melodic-realsense2-camera

源码安装请参照:https://blog.csdn.net/qq_33642342/article/details/108870290

9.ROS测试环境

各级依赖关系imu_utils -> code_utils -> ceres, 所以一定要先装ceres.

注意: 这里新建一个文件夹catkin_ws,里面存放ceres,然后新建一个同级目录src,先存放code_utils,进行编译后,再进行imu_utils编译。

  • ceres(尽量下载低版本的)
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar xvf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build
cd build
cmake ..
make -j4
make test
sudo make install
  • code_utils
sudo apt-get install libdw-dev
cd ~/catkin_ws/src
git clone https://github.com/gaowenliang/code_utils
#将/catkin_ws/src/code_utils/src/sumpixel_test.cpp中的
#include "backward.hpp"修改为#include"code_utils/backward.hpp"
cd ~/catkin_ws
catkin_make
  • imu_utils
cd ~/catkin_ws/src
git clone https://github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make

编译完成后,使用如下命令测试:

roslaunch realsense2_camera demo_pointcloud.launch

运行结果:
ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署_第2张图片

10. 编译ROS版ORB-SLAM3
#添加环境变量
gedit ~/.bashrc
#加入以下内容,PATH改为自己的地址
#export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
export ROS_PACKAGE_PATH=${
    ROS_PACKAGE_PATH}:/home/yu/catkin_ws/src/ORB_SLAM3/Examples/ROS
#再加个这个
source ~/catkin_ws/devel/setup.bash
#编译
chmod +x build_ros.sh
./build_ros.sh

运行结果

无ros版运行官方样例

下载地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
下载数据集,官网下载慢可用迅雷下载
ps.不使用ROS运行的下载ASL格式的,使用ROS运行的下载ROS bag
命令+voctxt+相机信息yaml+数据+时间戳

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml ./MH02/cam0/data Examples/Monocular/EuRoC_TimeStamps/MH02.txt

运行结果:
ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署_第3张图片

基于ros版本orb-slam3运行的D455相机
  1. 标定相机,获取内参,制作D455.yaml文件
  2. 修改对应的文件
    如果用rgbd:
> 打开 ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_rgbd.cc  文件
> 修改节点(绿色字体)
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/color/image_raw", 100);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "camera/depth/image_rect_raw", 100);

如果用

cd ~/catkin_ws/src/ORB_SLAM
#分别开三个终端, 按顺序每个终端运行一句
roscore
roslaunch realsense2_camera rs_rgbd.launch
rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/D455.yaml

如果用mono:
ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署_第4张图片

# 启动roscore
roscore
# 新建一个终端,启动orb-slam3,此时是画面是黑的
source ORB_SLAM3/Examples/ROS/ORB_SLAM3/build/devel/setup.bash
rosrun ORB_SLAM3 Mono /{Path}/ORB_SLAM3/Vocabulary/ORBvoc.txt /{Path}/ORB_SLAM3/Examples/Monocular/d455.yaml
# 再新建一个终端启动realsense_ros,此时就有追踪画面了
roslaunch realsense2_camera rs_camera.launch

ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署_第5张图片
ORB-SLAM3结合RealSense D455相机实时运行&离线官方样例测试部署_第6张图片
运行可能出错:
符号错误:
orbslam3 symbol lookup error: /usr/local/lib/libopencv_imgproc.so.3.2: undefined symbol:/usr/local/lib/libopencv_imgproc.so.3.2: undefined symbol: icv_m7_owns_rFFT_1_scale_32f
解决方法:重装了opencv3.4.5发现还是没解决,直接删掉在该目录下查看发现有3.4.5的imgproc,于是删掉了libopencv_imgproc.so.3.2,最后成功。

参考链接:
https://www.freesion.com/article/91561080805/
https://blog.csdn.net/qq_33642342/article/details/108870290
https://blog.csdn.net/a2824256/article/details/106729403
https://blog.csdn.net/qq_36804414/article/details/109241264?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
https://blog.csdn.net/weixin_44350238/article/details/107641849
https://blog.csdn.net/weixin_44692299/article/details/105869229
https://blog.csdn.net/qq_44830040/article/details/106049992

你可能感兴趣的:(slam)