VIS4ROB-lab / covins

COVINS-(G) -- A (Generic) Framework for Collaborative Visual-Inertial SLAM and Multi-Agent 3D Mapping
366 stars 63 forks source link

how to find the loop of the same agent #30

Closed XiliangLi closed 6 months ago

XiliangLi commented 1 year ago

Hi! Thanks for your works! I find all loops detected by covins are from different agent when I used the EUROC dataset MH1. So, if I want to get loops from the single agent, what should I do?

patriksc commented 1 year ago

Hi, COVINS should also find loops in the single-agents setup. However, on MH1, there's usually only a single loop closure at the very end of the sequences, connecting beginning and end of the trajectory. This loop is also importation for the global accuracy of the MH1 estimate. Does this loop also not appear when you run COVINS with a single agent on MH1?

Generally, to trigger more loops, you can change the values for place recognition parameters in config_backend.yaml (placerec.xxx). However, pay attention that this can also lead to false positive loop closures if the thresholds are too loose.

XiliangLi commented 1 year ago

Thanks very much! If only having a single loop closure connecting beginning and end in MH1, I guess I know the reason, since I run it with ROS that need skip the front part. But I run 3 agents on MH1, 2, 3, none of these appear loop from the single agent. I also tried tuning placerec.xxx, but I get more loops from different agents.

patriksc commented 1 year ago

If you only cut the initialization pattern (i.e. you start the MH1 before the UAV is in the air a second time, at approx. 45s), you should still see the loop on MH1.

Regarding your run on MH1, 2 and 3: there are certain conditions for loop closures, e.g. there must be a certain distance between 2 loop closures, so for example if a loop closure between agent A and B is found, there will not be an immediate subsequent one between data from A and A. As long as you find sufficient loop closures, and get an accurate global estimate, it should not matter whether they are between a single agent or different agents. Maybe the sequence in which the data is sent to the server is such that there's always a loop between 2 different agents found first - finding only loops between different agents is by itself not a defect.

patriksc commented 6 months ago

Closing - inactive