c++ - 如何在 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);
}
mrpt 版本:2.2.1
先感谢您
马西莫
解决方案
角度由向量内每个范围的索引隐式定义。我刚刚编辑了类文档以更好地解释这一点。
请注意,此代码描述了索引和角度之间的确切关系:
float Ang = -0.5f * aperture;
float dA = aperture / (m_scan.size() - 1);
if (!rightToLeft)
{
Ang = -Ang;
dA = -dA;
}
return Ang + dA * idx;
另外:请注意,程序GridmapNavSimul已经允许您绘制网格图世界、驱动机器人并生成模拟数据集,而无需编写单行代码... ;-)