labview中的机器人里程计

Robot odometry in labview

我目前正在从事一个(学校)项目,该项目涉及机器人必须在玉米田中导航。

我们需要在NI Labview中制作完整的软件。

由于机器人必须能够执行任务,机器人必须知道它的位置。

作为传感器,我们有一个 6 自由度 IMU、一些不可靠的车轮编码器和一个 2D 激光扫描仪 (SICK TIM351)。

直到现在我都无法弄清楚任何算法或教程,因此真正陷入了这个问题。

我想知道是否有人曾尝试让 SLAM 在 labview 中工作,如果有,是否有任何示例或解释可以做到这一点?

或者是否有包含此 function/algorithm 的 LabVIEW 工具包?

亲切的问候, 杰西巴克斯 机电大三学生

LabVIEW 提供LabVIEW Robotics module. There are also plenty of templates for robotics module. Firstly you can check the Starter Kit 2.0 template,这将为您提供简单的工作自动驾驶机器人项目。您可以基于这样的模板,从工作模型开发您自己的应用程序,而不是从头开始。

正如 Slavo 提到的,LabVIEW Robotics 模块包含用于寻路的 A* 等算法。但据我所知,那里并没有太多可以帮助你解决 SLAM 问题的方法。 SLAM问题由以下几个部分组成:地标提取、数据关联、状态估计和状态更新。

对于地标提取,您必须选择一个或多个您希望机器人识别的特征。例如,这可以是一个角或一条线(3D 中的墙)。例如,您可以使用聚类、拆分和合并或 RANSAC 算法。我相信您的激光扫描仪会提取点并将其存储在按角度排序的列表中,这使得拆分和合并算法非常可行。虽然 RANSAC 是其中最准确的,但也具有更高的复杂性。我建议从一些最佳数据点开始测试线提取。例如,您可以将激光扫描仪放在墙壁笔直的小房间内,执行一次扫描并将其保存到阵列或文件中。确保轮廓比只有四堵墙复杂一点。并在测量之前或之后去除噪声。

我还没有读过数据关联的好方法,但是例如,您可以只考虑一个新的地标,如果它与任何现有地标相距一定距离,或者如果不是则更新旧地标。

状态估计和状态更新可以通过互补滤波器或扩展卡尔曼滤波器(EKF)来实现。 EKF 是非线性状态估计的事实 [1] 并且在实践中往往工作得很好。 EKF 背后的理论虽然很简单,但实施起来应该更容易一些。如果您要对 EKF 进行编程,我建议您使用 MathScript 模块。这两个滤波器的要点是根据从激光扫描仪提取的车轮编码器和地标来估计机器人的位置。

由于 SLAM 问题是一项艰巨的任务,我建议在多个较小的子 VI 中对其进行编程。这样您就可以在不增加太多复杂性的情况下正确测试您的零件。

也有很多关于 SLAM 的好论文。