是否有可能在单目 ORB-SLAM2 中获得距离缩放?
Is it possible to obtain distance scaling in Monocular ORB-SLAM2?
我正在尝试使用单目 ORB SLAM2 找到从相机到 ORB 特征点的真实世界距离。
我计算了每个ORB特征点的世界坐标与当前关键帧相机位置的世界坐标的欧氏距离。对所有帧重复此过程。所以对于当前帧中的每个ORB点都得到了一个距离。
在Viewer.cc
std::vector<MapPoint*> MP = mpTracker->mCurrentFrame.mvpMapPoints;
cv::Mat CC = mpTracker->mCurrentFrame.GetCameraCenter();
mpFrameDrawer->DrawFrame(MP,CC);
在FrameDrawer.cc
cv::Mat FrameDrawer::DrawFrame(std::vector<MapPoint*> DistMapPt, cv::Mat CameraPt)
{
.
.
.
else if(state==Tracking::OK) //TRACKING
{
mnTracked=0;
mnTrackedVO=0;
const float r = 5;
for(int i=0;i<n;i++)
{
if(vbVO[i] || vbMap[i])
{
cv::Point2f pt1,pt2;
pt1.x=vCurrentKeys[i].pt.x-r;
pt1.y=vCurrentKeys[i].pt.y-r;
pt2.x=vCurrentKeys[i].pt.x+r;
pt2.y=vCurrentKeys[i].pt.y+r;
float MapPointDist;
MapPointDist = sqrt(pow((DistMapPt[i]->GetWorldPos().at<float>(0)-CameraPt.at<float>(0)),2)+pow((DistMapPt[i]->GetWorldPos().at<float>(1)-CameraPt.at<float>(1)),2)+pow((DistMapPt[i]->GetWorldPos().at<float>(2)-CameraPt.at<float>(2)),2));
}
.
.
.
}
}
}
然而这个计算的距离既不等于也不能缩放到实际距离。同样的方法在RGBD ORB SLAM2中给出了比较准确的距离
在单目ORB SLAM中有没有缩放距离的方法?
请看这个post: "ORB-SLAM2 arbitrarily define scale at initialization, as the median scene depth. In practice, scale is different every time you initialize orb-slam2." 在单目 SLAM 中不可能获得正确的比例,因为你无法从图像序列估计真实世界的深度。您需要其他数据源,例如第二个摄像头、IMU、激光雷达、机器人里程计或具有已知真实世界尺寸的标记。在 RGBD 情况下,深度从深度传感器中获知,因此坐标会正确缩放。
我正在尝试使用单目 ORB SLAM2 找到从相机到 ORB 特征点的真实世界距离。
我计算了每个ORB特征点的世界坐标与当前关键帧相机位置的世界坐标的欧氏距离。对所有帧重复此过程。所以对于当前帧中的每个ORB点都得到了一个距离。
在Viewer.cc
std::vector<MapPoint*> MP = mpTracker->mCurrentFrame.mvpMapPoints;
cv::Mat CC = mpTracker->mCurrentFrame.GetCameraCenter();
mpFrameDrawer->DrawFrame(MP,CC);
在FrameDrawer.cc
cv::Mat FrameDrawer::DrawFrame(std::vector<MapPoint*> DistMapPt, cv::Mat CameraPt)
{
.
.
.
else if(state==Tracking::OK) //TRACKING
{
mnTracked=0;
mnTrackedVO=0;
const float r = 5;
for(int i=0;i<n;i++)
{
if(vbVO[i] || vbMap[i])
{
cv::Point2f pt1,pt2;
pt1.x=vCurrentKeys[i].pt.x-r;
pt1.y=vCurrentKeys[i].pt.y-r;
pt2.x=vCurrentKeys[i].pt.x+r;
pt2.y=vCurrentKeys[i].pt.y+r;
float MapPointDist;
MapPointDist = sqrt(pow((DistMapPt[i]->GetWorldPos().at<float>(0)-CameraPt.at<float>(0)),2)+pow((DistMapPt[i]->GetWorldPos().at<float>(1)-CameraPt.at<float>(1)),2)+pow((DistMapPt[i]->GetWorldPos().at<float>(2)-CameraPt.at<float>(2)),2));
}
.
.
.
}
}
}
然而这个计算的距离既不等于也不能缩放到实际距离。同样的方法在RGBD ORB SLAM2中给出了比较准确的距离
在单目ORB SLAM中有没有缩放距离的方法?
请看这个post: "ORB-SLAM2 arbitrarily define scale at initialization, as the median scene depth. In practice, scale is different every time you initialize orb-slam2." 在单目 SLAM 中不可能获得正确的比例,因为你无法从图像序列估计真实世界的深度。您需要其他数据源,例如第二个摄像头、IMU、激光雷达、机器人里程计或具有已知真实世界尺寸的标记。在 RGBD 情况下,深度从深度传感器中获知,因此坐标会正确缩放。