文章目录
Day1:从零开始一起学习SLAM | 为什么要学SLAM?
1、请列举几篇最近几年SLAM领域经典的综述论文。
从文章摘要中得知这篇论文的写作结构为
(1)调查SLAM现状,新的研究方向,现在的业界标准是什么
(2)回顾SLAM近些年的前沿
(3)定性本篇文章为意见文件与指导意义
基于单目视觉的同时定位与地图构建方法综述(章国峰)
偏向计算机视觉邻域的 SFM,多视图几何
G. Bresson, Z. Alsayed, L. Yu and S. Glaser, “Simultaneous Localization and Mapping: A Survey of Current Trends in Autonomous Driving,” in IEEE Transactions on Intelligent Vehicles, vol. 2, no. 3, pp. 194-220, Sept. 2017, doi: 10.1109/TIV.2017.2749181.
自动驾驶领域的一篇SLAM综述
2、阅读综述,并列举至少三个SLAM的具体应用场景。
- 外太空星球探索
- 智能机器人如无人机,室内扫地机器人,餐饮服务类机器人
- 自动驾驶
- 虚拟现实增强现实
【学习摘抄】
🎁 学习SLAM需要前期知识铺垫:(三维空间刚体变换)、(相机成像模型)、(特征点提取与匹配)、(多视图几何)、(捆集调整bundle adjustment)等
其中bundle adjustment不熟悉,有待进一步学习
🎁 SLAM技术需求公司:
- 互联网公司如百度、腾讯、阿里、京东等,
- 计算机视觉算法公司如旷世、虹软、商汤等,
- 自动驾驶创业公司如图森、momenta、景驰、驭势、滴滴及各大汽车厂商等,
- 无人机/机器人公司如大疆、思岚、高仙等,
- AR移动终端应用相关公司如三星、华为、悉见等。
Day2:从零开始一起学习SLAM | 学习SLAM到底需要学什么?
我们用到的主流数据集有:
1、SLAM是处理序列图像的,有时候需要格式化的图像名字用作输入。
参考糖糖大大的博客做微小修改:利用python对大量图片进行重命名
用python3生成一个0001,0002,0003~9998,9999组成的txt文件,不足四位的自动加0补足
# -*- coding:utf8 -*-
import os
class BatchRename():
'''
批量重命名文件夹中的图片文件
'''
def __init__(self):
self.path = r'/home/warmtree/picture' #表示需要命名处理的文件夹
def rename(self):
#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序
filelist = os.listdir(self.path)
total_num = len(filelist) #获取文件夹内所有文件个数
i = 1 #表示文件的命名是从1开始的
for item in filelist:
if item.endswith('.jpg'):
#初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的即可)
src = os.path.join(os.path.abspath(self.path), item)
#dst = os.path.join(os.path.abspath(self.path),str(i) + '.png')
#处理后的格式也为jpg格式的,当然这里可以改成png格式
#dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')
#这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
dst = os.path.join(os.path.abspath(self.path),'%04d'%i + '.png')
#生成一个0001,0002,0003~9998,9999
try:
os.rename(src, dst)
print ('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
print ('total %d to rename & converted %d pngs' % (total_num, i))
if __name__ == '__main__':
demo = BatchRename()
demo.rename()
这里有一个问题是我们在批量换名时改变了图片的顺序。
2、已知相机的位姿用四元数表示为q=[0.35,0.2,0.3,0.1],顺序为x,y,z,w,请编程实现:输出四元数对应的旋转矩阵、旋转矩阵的转置,旋转矩阵的逆矩阵,旋转矩阵乘以自身的转置,验证旋转矩阵的正交性。
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from scipy.spatial.transform import Rotation as R
>>> r = R.from_quat([0.35, 0.2, 0.3,0.1])
>>> r.as_matrix() #输出四元数对应的旋转矩阵
array([[ 0.00952381, 0.3047619 , 0.95238095],
[ 0.76190476, -0.61904762, 0.19047619],
[ 0.64761905, 0.72380952, -0.23809524]])
>>> import numpy as np
>>> r_array = np.asarray(r.as_matrix())
>>> r_array
array([[ 0.00952381, 0.3047619 , 0.95238095],
[ 0.76190476, -0.61904762, 0.19047619],
[ 0.64761905, 0.72380952, -0.23809524]])
>>> r_array.T # 旋转矩阵的转置
array([[ 0.00952381, 0.76190476, 0.64761905],
[ 0.3047619 , -0.61904762, 0.72380952],
[ 0.95238095, 0.19047619, -0.23809524]])
>>> np.linalg.inv(r_array) #旋转矩阵的逆
array([[ 0.00952381, 0.76190476, 0.64761905],
[ 0.3047619 , -0.61904762, 0.72380952],
[ 0.95238095, 0.19047619, -0.23809524]])
>>> r_array@r_array.T # 验证旋转矩阵的正交性
array([[ 1.00000000e+00, -8.93716947e-17, 9.71759836e-17],
[-8.93716947e-17, 1.00000000e+00, -2.62293336e-17],
[ 9.71759836e-17, -2.62293336e-17, 1.00000000e+00]])
- quaternion to rotation matrix python
- Python使用scipy成功解决 AttributeError: type object ‘Rotation‘ has no attribute ‘from_matrix‘
- 用python学习SLAM系列(一)
- slam-python
- python将四元数变换为旋转矩阵的实例
- pyquaternion 0.9.5
- python中将四元数转换为旋转矩阵
四元数相关扩展
i 2 = j 2 = k 2 = i j k = − 1 \mathbf i^{2} = \mathbf j^{2} = \mathbf k^{2} = \mathbf i \mathbf j \mathbf k = -1 i2=j2=k2=ijk=−1
四元数来源于复数,对一个复数乘以i,这个复数就在复数平面上旋转了90度。
我们随机地在复数平面上取一个点:
p = 2 + i p = 2 + \mathbf i p=2+i
p乘以i后得到q: q = p i = ( 2 + i ) i = 2 i + i 2 = − 1 + 2 i q = p\mathbf i = (2+\mathbf i)\mathbf i = 2\mathbf i + \mathbf i^{2} = -1 + 2\mathbf i q=pi=(2+i)i=2i+i2=−1+2i
q乘以i后得到r: r = q i = ( − 1 + 2 i ) i = − i + 2 i 2 = − 2 − i r = q\mathbf i = (-1 + 2\mathbf i)\mathbf i = -\mathbf i + 2\mathbf i^{2} = -2 -\mathbf i r=qi=(−1+2i)i=−i+2i2=−2−i
r乘以i后得到s: s = r i = ( − 2 − i ) i = − 2 i − i 2 = 1 − 2 i s = r\mathbf i = (-2 - \mathbf i)\mathbf i = -2\mathbf i-\mathbf i^{2} = 1 - 2\mathbf i s=ri=(−2−i)i=−2i−i2=1−2i
s乘以i后得到t: t = s i = ( 1 − 2 i ) i = i − 2 i 2 = 2 + i t = s\mathbf i = (1-2\mathbf i)\mathbf i = \mathbf i - 2\mathbf i^{2} = 2 + \mathbf i t=si=(1−2i)i=i−2i2=2+i
【疑惑】 额外增加2个虚数到我们的复数系统,从而把这些概念拓展到3维空间?
四元数来源于复数 a + b i a+bi