raulmur / ORB_SLAM2

Real-Time SLAM for Monocular, Stereo and RGB-D Cameras, with Loop Detection and Relocalization Capabilities
Other
9.3k stars 4.7k forks source link

ORB-SLAM detects new keypoints with delay #919

Open zanazakaryaie opened 4 years ago

zanazakaryaie commented 4 years ago

Hi. I'm using ORB-SLAM on a live USB camera. It works fine but if I move the camera just a little bit fast to explore new regions, it loses the track. I noticed that after initialization If I move the camera a little bit fast, it can't add new keypoint in new frames unless I move the camera very slowly and hold it in the new regions waiting for the ORB-SLAM to detect new keypoints. How can I solve this issue? Let me mention that I have decreased the fast threshold to 5, and increased the maximum number of ORB features to 5000. Any help is highly appreciated

zanazakaryaie commented 4 years ago

It seems that ORB-SLAM only tracks new points if the current frame has enough similarity to the reference keyframe. This similarity is measured by BoW. So, I think when the camera is moved fast, the new frame will be very dissimilar to the reference keyframe and no PnP is set up. Anybody there?

xvzezi commented 4 years ago

Lots of reasons. But for fast motion, motion blurs will lead to bad keypoints match, which could lead to lost. Besides, ORB-SLAM2 provides several tracking model, which can be found in class Tracking

zanazakaryaie commented 4 years ago

Thanks @xvzezi The motion is not that fast to cause motion blur. I have seen Tracking.cc and it seems that ORB-SLAM requires enough translation between frames to add new points. That's why when I rotate the camera even with slow motion, it loses the track because it can't add new map points.

xvzezi commented 4 years ago

I notice that you said Rotate the camera for monocular initialization, translations needed to provide enough parallax. Pure rotation or when rotation dominate the motion, it will fail. because you cannot triangulate points for monocular camera with pure rotation.

pengyuan-zhou commented 4 years ago

I notice that you said Rotate the camera for monocular initialization, translations needed to provide enough parallax. Pure rotation or when rotation dominate the motion, it will fail. because you cannot triangulate points for monocular camera with pure rotation.

Hi @xvzezi , nice point, do Stereo and RGB-D also face same problems with that?

xvzezi commented 3 years ago

I notice that you said Rotate the camera for monocular initialization, translations needed to provide enough parallax. Pure rotation or when rotation dominate the motion, it will fail. because you cannot triangulate points for monocular camera with pure rotation.

Hi @xvzezi , nice point, do Stereo and RGB-D also face same problems with that?

Nope. Triangulation is used for computing depth initialization.

alexistex commented 8 months ago

only use orb_slam3 -> cpp code and very fast , without delay