sunghoon031 / LCSD_SLAM

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

scale problem when set add_DSO_points_KF to false

CanCanZeng opened this issue · comments

Hi @sunghoon031 , thank you for sharing this great project!
I test this project on Euroc and TUM-mono dataset, it runs very well! Then I try to find that if ORB-SLAM can successfully create map with just priori pose, so I always set add_DSO_points_KF to false to disable adding dso points while mapping. But this time it seems that the scale of map points are not correctly set, I mean, the scale of pose graph and map points seem does not match.
Screenshot from 2019-11-18 19-24-03
This is a screen shot when I run TUM-mono-40 dataset, you can see that the scale of pose graph and DSO points are the seem, but the map points created by ORB does not match them, see the red points (created by ORB) and blue points (created by DSO).
It confuses me much, can you help me out?

commented

Hi, thanks a lot for your interest!
It's probably because of the difference in scale drift. Compared to DSO, ORB-SLAM tends to suffer more from the scale drift when the motion is not loopy (e.g., dominant forward or lateral movements for a long time). When I implemented the system, I tried to set the scales of the two systems consistent by
(1) continuously computing the relative scale between the two systems by Sim3 alignment (see our paper section VI-A and B)
(2) using the DSO pose as a prior in ORB-SLAM (taking the relative scale into account),
(3) feeding the DSO map points to ORB-SLAM (taking the relative scale into account).

I remember that disabling one of the three resulted in the scale mismatch between the two modules, and I think this might be the reason..

Thank you for your prompt reply!
After looking up into the code, I find the cause. I was confused that why the scale of map points from ORB and the pose graph of ORB would not match, I think it is impossible, so I look into the MapDrawer.cc and find that the pose of keyframe is not always from ORB, at beginning, the Twc_final is from DSO, only in some cases, like you mentioned, the Twc_final will be from ORB.
I think you are right, the scale of ORB will drift very soon if I do not feed DSO's points to it. But I think maybe you can try to use the distorted image rather than the undistorted image from DSO, since the undistorted image loses much FOV.