第1讲——预备知识

news2024/12/23 23:38:12

一、视觉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 Axes3D

x,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 / 180
    x_shift = x - x_0
    y_shift = y - y_0
    gauss_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 * rotation
    return 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.coloradmin.cn/o/1571295.html

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

相关文章

构建开源可观测平台

企业始终面临着确保 IT 基础设施和应用程序全年可用的压力。现代架构(容器、混合云、SOA、微服务等)的复杂性不断增长,产生大量难以管理的日志。我们需要智能应用程序性能管理 (APM) 和可观察性工具来实现卓越生产并满足可用性和正常运行时间…

基于SpringBoot+微信小程序的防诈骗平台

一、项目背景介绍: 社会背景随着互联网的高速发展,网络和手机的普及率也大大提高,这也衍生出一系列问题:用户信息泄露、不法分子电话诈骗等…现越来越多的老年人甚至年轻人经历过电信诈骗并被骗了大量金额。该产品正是基于这样的社…

揭秘SCQL:隐私计算的未来之路

1.SCQL使用/集成最佳实践 隐语隐私计算中SCQL(Secure Collaborative Query Language)的设计旨在提供一种便捷且安全的方式来处理多方参与下的隐私敏感数据查询与分析,而无需暴露原始数据给任何一方。以下是基于以上所记录信息的SCQL使用和集…

Linux文件IO(3):使用文件IO进行文件的打开、关闭、读写、定位等相关操作

目录 1. 文件IO的概念 2. 文件描述符概念 3. 函数介绍 3.1 文件IO-open函数 3.2 文件IO-close函数 3.3 文件IO-read函数 3.4 文件IO-write函数 3.5 文件IO-lseek函数 4. 代码练习 4.1 要求 4.2 具体实现代码 4.3 测试结果 5. 总结 1. 文件IO的概念 posix(可移植操作系统接…

vulhub中Struts2-008 远程代码执行漏洞复现

影响版本: 2.1.0 - 2.3.1 原理 > S2-008 涉及多个漏洞,Cookie 拦截器错误配置可造成 OGNL 表达式执行,但是由于大多 Web 容器(如 Tomcat)对 Cookie 名称都有字符限制,一些关键字符无法使用使得这个点显得比较鸡肋…

深入了解 Python 中标准排序算法 Timsort

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ Timsort:一个非常快速的、时间复杂度为 O ( n l o g n ) O (n \ log\ n) O(n log n)、稳健(即不改变等值元素间的相对顺序)的排序算法,在处理真实世界数…

ModuleNotFoundError: No module named ‘einops‘解决办法

安装对应的库就好 pip install einops -i https://pypi.tuna.tsinghua.edu.cn/simple 拓展——在python中einops模块有什么作用 einops 是一个 Python 库,它提供了一种简洁、易读的方式来操作多维数组(通常是 NumPy 数组或 PyTorch 张量)。e…

移动端基础

移动端基础 一.了解二.视口1.视口形式2.视口标签3.viewport设置 三.二倍图1.像素比2.多倍图3.背景缩放及使用(background-size)4.多倍图切图 四.移动端开发选择1.单独制作2.响应式3.总结 五.移动端技术解决方案1.初始化2.盒子模型3.特殊样式 六.常见布局…

铸铁平台的平面度

铸铁平台的平面度是指平台的表面平整程度,即平台表面与其理论平面之间的最大偏差。平台的平面度通常使用国际标准符号GD&T中的平面度符号(ⓨ)表示,单位为毫米(mm)或微米(μm)。 …

【数据分析面试】10. 计算平均通勤时间(SQL:timestampdiff() 和datediff()区别)

题目 假设你在Uber工作。rides表包含了关于Uber用户在美国各地的行程信息。 编写一个查询,以获取纽约(NY)每位通勤者的平均通勤时间(以分钟为单位),以及纽约所有通勤者的平均通勤时间(以分钟为…

Codeforces Round 836 (Div. 2) D. Range = √Sum

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…

Phpstorm配置Xdebug

步骤 1、先去官网找到对应的php xdebug的版本 2、配置phpstorm断点调试 网址&#xff1a;https://xdebug.org/ 查看php对应的xdebug版本&#xff1a;Xdebug: Support — Tailored Installation Instructions 1.1查看对应php xdebug版本 全选&#xff0c;复制到目标网址 我…

数据恢复软件有哪些?适用于 Windows PC 的 10 款最佳免费数据恢复软件

数据已成为数字世界运作的主要来源。任何数据丢失都会对公司的日常活动产生巨大影响。它会影响过程的连续性。以下文章为您带来了各种简单且免费使用的数据恢复软件。 什么是数据恢复&#xff1f; 检索和恢复丢失、损坏、无法访问、损坏或意外删除的数据的过程称为数据恢复。这…

B3631 单向链表(结构体模拟链表)

输入格式 第一行一个整数 q表示操作次数。 接下来 q行&#xff0c;每行表示一次操作&#xff0c;操作具体间题目描述。 输出格式 对于每个操作 2&#xff0c;输出一个数字&#xff0c;用换行隔开。 #include<iostream> #include<map> #include<algorithm> …

【随笔】Git 高级篇 -- 整理提交记录(上)(十五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

设置Chrome打开链接在新标签页显示

Chrome版本 版本 123.0.6312.106&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 下面这两个页面都有设置按钮&#xff1a; https://www.google.com/?pli1或者https://www.google.com/?hlzh-CN 要先退出账号&#xff0c;要不然看不到右下角的 “设置” 。…

【Linux】进程控制之进程程序替换

目录 前言 替换的原理 替换函数 记忆技巧 函数使用 execl execlp execv execvp execle execvpe 调用其它语言的程序 模拟实现一个shell 前言 关于本文可以先去看看上一篇【Linux】进程控制详解-CSDN博客可以更好的理解这里的内容 学完本篇文章&#xff0c;你就…

python标准数据类型--集合常用方法

在Python中&#xff0c;集合&#xff08;Set&#xff09;是一种无序且不重复的数据结构&#xff0c;它是由一个无序的、不重复的元素组成的。Python中的集合与数学中的集合概念相似&#xff0c;并且支持一系列常用的方法。本篇博客将深入介绍Python集合的常用方法&#xff0c;帮…

亚马逊跨境电商平台真人测评和自养号测评有什么区别?

下面来讲一下真人测评和自养号测评的优缺点有哪些 真人测评 优点&#xff1a;权重高&#xff0c;可以有效提升转化率 缺点&#xff1a;市面上的渠道良莠不齐&#xff0c;质量难以保证&#xff0c;且较难选择 真人测评是通过真人的买家在页面留下review的方式来提高权重&…

【51单片机入门记录】A/D、D/A转换器PCF859应用

目录 一、IIC初始化代码 二、开发板电路图 三、PCF8591读/写字节操作流程及相关函数 &#xff08;1&#xff09;PCF8591&#xff08;AD&#xff09;读操作流程及代码 &#xff08;2&#xff09;PCF8591&#xff08;AD&#xff09;写操作流程及代码 四、应用示例-显示电压…