How to set scan angle in CObservation2DRangeScan?

39 views Asked by At

I'm trying to use mrpt slam algorithm. I would like to adapt the original "icp slam app" to use lidar scans from my simulation. If I understand correctly I should use the CObservation2DRangeScan class to contain the lidar observations. My problem is that I cannot find how to set the scan angle. I presume that the scan has to be in polar coordinates, then if setScanRange sets the range in meters, how do I set the angle? I cannot find a proper member function within the class, I am probably missing something.

A code sample so far:

    mrpt::obs::CObservation2DRangeScan::Ptr observation(new mrpt::obs::CObservation2DRangeScan);
    observation->resizeScan(i32NUM_POINTS);
    for(int32_t i = 0; i < i32NUM_POINTS; ++i)
    {
      observation->setScanRange(i, arrPoints[i].range);
      //here I must set the scan angle
      observation->setScanRangeValidity(i, true);
    }

mrpt version: 2.2.1

Thank you in advance

Massimo

1

There are 1 answers

0
Jose Luis Blanco On

The angle is implicitly defined by the index of each range within the vector. I just edited the class docs to better explain this.

Note that this code describes the exact relationship between indices and angles:

float Ang = -0.5f * aperture;
float dA = aperture / (m_scan.size() - 1);
if (!rightToLeft)
{
 Ang = -Ang;
 dA = -dA;
}
return Ang + dA * idx;

Also: Note that the program GridmapNavSimul already allows you to draw a gridmap world, drive a robot and generate simulated datasets without coding a single line... ;-)