自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(297)
  • 收藏
  • 关注

原创 ORB-SLAM3 Eigen::Matrix<double, 2, 3> KannalaBrandt8::projectJac(const Eigen::Vector3d &v3D)

【代码】ORB-SLAM3 Eigen::Matrix<double, 2, 3> KannalaBrandt8::projectJac(const Eigen::Vector3d &v3D)

2026-11-07 18:15:31 4

原创 ORB-SLAM3 Eigen::Matrix<double, 2, 3> Pinhole::projectJac(const Eigen::Vector3d &v3D)

的排列为,其中fx, fy是焦距,cx, cy是主点。projectJac只用到fx, fy,因为主点对 3D 点是常数偏移,求导为零。projectJac把“相机模型”这一环封装干净,边代码只需做两次矩阵乘法即可得到 2×6 的完整雅可比——这是相机模型类抽象的价值。

2026-11-05 18:48:23 19

原创 ORB-SLAM3 class EdgeAccRW : public g2o::BaseBinaryEdge<3,Vector3d,VertexAccBias,VertexAccBias>

【代码】ORB-SLAM3 class EdgeAccRW : public g2o::BaseBinaryEdge<3,Vector3d,VertexAccBias,VertexAccBias>

2026-11-05 18:48:01 16

原创 ORB-SLAM3 class EdgeGyroRW : public g2o::BaseBinaryEdge<3,Vector3d,VertexGyroBias,VertexGyroBias>

【代码】ORB-SLAM3 class EdgeGyroRW : public g2o::BaseBinaryEdge<3,Vector3d,VertexGyroBias,VertexGyroBias>

2026-11-05 18:47:32 15

原创 ORB-SLAM3 class EdgeInertial : public g2o::BaseMultiEdge<9,Vector9d>

【代码】ORB-SLAM3 class EdgeInertial : public g2o::BaseMultiEdge<9,Vector9d>

2026-11-04 11:34:43 18

原创 ORB-SLAM3 void EdgeStereoOnlyPose::linearizeOplus()

【代码】ORB-SLAM3 void EdgeStereoOnlyPose::linearizeOplus()

2026-11-04 11:34:15 21

原创 ORB-SLAM3 void EdgeMonoOnlyPose::linearizeOplus()

【代码】ORB-SLAM3 void EdgeMonoOnlyPose::linearizeOplus()

2026-11-04 11:33:42 19

原创 ORB-SLAM3 float Pinhole::uncertainty2(...) float KannalaBrandt8::uncertainty2(...)

【代码】ORB-SLAM3 float Pinhole::uncertainty2(...) float KannalaBrandt8::uncertainty2(...)

2026-11-03 10:43:59 7

原创 ORB-SLAM3 class EdgeStereoOnlyPose : public g2o::BaseUnaryEdge<3,Eigen::Vector3d,VertexPose>

【代码】ORB-SLAM3 class EdgeStereoOnlyPose : public g2o::BaseUnaryEdge<3,Eigen::Vector3d,VertexPose>

2026-11-03 10:43:37 10

原创 ORB-SLAM3 class EdgeMonoOnlyPose : public g2o::BaseUnaryEdge<2,Eigen::Vector2d,VertexPose>

【代码】ORB-SLAM3 class EdgeMonoOnlyPose : public g2o::BaseUnaryEdge<2,Eigen::Vector2d,VertexPose>

2026-11-03 10:43:17 13

原创 ORB-SLAM3 class VertexAccBias : public g2o::BaseVertex<3,Eigen::Vector3d>

◄──── EdgeAccRW ──────► VertexAccBias(VAk)(上一关键帧,固定)在纯 IMU 短窗口内,零偏与重力的分解本就病态;陀螺零偏只影响旋转预积分,与视觉观测的旋转部分(相机朝向)直接对应,相对容易估计;加计零偏影响速度、位置预积分,且与重力向量在测量方程中线性组合,存在。会让边刷新用零偏一阶修正后的预积分测量(速度、位置部分);,视觉残差对零偏的雅可比明明是零,怎么会有信息传过去?刷新依赖零偏的中间项。把视觉信息传递到零偏估计,这句话怎么理解?是安全的,框架会兜底。

2026-11-02 21:34:19 35

原创 ORB-SLAM3 class VertexGyroBias : public g2o::BaseVertex<3,Eigen::Vector3d>

◄──── EdgeGyroRW ─────► VertexGyroBias(VGk)(上一关键帧,固定)→ updateCache() // 框架自动调用。→ oplusImpl(update) // 子类实现。会让边刷新预计算的中间量(如用零偏修正后的预积分测量)。主要刷新依赖零偏的中间项。这些都由框架统一调度。出现在所有含 IMU 的优化函数中(,遍历所有相连边并触发其。是安全的,框架会兜底。

2026-11-02 15:25:10 10

原创 ORB-SLAM3 class VertexVelocity : public g2o::BaseVertex<3,Eigen::Vector3d>

→ updateCache() // 框架自动调用!→ oplusImpl(update) // 子类实现。把优化后的速度写回 Frame,用于下一帧的 IMU 递推初值和预积分累积。,其默认实现会遍历与该顶点相连的所有边并触发每条边的。等所有含 IMU 的优化函数中。,速度仅通过 IMU 边间接影响位姿。是完全正确的,框架会兜底。

2026-11-02 15:24:51 25

原创 ORB-SLAM3 class VertexPose : public g2o::BaseVertex<6,ImuCamPose>

从 g2o 的视角看,VertexPose的继承关系是:cpp。

2026-10-29 23:29:39 33

原创 ORB-SLAM3 int Optimizer::PoseInertialOptimizationLastKeyFrame(Frame *pFrame, bool bRecInit)

顶点(变量)

2026-10-29 23:29:15 9

原创 ORB-SLAM3 int Optimizer::PoseInertialOptimizationLastFrame(Frame *pFrame, bool bRecInit)

的作用是:以当前帧和上一帧的位姿、速度、陀螺仪零偏、加速度计零偏为优化变量(共 30 维),联合当前帧视觉重投影约束、两帧间 IMU 预积分约束、零偏随机游走约束和上一帧先验约束,执行四轮 Gauss-Newton 优化,每轮根据卡方检验分类内外点并逐轮收紧阈值;优化后写回当前帧 IMU 状态和零偏,恢复 30×30 Hessian,通过 Schur 补边缘化上一帧的 15 维状态,生成当前帧的 15 维先验,删除上一帧旧先验,并返回内点数量。

2026-10-29 23:28:26 8

原创 ORB-SLAM3 vector<size_t> Frame::GetFeaturesInArea(...)

项目公式的作用是:利用预构建的特征网格,快速找出图像上以 (x,y)(x,y) 为中心、半径 rr 的方形区域内,金字塔层级在 [ℓmin⁡,ℓmax⁡][ℓmin​,ℓmax​] 内,且属于指定目(左/右)的所有特征点索引。它通过像素坐标到网格单元格的映射缩小搜索范围,再逐点做方形距离和层级判断,复杂度从全图遍历的 O(N)O(N) 降低到只遍历覆盖单元格内的候选特征点,是 ORB-SLAM3 投影搜索匹配中高频调用的基础加速函数。

2026-10-28 00:04:32 14

原创 ORB-SLAM3 float ORBmatcher::RadiusByViewingCos(const float &viewCos)

这是一个非常短的辅助函数,但它的返回值直接影响投影搜索窗口的大小,进而影响匹配成功率与计算量。

2026-10-28 00:03:59 24

原创 ORB-SLAM3 int ORBmatcher::SearchByProjection(...)

遍历每个局部地图点 P│├─ 不在任何目视野内?跳过├─ 远点且启用过滤?跳过├─ 坏点?跳过│├─ 左目/单相机分支 (mbTrackInView)│ ├─ 预测层级 ℓ│ ├─ 视角半径 r = RadiusByViewingCos(cosθ)│ ├─ 若 th≠1,r *= th│ ├─ 在半径 r·scale[ℓ]、层级 [ℓ-1,ℓ] 内搜索候选│ ├─ 普通双目:检查右目一致性│ ├─ 计算汉明距离,找最佳/次佳│ ├─ 绝对阈值 + 比例测试│ ├─ 建立左目匹配。

2026-10-28 00:03:33 30

原创 ORB-SLAM3 bool Map::GetIniertialBA2()

ORB-SLAM3 的 IMU 初始化分为多个阶段,mbIMU_BA1。的副本,函数结束后锁释放,调用者拿到的是一个一致的值快照。位姿、尺度、零偏都较准,投影精度高,搜索窗口可以很小。分别对应第一阶段和第二阶段惯性 BA 的完成标志。中的搜索窗口大小,进而影响匹配成功率和跟踪鲁棒性。位姿和尺度仍有不确定性,搜索窗口需要放宽。:当前地图是否已完成第二阶段惯性 BA。该函数不修改地图状态,只是读取标志。是否允许地图点融合更激进。前者范围更大,后者更精细。对跟踪匹配策略的影响。,除非地图被重置或新建。

2026-10-27 14:23:23 5

原创 ORB-SLAM3 cv::Point3f KannalaBrandt8::unproject(const cv::Point2f &p2D)

该函数是 Kannala-Brandt 鱼眼相机模型的:输入像素坐标 (u,v)(u,v),输出相机坐标系下 z=1z=1 归一化平面上的三维点。内部用牛顿迭代求解径向畸变多项式的逆。

2026-10-27 14:23:00 11

原创 ORB-SLAM3 Eigen::Vector2d KannalaBrandt8::project(const Eigen::Vector3d &v3D)

【代码】ORB-SLAM3 Eigen::Vector2d KannalaBrandt8::project(const Eigen::Vector3d &v3D)

2026-10-27 14:22:21 36

原创 ORB-SLAM3 bool Frame::isInFrustumChecks(MapPoint *pMP, float viewingCosLimit, bool bRight)

的作用是:针对左目或右目,将地图点变换到目标相机坐标系,检查深度为正、投影在图像内、距离在尺度不变性区间内、视角余弦不小于阈值;若全部通过,预测目标目中的金字塔层级,并把投影坐标、预测层级、视角余弦、相机系距离写入地图点的对应目缓存字段(左目等,右目等),返回true;否则返回false。它是多相机的左右目单目检查核心。

2026-10-26 16:47:38 10

原创 ORB-SLAM3 bool Frame::isInFrustum(MapPoint *pMP, float viewingCosLimit)

该函数用于判断一个地图点是否落在当前帧的视锥内、是否值得参与局部地图匹配,并顺带填充跟踪所需的投影坐标、尺度层级、视角余弦等缓存数据。

2026-10-26 16:47:15 23

原创 ORB-SLAM3 void Tracking::SearchLocalPoints()

该函数是中的关键一步:在局部地图构建完成后,将局部地图点投影到当前帧,搜索 ORB 匹配,为后续位姿优化提供更多观测。

2026-10-26 16:46:49 11

原创 ORB-SLAM3 vector<MapPoint*> KeyFrame::GetMapPointMatches()

该函数用于获取关键帧中每个特征点关联的地图点列表,是局部地图构建、BA、共视图更新、关键帧剔除等模块的基础接口。

2026-10-22 10:45:37 8

原创 ORB-SLAM3 KeyFrame* KeyFrame::GetParent()

可能返回nullptr根关键帧没有父关键帧,返回nullptr。调用者必须先检查:cpp// 使用 pParent返回裸指针,不拥有对象返回的KeyFrame*指向的关键帧由Map管理。锁释放后,对象可能被其他线程标记为坏点或删除。使用前应检查isBad()。与返回语义不同:返回单个裸指针,不复制对象;:返回 set 副本,容器独立。生成树可能被修改关键帧剔除、地图融合、回环校正等操作可能修改父子关系。因此返回的指针只在调用时刻有效,不应长期缓存。父关键帧通常是共视关键帧。

2026-10-22 10:45:16 12

原创 ORB-SLAM3 set<KeyFrame*> KeyFrame::GetChilds()

/ KeyFrame 类的成员函数。// 返回类型 set<KeyFrame*>,表示子关键帧指针集合。// set 是有序、不重复的容器,元素类型为 KeyFrame*。// 函数名 GetChilds,表示获取“子关键帧”。// 对关键帧的连接关系互斥量 mMutexConnections 加锁。// unique_lock 是 RAII 风格:构造时加锁,析构时自动解锁。

2026-10-22 10:44:54 12

原创 ORB-SLAM3 vector<KeyFrame*> KeyFrame::GetBestCovisibilityKeyFrames(const int &N)

/ KeyFrame 类的成员函数。// 返回类型 vector<KeyFrame*>,表示共视权重最高的若干关键帧指针。// 参数 N 按 const 引用传递,表示请求返回的关键帧数量。// 函数名 GetBestCovisibilityKeyFrames,表示获取“最佳共视关键帧”。// 对关键帧的连接关系互斥量 mMutexConnections 加锁。// unique_lock 是 RAII 风格:构造时加锁,析构时自动解锁。

2026-10-21 15:20:37 10

原创 ORB-SLAM3 void Tracking::UpdateLocalMap()

这个函数本身非常短,但它决定了并顺带把“上一轮的局部地图点”交给 Atlas 作为可视化参考点。先做一次轻量的可视化同步;再做真正的局部地图更新。

2026-10-21 11:30:52 7

原创 ORB-SLAM3 void Tracking::UpdateLocalPoints()

该函数是中的第二步:在选出局部关键帧集合之后,收集这些关键帧观测到的地图点,构成,供后续投影搜索和位姿优化使用。但实际实现中需要:跳过空指针;跳过坏点;去重,避免同一地图点被多个关键帧重复加入;给加入的地图点打上本帧标记,供后续流程识别。正是完成这一收集过程。

2026-10-21 11:04:34 10

原创 ORB-SLAM3 void Tracking::UpdateLocalKeyFrames()

的作用是:根据当前帧(或 IMU 稳定时的上一帧)匹配到的地图点,对观测到这些地图点的关键帧进行投票;票数大于零的关键帧构成初始局部关键帧集合,票数最高者设为参考关键帧;再通过最佳共视邻居、生成树父子以及 IMU 时间链进行一层扩展,并用标记避免重复,最终得到规模约 80 的局部关键帧集合,供收集局部地图点、搜索匹配和局部位姿优化使用。用地图点投票找共视关键帧,用共视、生成树和时间链扩展局部地图,用票数最高者作为参考关键帧。

2026-10-20 17:40:29 25

原创 ORB-SLAM3 Atlas::SetReferenceMapPoints() Map::SetReferenceMapPoints()

这两段代码分别来自 ORB-SLAM3 的 类和 类,函数名相同,都是 。它们构成一个“Atlas 层加锁转发 → Map 层加锁保存”的调用链,用于把一组参考地图点设置到当前活动地图中。参考地图点和跟踪和局部建图使用的地图点有关,但是不进入当前地图,只是作为参考,供其他任务使用,如显示等cppunique_lock<mutex> lock(mMutexAtlas);保护 的共享成员,尤其是 。ORB-SLAM3 是多线程系统,常见线程包括:Tracking 跟踪线程;L

2026-10-20 11:43:17 10

原创 ORB-SLAM3 bool Tracking::TrackLocalMap()

是 ORB-SLAM3 跟踪线程中承上启下的关键步骤:在已有初始位姿基础上,利用局部地图进一步优化当前帧位姿;支持纯视觉和 IMU 融合两种优化模式;通过投影搜索增加匹配,提高位姿精度;统计内点数量,更新地图点质量;根据传感器类型、重定位状态和跟踪状态,严格判断跟踪是否成功。用局部地图约束当前帧位姿,用内点数量衡量跟踪质量。

2026-10-19 15:41:41 17

原创 ORB-SLAM3 void MapPoint::IncreaseFound(int n)

这段代码来自 ORB-SLAM3 的MapPoint类。函数mnFoundn。它通常在某次跟踪或匹配中,该地图点被成功匹配到当前帧特征点时被调用。

2026-10-16 15:04:07 12

原创 ORB-SLAM3 void System::ResetActiveMap()

只设置标志,不执行重置非常轻量,不会阻塞调用线程。实际重置由跟踪线程完成因为跟踪线程持有当前帧、上一帧、参考关键帧等状态,必须由它执行清理。线程安全使用保护标志,避免多线程竞争。多地图模式下保留其他地图只影响当前地图,Atlas 中的其他地图不受影响。IMU 模式下需重置 IMU 状态重置当前地图时,IMU 初始化、预积分、零偏等也需要重置。可能触发新地图创建重置后通常会创建一个新的空地图,并设为当前活动地图。的作用是:在互斥锁保护下,将“重置当前活动地图”标志设置为true。

2026-10-16 11:47:33 12

原创 ORB-SLAM3 bool Tracking::Relocalization()

的作用是:当跟踪丢失时,利用当前帧的词袋向量在关键帧数据库中检索候选关键帧;对每个候选进行 BoW 匹配和 MLPnP RANSAC 位姿估计;通过位姿优化和投影搜索逐步增加内点;若最终内点数达到 50,则重定位成功,恢复跟踪。

2026-10-15 11:28:58 11

原创 ORB-SLAM3 void Frame::UpdatePoseMatrices()

见代码知其意,在SetPose() 中被调用。

2026-10-14 16:51:15 13

原创 ORB-SLAM3 GetImuPosition() GetImuRotation() GetImuPose() KeyFrame::GetVelocity()

这四个函数都是 ORB-SLAM3 中KeyFrame类的成员函数,用于获取关键帧的:IMU 在世界坐标系下的位置、旋转、位姿和速度。它们都通过mMutexPose互斥量保护共享数据,保证多线程访问安全。

2026-10-14 16:42:58 10

原创 ORB-SLAM3 Eigen::Vector3f Frame::UnprojectStereoFishEye(const int &i)

这段代码来自 ORB-SLAM3 的Frame类。函数用于将鱼眼双目相机中某个特征点对应的三维点,从相机坐标系变换到世界坐标系。它本身只做了一次坐标变换,真正的反投影计算已经在构造Frame时完成并存储在中。

2026-10-14 15:27:24 16

kalman track 卡尔曼跟踪

基于OPENCV实现的2D kalman track

2026-07-03

cartographer

cartographer

2026-05-15

`2135214r31t24ef

`2135214r31t24ef

2026-05-07

123456y7u6fda

123456y7u6fda

2026-05-07

PSMNET-LINE data

PSMNET-LINE data

2026-05-07

PSMNET-LINE data

PSMNET-LINE data

2026-04-29

WAFT-net-for-test

WAFT-net-for-test

2026-04-29

data for PSMNetLine

data for PSMNetLine

2026-04-28

data for psmnetline

data for psmnetline

2026-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除