ORB_SLAM3_Fixed/src/ORBmatcher.cc
Line 1085 in b66d0b7
Forgot to change flags to label matched features.
This would cause multiple keypoints in KF1 are matched with same keypoint in KF2; and then all these new map points contain obervations KF1, but KF1 only records one of them.
ORB_SLAM3_Fixed/src/KeyFrame.cc
Lines 427 to 443 in b66d0b7
Here caused unidirectional connection.
When updating connection of KF, all other keyframes sharing co-observed mappoints are collected. Only when the weights (number of co-obervations) are larger than a threshold (15), the connections are recorded bidirectionally; otherwise, the records should be erased.
ORB_SLAM3_Fixed/src/Sim3Solver.cc
Lines 40 to 43 in b66d0b7
The flag was set wrong here.
This would cause the index cannot be found properly later, and then less matched map points are collected.
ORB_SLAM3_Fixed/src/KeyFrameDatabase.cc
Lines 710 to 726 in b66d0b7
The iterator was not updated when the keyframe is bad.
ORB_SLAM3_Fixed/src/KeyFrameDatabase.cc
Lines 658 to 664 in b66d0b7
Only computed scores for keyframes in which the number of common words is larger than a threshold, but the scores of other keyframes may also be used later.
Update: But this would make this part very slow. Thus the codes are changed as following.
ORB_SLAM3_Fixed/src/KeyFrameDatabase.cc
Lines 687 to 691 in 35c2361