Skip to content

Commit 3b9c4ba

Browse files
committed
ignore measurements outside lidar range
According to the comment in sensor_msgs/LaserScan, values < range_min or > range_max should be discarded. Without this, scan matching will fail for lidars publishing 0 for invalid measurements.
1 parent 67c1127 commit 3b9c4ba

File tree

1 file changed

+6
-12
lines changed
  • lib/karto_sdk/include/karto_sdk

1 file changed

+6
-12
lines changed

lib/karto_sdk/include/karto_sdk/Karto.h

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5658,27 +5658,21 @@ class LocalizedRangeScan : public LaserRangeScan
56585658
kt_int32u beamNum = 0;
56595659
for (kt_int32u i = 0; i < pLaserRangeFinder->GetNumberOfRangeReadings(); i++, beamNum++) {
56605660
kt_double rangeReading = GetRangeReadings()[i];
5661-
if (!math::InRange(rangeReading, pLaserRangeFinder->GetMinimumRange(), rangeThreshold)) {
5662-
kt_double angle = scanPose.GetHeading() + minimumAngle + beamNum * angularResolution;
5663-
5664-
Vector2<kt_double> point;
5665-
point.SetX(scanPose.GetX() + (rangeReading * cos(angle)));
5666-
point.SetY(scanPose.GetY() + (rangeReading * sin(angle)));
5667-
5668-
m_UnfilteredPointReadings.push_back(point);
5661+
if (!math::InRange(rangeReading, pLaserRangeFinder->GetMinimumRange(),
5662+
pLaserRangeFinder->GetMaximumRange()))
56695663
continue;
5670-
}
56715664

56725665
kt_double angle = scanPose.GetHeading() + minimumAngle + beamNum * angularResolution;
56735666

56745667
Vector2<kt_double> point;
56755668
point.SetX(scanPose.GetX() + (rangeReading * cos(angle)));
56765669
point.SetY(scanPose.GetY() + (rangeReading * sin(angle)));
56775670

5678-
m_PointReadings.push_back(point);
5671+
if (rangeReading < rangeThreshold) {
5672+
m_PointReadings.push_back(point);
5673+
rangePointsSum += point;
5674+
}
56795675
m_UnfilteredPointReadings.push_back(point);
5680-
5681-
rangePointsSum += point;
56825676
}
56835677

56845678
// compute barycenter

0 commit comments

Comments
 (0)