基于 ORB-SLAM2 的 Android 手机实时定位
大创简介

2

鉴于室内GPS定位信号差,WiFi定位不准确且依赖AP自身设备等不足,基于视觉的高精定位成为获取室内位置的重要方法之一。本项目主要内容为开发一个基于Android智能手机的实时定位APP,核心功能基于目前应用非常广泛的视觉定位算法ORB-SLAM2,主要针对地铁站,商场,博物馆,医院,地下停车场等公共复杂场景下室内场景进行精确定位,并能根据当前场景重建高精虚拟地图

算法说明

3

ORB-SLAM2算法是作者在2015年的IEEE Transactions on Robotics机器人领域顶级期刊发布,是一个由C/C++语言开发的基于Linux环境下的项目

由项目主页介绍可知,ORB-SLAM是一个多功能的、精确的SLAM解决方案,适用于单眼、立体和RGB-D相机。它能够在各种环境中实时计算摄像机的轨迹和场景的稀疏三维重建,范围从小型的手持桌面序列到驾驶汽车绕过几个城市街区。它能够关闭大型循环,并从宽基线实时执行全局重新定位。它包括从平面和非平面场景的自动和强大的初始化

4

项目目标

ORB-SLAM2算法为核心,开发一款基于Android的实时定位APP,即将ORB-SLAM2算法移植到安卓系统。此外,在移植成功后,对前端的渲染进行一定的扩展,对后端的实现进行一定的优化。在后期对项目进行增量式的开发与维护

1

计划安排
  1. 2021.05 ~ 2021.07 Android Studio学习,安卓项目的开发练习
  2. 2021.07 ~ 2021.12 Android开发框架搭建,进行工程移植
  3. 2021.12 ~ 2022.03 结合实际采集数据进行调试,设计UI界面显示
  4. 2021.03 ~ 2022.05 总体进行总结,进行最终调试,准备汇报
具体实现
  1. 项目使用Android Studio进行开发。由于ORB-SLAM2算法是由C/C++语言编写实现,而安卓的开发语言普遍为Java语言,因此需要学习如何在Java环境下使用/引入C/C++语言来实现具体功能

解决方法:将相应的代码添加到项目模块中,由Gradle打包在原生库中,Java代码通过Java原生接口(JNI)调用原生库中的函数。此外,Android Studio支持适用于跨平台项目的CMake

Android Studio官网向开发者详细介绍了如何在项目中添加C和C++代码

  1. ORB-SLAM2算法并不能独立运行,需要引入第三方库作为辅助

5

  • Pangolin:一个轻量、编写的OpenGI管理器,用于视觉和用户交互
  • OpenCV:开源的计算机视觉和机器学习软件库,实时视觉应用,操作管理图像特征
  • Eigen3:涉及线性代数、矩阵、向量和数值求解相关算法的C++模板库
  • DBoW2:用于索引并将图像转换为词袋表示的开源C++
  • g2o:用于优化基于图形的非线性误差函数的开源C++框架

由于有些依赖中也存在对别的库的依赖,所以引入的顺序是非常重要的

6

  1. 在依赖完整的环境下进行ORB-SLAM2算法移植
  2. 对UI界面以及后端实现进行处理与优化
当前进展
  • 对开发工具Android Studio进行了系统的学习
  • 通过JNI实现在Java环境下使用C/C++程序
  • 已完成OpenCV库、Eigen3库、g2o库以及DBoW2库的引入
  • 根据学习内容写了一些练习demo
心得体会

本次项目是将运行在Linux系统的ORB-SLAM2算法移植到Android端,算法及其依赖库的开发语言和编译器都有所不同,所以在环境配置和版本同步方面做了大量的协调工作。此外,这次使用Android Studio作为开发工具来设计安卓应用程序是一次非常棒的体验。从大创开始到现在,遇到了一些困难也获得了成就感,锻炼了自己的自学能力,懂得要勤于思考,动手实践。希望可以顺利完成后面的工作,积累经验,丰富体会

后续规划
  1. 完成剩余的Pangolin库的引入
  2. 完成项目核心ORB-SLAM2算法的移植
  3. 软件试运行 + 纠错完善
  4. 对安卓前端UI界面进行优化
  5. 对程序后端实现方面进行优化
相关文章
中期审查

2021年11月22日之前提交中期审查相关材料

2021年11月25日在线上进行PPT汇报以及答辩

7

我将从这五个方面来进行汇报

8

首先是项目立意的部分

9

目前获取室内位置有很多方法,但是鉴于室内GPS定位信号差,WIFI定位不准确,自身设备不足,不方便携带等原因,基于视觉的高精度定位成为获取室内位置的重要方法之一

10

也就是本次项目中涉及到的ORB-SLAM2核心算法

接下来是实施过程部分

11

我们大创的目标是以ORB-SLAM2算法为核心,开发一款Android端的实时定位APP。也就是说要在安卓手机上运行这个算法。所以首先我们就要学习Android Studio的使用,来作为安卓开发的工具;由于ORB-SLAM2算法是运行在Linux系统上用C编写的,所以需要学习JNI和CMAKE来实现在Java中调用C代码;还有就是,ORB-SLAM2算法并不能独立运行,需要五个第三方的依赖库,而这些依赖库大部分也都是由C++编写,同样需要移植到Android项目中;最后一步是我们整个项目的移植工作

12

接下来是完成情况部分

13

我们目前的完成情况就总结为以下四点

第一是对开发工具进行了学习;第二是实现了在Java中调用C++程序;还有就是已经完成了四个依赖库的移植工作;最后是对已完成的工作进行图文总结

14

然后这是我们第三方依赖库移植的完成情况,还剩最后一个没有移植成功

15

接下来是我们的心得体会

16

17

最后一部分是我们的后续安排

18

首先要完成剩余的依赖库的引入;然后开始对ORB-SLAM2核心算法进行移植;之后设计安卓的UI界面并对后端程序进行优化;然后是软件运行,对bug进行修复以及系统完善;最后获得软件产品并结项

19

以上是本次中期汇报的全部内容

20