第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 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,我们只用它做文本编辑的工作
答:好的高博!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Solidity入门1: 3. 函数类型

Solidity中的函数 solidity官方文档里把函数归到数值类型 函数结构 function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)] 看着些复杂&#xff0c;咱们从前往后一个一个看&…

【MySQL】:深入解析多表查询(上)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 多表关系1.1 一对多1.2 多对多1.3 一对一 二. 多表查询概述2.1 概述2.2 分类…

Docker Desktop 不支持 host 网络模式

先把这个结论的放在前面&#xff0c;直接访问链接就能看到官方文档中已经明确说了不支持。 参考链接&#xff1a;docker desktop for windows 不支持 host 网络模式 以前对于 docker 的网络模式&#xff0c;一直只是了解&#xff0c;没有亲自尝试过。结果今天在尝试 docker 的 …

『大模型笔记』LLMs入门:从头理解与编码LLM的自注意力机制

LLMs入门&#xff1a;从头理解与编码LLM的自注意力机制 这里直接引用我语雀上的的文章&#xff1a;《从头理解与编码LLM的自注意力机制》

科东软件参加广州机器人产业联盟举办先进工业母机专家研讨会

工业母机是“制造机器的机器”&#xff0c;具有基础性、通用性、战略性特征&#xff0c;包括了减材切削机床、等材成形装备、增材制造装备及其控制系统等&#xff0c;是衡量国家工业水平和竞争力的重要标志。广东省作为全球知名的制造业基地&#xff0c;非常重视高端装备领域工…

python 笔记

文章目录 pdbpdb开始调试pythonpdb设置断点单步执行进入到函数的内部执行到下一个断点或程序结束调用栈查看命令查看当前函数调用堆栈向上一层函数查看调用堆栈查看源代码 importimport 用法 numpy导入numpy模块numpy常用函数np.argmaxnp.sum range生成连续序列生成不连续序列 …

【随笔】Git 高级篇 -- 撤销变更(十四)

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

如何使用 Midjourney?2024年最新更新

一&#xff1a;基础篇 1&#xff1a;注册 首先&#xff0c;你需要注册一个 Discord 账号&#xff0c;然后加入 Midjourney 的 Discord 服务器。或者去 Midjourney 的官网点击右下角的 Join the Beta&#xff1a; ​ 2&#xff1a;在 Discord 公共服务器里使用 注册并进入到…

一、Docker部署GitLab(详细步骤)

Docker部署GitLab&#xff08;详细步骤&#xff09; 一、拉取镜像二、启动容器三、修改配置四、修改密码五、浏览器访问 一、拉取镜像 docker安装教程&#xff1a;https://qingsi.blog.csdn.net/article/details/131270071 docker pull gitlab/gitlab-ce:latest二、启动容器 …

MySQL数据库 数据库基本操作(三):表的增删查改(中)

1. 数据库的约束 1.1 约束类型(一般发生于表的创建中) NOT NULL - 指示某列不能存储 NULL 值。UNIQUE - 保证某列的每行必须有唯一的值。DEFAULT - 规定没有给列赋值时的默认值。PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&#xff08;或两个列多个列的结合&#xf…

一站式自动化测试平台-Autotestplat

3.1 自动化平台开发方案 3.1.1 功能需求 3.1.3 开发时间计划 如果是刚入门、但有一点代码基础的测试人员&#xff0c;大概 3 个月能做出演示版(Demo)进行自动化测试&#xff0c;6 个月内胜任开展工作中项目的自动化测试。 如果是有自动化测试基础的测试人员&#xff0c;大概 …

突破!AI机器人拥有嗅觉!仿生嗅觉芯片研究登上Nature子刊

我们一直梦想着让AI与人类能够更加相似&#xff0c;赋予它们视觉与听觉。而让机器人拥有嗅觉一直以来面临着巨大的困难。 香港科技大学范志勇教授领导的研究团队凭借最新研发的仿生嗅觉芯片&#xff08;BOC&#xff09;在这一领域取得了重大突破。该研究成果目前已被发表到IF …

代码随想录算法训练营DAY17|C++二叉树Part.4|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

文章目录 110.平衡二叉树思路伪代码CPP代码 257.二叉树的所有路径思路伪代码实现CPP代码 404.左叶子之和思路伪代码CPP代码 110.平衡二叉树 力扣题目链接 文章讲解&#xff1a;110.平衡二叉树 视频讲解&#xff1a;后序遍历求高度&#xff0c;高度判断是否平衡 | LeetCode&…

COCO格式转YOLO格式训练

之前就转换过好几次&#xff0c;每次换设备训练&#xff0c;由于压缩包太大&#xff0c;u盘不够用。每次都要找教程从网上再下载一遍。因此这里记录一下&#xff0c;以免下次重新找教程。 在coco数据集中&#xff0c;coco2017train或coco2017val数据集中标注的目标(类别)位置在…

Qt事件学习案例

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

金三银四面试题(十四):Java基础问题(5)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 避免序列化 可以使用transient 关键字修饰不想进行序列化的变量。 transient 关键字的作用是&#xff1a;阻止实例中那些用此关键字修饰的变量序列化&#xff1b;当对象被反序列…

Python 网络请求:深入理解Requests库

目录 引言 一、Requests库简介 二、安装与基本使用 三、requests库的特性与优势 四、requests库在实际应用中的案例 1.get请求 2.post请求 3.超时重试 4.headers设置 5.session会话 6.携带cookie​​​​​​​ 7.携带代理​​​​​​​ 8.携带身份认证​​​​​…

Windows集群部署项目

目录 一&#xff0c;环境准备 1.1.安装MySQL 1.2.安装JDK 1.3.安装TomCat 1.4.安装Nginx 二&#xff0c;部署 2.1.后台服务部署 2.2.Nginx配置负载均衡及静态资源部署 一&#xff0c;环境准备 1.1.安装MySQL 可以参考博客&#xff1a;http://t.csdnimg.cn/A75bg 1.2.…

FPGA(Verilog)实现uart传输协议传输数据(含仿真)

实现功能&#xff1a; 1.接收uart串行数据&#xff0c;输出并行数据(1byte)。 2.输入并行数据(1byte)&#xff0c;输出uart串行数据。 3.完成uart传输的1次环回。 uart协议的1帧数据传输 uart_test系统框图 Verilog代码实现 1.uart接收模块:接收串行数据,输出并行数据和其有…

72小时内报告!美国发布关键基础设施网络攻击通报新规草案

美国网络安全和基础设施安全局(CISA)本周四发布了关键基础设施企业如何向政府报告网络攻击的规定草案。 新规基于拜登2022年3月15日签署的美国《关键基础设施网络事件报告法案》(简称CIRCIA)。这是美国联邦政府首次提出一套跨关键基础设施部门的全面网络安全规则。CISA正在就规…