⌈ 传知代码 ⌋ Visual SLAM函数
💛前情提要💛
本文是传知代码平台中的相关前沿知识与技术的分享~
接下来我们即将进入一个全新的空间,对技术有一个全新的视角~
本文所涉及所有资源均在传知代码平台可获取
以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!
以下内容干货满满,跟上步伐吧~
📌导航小助手📌
- 💡本章重点
- 🍞一. 概述
- 🍞二. 演示效果
- 🍞三.核心逻辑
- 🍞四.使用方式
- 🫓总结
💡本章重点
- Visual SLAM函数
🍞一. 概述
SLAM代表同步定位和地图构建(Simultaneous Localization and Mapping),这一技术的主要含义在于其能让一个计算机通过外界定位传感器所传回的信息,经过算法函数的整合与过滤后可以得出该计算机所对应的代理机器处在的探测环境中的准确位置。在这其中,Visual SLAM便是一个只用环境图像便能实现精准定位的一个SLAM函数,并且还能是吸纳动态构造并实时更新周遭环境地图,让机器人可以在构建出的3D地图里定位和规划路径。
目前在OpenCV中基于视觉的算法函数主要分成三种————SIFT函数、SURF函数、以及ORB函数。三个对比中,SIFT函数是位置识别能力中效果最精确,所构建出的3D地图模型最能还原真实环境的函数,识别能力是最强的,但由于SIFT函数的图像采集层次较多导致它非常的耗费计算机资源,并且它较为复杂的函数识别原理也不利于新手第一次接触;SURF函数和SIFT函数正好相反,SURF函数的识别原理较为简单直接,让它可以在计算资源较为紧迫的环境下进行定位,但它的定位精度即便在多次调试后往往还是存在较大的偏差,并且还会出现0点浮动的情况,比较不适合定位精度要求较高的场景;ORB函数就相当于SIFT函数和SURF函数的结合体,它既可以在调试后得到不错的定位精度,同时还采用了一个效率较高的函数算法,使其不那么的耗费计算机资源。本文章将会以ORBSLAM为主要介绍对象,带大家了解其背后原理并且在Linux Ubuntu系统下展示其效果。
ORBSLAM的背后原理就是围绕着每张图片里的 “角” 的定位,并在后续的图像中追踪 “角” 与 “角” 之间的相对位置变化,从而实现视觉定位。ORBSLAM(Oriented FAST and Rotated BRIEF – SLAM)其实包含了另外两个子函数FAST和BRIEF,其中的FAST函数(Features from Accelerated Segment Test)主要实现了 “角” 的识别,而BRIEF函数(Binary Robust Independent Elementary Features)在FAST函数识别了各个不同的 “角” 后会对每个 “角” 赋上他们相应且独一无二的描述信息。
在对每个特征点进行对比和追踪后,ORBSLAM 函数可以生成相应的3D环境地图,并且还会给出摄像头在地图中的坐标点位置,实现了同步定位和地图构建。
🍞二. 演示效果
此次演示使用了最新的 ORBSLAM3 函数并在 ROS2 Humble 的计算机环境下运行来展示和调节 ORBSLAM3。
运行效果如下:

ORBSLAM3 启动后会开始扫描每一帧图像并提取如图绿色的特征点。

在空间内移动摄像头,ORBSLAM3 可以根据特征点的位置变化来判断摄像头的移动距离,并通过不断的采样来实现如右图所示的云点定位图。

随着摄像头的不断移动,在形成闭环的部分后 ORBSLAM 函数会对已知的点位进行特征点校验,生成一个更加精准的3D地图。
🍞三.核心逻辑
ORBSLAM 分成了两个函数部分,其中的FAST函数首先会分析一张图像里每个像素的强度值,并将其与预定义的阈值进行比较,判断强度变化是否满足角点的标准。为了加快处理速度,FAST 巧妙地利用选定点周围的特定像素子集进行检查。如果这部分像素中足够多的点的强度值与中心像素存在显著差异,那么该点将被标记为潜在角点。然后,通过包含所有邻域像素的更严格检查来确认角点的存在。对于各个合格角点的判断可以从下图理解:

对于左图中的窗口上方的一个像素点 p ,可以从右图看到其相邻的其他像素点。那么 p 点怎么能算一个足够强度的角点呢?对于 p 点而言它根据自身的颜色和亮度被赋予了一个初始强度值 Ip。用户可以根据自己的需求选择一个合适的阈值 t 。在待测试像素周围选取一个包含 16 个像素的圆形区域(这相当于半径为 3 的 Bresenham 圆形)。现在,如果圆形区域 (16 个像素) 中存在一组 n 个连续像素,它们全都比 Ip + t 亮,或者全都比 Ip - t 暗,那么像素 p 就是角点。为了提高算法速度,首先将圆形中的像素 1、5、9 和 13 的强度与 Ip 进行比较。从上图可以明显看出,这四个像素中的至少三个应该满足阈值标准,这样才能存在关键点。如果四個像素值 (I1, I5, I9, I13) 中至少有三个不在 Ip + t 的上方或下方,则 p 不是关键点(角点)。在这种情况下,将像素 p 作为可能的关键点拒绝。否则,如果至少有三个像素高于或低于 Ip + t,则检查所有 16 个像素,并查看是否有 12 个连续像素符合标准。符合上述的像素点就被FAST函数判定成了合格的角点,后续对图像中的每个像素点都进行同样的操作即可判断出每个角点所在的位置。
FAST函数找到了每个角点的位置后,BRIEF函数会选取图像中的关键点及其周围的小块区域 (局部图像块)。 接着,在局部图像块内,BRIEF 会定义一系列简单的测试,例如比较相邻像素的强度值 (较暗或较亮)。 基于这些测试的结果,BRIEF 生成一个由 0 和 1 组成的二进制字符串,称为描述符。描述符中的每一位对应一个测试,0 代表测试点较暗,1 代表较亮。BRIEF函数的逻辑描述可以简写成如下方程:

巧妙之处在于测试的选取经过精心设计,使得 BRIEF 描述符能够捕获关键点周围的局部图像结构信息。 即使图像发生光照变化、几何形变等轻微扰动,BRIEF 描述符仍能保持相对稳定,展现出良好的鲁棒性。 最后,在进行关键点匹配时,BRIEF 描述符的相似度可以通过汉明距离(Hamming Distance)进行计算。汉明距离计算简单高效,进一步提升了算法的整体效率。
🍞四.使用方式
下面会基于 Ubuntu 22.04 和 ROS2 安装相应的包后用 Tello 的摄像头来运行 ORBSLAM3:
-
首先安装 ORBSLAM3,去到 ORBSLAM3 github 官网下载并构建最新的 ORBSLAM3 函数。
安装 ROS2 Humble(Robot Operating System 2) 和其相应的依赖包,并运行测试程序确保其可以正常运行。 -
把 Tello ROS2 github 的 ROS2 工作空间下载下来并构造其环境。
-
把作为 ROS2 和 ORBSLAM3 的连接包 ORBSLAM3 ROS2 Wrapper 下载下来并构造其环境。
一切准备就绪后先打开 Tello 无人机,并在 Ubuntu 系统里连接上 Tello 的 WiFi。 -
在 Tello ROS2 的工作环境里运行代码:
colcon build --packages-select tello_msg
colcon buildsoure install/setup.bash
ros2 launch src/launch.py
-
进入下载并构建好的 ORBSLAM3 文件夹里,找到 ORBvoc.txt 和在路径
-
/ORB_SLAM3/Examples/Monocular 下的 EuRoC.yaml 文件并复制他们的绝对路径。
-
在 ORBSLAM3 ROS2 Wrapper 的工作环境里运行代码:
colcon build --packages-select orbslam3
colcon buildsource install/setup.bash
ros2 run orbslam3 mono <ORBvoc.txt的绝对路径> <EuRoC.yaml的绝对路径>
上述步骤运行完毕后 ROS2 会调用 ORBSLAM3 里的函数,并对 Tello 提供的摄影图像进行方位和姿态判断,可以拿着 Tello 无人机绕房间走一圈验证定位结果。
🫓总结
综上,我们基本了解了“一项全新的技术啦” 🍭 ~~
恭喜你的内功又双叒叕得到了提高!!!
感谢你们的阅读😆
后续还会继续更新💓,欢迎持续关注📌哟~
💫如果有错误❌,欢迎指正呀💫
✨如果觉得收获满满,可以点点赞👍支持一下哟~✨
【传知科技 – 了解更多新知识】
相关文章:
⌈ 传知代码 ⌋ Visual SLAM函数
💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…...
Vue组件之间的通信
一、通信方式 Props 和 Events:通过父组件传递 props 给子组件,子组件使用 $emit 发送事件到父组件。Event Bus:使用一个中央事件总线来跨组件通信。Vuex:使用 Vuex 进行全局状态管理,以便在任何组件间共享状态。Prov…...
【AI 绘画】模型转换与快速生图(基于diffusers)
AI 绘画- 模型转换与快速生图(基于diffusers) 1. 本章介绍 本次主要展示一下不同框架内文生图模型转换,以及快速生成图片的方法。 SDXL文生图 2. sdxl_lightning基本原理 模型基本原理介绍如下 利用蒸馏方法获取小参数模型。首先&#x…...
甄选范文“论软件设计方法及其应”软考高级论文系统架构设计师论文
论文真题 软件设计(Software Design,SD)根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将问题或事物进行模块化分解,以便更容易解决…...
leetcode线段树(2940. 找到 Alice 和 Bob 可以相遇的建筑)
前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i 栋建筑的高度。 如果一个人在建筑 i ,且存在 i < j 的建筑…...
用于不平衡医疗数据分类的主动SMOTE
一、主动学习如何应用于不平衡数据的处理 首先,主动SMOTE不是像经典的SMOTE那样从训练集中随机选择一个样本作为生成合成样本的轴心点,而是通过不确定性和多样性采样来智能地进行样本选择,这是主动学习的两种技术。 在数据不平衡的情况下&…...
linux文件更新日期与系统日期比较
项目说明: 要获取linux系统中某目录下最新文件的修改时间并与当前系统时间进行比较,可以使用以下步骤: 使用 ls 命令获取最新文件的修改时间。 使用 date 命令获取当前时间。 计算时间差并打印结果。 实例脚本如下: #!/bin/…...
leetCode - - - 哈希表
目录 1.模拟行走机器人(LeetCode 874) 2.数组的度(LeetCode 697) 3.子域名访问次数(LeetCode 811) 4.字母异位词分组(LeetCode 49) 5.小结 1.常见的哈希表实现 2.遍历Map 1.模…...
NGINX自动清理180天之前的日志
需求描述 日志每天会以天为单位产生一个日志,不清理的话会越来越多。这里写一个Lua自定定时清理日志目录下的日志文件。 依赖安装 安装 lfs 模块 yum install luarocks yum install lua-develluarocks install luafilesystem 创建模拟旧文件 创建了一个1月的旧…...
jackson 轻松搞定接口数据脱敏
一、简介 实际的业务开发过程中,我们经常需要对用户的隐私数据进行脱敏处理,所谓脱敏处理其实就是将数据进行混淆隐藏,例如下图,将用户的手机号、地址等数据信息,采用*进行隐藏,以免泄露个人隐私信息。 如…...
Nginx 正则表达式与rewrite
目录 一、正则表达式 二、rewrite 2.1 rewrite简述 2.2 rewrite 跳转 2.3 rewrite 执行顺序 2.4 rewrite 语法格式 三、location 3.1 location 类别 3.2 location常用匹配规则 3.3 location优先级 3.4 示例说明 3.5 匹配规则总结 3.6 三个匹配规则定义 四、实战…...
tekton什么情况下在Dockerfile中需要用copy
kaniko配置如下 如果docker中的workDir跟tekton中的workDir不一致需要copy。也可以通过mv,cp达到类似效果...
第九届世界渲染大赛在哪里提交作品呢?
自第九届世界渲染大赛开放投稿以来,已经过去了10天。在这段时间里,众多CG爱好者已经完成了他们的动画创作。然而,许多参赛者对于如何提交他们的作品仍然感到困惑。接下来,让我们一起了解具体的投稿流程和入口,确保每位…...
fastjson(autoType)反序列化漏洞
1. 温少和他的fastjson 阿里巴巴的 FastJSON,也被称为 Alibaba FastJSON 或阿里巴巴 JSON,是一个高性能的 Java JSON 处理库,用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性能和功能丰富的特点而闻名,并在…...
Java入门基础16:集合框架1(Collection集合体系、List、Set)
集合体系结构 Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。 collection集合体系 Collection的常用方法 package com.itchinajie.d1_collection;import java.util.ArrayList; import java.util.HashSet;/* * 目…...
Qt如何调用接口
在Qt中,你可以使用QNetworkAccessManager类来调用API。以下是一个简单的示例: cpp #include <QCoreApplication> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> int main(int arg…...
Android14之解决编译libaaudio.so报错问题(二百二十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…...
【专题】2024年7月人工智能AI行业报告合集汇总PDF分享(附原数据表)
原文链接:https://tecdat.cn/?p37350 随着人工智能技术的飞速发展,AI已经成为当今时代的重要驱动力。本报告将聚焦于人工智能AI行业的最新动态,涵盖客户服务、体验营销、资产管理以及国产AI大模型应用等多个领域。通过深入研究和分析,我们…...
干货分享|如何使用Stable Diffusion打造会说话的数字人?
数字人已不是什么新鲜名词了。在许多领域,尤其是媒体和娱乐领域,经常可以看到卡通形象的人物或逼真的虚拟主持人。在Stable Diffusion中,我们可以上传一段录制好的音频文件,然后使用SadTalker插件,将音频和图片相结合&…...
OrangePi AIpro学习4 —— 昇腾AI模型推理 C++版
目录 一、ATC模型转换 1.1 模型 1.2 ATC工具 1.3 实操模型转换 1.4 使用ATC工具时的一些关键注意事项 1.5 ATC模型转换命令举例 二、运行昇腾AI模型应用样仓程序 2.1 程序目录 2.2 下载模型和模型转换 2.3 下载图片和编译程序 2.4 解决报错 2.5 运行程序 三、运行…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
