第1讲——预备知识

一、视觉SLAM十四讲在讲些啥

SLAM:Simultaneous Localization and Mapping 翻译:同时定位地图构建

搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动
特定传感器主要为相机时,就称为视觉SLAM

二、咋使用这本书

理论+实践

理论部分

第1讲:预备知识,习题可以自测一下自己是否具备相应的学习这本书的最低要求
第2讲:SLAM系统概述,介绍SLAM系统的组成,各个模块的作用;以及编程环境的搭建和IDE的使用
第3讲:三维空间刚体运动,包括旋转矩阵、欧拉角、四元数等
第4讲:李群和李代数,介绍李代数的相关定义和使用方式
第5讲:针孔相机模型以及图像在计算机中的表达,通过OpenCV调用相机内外参数
第6讲:非线性变换,包括状态估计理论基础、最小二乘问题、梯度下降方法等

实践部分

第7讲:特征点法的视觉里程计,包括特征提取与匹配、对极几何约束的计算、PnP和ICP等;用这些方法估计两个图像之间的运动
第8讲:直接法的视觉里程计,包括光流和直接法的原理;实现一个简单的直接发运动估计
第9讲:后端优化,对Bundle Adjustment(BA)的深入讨论,包括基本的BA以及如何利用稀疏性加速求解过程;用Ceres和g2o分别编写BA程序
第10讲:后端优化中的位姿图;使用g2o对一个位姿球进行优化
第11讲:回环检测,以词袋方法为主;使用DBoW3编写字典训练程序和回环检测程序
第12讲:地图构建,使用单目进行稠密深度图的估计(该方法特别不可靠),学习RGB-D的稠密地图构建过程;编写极线搜索和块匹配程序,在RGB-D中进行点云地图和八叉树地图构建
第13讲:工程实践,搭建一个双目视觉里程计框架,运用之前学过的知识进行实现和优化
第14讲:介绍开源SLAM方案和未来发展方向

本书源码下载:slambook2

三、自测习题

1,有线性方程Ax=b,若已知A,b,需要求解x,该如何求解?这对A和b有哪些要求?
提示:从A的维度和秩角度来分析。
答:
在这里插入图片描述

2,高斯分布是什么?它的一维形式时什么样子?它的高维形式时什么样子?

答:高斯分布(Gaussian distribution),也称正态分布(Normal distribution)
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此又称之为钟形曲线。

随机变量X服从一个数学期望为μ方差为σ²正态分布,记为N(μ,σ²)
其概率密度函数为正态分布的数学期望μ决定了其位置,其标准差σ决定了分布的幅度

一维高斯分布(正态分布):在这里插入图片描述

μ = 0,σ = 1时的正态分布是标准正态分布
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 高斯函数
def gaussian(x, amplitude, mean, std):return amplitude * np.exp(-(x - mean) ** 2 / (2 * std ** 2))# 参数
amplitude = 1 # 高峰值
mean = 0      # 平均值
std = 1       # 标准差
x = np.linspace(-5, 5, 400)  # x轴的范围# 计算高斯函数
y = gaussian(x, amplitude, mean, std)# 绘图
plt.plot(x, y, color='blue', linewidth=2)
plt.title('Gaussian Function')
plt.xlabel('x')
plt.ylabel('y')
plt.grid()
plt.show()

效果图:在这里插入图片描述

二维高斯函数:
在这里插入图片描述
二维高斯函数3D展示

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dx,y = np.mgrid[-5:5:200j,-5:5:200j]
sigma = 2
z = 1/(2 * np.pi * (sigma**2)) * np.exp(-(x**2+y**2)/(2 * sigma**2))fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow',alpha = 0.9)plt.show()

效果图如下:在这里插入图片描述

二维高斯函数平面彩色展示

import numpy as np
from matplotlib import pyplot as plt# 定义二维高斯函数
def gaussian_2d(x, y, amp, x0, y0, sx, sy):return amp * np.exp(-((x - x0) ** 2 / (2 * sx ** 2) + (y - y0) ** 2 / (2 * sy ** 2)))# 参数设置
amp, x0, y0, sx, sy = 1, 0, 0, 1, 1  # 高斯函数的参数# 创建二维网格
x = np.linspace(-5, 5, 200)
y = np.linspace(-5, 5, 200)
x, y = np.meshgrid(x, y)# 计算高斯函数
gauss_2d = gaussian_2d(x, y, amp, x0, y0, sx, sy)# 绘制高斯函数
plt.imshow(gauss_2d.T, extent=[x.min(), x.max(), y.min(), y.max()], cmap='viridis')
plt.colorbar()
plt.show()

效果图如下:在这里插入图片描述
二维高斯函数平面灰度图展示

import numpy as np
import matplotlib.pyplot as plt# 二维高斯函数
def gaussian_2d(x, y, sigma_x, sigma_y, rotation, x_0, y_0, A):angle = rotation * np.pi / 180x_shift = x - x_0y_shift = y - y_0gauss_expr = A * np.exp(-(x_shift ** 2 / (2 * sigma_x ** 2) + y_shift ** 2 / (2 * sigma_y ** 2)))\* np.cos(2 * np.pi * rotation) - 2 * np.pi * rotationreturn gauss_expr# 定义二维网格
x = np.linspace(-10, 10, 400)
y = np.linspace(-10, 10, 400)
x, y = np.meshgrid(x, y)# 高斯参数
sigma_x, sigma_y = 2, 3
rotation = 0  # 旋转角度
x_0, y_0 = 0, 0
A = 1  # 高斯峰值# 计算高斯函数
z = gaussian_2d(x, y, sigma_x, sigma_y, rotation, x_0, y_0, A)# 绘图
plt.imshow(z, cmap='gray', extent=[x.min(), x.max(), y.min(), y.max()], origin='lower')
plt.colorbar()
plt.show()

效果图如下:在这里插入图片描述

3,你知道C++中的类吗? 你知道STL吗? 你使用过它们吗?
答:
C++中的类——百度百科
在现实世界中,经常有属于同一类的对象
例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象:矩形、雇用记录、视频剪辑等。可以利用这些对象的相同特征为它们建立一个集合。而这个集合就称为类。
类是定义同一类所有对象的变量和方法的蓝图或原型
例如,可以建立一个定义包含当前档位等实例变量的自行车类。这个类也定义和提供了实例方法(变档、刹车)的实现。实例变量的值由类的每个实例提供
因此,当你创建自行车类以后,必须在使用之前对它进行实例化
当创建类的实例时,就建立了这种类型的一个对象,然后系统为类定义的实例变量分配内存。然后可以调用对象的实例方法实现一些功能
相同类的实例共享相同的实例方法
除了实例变量和方法,类也可以定义类变量和类方法
可以从类的实例中或者直接从类中访问类变量和方法。类方法只能操作类变量 - 不必访问实例变量或实例方法

标准模板库(Standard Template Library,STL)——百度百科
标准模板库是一个C++软件库,大量影响了C++标准程序库但并非是其的一部分。其中包含4个组件,分别为算法、容器、函数、迭代器
模板是C++程序设计语言中的一个重要特征,而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性

以前备赛蓝桥杯,刷题OJ的时候经常使用

4,你以前怎样书写C++程序?(你完全可以说只在Visual C++6.0下写过CH+工程只要你有写C++和C语言的经验就行。)
答:我一般用CodeBlocks这个IDE编写C++程序

5,你知道C++11标准吗? 你听说过或用过其中哪些新特性? 有没有其他的标准
答:C++11——百度百科
C++11标准是 ISO/IEC 14882:2011 - Information technology – Programming languages – C++ 的简称
C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布 [2],并于2011年9月出版。
C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)
C++标准程序库的变更(标准库组件的升级;线程支持;多元组类型;散列表;正则表达式;通用智能指针;可扩展的随机数功能;包装引用;多态函数对象包装器;用于元编程的类型属性;用于计算函数对象返回类型的统一方法)

6,你知道Linux吗?你有没有至少使用过一种(不算安卓)操作系统,比如 Ubuntu?
答:知道,玩过CentOS和Ubuntu

7,Linux的目录结构是什么样的? 你知道哪些基本命令,比如 Is,cat等?
答:Linux 目录结构像一棵树一样布局,其中/root目录是树的主干,其余目录从该树干分支出来
目录主要包含三种类型的文件:
通用文件:通用文件是包含 ASCII 或二进制数据的普通文件。视频、图像、文档等是通用文件的常见示例。
目录文件:在 Linux 中,目录也被归类为作为其他文件类型和目录的存储空间的文件。
设备文件:您可能熟悉看到在 Windows 中插入 USB 时创建的F:或G:驱动器。同样,在 Linux 中,USB 和其他硬件组件表示为/dev/device_id文件。

更多Linux基本操作命令可参考博文:Linux基本操作命令

8,如何在 Ubuntu系统中安装软件(不打开软件中心的情况下)? 这些软件被安装在什么地方? 如果只知道模糊的软件名称(比如想要装一个名称中含有Eigen 的库),应该如何安装它?
答:softname参数为要安装的软件
安装软件命令:sudo apt-get install softname
卸载软件命令:sudo apt-get remove softname

安装的软件默认安装目录为/usr/bin

想要装一个名称中含有Eigen的库,首先搜索包sudo apt search eigen,然后再下载安装sudo install XXX即可

9*,花一个小时学习Vim,因为你迟早会用它。你可以在终端中输入vimtutor阅读一遍所有内容。我们不需要你非常熟练地操作它,只要能够在学习本书的过程中使用它输入代码即可。不要在它的插件上浪费时间,不要想着把Vim用成 IDE,我们只用它做文本编辑的工作
答:好的高博!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MBTI测试指南:职场新人必读的性格分析文章!

MBTI简介 迈尔斯-布里格斯类型指标(Myers–Briggs Type Indicator,MBTI)是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

WWDC24定档6月 | 崩坏3将推Mac系统版 苹果AI启航 visionOS 2.0将系数登场WWDC24

这几天又有一件苹果用户圈大事发生了!WWDC24正式定档,将在6月10日-14日召开,届时一众软件系统,包括iOS18,iPadOS,WatchOS,VisionOS等等,都将迎来更新。另外就是手游崩坏3官宣&#x…

有效感受野可视化学习

有效感受野可视化 过程记录创建环境准备数据、脚本脚本测试 其他参考尝试运行 过程记录 创建环境 conda create -n ERF python3.8 -y conda activate ERF pip3 install empy rospkg pyyaml catkin_pkg conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch…

【干货集】C# XmlHelper帮助类操作Xml文档的通用方法汇总

前言 该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内容增删改的一些通过方法)。当然可…

基于k8s的高性能综合web服务器搭建

目录 基于k8s的高性能综合web服务器搭建 项目描述: 项目规划图: 项目环境: k8s, docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构,k8s单master的集群环境&…

【R】Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包

Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包 此外: Warning message: package ‘parallel’ is a base package, and should not be updated 解决方法 缺少名为 foreach 的包,使用install.packages("foreach")将名为foreach 的包…

Qt事件学习案例

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs?p7&spm_id_frompageDriver&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41bQt5跟着视频做即可,Qt6部分代码需要改动,改动的地方注释有写 素材 百度云 链接:https://pan.baidu.com/s/158j…

Mybatis——一对一映射

一对一映射 预置条件 在某网络购物系统中,一个用户只能拥有一个购物车,用户与购物车的关系可以设计为一对一关系 数据库表结构(唯一外键关联) 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import …

STM32H5 读取温度传感器校准值时进 HardFault 的原因分析

1.前言 有客户反馈,在使用 STM32H5 读取温度传感器校准值地址时,会进入 HardFault,而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题,发现只有开启 ICACHE 后才会复现,初步验证…

【旅行商问题TSP】基于大邻域搜索算法LNS

课题名称:大规模邻域搜索算法LNS求解TSP问题 版本时间:2024-04-01 程序运行:直接运行LNS_TSP.m 文件即可 代码获取方式: QQ:491052175 VX:Matlab_Lover 模型介绍: 第一步:设定…

为什么要学习大模型应用开发?

0 prompt engineer 就是prompt工程师它的底层透视。 1 学习大模型的重要性 底层逻辑 人工智能大潮已来,不加入就可能被淘汰。就好像现在职场里谁不会用PPT和excel一样,基本上你见不到。你问任何一个人问他会不会用PPT,他都会说会用&#…

如何对抓取的文本进行分词、词频统计、词云可视化和情感分析

目录 一、引言 二、文本分词 三、词频统计 四、词云可视化 五、情感分析 六、总结 一、引言 在大数据时代,文本数据的处理和分析显得尤为重要。对于爬虫抓取的大量文本数据,如何进行高效、准确的处理和分析,是每一个数据分析师和开发…

算法| ss 字符串数组对象

罗马数字转整数 409.最长回文串 字符串相加 594.最长和谐子序列 13. 罗马数字转整数 /*** param {string} s* return {number}*/ // 构建map匹配值,增加带IV这种的 // for遍历循环, // 1.先看匹配是否满足2个字符的 i2 // 2. 单个字符匹配 var romanToInt functi…

达梦体系结构:内存架构

达梦体系结构:内存架构 内存架构数据缓冲区重做日志缓冲区SQL缓冲区字典缓冲区共享内存池运行时的内存池 达梦数据库由数据库和实例构成: 数据库是指磁盘上存放的数据库文件的集合,包括参数文件、控制文件、数据文件、日志文件等。实例是指一…

9Proxy,跨境电商一站式解决方案

文章目录 跨境电商什么是跨境电商跨境电商的机遇跨境电商技术支撑 海外代理IP什么是海外代理IP海外代理IP的作用如何选择海外代理IP 9Proxy9Proxy的优势9Proxy的解决方案价格汇总搜索引擎优化市场调查多重核算数据抓取广告技术 价格上手体验注册登录下载安装数据采集 总结福利 …

【Unity每日一记】如何从0到1将特效图集制作成一个特效

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Java毕业设计 基于SSM jsp商城系统 美妆系统

Java毕业设计 基于SSM jsp商城系统 美妆系统 SSM jsp 商城系统 美妆系统 功能介绍 首页 分类展示商品 搜索商品 登录 注册 邮箱激活 购物车 结算 支付 我的订单 个人信息设置 后台管理 登录 商品管理 添加修改下架商品 商品类型管理 添加修改删除分类 订单管理 确认发货 取消…

Python中主要数据结构的使用

文章目录 数组队列 queue双端队列 deque栈 stack优先队列 priority_queue集合 set映射/字典 map 数组 使用内置类型list实现,主要有如下操作: array [] array.append(1) length len(array) if not array:# 列表为空print("array is empty"…

Vue使用高德地图(快速上手)

1.在高德平台注册账号 2.我的 > 管理管理中添加Key 3.安装依赖 npm i amap/amap-jsapi-loader --save 或 yarn add amap/amap-jsapi-loader --save 4.导入 AMapLoade import AMapLoader from amap/amap-jsapi-loader; 5.直接上代码,做好了注释(初…

子数组 OR/AND/GCD 模板(补题)

3097. 或值至少为 K 的最短子数组 II 给你一个 非负 整数数组 nums 和一个整数 k 。 如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k ,那么我们称这个数组是 特别的 。 请你返回 nums 中 最短特别非空 子数组 的长度,如果特别子数组不存在&a…