0%

四. 定位技术进阶

1. 阅读开源SLAM源码

TODO

2. 实现一个简单的VO

TODO

3. 实现一个简单的SLAM

TODO

三. 定位技术实践

作者:刘权祥

1. 相机标定实践

在学习了相机模型的基础下,可以开始学习相机标定,推荐的网站有:

2. 使用开源方案

目前基地使用的开源方案有:

  • openVINS
  • VINS-Fusion
  • cartographer

这部分上网即可搜到,编译运行的关键是相关环境的安装配置,不过官网也会讲到。

3. 双目测距,深度相机测距(单目)

TODO

4. 优化基地已有定位方法

TODO

5. 定位方案的部署

5-1 直接的部署

像在你电脑上安装各种环境一样在无人机或者小车的上位机里面安装环境

5-2 使用docker进行部署

学习docker的使用:

然后通过编译构建docker镜像,在无人机或者小车的上位机里面运行docker镜像,从而避免重复枯燥的环境配置。

二. 定位技术理论

作者:刘权祥 魏天昊 曾雅

1. 定位技术概论

https://blog.csdn.net/qq_38252524/article/details/107742847

上文介绍了当前主流定位技术,对于文中提到的每一种方法,都应该自己网上去搜索一下更多的知识

任务:比较这些方法的异同

2. SLAM部分

推荐教材:《视觉SLAM十四讲》

推荐网课:深蓝学院系列(有网盘链接,但容易过期,到时候再给)

学习指南:

第一次学习,建议重点关注第三讲、第五讲,这两讲非常重要,其他部分的内容可能会有难度,了解即可。

后面再深入学习的时候,可以把第三讲的公式推导自己做一遍,第七八讲的概念可以好好看看。

不用太在意各种数学公式,可以先看做一个黑箱子,除了相机标定那一块完整的公式要推导一遍,其他的可以往后放放。

3. 蒙特卡洛定位(粒子滤波)

3.1 基础知识

没必要看《概率机器人》,直接在网上找相关的博客进行基本知识的学习。

3.2 实践

目前主要是针对Robocup的场地做粒子滤波

有仿真、实际的两种实现,但是都没有完全做好,可以直接上手测试、调整。

4. 地图匹配

TODO

5. 卡尔曼滤波(以及扩展卡尔曼滤波)

在视觉SLAM的后端优化中,介绍了5种方法:

卡尔曼滤波器,扩展卡尔曼滤波器,BA优化,PoseGraph优化,因子图优化。

涉及到很多的概率论,线性代数知识,难度有点大。

但是仍然需要掌握卡尔曼滤波器技术,它在生活中有着大量的应用,非常重要。

学习链接1:https://blog.csdn.net/young_gy/article/details/78177291

学习链接2:How a Kalman filter works, in pictures | Bzarg

视觉SLAM后端部分如果看不懂,可参考以下链接:

后端链接1:https://blog.csdn.net/zkk9527/article/details/89053388

后端链接2:https://blog.csdn.net/zkk9527/article/details/89068410?spm=1001.2014.3001.5501

一. 编程基础

作者:刘权祥 魏天昊

1. C++

使用C++,熟悉面向对象。

推荐备一本参考书,作为“新华字典”,如C++ Primer。

2. ROS

安装教程:http://wiki.ros.org/melodic/Installation/Ubuntu

学习网站:http://wiki.ros.org/ROS/Tutorials,也可以看古月居B站视频。

要求:掌握入门二十一讲。前期把这些部分学习完即可,以后还需要学习一些更深入的内容。

建议:建议自己多写Demo多练(如自己写一个topic和service,比较一下区别)

3. OpenCV

推荐教材:《OpenCV3编程入门——毛星云》

OpenCV安装教程:

把整本书看完,里面的代码自己好好写一写就行。

之后可以尝试在ROS中写一个调用电脑摄像头检测小球的程序。

零. 基础之基础

作者:刘权祥

1. Ubuntu的安装与使用

建议安装双系统,使用虚拟机有时候还不是很方便。这个网上的教程特别多,看着来就行。

建议安装ubuntu18.04,太新的版本会导致内核过新,有的开发环境不支持,太旧的版本不是很好用,也有新版软件不支持的问题。

2. 学习markdown的使用

ubuntu下推荐使用typora来写markdown,这个东西很简单不过也很重要。

markdown的语法格式比较简单,在网上搜一些教程就可以快速入门,大概三十分钟之内就会写了,之后可以多用它来写文档。

3. 网上冲浪

在后续的学习中,可能会遇到网络问题,如果你有ubuntu下的代理或者网络比较好,就可以跳过这一步,不然还是推荐看一下。

代理购买

目前基地在wifi中内置了代理,所以没有可以分享的节点之类的,在家如果要使用代理的话,需要自己购买。

使用代理

买了代理之后,你其实只是有了一个链接,还不能直接用上。在Windows、Android、ios上,上面那个网址都提供了软件,不过在ubuntu下居然没有,你可以先在你的Windows系统和手机里面把翻墙配置好。

ubuntu18.04下建议使用qv2ray,安装指令如下:

1
sudo snap install qv2ray 

你也可以在系统软件商店或者网上下载安装。

下载后你其实还需要一个内核才能够使用qv2ray,建议用能翻墙的系统去下载这个内核,之后再安装进去。

这里会遇到一个问题,就是如果你是在上面的那个网址购买的代理的话,还需要下载两个插件安装到qv2ray中才能够成功的翻墙。

之后应该就没问题了,如有问题请联系对应的学长学姐。

定位技术培训大纲

零. 基础之基础

1. Ubuntu的安装与使用

2. 学习markdown的使用

3. 网上冲浪

一. 编程基础

1. C++

2. ROS

3. OpenCV

二. 定位技术理论

1. 定位技术概论

2. SLAM部分

3. 蒙特卡洛定位(粒子滤波)

4. 地图匹配

5. 卡尔曼滤波(以及扩展卡尔曼滤波)

三. 定位技术实践

1. 相机标定实践

2. 使用开源方案

3. 双目测距,深度相机测距(单目)

4. 优化基地已有定位方法

5. 部署定位方案

四. 定位技术进阶

1. 阅读开源SLAM源码

2. 实现一个简单的VO

3. 实现一个简单的SLAM

Learn-SLAM

0. 关于本项目

  

本项目由西北工业大学足球机器人基地定位技术组发起,主要负责人为刘权祥。

目前本项目还在发展阶段,有一些教程尚未完工。

我们制作这个教程是为了基地更好并且更规范的招新培训,当然也希望能够帮助到对定位技术,特别是SLAM技术感兴趣的同学。整个教程所介绍的知识都偏向于基础和应用,没有对理论部分有太多的解读,我们希望通过整个教程能够让队员对SLAM有一个整体的认知,并且快速的掌握基本的定位技术,从而运用到基地的比赛或者项目中。

1. 什么是SLAM?

SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durrant-Whyte 和 John J.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地图构建的问题。

SLAM主要解决的是以下两个问题:

1、我在哪里?也就是机器人在工作过程中要知道自己的具体位置。对应的术语叫:**定位(Localization)**。

2、我周围的环境是什么样子?也就是机器人需要知道整个空间的地面结构信息。对应的术语叫:**建图(Mapping)**。

2. 为什么要学习SLAM?

从行业需求来看,随着机器人、AR、自动驾驶的爆发式增长,SLAM方向的需求量还在上升,而相关从业者相对较少。

目前对SLAM技术需求强烈的公司包括:互联网公司如百度、腾讯、阿里、京东等,计算机视觉算法公司如旷世、虹软、商汤等,自动驾驶创业公司如图森、momenta、景驰、驭势、滴滴及各大汽车厂商等,无人机/机器人公司如大疆、思岚、高仙等,AR移动终端应用相关公司如三星、华为、悉见等。其中大多企业以激光SLAM为主,毕竟激光SLAM是当下最稳定、可靠的定位导航方案,而视觉SLAM将是未来主流研究方向,不过未来两者融合也将成为一种趋势,采用多传感器融合能做到取长补短,为市场打造出更好用的定位导航解决方案,进一步实现机器人的智能化进程。

总体来说,目前国内SLAM技术无论是在技术层面还是应用层面仍处于发展阶段,未来,随着消费刺激及产业链不断发展,SLAM技术将会有一片更为广阔的市场。

3. 如何学习SLAM?

定位技术培训大纲

4. 学习建议

  1. SLAM对编程能力要求较高,建议先锻炼编程能力,把基础部分全部掌握好,之后无论是阅读代码还是写代码都有帮助。
  2. SLAM是一个非常复杂的软件系统,包含了大量的数学、编程知识、编程技巧的系统,需要先建立感性认识,然后熟悉各个技术模块,然后在有一点理解的基础上尝试集成、修改、改进等等。可以先把一些开源SLAM方案运行起来,跑起来看一看效果,有一个大概的认知;之后再顺着这个认知学习下去,一步一步来。
  3. 由于SLAM包含了大量的数学知识、编程知识,因此强烈建议采用广度优先的方法来学习,即首先建立整体的感性认识;然后针对每一个技术模块了解其目的、意义、调用的方法等等;然后通过整合的方式去理解整体的衔接、组织。

5. 参考资料

5.1 SLAM实现

5.2 教程

6. 培训方案

  1. 各个项目组应该统一培训,这样安排起来更加方便,也有利于以后基地定位技术的发展
  2. 明确基地定位技术的范畴,不应该只包括SLAM部分,把定位技术组培训的大纲基本的弄起来
  3. 网课学习为主,要求有一定的反馈机制,比如:答辩、报告、代码实现等
  4. 答疑讲解为辅,形式包括但不限于:线上线下会议、群聊等
  5. 尝试跨组合作的小任务(但同方向的可能合作的范围很小或者比较难合作?)