第13讲 实践:设计SLAM系统
设计一个视觉里程计,理解SLAM软件框架如何搭建,理解视觉里程计设计容易出现的问题以及解决方法。
目录
1、工程目标
2、工程框架
3、实现
附录
1、工程目标
- 实现一个精简版的双目视觉里程计。由一个光流追踪的前端和一个局部BA的后端组成。
2、工程框架
- 视觉里程计系统最基本的结构:图像、特征和图标。
- 最基本单元是图像,在双目视觉里,是一对图像,可以称为一帧。
- 对帧提取特征,这些特征很多是2D点、
- 在图像间寻找特征的关联。若多次看到某个特征,可以用三角化计算它的3D位置,即路标。

- 两个重要模块:
- 前端:前端负责提取图像中的特征,与上一帧进行光流追踪。通过光流结果计算该帧的定位。必要时,应补充新的特征点做三角化。前端处理的结果作为后端优化的初始值。
- 后端:拿到处理后的关键帧和路标点,进行优化。
- 流程 :前后端之间房一个地图模块来处理它们之间的数据流动。前端提取了关键帧后,往地图中添加新数据;后端检测到地图更新,运行一次优化,然后把地图中旧的关键帧和地图点去掉,保持优化规模。
3、实现
- 基本数据结构:
- Frame:id、是否为关键帧、位姿、左右图像、左右图像中的特征点。其中Pose会被前后端同时设置或访问,在Set,Get函数内加锁。
- Feature:自身2D位置、是否为异常点、所在frame、关联地图点
- MapPoint:3D位置、observations记录自己被哪些feature观察。
- Map:以散列形式记录所有关键帧和对应路标点,同时维护一个被激活(窗口)的关键帧和地图点。
- 前端
- 前端目标:根据双目图像确定该帧的位姿
- 处理逻辑:
- 前端有初始化、正常追踪、追踪丢失三种状态
- 在初始化状态,根据左右双目之间的光流匹配,寻找可以三角化的地图点,成功时建立初始地图。
- 追踪阶段中,前端计算上一帧的特征点到当前帧的光流,根据光流结果计算图像位姿。该阶段只使用左目图像。
- 若追踪到的点较少,就判定当前帧为关键帧。对于关键帧:
- 提取新的特征点
- 找到这些点在右图的对应点,用三角化建立新的路标点
- 将新的关键帧和路标点加入地图,并触发一次后端优化。
- 如果追踪丢失,重置前端系统,重新初始化。
- 后端
- 后端在启动之后,等到mao_update的的条件变量。当地图更新被触发时,从地图中拿取激活的关键帧和地图点,执行优化。
附录
- weak_ptr 提供了一个非常重要的成员函数 lock(),该函数尝试从当前的 weak_ptr 创建一个 shared_ptr 实例。如果当前的 weak_ptr 所指向的对象仍然存在(即,至少还有一个 shared_ptr 在管理该对象),lock() 函数会返回一个指向该对象的 shared_ptr 实例,并且会增加该对象的引用计数。如果 weak_ptr 所指向的对象已经被销毁(即,没有任何 shared_ptr 在管理该对象),lock() 函数会返回一个空的 shared_ptr。
相关文章:
第13讲 实践:设计SLAM系统
设计一个视觉里程计,理解SLAM软件框架如何搭建,理解视觉里程计设计容易出现的问题以及解决方法。 目录 1、工程目标 2、工程框架 3、实现 附录 1、工程目标 实现一个精简版的双目视觉里程计。由一个光流追踪的前端和一个局部BA的后端组成。 2、工程…...
NeRF2: Neural Radio-Frequency Radiance Fields 笔记
任务:用 NeRF 对无线信号的传播进行建模,建模完成后可以用NeRF网络生成新位置下的信号。生成的信号用于指纹定位、信道估计等下游任务。 核心思路 在视觉 NeRF 的基础上,根据无线信号的特点修改了隐式场模型、渲染函数,网络的输…...
以太网交换安全:MAC地址表安全
一、MAC地址表安全 MAC地址表安全是网络安全中的一个重要方面,它涉及到网络设备的MAC地址表的管理和保护。以下是对MAC地址表安全的详细介绍: (1)基本概念 定义:MAC地址表是网络设备(如交换机࿰…...
CSS综合页布面局案例
写的比较一般,如果想要参考可以点击链接。 CSS综合案例(登录页面)资源-CSDN文库 引言: 我们学习CSS和HTML都是为了想要做一个网页布局,但是每逢上手可能就会需要查阅很多语言,我觉得是没有什么问题的,熟能生巧,编程是需要练的,但是写网页的时候需要实现某个效果时需…...
低代码可视化-UniApp二维码可视化-代码生成器
市面上提供了各种各样的二维码组件,做了一简单的uniapp二维码组件,二维码实现依赖davidshimjs/qrcodejs。 组件特点 跨浏览器支持:利用Canvas元素实现二维码的跨浏览器兼容性,兼容微信小程序、h5、app。 无依赖性:QR…...
Electron 使用 Nodemon 配置自动重启
在Electron项目中,每次修改了代码都需要手动关闭应用,再执行npm start重启应用。 Nodemon 是一个非常实用的工具,主要用于在开发 Node.js 应用时自动监测文件的变化并重新启动服务器。 安装nodemon 开发环境安装nodemon: npm …...
JVM和GC监控技术
一、监控技术简介 JVM是什么?项目里面有JVM吗?JVM跟Tomcat有什么关系?为什么需要去分析JVM? 1. JVM(全称:Java Virtual Machine),Java虚拟机 是Java程序运行的环境,它是一个虚构的计算机&…...
Android中级控件
文章目录 图形定制1.图形Drawable2.形状图像3.九宫格图片4.状态列表图形 选择按钮1.复选框CheckBox2.开关按钮Switch3.单选按钮 文本输入1.编辑框EditText2.焦点变更监听器3.文本变化监听器 对话框1.提醒对话框2.日期对话框DatePickerDialog3.时间对话框TimePickerDialog 图形定…...
WebSocket消息防丢ACK和心跳机制对信息安全性的作用及实现方法
WebSocket消息防丢ACK和心跳机制对信息安全性的作用及实现方法 在现代即时通讯(IM)系统和实时通信应用中,WebSocket作为一种高效的双向通信协议,得到了广泛应用。然而,在实际使用中,如何确保消息的可靠传输…...
生信初学者教程(二十二):Boruta+RF筛选候选标记物
文章目录 介绍加载R包导入数据准备数据机器学习特征筛选数据分割基础模型Boruta特征筛选调参最终分类模型测试集验证标记基因输出结果总结介绍 采用了Boruta结合 RF(Random Forest) 的方法,对差异基因(参考 @sec-different-limma) 进行了特征筛选。通过这种方法,能够从大…...
JVM Class类文件结构
国庆节快乐 2024年10月2日17:49:22 目录 前言 magic 数 文件版本 使用JClassLib观察class文件 一般信息 接口 常量池 字段 方法 常量池计数器 常量池 类型 CONSTANT_Methodref_info CONSTANT_Class_info 类型结构总表 访问标志 类索引, …...
解决 GitHub 文件大小限制的问题
要解决 GitHub 文件大小限制的问题,可以使用 Git Large File Storage (Git LFS)。以下是设置步骤: 安装 Git LFS: 对于 macOS:brew install git-lfs对于 Windows:从 Git LFS官网 下载并安装。 初始化 Git LFSÿ…...
wordpress源码资源站整站打包32GB数据,含6.7W条资源数据
源码太大了,足足32gb,先分享给大家。新手建立资源站,直接用这个代码部署一下,数据就够用了。辅助简单做下seo,一个新站就OK了。 温馨提示:必须按照顺序安装 代码下载...
金融领域的人工智能——Palmyra-Fin 如何重新定义市场分析
引言 DigiOps与人工智能 正在改变全球各行各业,并带来新的创新和效率水平。人工智能已成为金融领域的强大工具,为市场分析、风险管理和决策带来了新方法。金融市场以复杂性和快速变化而闻名,人工智能处理大量数据并提供清晰、可操作的见解的…...
STL--string类
我们从这篇文章之后就正式开始学习STL的string,字面看起来是不是像C语言里面的字符串之类的处理方法,是的,C里面也是对字符串的一些处理函数,但是C有很多这样的函数,给大家推荐一个网站 ,这个网站是C的官网…...
iptables 的NDAT报错bash: 9000: command not forward
外网主机设置: iptables -t nat -A PREROUTING -d 192.168.3.51 -p tcp --dport 9000 -j DNAT --to-destination 192.168.3.61:22 本地shell连接: PS C:> ssh root192.168.3.51 9000 显示如下操作: PS C:> ssh root192.168.3.51 9000…...
快速了解:MySQL InnoDB和MyISAM的区别
目录 一、序言二、InnoDB和MyISAM对比1、InnoDB特性支持如下2、MyISAM特性支持如下 三、两者核心区别1、事务支持2、锁机制3、索引结构4、缓存机制5、故障恢复6、使用场景 一、序言 在MySQL 8.0中,InnoDB是默认的存储引擎。除了InnoDB,MySQL还支持其它的…...
TI DSP TMS320F280025 Note14:模数转换器ADC原理分析与应用
TMS320F280025 模数转换器ADC原理分析与应用 ` 文章目录 TMS320F280025 模数转换器ADC原理分析与应用逐次比较型ADC和双积分型ADC工作原理逐次比较型 ADC双积分型 ADC280025ADCADC原理分析ADC时钟SOCSOC内部原理ADC触发方式ADC采集(采样和保持)窗口通道寄生电容基准电压发生器模…...
【C++前缀和】2845. 统计趣味子数组的数目|2073
本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode 2845. 统计趣味子数组的数目 难度分:2073 给你一个下标从 0 开始的整数数组 nums ,以及整数 modulo 和整数 k 。 请你找出并统计数组…...
C++入门基础 (超详解)
文章目录 前言1. C关键字2. C的第一个程序3. 命名空间3.1 namespace的定义3.2 命名空间的嵌套3.3 命名空间使用3.4 查找优先级总结 4. C输入和输出4.1 标准输入输出 (iostream库)4.2 文件输入输出 (fstream库)4.3 字符串流 (sstream库)4.4 C格式化输出4.5 std::endl和\n的区别 …...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
