引言

不管是在机器人还是在其他学科中,我们经常会遇到设置阈值,并且检验当前数据是否达到阈值,以此来作为下一步动作的基准。当我们设置的阈值是,对于整个数组而言的,也就是说,数组中有无达到我们阈值的数据的时候,传统的方法就是一个一个遍历、验证。今天我们就用python来回顾并探索新的方式。

应用背景

首先,我们通过遍历的方式查找整个数组。以一个实际应用背景为例,当我们在控制机器人进行与力交互相关的动作时,就一定需要用到接触力,一般是机器人末端的六维力传感器或者是机器人的关节力矩传感器。这些力信息的值一般存储在数组等容器中,当我们使用的时候,通过序号进行索引,进而查找到对应的某个维度或者关节。例如我们获得了某次机械臂末端六维力传感器的力信息

F=[1.65,9.56,2.35]

有了力信息后,机器人在进行这种力交互的控制活动中,为了安全器件,一般需要设置一个安全阈值,如果发现某次采集的六维力传感器的值大于这个数,就需要赶紧停止动作,以防后续对机器人和工件产生损伤。例如我们设置的阈值为5N。很明显,y轴的受力就比5N大了。

遍历

当我们使用遍历的方式进行对比每个维度的力和阈值大小时,一般的做法如下

for i in range(3):
    if  F[i]>max_F:
        stop()

这种方式进行判断的时候,我们需要手动遍历数组中每个元素,有没有更加高级的方法呢?接下来需要提到python中的any函数

any

any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。而数组很明显是一个可迭代参数,因此我们可以这样使用:

any((F>max_F))

这个语句就可以判断,F中是否有大于max_F的值了。以下面的例子介绍

import numpy as np
a = np.array([2.0,3.0,5.0])
c = any((a>4.0))
print(c)

那么遍历的语句就可以写为:

if any(F>max_F):
   stop();

May the force be with you!