我正在尝试使用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
提前谢谢你
马西莫
发布于 2021-05-10 01:46:34
角度由向量内每个范围的索引隐式定义。我刚刚编辑了class docs以便更好地解释这一点。
请注意,此代码描述了索引和角度之间的确切关系:
float Ang = -0.5f * aperture;
float dA = aperture / (m_scan.size() - 1);
if (!rightToLeft)
{
Ang = -Ang;
dA = -dA;
}
return Ang + dA * idx;另外:请注意,程序GridmapNavSimul已经允许您绘制网格地图世界,驱动机器人并生成模拟数据集,而无需编写任何代码……;-)
https://stackoverflow.com/questions/67441475
复制相似问题