orb-slam 对应的github下载地址为:https://github.com/raulmur/ORB_SLAM2

实现仿真视频链接为:orb_slam_gazebo_PX4_simulation

概述

ORB-SLAM是西班牙Zaragoza大学的Raul Mur-Artal编写的视觉SLAM系统。他的论文“ORB-SLAM: a versatile andaccurate monocular SLAM system"发表在2015年的IEEE Trans. on Robotics上。开源代码包括前期的ORB-SLAM和后期的ORB-SLAM2。第一个版本主要用于单目SLAM,而第二个版本支持单目、双目和RGBD三种接口。
西班牙该团队与2015年提出的orb-slam1(稀疏地图,维护有全局地图),2017年提出orb-slam2,(加入了双目相机与深度相机,可实现稠密建图),2020年,提出orb-slam3(增加鱼眼相机)

特点

ORB-SLAM是一个完整的SLAM系统,包括视觉里程计、跟踪、回环检测。它是一种完全基于稀疏特征点的单目SLAM系统,其核心是使用ORB(Orinted FAST and BRIEF)作为整个视觉SLAM中的核心特征。具体体现在几个方面:

提取和跟踪的特征点使用ORB。ORB特征的提取过程非常快,适合用于实时性强的系统。
回环检测使用词袋模型,其字典是一个大型的ORB字典。
接口丰富,支持单目、双目、RGBD多种传感器输入,编译时ROS可选,使得其应用十分轻便。代价是为了支持各种接 口,代码逻辑稍为复杂。
在PC机以30ms/帧的速度进行实时计算,但在嵌入式平台上表现不佳。

踩坑记录

里面有单目,双目等代码。本文记录了在ubuntu系统安装中的一些坑。

  1. opencv的安装,可以采用sudo apt-get install libopencv-dev安装也可以采用源码安装,我采用的是源码安装,https://github.com/opencv/opencv.git. 安装过程很常规,记得最后sudo make install一下;
  2. Pangolin库的安装。https://github.com/stevenlovegrove/Pangolin 。首先要安装依赖 sudo apt-get install libglew-dev。然后正常编译安装。
  3. Pangolin库对应orb-slam2需要更换成对应的v0.6版本,git checkout -b v0.6 v0.6然后重新编译即可
  4. orb-slam安装编译中,采用wiki给出的脚本安装即可, 会出现usleep未定义的报错,需要在对应的.cc文件中添加头文件 #include<unistd.h>即可,对应的头文件不少。
  5. ./build.sh 采用该指令安装的时候,不要采用sudo 模式,笔者在后续遇到一个权限问题,需要将对应的build文件删除了重新编译。
  6. 源文件编译之后,开始编译对应的ros功能包。首先通过export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS ,将其添加到环境变量中。
  7. 同样在ROS功能包编译的时候,会遇到缺少头文件,usleep未定义的情况,解决方法同上。
  8. rospack error: the rosdep view is empty: call sudo rosdep init and rosdep update. 遇到这个问题,需要科学上网,就可以解决了
  9. 编译的时候需要修改对应的cmakelists, 在最后面加上一句-lboost_system在这里插入图片描述
  10. 启动测试的时候,首先启动摄像头的ros功能包roslaunch usb_cam usb_cam-test.launch,然后再启动 rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
  11. 对应实际的摄像头,需要对应修改源代码中的接收话题名称,当然也可以做成一个launch文件,采用重映射完成。
    在这里插入图片描述
  12. 重新编译的时候,遇到一个libEGL.so没有找到的情况,通过自己手动添加软连接完成。

由于项目的需要,在MIssion Planener中完成多机伴飞的效果。

  1. 在apm代码中的仿真开启阶段加入参数–instance =X。 然后开启多机仿真。
  2. 在地面站中找到sysid_mav的参数,将其修改成Y.
  3. 仿真过程中可以output add XXX.XXX.XXX.XXX:14550(此处可以采用相同的端口),那么对应的地面中就会不行一个标号为Y的新的飞机,与原飞机飞行没有冲突。

另外附加 rosdep的解决方案

rosdep init/update 解决方法

最近在国内上github越来越难,我自己的校园网曾经还是很好使的,但是最近也上不去了,加上不想花钱在ubuntu上买代理,所以在很多需要上git的场景很头疼。包括今天写的这个ros 安装过程中出现的问题。我使用的是ubuntu 18.04系统 ros melodic
当我们在

sudo rosdep init
1
报错

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.

大部分解决方法是修改我们的hosts,但是现在不好使了

参考文章链接为:rosdep init/update 解决方法