LIO-Livox
LIO-Livox copied to clipboard
Bugs for break points selection?
In LidarFeatureExtractor.cpp
, detectFeaturePoint
, (and also detectFeaturePoint2/3), break point selection.
The original codes are:
// break points select
if(CloudFeatureFlag[i] == 100){
debugnum2++;
std::vector<Eigen::Vector3d> front_norms;
Eigen::Vector3d norm_front(0,0,0);
Eigen::Vector3d norm_back(0,0,0);
for(int k = 1;k<4;k++){
float temp_depth = sqrt(_laserCloud->points[i - k].x * _laserCloud->points[i - k].x +
_laserCloud->points[i - k].y * _laserCloud->points[i - k].y +
_laserCloud->points[i - k].z * _laserCloud->points[i - k].z);
if(temp_depth < 1){
continue;
}
Eigen::Vector3d tmp = Eigen::Vector3d(_laserCloud->points[i - k].x - _laserCloud->points[i].x,
_laserCloud->points[i - k].y - _laserCloud->points[i].y,
_laserCloud->points[i - k].z - _laserCloud->points[i].z);
tmp.normalize();
front_norms.push_back(tmp);
norm_front += (k/6.0)* tmp;
}
std::vector<Eigen::Vector3d> back_norms;
for(int k = 1;k<4;k++){
float temp_depth = sqrt(_laserCloud->points[i - k].x * _laserCloud->points[i - k].x + //~ HERE! Shoud be i+k???
_laserCloud->points[i - k].y * _laserCloud->points[i - k].y +
_laserCloud->points[i - k].z * _laserCloud->points[i - k].z);
if(temp_depth < 1){
continue;
}
Eigen::Vector3d tmp = Eigen::Vector3d(_laserCloud->points[i + k].x - _laserCloud->points[i].x,
_laserCloud->points[i + k].y - _laserCloud->points[i].y,
_laserCloud->points[i + k].z - _laserCloud->points[i].z);
tmp.normalize();
back_norms.push_back(tmp);
norm_back += (k/6.0)* tmp;
}
double cc = fabs( norm_front.dot(norm_back) / (norm_front.norm()*norm_back.norm()) );
if(cc < 0.95){
debugnum3++;
}else{
CloudFeatureFlag[i] = 101;
}
}
While I think, for back_norms
, it should detect the points on the right side of the current laser point. Which the temp_depth should be (i+k) but not (i-k):
float temp_depth = sqrt(_laserCloud->points[i - k].x * _laserCloud->points[i - k]. ......