Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一个单机闭环的问题.a problem about IntraLoopClosure #33

Open
Whaaao opened this issue Sep 25, 2024 · 1 comment
Open

一个单机闭环的问题.a problem about IntraLoopClosure #33

Whaaao opened this issue Sep 25, 2024 · 1 comment

Comments

@Whaaao
Copy link

Whaaao commented Sep 25, 2024

作者您好,非常感谢您的开源工作。我遇到了一个单机闭环的问题,感觉可能是一个bug:
在lidarIris单机闭环部分

std::pair<int, float> lidar_iris_descriptor::detectIntraLoopClosureID(

使用了Eigen::MatrixXf new_iris_rowkeys来保存关键帧的rowkey,
并使用Eigen::VectorXi indice(candidates_num_)来保存kdtree的搜索结果(indice中保存的new_iris_rowkeys的列索引)
但由于从iris_rowkeys[id_]赋值new_iris_rowkeys时跳过了recent关键帧,导致new_iris_rowkeys的第indice[i]列并不一定与iris_rowkeys[id_][indice[i]]对应
if (iris_rowkey.first > cur_ptr - exclude_recent_frame_num_)
{
continue;
}

这里candidate_iris_feature也不一定是对应的,这会导致找不到正确的单机闭环
lidar_iris_descriptor::featureDesc candidate_iris_feature = iris_features[id_][indice[i]];

之后我创建了一个std::vector new_iris_rowkeys_ptr;记录new_iris_rowkeys对应帧的id:
new_iris_rowkeys.conservativeResize(rows_, cur_row+1);
new_iris_rowkeys.block(0, cur_row, rows_, 1) = iris_rowkey.second.block(0, 0, rows_, 1);
new_iris_rowkeys_ptr.emplace_back(iris_rowkey.first);
并将后面的indice[i]全部替换为new_iris_rowkeys_ptr[indice[i]]
现在可以正确地找到单机闭环了

@8613425400769
Copy link

@Whaaao 你好,现在我用fast-lio2做前段也是无法实现机器人内部闭环,请问有解决方案吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants