安城安
电气工程与软件工程的双学位学士,电气工程硕士,拥有在众多知名企业和实验室的工作经历,如清华大学计算机系智能技术与系统国家重点实验室等。技术有着深厚的兴趣,积极参与各类社会活动,担任多个组织的要职。个人网站anchengan.top
展开
-
手把手带你死磕ORBSLAM3源代码(六十六) LocalMapping.cc MapPointCulling
初始化迭代器这行代码初始化了一个指向列表开头的迭代器lit。是一个包含最近添加的地图点的列表。设置观察次数阈值根据变量的值(可能表示是否使用单目相机),设置观察次数阈值nThObs。单目相机时,至少需要2次观察;非单目(如立体或RGB-D)时,至少需要3次观察。遍历地图点列表使用while循环遍历列表中的每个地图点。检查并处理地图点如果地图点pMP已经被标记为不良(返回true),则直接从列表中删除它。如果地图点的发现比率()小于0.25,则将其标记为不良并从列表中删除。原创 2024-01-31 09:33:04 · 307 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(六十四) LocalMapping.cc LocalMapping Run
mbFinished被设置为false,表示局部映射过程尚未完成。方法进入一个无限循环,这是因为在视觉SLAM中,局部映射是一个持续进行的过程,需要不断地处理新的关键帧和地图点。通过调用方法,局部映射告诉追踪器(Tracker)它目前正在忙,不应该接受新的关键帧。这是为了确保局部映射可以专注于处理当前队列中的关键帧,而不被新的输入打断。接下来,方法检查是否有新的关键帧在队列中等待处理,这是通过调用方法完成的。如果有新的关键帧并且IMU数据没有问题(mbBadImu为false),则开始处理这些关键帧。原创 2024-01-30 10:12:39 · 194 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(六十三) LocalMapping.cc LocalMapping
类主要负责处理局部地图的构建和优化。它接收来自相机的图像数据,提取特征点,并与先前帧的特征点进行匹配,以估计相机的运动并更新地图。的构造函数()接收多个参数,包括系统指针(mpSystem),地图集指针(mpAtlas),以及一些标志位和初始值。这些参数用于配置局部映射过程。和SetTracker方法用于设置和Tracking对象,这两个对象分别用于处理回环检测和相机追踪。在构造函数中,你可以看到很多成员变量被初始化。这些变量在后续的局部映射过程中会被使用。例如,原创 2024-01-30 10:07:54 · 79 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(六十二) Atlas.cc GetAtlasKeyframes
以下是对每个函数的详细解释:pKFDB)功能:设置Atlas对象的关键帧数据库。pKFDB是一个指向的指针。实现:将成员变量设置为传入的pKFDB。功能:获取Atlas对象的关键帧数据库。返回值:返回一个指向的指针。实现:直接返回成员变量。pORBVoc)功能:设置Atlas对象的ORB词汇表。pORBVoc是一个指向的指针。实现:将成员变量设置为传入的pORBVoc。功能:获取Atlas对象的ORB词汇表。返回值:返回一个指向的指针。实现:直接返回成员变量。原创 2024-01-29 09:47:21 · 167 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(六十一) Atlas.cc PreSave PostLoad
PreSave()功能:在保存地图数据之前进行预处理。细节首先,它检查当前地图是否存在,以及地图集合(mspMaps)是否为空。如果条件满足并且小于当前地图的最大关键帧ID,则更新为当前地图的最大关键帧ID加1。这可能是为了确保下一个初始化的关键帧ID不会与现有的冲突。接下来,它定义了一个比较函数对象,用于按地图ID对地图进行排序。它将mspMaps中的所有地图复制到中,并对进行排序。然后,它创建一个的集合(spCams),该集合包含mvpCameras中的所有相机。对于。原创 2024-01-29 09:43:51 · 56 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(六十) Atlas.cc GetAllMaps
返回Atlas中所有地图的列表。在返回之前,该方法会根据地图的ID对地图进行排序。: 返回Atlas中地图的数量。clearMap(): 清除当前地图中的所有数据。注意,这个方法只清除当前地图的数据,而不影响Atlas中的其他地图。: 清除Atlas中的所有地图。这个方法会删除所有地图对象并清空地图集合。此外,它还会将当前地图设置为NULL并重置最后一个初始化关键帧的ID。需要注意的是,被注释掉的代码块表明原先的实现可能还包括了删除每个地图对象的操作,但在当前版本中这一操作被移除了。: 返回当前地图。原创 2024-01-25 10:22:24 · 144 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十九) Atlas.cc AddCamera
设置查看器对象。这可能是一个用于可视化地图的对象。: 向关键帧所属的地图添加关键帧。注意,这个方法并没有直接将关键帧添加到Atlas,而是将关键帧添加到了关键帧自己的地图中。: 向地图点所属的地图添加地图点。和方法类似,这个方法也没有直接将地图点添加到Atlas。: 向Atlas添加相机。在添加之前,该方法会检查相机是否已经存在于Atlas中。如果存在,返回已经存在的相机对象;否则,将新相机添加到Atlas并返回新相机对象。: 返回Atlas中所有相机的列表。: 设置参考地图点。原创 2024-01-25 10:17:12 · 145 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十八) Atlas.cc CreateNewMap ChangeMap GetLastInitKFid
构造函数: 默认构造函数。它将初始化为NULL。: 带参数的构造函数。除了将初始化为NULL外,它还初始化为传入的initKFid,并调用来创建一个新的地图。析构函数: 析构函数遍历mspMaps中的所有地图,并删除它们。注意,这里有一个迭代器和删除元素时的常见错误。在删除元素后,迭代器已经失效,但代码试图继续使用它。正确的做法是使用返回的迭代器或从容器中获取新的迭代器。其他成员函数: 创建一个新的地图,并将其设置为当前地图。如果当前地图存在,则将其存储,并更新。新地图被添加到mspMaps集合中。原创 2024-01-24 10:08:59 · 143 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十七) MapDrawer.cc DrawCurrentCamera SetCurrentCameraPose GetCurrentOpenGLCameraMa
这个函数用于绘制当前相机的3D表示。它接收一个类型的参数Twc,这个矩阵表示从世界坐标系到相机坐标系的变换。函数内部使用OpenGL的固定功能管道进行绘制。它首先保存当前的模型视图矩阵,然后应用传入的变换矩阵,接着设置线宽和颜色,最后使用线段绘制出一个表示相机的简单几何体。绘制完成后,它恢复之前保存的模型视图矩阵。这个函数用于设置当前相机的姿态。它接收一个类型的参数Tcw,这个矩阵表示从相机坐标系到世界坐标系的变换。函数内部使用互斥锁来保证线程安全,并将传入的变换矩阵求逆后存储在类的成员变量。原创 2024-01-24 10:04:12 · 364 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十六) MapDrawer.cc DrawKeyFrames
设置变量:首先,代码设置了一些用于绘制关键帧的变量,如宽度(w)、高度(h)和深度(z),这些变量是基于当前的关键帧大小(mKeyFrameSize)来计算的。获取当前地图和关键帧:接着,代码从一个地图集(mpAtlas)中获取当前的地图(pActiveMap),并从该地图中获取所有的关键帧(vpKFs)。绘制关键帧:如果变量bDrawKF为true获取关键帧的姿态(以逆矩阵的形式)并将其用于OpenGL的变换矩阵。根据关键帧是否有父关键帧来设置线宽和颜色。原创 2024-01-23 15:42:31 · 187 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十五) MapDrawer.cc DrawMapPoints
这段代码是C++写的,看起来是一个类MapDrawer的成员函数,它负责在一个地图绘制框架中绘制地图点。这个框架可能是一个用于机器人导航、增强现实或类似应用的视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)系统。pActiveMapglVertex3fglVertex3f在这个函数中,OpenGL的立即模式(Immediate Mode)被用于绘制点,这意味着每次调用glVertex3f时,都会直接向GPU发送顶点数据。原创 2024-01-23 10:28:15 · 160 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十四) MapDrawer.cc ParseViewerParamFile
这段代码是MapDrawer类中的一个成员函数,名为。这个函数的目的是从一个OpenCV的对象中解析配置参数,并将这些参数赋值给类的成员变量。:一个OpenCV的对象的引用,它包含了要解析的配置文件。函数逻辑:定义一个布尔变量,初始化为false。这个变量用于跟踪是否有任何参数缺失或格式不正确。对于每个需要解析的参数(如PointSizeCameraSize),执行以下步骤:a. 使用fSettings对象的operator[]来访问特定的参数节点。原创 2024-01-22 09:26:25 · 138 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十三) MapDrawer.cc MapDrawer newParameterLoader
这段代码是MapDrawer类的一个构造函数,以及一个名为的成员函数。下面我将逐一解释它们的功能:MapDrawer 构造函数MapDrawer一个指向Atlas的指针pAtlas,它通过初始化列表用于初始化成员变量mpAtlas。一个字符串,表示设置文件的路径。一个指向Settings的指针settings,它可能包含一些配置参数。检查settings指针是否为非空如果settings非空,则调用函数来加载参数。如果settings为空,则尝试从指定的路径中加载设置文件,并使用。原创 2024-01-22 09:23:22 · 132 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十二) FrameDrawer.cc Update
这段代码是类中的Update方法,其主要作用是从Tracking对象中获取最新的跟踪信息,并更新对象内部的状态和数据。线程安全使用确保在多线程环境下对数据的访问是安全的,防止数据竞争。获取并复制图像数据从跟踪器复制灰度图像到内部变量mIm。更新关键点和深度信息更新当前帧的关键点和深度信息mThDepth。处理双目视觉(如果启用)如果both为真,表示系统可能正在使用双目视觉。因此,它会从跟踪器中获取右侧相机的关键点和图像,并计算总的关键点数量N。初始化向量根据关键点数量初始化两个布尔向量。原创 2024-01-19 10:07:35 · 53 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十一) FrameDrawer.cc DrawTextInfo
这段代码是类的一个成员函数,名为。这个函数的目的是在给定的图像()上绘制文本信息,并将结果存储在另一个图像()中。这个函数根据系统当前的状态(int nState)来生成不同的文本信息。创建字符串流:使用对象来根据系统状态构建要显示的文本信息。计算文本大小:使用函数来计算文本的大小,以便在图像上正确地放置文本。创建输出图像:创建一个新的图像imText,其高度比输入图像im高出文本高度加上一些额外空间(10个像素),宽度与输入图像相同。复制输入图像:将输入图像im复制到输出图像imText的上半部分。原创 2024-01-19 09:58:00 · 49 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(五十) FrameDrawer.cc DrawRightFrame
这段代码是类中的一个成员函数,它负责在给定的右图像帧上绘制关键点和相关信息。变量声明和准备函数开始时声明了多个变量,包括用于绘图的OpenCV矩阵im、关键点向量vIniKeys、匹配向量vMatches、布尔向量vbVO和vbMap以及跟踪状态state。使用互斥锁mMutex保护数据访问,确保在多线程环境中数据的同步。状态和数据拷贝根据成员变量mState设置state,并处理特殊情况,如果系统未准备好,则将其设置为无图像状态。拷贝右图像到im。原创 2024-01-19 09:37:19 · 40 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十九) FrameDrawer.cc DrawFrame
这段代码的主要部分。变量声明使用OpenCV库(表示为)声明了多个变量,包括图像(im)、关键点(vIniKeys等)、匹配(vMatches)、跟踪点(vTracks)等。state表示跟踪的状态。FrameMapPoint可能是自定义的数据结构或类,用于表示帧和地图点。还声明了一些颜色变量()用于可视化。互斥锁和状态检查使用来确保在多线程环境中安全地访问和复制数据。根据mState(可能是类的成员变量)的值,复制相关的数据到局部变量中。这看起来像是在准备进行某种处理或计算。图像处理。原创 2024-01-19 09:30:24 · 141 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十八) Tracking.cc ChangeCalibration UpdateFrameIMU
这个方法返回本地地图点的指针向量。这些地图点可能用于视觉追踪或优化。: 此方法用于更改相机的校准参数。它从一个设置文件中读取新的相机参数(焦距、主点、畸变系数等),并更新类的内部状态。这对于在运行时动态更改相机设置或适应不同的相机模型很有用。: 此方法似乎用于通知跟踪器是否只进行跟踪(而不是同时进行地图构建)。这在某些情况下可能是有用的,例如当相机移动太快或场景太动态以至于无法可靠地构建地图时。: 这个方法是更新与IMU数据相关的帧信息的核心。它采用一个比例因子s。原创 2024-01-19 09:23:56 · 40 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十七) Tracking.cc ResetActiveMap
这段代码是类中的另一个成员函数,它的目的是重置当前活动的地图及其相关组件。以下是对代码的详细解释:函数定义:打印消息并停止视图器:获取当前地图:重置本地映射器:重置循环关闭:清除BoW数据库:清除地图:重置状态和ID:处理丢失的帧:重置其他变量:释放视图器:打印结束消息:原创 2024-01-18 09:31:12 · 44 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十六) Tracking.cc Reset
这段代码是一个名为的函数,它属于Tracking类。该函数的主要目的是重置跟踪系统的某些部分或全部组件。函数定义: 这是一个没有返回值的成员函数(因为其返回类型为void),并接受一个布尔参数bLocMap。打印消息使用函数打印一条消息,表示系统正在重置。停止并等待视图器如果mpViewer(可能是一个指向视图器对象的指针)不为空,则请求它停止,并使用一个循环等待,直到它确实停止。重置本地映射如果bLocMap为false,则打印消息,请求重置本地映射器,并再次打印消息表示已完成。重置循环关闭。原创 2024-01-18 09:26:42 · 47 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十五) Tracking.cc Relocalization
这部分代码主要是用于跟踪丢失时能够重定向跟踪。原创 2024-01-16 09:41:25 · 122 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十四) Tracking.cc UpdateLocalKeyFrames
这部分代码主要是处理更新了关键帧相关的内容。原创 2024-01-16 09:32:21 · 207 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十三)Tracking.cc UpdateLocalMap UpdateLocalPoints
这段代码是Tracking和。它们的目的是在视觉SLAM系统中更新本地地图信息,特别是地图点和关键帧。可视化更新:通过调用,它设置了用于可视化的参考地图点。mpAtlas可能是一个包含整个地图信息的对象,而是当前考虑的局部地图点集合。更新操作:它调用了两个更新函数,和,分别用于更新本地的关键帧和地图点。不过,的具体实现在这段代码中并没有给出。这个函数负责更新本地地图点集合。清空本地地图点:首先,它清空了,准备填充新的地图点。遍历本地关键帧:然后,它反向遍历(这可能是一个包含最近或最相关关键帧的列表)。原创 2024-01-15 10:12:08 · 46 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十二)Tracking.cc SearchLocalPoints
这段代码是一个名为的函数,它似乎是一个视觉SLAM(Simultaneous Localization and Mapping)系统的一部分,特别是在跟踪和地图构建方面。视觉SLAM通常用于机器人和自动驾驶车辆等领域,以通过摄像头数据来估计自身的位置和周围环境。遍历当前帧的地图点首先,代码遍历(当前帧中可见的地图点列表)。对于每个地图点(MapPoint),它检查点是否有效(非空)且未标记为“bad”(可能是因为在之前的处理中被确定为不可靠或错误的点)。原创 2024-01-15 09:57:31 · 151 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十一)Tracking.cc NeedNewKeyFrame
这段代码是判断是否需要插入新的关键帧(KeyFrame)的逻辑,它基于一系列的条件和阈值。关键帧在视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)中是一个重要的概念,它们代表相机在环境中的关键位置,通常包含丰富的视觉信息,用于估计相机的位姿和构建环境地图。在视觉SLAM中,关键帧的插入是一个重要的决策过程,它直接影响到地图的精度和系统的性能。通常,这些条件会以逻辑“或”的方式组合起来,只要满足其中一个条件,就可能会触发新的关键帧的插入。原创 2024-01-12 14:10:28 · 115 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(四十)Tracking.cc TrackLocalMap
这段代码是一个名为的函数,它是Tracking类的一部分。从函数的名称和代码内容可以推测,它的主要功能是处理相机追踪与本地地图之间的关系。具体来说,这个函数尝试通过优化相机的位姿来匹配本地地图中的点,并根据匹配结果决定追踪是否成功。更新和搜索:增加追踪的帧数。:更新本地地图。:在本地地图中搜索点。原创 2024-01-12 11:13:29 · 64 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十九)Tracking.cc TrackWithMotionModel
这段代码是一个名为的函数,它似乎是一个视觉跟踪系统中的关键部分,特别是当涉及到基于运动模型的跟踪时。初始化创建一个ORBmatcher对象,用于特征点匹配。调用方法来更新最后一帧的姿态,并可能创建一些用于视觉里程计的点。IMU 预测如果IMU(惯性测量单元)已经初始化,并且当前帧的ID超过了需要重新设置IMU的帧ID,则使用IMU来预测状态。如果满足这些条件,函数会立即返回true。否则,使用某种运动模型(可能是基于上一帧的速度)来设置当前帧的姿态。准备当前帧将当前帧的所有地图点设置为。原创 2024-01-11 14:10:03 · 192 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十八)Tracking.cc UpdateLastFrame
这段代码是一个名为的函数,它似乎是在某种视觉跟踪或视觉里程计系统中更新最后一帧数据的方法。具体来说,它在计算机视觉或机器人导航中可能是用于处理来自相机或其他传感器的数据,以估计相机的姿态和位置。更新姿态使用(可能是指向参考关键帧的指针)来获取参考关键帧的姿态。使用来获取相对于最后一个帧的姿态变换(可能是从某种形式的位姿图中)。通过将相对变换应用于参考关键帧的姿态来更新最后一帧的姿态。条件检查。原创 2024-01-11 10:40:49 · 162 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十七)Tracking.cc CheckReplacedInLastFrame TrackReferenceKeyFrame
这段代码是Tracking类中的一个方法,名为。从方法的名称和代码内容来看,它的目的是检查上一帧中地图点(MapPoint)是否被替换,并相应地更新地图点的引用。遍历上一帧中的所有地图点i++)这行代码遍历上一帧(mLastFrame)中的所有地图点。表示上一帧中地图点的数量,而则是访问第i个地图点的指针。检查地图点是否存在if(pMP)首先,代码获取上一帧中第i个地图点的指针,并将其存储在pMP中。然后,它检查这个指针是否为非空(即地图点是否存在)。检查地图点是否被替换。原创 2024-01-09 09:33:43 · 495 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十六)Tracking.cc CreateMapInAtlas
这段代码是在某个视觉追踪或SLAM(同时定位与地图构建)系统中创建一个新的地图或地图集的一部分。具体来说,它属于Tracking类中的方法。我会逐步解释代码的每个部分。设置地图和帧信息: 设置最后初始化帧的ID为当前帧的ID。: 在地图集(Atlas)中创建一个新的地图。接下来,代码检查传感器类型(IMU与立体、单目或RGBD相机的组合),并据此设置惯性传感器。初始化状态和其他变量: 可能是用于标记系统是否已初始化的布尔变量。: 设置初始帧ID为当前帧的下一帧。: 设置系统状态为“尚无图像”。原创 2024-01-09 09:14:54 · 883 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十五)Tracking.cc CreateInitialMapMonocular
函数是在单目视觉SLAM系统中用于创建初始地图的方法。创建关键帧(KeyFrames)使用初始帧()和当前帧()创建两个关键帧对象。如果系统使用的是IMU与单目相机的组合,则初始关键帧的IMU预积分数据被设置为空。为这两个关键帧计算词袋模型(Bag of Words,BoW)描述子,这有助于后续的图像检索和回环检测。将关键帧添加到地图中将这两个关键帧添加到当前活动的地图中。原创 2024-01-08 10:39:59 · 1163 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十四)Tracking.cc MonocularInitialization编辑
这段代码是一个名为的函数,它属于Tracking类。从函数名称和代码内容来看,这个函数主要用于单目视觉跟踪的初始化过程。以下是代码的详细解读:首先,函数检查一个名为的布尔变量,以确定是否已准备好进行初始化。如果为false检查当前帧的关键点数量是否大于100。如果是,则进行初始化:将复制为初始帧和上一帧mLastFrame。调整的大小以匹配当前帧的未匹配关键点,并将其初始化为这些关键点的位置。如果传感器类型为IMU_MONOCULAR,则创建一个新的预积分IMU对象。将设置为true。原创 2024-01-08 10:02:36 · 1417 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十三)Tracking.cc StereoInitialization介绍
这段代码似乎来自一个用于立体视觉或RGB-D SLAM(Simultaneous Localization and Mapping)的类Tracking的成员函数。SLAM是一种用于估计机器人或相机在未知环境中的位置和方向,同时构建环境地图的技术。初始化检查:首先检查当前帧的特征点数量是否大于500,以及传感器类型是否为IMU_STEREO或IMU_RGBD。如果条件不满足,函数可能会提前返回。IMU预积分检查:检查当前帧和最后一帧的IMU预积分数据是否存在。如果不存在,输出错误信息并返回。原创 2024-01-05 11:22:15 · 911 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十二)Tracking.cc Tracking::Track介绍
这部分代码比较长,我来分段死磕~步进控制while(!如果系统处于步进模式(为true),则程序会等待直到mbStep变为true。在等待期间,它会每500微秒检查一次mbStep的状态,并在控制台输出一条消息。之后,它将mbStep重置为false。这可能是为了控制程序的执行步骤,允许用户在每一步之间进行交互或检查。2.IMU状态检查return;如果本地映射器(可能是处理视觉数据的组件)设置了“坏IMU”标志,系统会重置当前激活的地图,并退出当前函数。原创 2024-01-05 11:17:43 · 827 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十一)Tracking.cc PredictStateIMU介绍
这段代码是函数,它是VIO(视觉-惯性里程计)中的一个关键函数,用于基于IMU(惯性测量单元)数据预测当前帧的状态。函数定义定义了一个名为的成员函数,该函数属于Tracking类,并返回一个布尔值(true或false),表示预测是否成功。检查前一帧是否存在首先,函数检查当前帧()是否有前一帧(如果没有前一帧,则打印一条消息并返回false,表示无法进行预测。基于地图更新的预测如果地图已更新(为true)且存在上一个关键帧(从上一个关键帧获取IMU的位置(twb1)、旋转(Rwb1)和速度(Vwb1。原创 2024-01-04 11:11:26 · 765 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(三十)Tracking.cc PreintegrateIMU介绍
是Tracking类中的一个成员函数,用于对从IMU(Inertial Measurement Unit,惯性测量单元)获取的数据进行预积分处理。预积分是视觉-惯性里程计(VIO)中的一个关键技术,它允许将多个IMU测量值整合到一个单一的预积分量中,从而在后续的优化过程中提高计算效率。检查前一帧是否存在如果当前帧没有前一帧(为空),则输出警告信息,并将当前帧标记为已积分状态,然后返回。这是因为预积分需要知道前一帧的信息。初始化IMU数据队列清空容器,并为其预留大小的空间。原创 2024-01-04 10:55:25 · 937 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(二十九)Tracking.cc GrabImageMonocular介绍
是Tracking类中的另一个成员函数,用于从单目相机(Monocular Camera)捕获的图像中提取信息,创建一个新的帧,并对其进行跟踪。单目相机只使用一个摄像头来捕获图像,因此它无法直接获取深度信息,但可以通过运动估计和三角测量等技术来恢复三维结构。输入参数im:一个彩色或灰度图像,取决于相机配置和之前的处理步骤。timestamp:图像的时间戳,用于同步和时序分析。filename:字符串,可能用于记录或保存当前帧的文件名。图像预处理函数首先将输入的图像存储在成员变量mImGray中。原创 2024-01-04 10:45:07 · 940 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(二十八)Tracking.cc GrabImageRGBD介绍
是Tracking类中的一个成员函数,用于从 RGB 图像和深度图像 (Depth) 中提取信息,创建一个新的帧,并对其进行跟踪。这个函数特别适用于 RGB-D 相机系统,这种系统能够同时捕获彩色图像和每个像素的深度信息。输入参数imRGB:一个彩色图像(通常是3通道BGR或RGB)。imD:与彩色图像对应的深度图像。深度图像的每个像素值表示从相机到场景中该点的距离。timestamp:时间戳,用于同步彩色图像和深度图像。filename:字符串,可能用于记录或保存当前帧的文件名。图像预处理。原创 2024-01-04 10:27:35 · 904 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(二十七)Tracking.cc GrabImageStereo介绍
这段代码是一个名为的函数,它属于一个名为Tracking的类。这个函数的主要目的是从两个输入的图像(左图和右图)中提取特征,创建一个新的帧(Frame),并对该帧进行跟踪。输入参数imRectLeft和:两个输入图像,分别代表立体视觉中的左图和右图。timestamp:时间戳,通常用于同步图像和其他传感器数据。filename:字符串,可能用于保存或记录当前帧的文件名。图像预处理函数首先将左图存储在成员变量mImGray中,并将右图存储在局部变量和成员变量mImRight中。原创 2024-01-04 10:13:04 · 392 阅读 · 0 评论 -
手把手带你死磕ORBSLAM3源代码(二十六)Tracking.cc ParseIMUParamFile介绍
这段代码是一个名为的成员函数,它负责从一个 OpenCV 的对象中解析惯性测量单元(IMU)的相关参数。这些参数对于配置和优化基于 IMU 的视觉跟踪系统至关重要。函数定义是一个成员函数,它属于Tracking类,并接受一个引用参数fSettings,该参数是类型,用于存储从配置文件中读取的数据。变量定义:一个布尔标志,用于指示是否缺少必要的参数。cvTbc:一个 OpenCV 矩阵,用于存储从fSettings中读取的变换矩阵(通常是从相机到 IMU 的变换)。原创 2024-01-04 09:53:04 · 930 阅读 · 0 评论