Open kokeliang opened 1 year ago
Hi @kokeliang, thank you for trying out our code. The parameters mainly depend on what kind of environment you are testing and how you mount your sensor. I suggest you starting from the following parameters:
lidar_height_
: the height of sensor above the assumed ground plane.blind_sq_
: the squared distance from the sensor that you want to exclude.lv_grads_
: the heights you want to slice your structures, and it really depends on how far the major structures are from your lidar and your lidar vertical fov.ta_h_bar
: the hard bar for CA simialrity, which also depends on structure distance and lidar vertical fov.Hello @lewisjiang. Thank you for your suggestion. I have modified the parameters as you suggested. I'm running contour context
with my own data.
If contour context
firstly tried to detecte the loop closure of the current key frame by the function queryRangedKNN
, then the current key frame without tramsformation into map coordinate system, was put into database via function addScan
and pushAndBalance
, in this case contour context
could find the loop closure successfully, the yaw
angle of the loop closure was right, but the position (x, y)
was obviously wrong (not the relative position between two key frames or the position in map coordinate system).
I thought before the key frame was put into the database, it should convert its own coordinate system to the map coordinate system, then the position (x, y) in map coordinate system of loop closure would be right. But in this way, contour context
could not find any loop closures. Do you know the reason about it? Thank you for your help.
// std::unique_ptr<ContourDB> ptr_contour_db_;
// std::unique_ptr<ContourManager> cmng_ptr_;
cmng_ptr_.reset(new ContourManager(cm_config_, curr_id));
cmng_ptr_->makeBEV<ms_lams::PointType>(out_ptr);
// cmng_ptr_.makeContours();
cmng_ptr_->makeContoursRecurs();
// 2.2 add new
ptr_contour_db_ -> addScan(cmng_ptr_, out_ptr -> header.stamp);
// 2.3 balance
ptr_contour_db_ -> pushAndBalance(curr_id, out_ptr -> header.stamp);
@kokeliang According to your description, I'm not sure if the problem is caused by data adaptation, bugs or just a bad estimate produced by cont2. I suggest you trying out more one-on-one matching of scans (write tests following queryRangedKNN()
function) without the database thing and save the intermediate files for visualization. Also, the operation of cont2 has nothing to do with map coordinate system, because it only estimates the relative transform.
@lewisjiang Hi. Thank you for your great work on loop closure. I'm also trying to run Contour Context, but i have a question about anchor. I've read your paper on how to get an anchor which becomes a base of an CAC, but I didn't see anything about that, so I'm wondering how to get an anchor CA. thanks in advance
@euncheolChoi Hi, thank you for your interest. Some CAs are augmented with their vicinity information to become anchors (which carry CAC information), after all the CAs are generated for a scan. Please refer to the following function:
@lewisjiang Thank you for your kind reply. It helped me a lot!
I had tried to modify these parameters as you suggested, but still cannot get good result in underground parking. Is there any suggest to get good result? Thank you.
@xiaoxueshengyao The current protogtype of Cont2 uses a naive projection (highest point projection) as a proof of concept. This can be problematic since the ceilings are low in indoor parking lots. I suggest you modifiy the slicing procedure so that the ceiling will not overshadow the lower strutures.
Hello. Thank you for your great work on loop closure. I'm trying to evaluate contour context with my own data colleted by robosense 16-scans lidar. The follwing parameters should be adjusted. Could you give me some tips that how to modify these parameters? Thanks again.