ORBSLAMVIO2
2017-02-21 16:56:29 0 举报
登录查看完整内容
ORBSLAMVIO2是一款先进的激光雷达传感器,专为自动驾驶汽车和机器人领域设计。它采用了创新的光学技术和高精度的测量系统,能够实时捕捉周围环境的详细信息,包括物体的位置、形状和距离等。该传感器具有高分辨率和长测距能力,能够在各种复杂的环境中准确识别和跟踪目标。此外,它还具备强大的抗干扰能力和快速响应速度,能够在高速行驶和复杂场景中保持稳定的性能。通过与自动驾驶系统的无缝集成,ORBSLAMVIO2为智能交通和机器人技术带来了革命性的突破,为实现更安全、更高效的未来出行提供了强有力的支持。
作者其他创作
大纲/内容
四叉树算法均匀分布角点ORBextractor::DistributOctTree
vimuData存储IMU
mincommons=0.8*与候选帧具有共同单词的最大单词数(相似度)
LocalMapping::Run()
相互更新mappoints
Tracking::TrackReferenceKeyFrame()当前帧与最近关键帧匹配
生成关键帧Tracking::CreateNewKeyFrame()
存储帧pose信息
遍历这些共视关键帧并找到与其共视的二级关键帧
接收client端的数据
10KF才检测/遍历covisibility graph计算当前帧与共视关键帧的Bow最低得分(最小相似度)
System::GragImageMono()
im转成灰度图
mlploopKeyFrameQueue(数量少)
读取相机类型
监听server段的状态
通过3D-2D方式统一尺度;Initializer::initialize()计算累积误差决定使用homograph或fundamental模型
Tracking::UpdateLocalMap()
Tracking:System::TrackMonoVI()
Tracking::Tracking
Frame::ExtractORB()
读取相机参数/ORB参数
设置图像边界/划分grid/逐grid使用两个FAST阈值提取特征点
Tracking::UpdateLocalKeyFrames()构建共视关键帧
切边保护即计算keypoints绝对位置/质心法计算方向computeOrientation
vpLoopCandidates
ros_server.cc
mlNewKeyFrames(数量多)
逐层:计算特征点ORBextractor::ComputeKeyPointsOctTree(allKeypoints)
初始化Tracking::MonocularInitialization
寻找既不共视又跟当前帧有公共单词的关键帧
观测到该mappoints的关键帧3
KeyFrame::UpdateConnections()/KeyFrame::GetVectorCovisibleKeyFrames()重新构建covisibility graph
System::System
KeyFrameDataBase()::DetectLoopCandidates()在关键帧数据库中找出闭环候选项
建立图像金字塔/逐层分配特征数/尺度/pattern/计算patch里面的v的最大u
筛选mincommons且bow得分大于minscore的关键帧(候选1)/候选1分组根据组评分bestAccScore剔除无组员的相似帧
LocalMapping::CheckNewKeyFrames()检查KeyFrame队列
KeyFrame::UpdateConnection()更新Covisibility Graph
Client
初始化图像金字塔信息
取出关键帧/将特征点转成bow形式/遍历其生成的所有mappoints
Download:位姿、时间戳
Tracking::SetViewer/SetLocalMapper/SetLoopClosing
LocalClosing::Run()
Tracking::Track()
每次读取一组IMU和一张图片
计算image bounds- Frame::ComputeImageBounds(imGray)
ros_client.cc
LocalMapping::MapPointCulling()剔除mappoints
从covisibility graph找到共视关键帧
最小化投影误差优化位姿Optimizer::PoseOptimization()
读入设置文件/ORB词典
LocalMapping::KeyFrameCulling()剔除多余关键帧
逐层:_keypoints和_descriptors存储/对图像进行高斯滤波/计算特征点的32位描述子computeDescriptors() - computeOrbDescriptors()/keypoints恢复到原图的位置
校正特征点未知Frame::UndistortKeyPoints()
焦健浩 2017-02
Closing
LocalMapping::CreateNewMapPoints()生成新mappoints
划分gird分配keypoints加速匹配AssignFeaturesToGrid()
Server
LocalMapping::SearchNeighbors()融合mappoints避免与之前的mappoints有交集或已被其他关键帧找到
Tracking::TrackLocalMap()
Optimizer::LocalBundleAdjustment()和当前关键帧相连的共视关键帧及mappoints做局部BA(加上mappoints的局部地图
LocalMapping::CorrectLoop()将当前帧对应的mappoints换成闭环帧对应的mappoints
Tracking::IMUTrackWithIMU()使用恒速模型与上一帧匹配;ORBmatcher::SearchByProjection()
检测候选帧的连续性
Mapping
Check mode change/Check reset(交互)
获得局部地图与当前帧的匹配/加入当前帧检测的mappointsTracking::SearchLocalPoints()
Tracking
相机位姿跟踪
利用局部地图重新计算IMU bias/mbRelocBiasPrepare = true
Mappint:System::bLocalMapAcceptKF()
LocalMapping::ProcessNewKeyFrame()处理新关键帧;维护Covisibility Graph(共视图)/SpanningTree(扩展树)/Map/计算该帧的词袋表示确定匹配
(mpTracker)Tracking::GrabImageMonoVI
根据有无初始化执行同名函数Frame::Frame(未初始化特征点是有初始化的两倍)
是否生成关键帧:长时间没有插入关键帧 / 局部地图空闲 / 跟踪快丢失 | 地图跟踪的MapPoints比例少
从上一个关键帧开始存储一组imu数据
帧帧联系
获取各层图像金字塔图像ORBextractor::ComputePyramid(image)
时间同步处理
Upload:IMU数据、Image的orb特征点与描述子数据、时间戳
订阅话题/ros::Rate(1000)
局部地图跟踪
逐层:分配scale/resize图像
运动过程中和共视程度比较高的关键帧通过三角化恢复出一些mappoints
清除outlier的mappoints
LocalMapping::DetectLoop()检测闭环
将遍历的一级二级共视关键帧的对应mappoints投影到当前帧中(更新)/对当前帧对应mappoints的属性修改/更新covisibility graph和spanning tree
多个共视关键帧联系
ORBextractor::ORBextractor
时间同步处理-image时间-delaysec=IMU时间-消除传感器响应时间?
im存储image并判断image的延时
Tracking::UpdateLocalPoints()与当前帧相连的mappoints加进来
IncreaseFound/IncreaseVisibie0.25*理论能观测的点
读取rosbag数据
无运动模型或跟踪失败
0 条评论
回复 删除
下一页