yaboPP电子
项目

变抗冲击机器人碰撞检测系统的测试

2017年9月28日通过罗伯特Keim

我们将使用真实的碰撞数据来完善检测算法,更棒的是,我们将确认系统确实有效。

我们将使用真实的碰撞数据来完善检测算法,更棒的是,我们将确认系统确实有效。

支持信息

我们开始了这个项目机器人碰撞检测系统通过收集模拟碰撞事件和非碰撞碰撞事件(即手指轻击)的加速度数据。然后,我们利用这些数据制定了一个算法,该算法可以识别真实的碰撞,并忽略机器人在正常操作中可能遇到的各种碰撞和碰撞。在本文中,我们将根据实际的碰撞数据对算法进行调整。

振动,加速

首先,我想解释我在上一篇文章中提到的事情。显而易见的是,电机是高频,低幅度加速度的重要来源,这意味着在没有电机的情况下运行良好的算法可能与电机有效地工作不太好。以下情节说明了我的观点。这是一种用电动机停止产生的模拟加速度曲线。

噪声很小——可能只有几毫伏的峰值。下一个波形是在电机运行时记录的:

现在噪音更像是30到50 mV的峰值。有了这些额外的噪音,加速事件看起来非常不同:

正如上一篇文章中的上一个视频所示,尽管有电机噪音,我最初的算法(有点让我吃惊)仍然有效。事实还证明(正如您将在一分钟后看到的)现实生活中的碰撞事件会导致更高幅度的加速度分布,因此更新后的算法很容易忽略电机噪声。尽管如此,如果你正在开发基于加速度的机器人功能,你需要记住电机振动。

不同的碰撞,不同的加速度

我在现实生活中的碰撞测试明确了一件事:开发一种适用于大多数可以被称为碰撞的事件的算法可能有点困难。我通过驾驶机器人进入四种表面来收集数据:

  • 用毯子覆盖的实木;
  • 实木(没有毯子);
  • 纸板构成纸板箱的一部分,没有很大的重量来固定它;
  • 纸板构成了一个更重的盒子的一部分。

如下图所示,加速度差异的显著性足以使设计普遍有效算法的过程复杂化。每个情节之前都有一段生成数据的碰撞视频。

所有这些图的大小和时间尺度都是相同的,所以你可以直观地比较不同波形的宽度。这里真正的问题是:所有这些配置文件是否与非冲突事件的配置文件完全不同,从而允许使用通用算法?也许是这样,但我不能肯定地说,因为我考虑过的唯一非碰撞事件是熄灯。当然,在不让算法过于敏感的情况下,还有其他类型的碰撞可能更难识别。

One thing to note from the above data is the generous amplitudes: three of the four profiles actually saturate at the ADC’s 2.4 V reference voltage, and the fourth (for the lighter cardboard box) reaches 1.917 V. These maximum amplitudes are significantly higher than those of the simulated collisions (around 1.685 V) and that of the tap event (about 1.81 V). So it’s possible that the temporal details of the collision profiles might not create too much difficulty because the algorithm could be developed primarily around the amplitude characteristics.

微调

出于本文的目的,我决定将重点放在木材被毯子覆盖的碰撞上。这里是三次碰撞的剖面图,包括上面所示的那次。

您可以看到它们都通过2 V相当快速地传递,并将高斜率保持在饱和点(2.4 V)。因此,与模拟碰撞相比,最大幅度要高得多。它们的持续时间比模拟型材更短;主脉冲的宽度通常大约12ms,而模拟脉冲(仅为正截面)宽度为100ms。这最初导致我有点关注,因为我使用脉冲宽度来区分挖掘事件的模拟冲突,但由于上面提到的幅度优势,它真的不是问题。

我认为没有理由放弃原来算法的一般结构;我所做的只是根据新数据调整常数。以下是更新后的值:

  • 第一阈值:12971次(1900 mV)
  • 第二阈值:15019次(2200 mV)
  • 从第一阈值交叉到第二阈值交叉的最大样本数:7
  • 最小宽度(即从上升边第2个阈值跨越到下降边第1个阈值跨越的最小样本数):4

我还必须将先前使用的数据收集版本转换为操作版本的固件。以下是整体程序流的描述:

  • 我手动将ADC窗口比较大于值设置为第一个阈值,这样我就不必在每次调整阈值时都要更改配置文件。
  • 固件延迟3秒,以便操作员有时间准备。
  • 启用碰撞检测(先前此语句被评论出)。
  • 电机已启用并设置为全速前进运动。
  • 此时,如果你想收集数据,你可以调用StartAccelerometerDataCollection(),但目前,这个语句被注释掉了,因为数据收集和碰撞检测不能同时发生。你可以取消注释Enable_CollisionDetection()或StartAccelerometerDataCollection(),而不是两者。
  • 延迟语句用于在三秒钟后禁用电机;这可以防止机器人运行AMOK,如果它错过了目标,或者如果碰撞检测系统不按预期工作。易于区分检测到的碰撞从电机的三秒延迟禁用,因为电动机制动(即,快速地停止)响应于碰撞。

您可以使用以下链接下载源文件和项目文件:

proj_nondestcollisiontest_firmware.zip.

算法的工作原理是一致的。下面的视频是成功的碰撞检测的蒙太奇。

此下一个视频确认算法对挖掘事件的强大。这些水龙头非常粗糙,这让我认为该算法将成功地忽略许多非碰撞颠簸和敲击。

结论

我们已经成功开发并测试了围绕加速度计,微控制器和一些精心设计的固件构建的自动碰撞检测系统。针对涉及具有少量垫子的表面的碰撞优化了当前算法,而不是由木或混凝土组成的非常坚固的表面。但是,该算法是灵活的,可以通过修改常数来容易地调整。

而只是为了记录,我的罗维机器人仍然在所有这些碰撞后都有工作。