1

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

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

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

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

到目前为止,我无法弄清楚任何算法或教程,因此真的陷入了这个问题。

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

或者是否有包含此函数/算法的 LabVIEW 工具包?

亲切的问候, Jesse Bax 机电一体化三年级学生

4

2 回答 2

1

LabVIEW 提供LabVIEW Robotics模块。机器人模块也有很多模板。首先,您可以查看 Starter Kit 2.0 模板,该模板将为您提供简单的自动驾驶机器人项目。您可以基于这样的模板并从工作模型开发自己的应用程序,而不是从头开始。

于 2016-03-31T13:51:56.433 回答
1

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

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

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

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

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

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

于 2016-04-11T20:32:20.840 回答