gpt4 book ai didi

c++ - 是否有可能在单目 ORB-SLAM2 中获得距离缩放?

转载 作者:行者123 更新时间:2023-11-28 04:13:18 31 4
gpt4 key购买 nike

我正在尝试使用单目 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 在初始化时任意定义比例,作为场景深度的中值。实际上,每次初始化 orb-slam2 时比例都是不同的。”在单目 SLAM 中不可能获得正确的尺度,因为你无法从图像序列中估计真实世界的深度。您需要其他数据源,例如第二个摄像头、IMU、激光雷达、机器人里程计或具有已知真实世界尺寸的标记。在 RGBD 情况下,深度是从深度传感器获知的,因此坐标会正确缩放。

关于c++ - 是否有可能在单目 ORB-SLAM2 中获得距离缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57214198/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com