没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
ORB-SLAM代码详细解读
信息科学与工程学院
人工智能与机器人研究所
1
吴博 @泡泡机器人
657390323@qq.com
2016.8.29
代码主要结构
2
2016/8/30
变量命名规则:
“p”表示指针数据类型 "n"表示int类型
“b”表示bool类型 "s"表示set类型
“v”表示vector数据类型 'l'表示list数据类型
“m”表示类成员变量
Tracking.cpp
LocalMapping.cpp
LoopClosing.cpp
Viewer.cpp
3
System入口:
输入图像
GrabImageStero(imRectLeft,imRectRight)
GrabImageRGBD(imRectLeft,imRectRight)
GrabImageMonocular(im)
转为灰度图
Stero: mImGray,imGrayRight
RGBD: mImGray,imDepth
Mono: mImGray
构造Frame
Stero: Frame(mImGray,imGrayRight,mpORBextractorLeft,
mpORBextractorRight)
RGBD: Frame(mImGray,imDepth,mpORBextractorLeft)
Mono(未初始化): Frame(mImGray,mpIniORBextractor)
Mono(已初始化): Frame(mImGray,mpORBextractorLeft)
Track
数据流进入Tracking线程
注:mpIniORBextractor相比mpORBextractorLeft提取的特征点多一倍
2016/8/30
4
Tracking线程:
初始化
SteroInitialization()
相机位姿跟踪
KeyFrame(mCurrentFrame,mpMap,mpKeyFrameDB)
注: mbOnlyTracking默认为false,用户可通过运行界面选择仅跟踪定位模式
2016/8/30
局部地图跟踪
是否生成关键
帧
MonocularInitialization()
mbOnlyTracking(false)
mbOnlyTracking(true):
同时跟踪与定位,不插入关键帧,局部地图不工作
位姿跟踪
TrackWithMotionModel()
TrackReferenceKeyFrame()
Relocalization()
UpdateLocalMap()
SearchLocalPoints():获得局部地图与当前帧的匹配
PoseOptimization():最小化投影误差优化位姿
UpdateLocalKeyFrames()
UpdateLocalPoints()
Frame
生成关键帧
很长时间没有插入关键帧、局部地图空闲、跟踪快要跪
跟踪地图MapPoints的比例比较少
对于双目或RGBD摄像头构造一些MapPoints,为MapPoints添加属性
5
LocalMapping线程:
检查队列
2016/8/30
mlNewKeyFrames
和当前关键帧相连的关键帧及MapPoints做局部BA优化
ProcessNewKeyFrame()
CheckNewKeyFrames()
处理新关键帧
剔除MapPoints
生成MapPoints
MapPoints融合
Local BA
更新MapPoints与KeyFrame的关联
UpdateConnections()
剔除地图中新添加的但质量不好的MapPoints:
a.IncreaseFound / IncreaseVisible < 25%
b.观测到该点的关键帧太少
运动过程中和共视程度比较高的关键帧通过三角化恢复出一些MapPoints
检查当前关键帧与相邻帧(两级相邻)重复的MapPoints
关键帧剔除
其90%以上的MapPoints能被其它共视关键帧(至少3个)观测到的关键帧
剩余26页未读,继续阅读
资源评论
oyjekevin
- 粉丝: 2
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功