Как установить угол сканирования в CObservation2DRangeScan?

Я пытаюсь использовать алгоритм mrpt slam. Я хотел бы адаптировать исходное приложение icp slam для использования лидарных сканов из моей симуляции. Если я правильно понимаю, я должен использовать класс CObservation2DRangeScan для хранения лидарных наблюдений. Моя проблема в том, что я не могу найти, как установить угол сканирования. Я предполагаю, что развертка должна быть в полярных координатах, тогда если setScanRange задает дальность в метрах, как мне задать угол? Я не могу найти подходящую функцию-член в классе, возможно, я что-то упускаю.

Пример кода на данный момент:

    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);
    }

мрт версия: 2.2.1

заранее спасибо

Массимо


person maximus    schedule 07.05.2021    source источник
comment
Странно, в справочнике не упоминается версия 2.2.1: mrpt.ual.es/reference, либо 2.2.0, либо 2.3.0   -  person kebs    schedule 08.05.2021


Ответы (1)


Угол неявно определяется индексом каждого диапазона в векторе. Я только что отредактировал документы класса, чтобы лучше объяснить это.

Обратите внимание, что этот код описывает точное соотношение между индексами и углами:

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

Также: Обратите внимание, что программа GridmapNavSimul уже позволяет вам рисовать гридкарту мира, управлять роботом и генерировать смоделированные наборы данных, не кодируя ни одной строки... ;-)

person Jose Luis Blanco    schedule 09.05.2021