长沙网站开发智能,建设银行网站不能打开,深圳品牌营销推广,北京时事新闻#x1f49b;前情提要#x1f49b;
本文是传知代码平台中的相关前沿知识与技术的分享~
接下来我们即将进入一个全新的空间#xff0c;对技术有一个全新的视角~
本文所涉及所有资源均在传知代码平台可获取
以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦#x…前情提要
本文是传知代码平台中的相关前沿知识与技术的分享~
接下来我们即将进入一个全新的空间对技术有一个全新的视角~
本文所涉及所有资源均在传知代码平台可获取
以下的内容一定会让你对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的背后原理就是围绕着每张图片里的 “角” 的定位并在后续的图像中追踪 “角” 与 “角” 之间的相对位置变化从而实现视觉定位。ORBSLAMOriented 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 HumbleRobot 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 无人机绕房间走一圈验证定位结果。 总结
综上我们基本了解了“一项全新的技术啦” ~~
恭喜你的内功又双叒叕得到了提高
感谢你们的阅读
后续还会继续更新欢迎持续关注哟~
如果有错误❌欢迎指正呀
✨如果觉得收获满满可以点点赞支持一下哟~✨
【传知科技 – 了解更多新知识】