本节书摘来华章计算机《仿人机器人原理与实战》一书中的第2章 ,第2.4节,作者布莱恩·伯杰伦(bryan bergeron) 托马斯b. 塔尔博特(thomas b. talbot) 王伟 魏洪兴 刘斐 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
操作机械臂的一个挑战是我们想要通过机械臂完全感知外界环境。由于实验平台非常灵活和开放,人们会不由自主地增加颜色、声音、震动或其他传感器。下面将选取一些值得考虑的改进方案。
热敏电阻t1很适合快速测量相对温度。然而你可能需要对准确的绝对温度进行测量,当温度达到预设限定值上下(比如说2摄氏度的范围)时触发行为链。这个方案可以通过为一个热敏电阻创建查询表来实现。一个很简单的方法是将热敏电阻t1替换成固态绝对温度传感器,例如tmp36。图2-9是用tmp36进行升级的原理图。

tmp36的安装就像塑封晶体管一样再简单不过了:一端接+5v,一端接地,中间端接模拟量输入a1。图2-10展示了装在夹持器一个颚上的tmp36。注意为了安装稳定起见,tmp36的扁平面应与颚正对,或者扁平面也可以朝内安装以最大化接触面积,促进与物体的热传导。如果你选择后一种朝向,那么当物体不在平面的绝对中心位置时,你必须在颚上做一些调整以防止tmp36滚动。
tmp36是一个随温度而变化的电位计,温度的变化与电位器上触点位置的变化成正比。中间端的输出电压与所测温度成正比,比例系数是10 mv/°c,如下面的公式所示:
温度 (°c) = [vout (mv) – 500]/10
在25°c 室温下,传感器供电为5v,输出电压是750 mv。在测试tmp36时,如果有一罐压缩空气会很棒,你能够在两秒钟内释放压缩空气以将tmp36从30°c降低到0°c,注意,将喷罐倒置可以使冷却速度最大化。
你只需要把之前的基于热敏电阻的例子中的代码做少量更改就能用于tmp36。更改后的代码如清单2-2所示。
清单2-2 使用tmp36传感器的行为链的arduino代码
从上到下依次来看,程序的主要改变在于增加了targettmpc和currenttmpc两个变量,都声明为单精度浮点型变量。targettmpc是用摄氏温度表示的目标温度值,一旦达到目标温度被夹物体就应被扔掉。就像前面使用热敏电阻时一样,扔掉物体的有效温度可以通过p1或p2来调整,p1和p2分别代表“皮质”抑制和“肾上腺素”激励。
与在初始化时设定基准温度不同,当前温度被反复测量并与目标温度相比较。温度检查函数tmpcheck()先将传感器的输出电压转换为温度,然后将当前温度与目标温度相比较。比较结果用来设置温度标志位tmpflag的值,当达到目标温度时,标志位置1。
与上一段代码中应用的10kΩ热敏电阻相比,tmp36更不稳定,它会偶尔输出错误的过高或过低的值。tmp36的使用说明书要求我们在设备电源的+5v和地间连接一个0.1mf陶瓷盘式电容,但是这对于虚假读数无济于事。而且我们对许多tmp36设备做了测试,他们的表现都很类似。有一个改进办法是在每次读取温度值时加一个5ms的延时,但这个方案的缺点是它或多或少会降低夹持器的闭合速度。
暂不考虑缺陷,准确检测夹持物体的能力在很多条件下都有应用意义。除了安全方面的应用,考虑一下一个有温度测量能力的家政服务机器人的价值,它只需接触一下皮肤就能够测出温度,或者能够在一个小数点范围内确定你的洗澡水温是否合适。
你想构建一个行为链,使夜间仿人机器人在黑暗环境中比在有光环境中反应更快吗?用一个硫化镉(cds)光传感器和一个10kΩ分压电阻代替p2,如图2-11所示。把光传感器cds1装在一个不透明的容器中,这样你就可以很容易地控制光强。在实验过程中,开关小容器的盖子与开关室内的灯相比更为方便也不易制造混乱。尽管在改进后的原理图中应用的是热敏电阻,但光传感器既可以与热敏电阻t1一同使用也可以与固态温度传感器tmp36一同使用。
cds传感器在黑暗中呈现的电阻阻值在300kΩ左右,在光照时则只有10Ω左右。因此当cds传感器在光照条件下时,分压电阻r3两端的电压最大。你可以不改变代码的整体架构,而是通过改变光强来改变对扔物体行为的激励作用。很可能需要改变p2value的映射函数:
与把输入电压映射到1~10这种粗略的范围不同,需尝试把cds电压映射到0~50或0~100。根据光源和环境光强,你会发现映射到一个更大的范围能够提高机器人对较小光强的敏感度。
如果使用grove扩展板,增加cds传感器一个的简单方法是用一个grove光传感器模块,如图2-12所示。除了标准的cds传感器,模块有一个内置电阻和主动缓冲区,不需要外界电阻就可以直接读取测量值。
如果你的电路要工作在光强变化较大的条件下,如打开和关闭装着cds传感器的不透明的盒子,那么你应当尝试检测光照的微弱变化。这里我们就要用到最小可觉差(jnd)的概念。你面临的挑战是调整cds传感器的输出权重,这样以50%的概率恰可感知的光照变化能够产生一个可比较的cds输出。
在这个实验中,你应当使用暗室和单色光源,例如红色的发光二极管和光强计(可以是电子测量仪的插件或独立的光学模块)。把最小可觉差映射到cds传感器的挑战是电阻和光强之间的关系不是线性的,并且非线性关系与绝对光照强度有关,如图2-13所示。
当然,如果你开始既改变光的颜色又改变光强(通常用人造光源),那么你有另一个变量要考虑。人眼就像一个cds单元,对于不同波长的光反应不同。因此可以用红色、绿色或蓝色的led来减小光谱变化对光强变化的影响。
记住,目标是建立一个映射或者表格来模仿人眼的最小可觉差。如果这个任务在此时看上去有点困难,你可在阅读完第4章关于光传感器与眼睛的内容后再来考虑这个挑战。
这个模块需要一些想象力。根据性格坐标,设备的姿态和响应速度与控制力有关。例如性格强势的机器人,其操作中或操作后的姿态应当在控制力上得分较高,在责任心上为负值,在情绪稳定性上居中,在坦率上是很小的负值。我们应如何用一些装有电机和电子系统的塑料块来实现这个功能呢?
这比你想象得更为简单。晃动一下手臂,想象一个强势、激进的人可能做出的反应。如果那个人捡起一个物体然后由于反射作用扔掉物体,她不会大叫 “啊”然后蜷成一团。相反,她可能会骂一两句脏话(为负值的责任心),下意识地攥起拳头准备进攻(控制力),然后忍着疼痛捡起物体(可能为负值的情绪稳定性)。
跳过那些脏话吧!我们继续研究其他行为链。我们有必要用“拉–返回”的行为来替换“收回–延时–返回”的行为。另外,我们有必要摆出一个进攻性姿势,而不是简单地扔掉滚烫的物体。
用控制器和机械臂控制库函数,为你的机械臂定义一个看上去有进攻性的姿态,例如夹持器向前、机械臂收紧、像蛇一样准备进攻。当你完成这些后,再为性格中性软弱的机器人做同样的工作。图2-14展示了我们定义的姿态。
用dynamixel舵机很容易完成这方面的设置,因为你可以将机械臂移动到喜欢的姿态,然后从舵机中读取位置值。lynxmotion的姿态应用也具有同样功能。