1

我正在尝试使用 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);
    }

mrpt 版本:2.2.1

先感谢您

马西莫

4

1 回答 1

0

角度由向量内每个范围的索引隐式定义。我刚刚编辑了类文档以更好地解释这一点。

请注意,此代码描述了索引和角度之间的确切关系:

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

另外:请注意,程序GridmapNavSimul已经允许您绘制网格图世界、驱动机器人并生成模拟数据集,而无需编写单行代码... ;-)

于 2021-05-09T17:46:34.100 回答