《仿人机器人原理与实战》一2.3 行为链实验入门-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《仿人机器人原理与实战》一2.3 行为链实验入门

简介: 本节书摘来华章计算机《仿人机器人原理与实战》一书中的第2章 ,第2.3节,作者布莱恩·伯杰伦(Bryan Bergeron) 托马斯B. 塔尔博特(Thomas B. Talbot) 王伟 魏洪兴 刘斐 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

本节书摘来华章计算机《仿人机器人原理与实战》一书中的第2章 ,第2.3节,作者布莱恩·伯杰伦(Bryan Bergeron) 托马斯B. 塔尔博特(Thomas B. Talbot) 王伟 魏洪兴 刘斐 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 行为链实验入门

有了第1章描述的反射弧,再加上机械臂、温度和压力传感器以及一点想象力,我们将探讨一个关于图2-1中所示的理论上的行为链框架的实际例子。作为一个四肢健全的仿人机器人的组成部分之一,机械臂是一个很好的实验平台,因为它足够复杂以至于能够演示许多种肢体上的行为链。我们的另一个选择是应用仿真。然而,电脑仿真或许能够体现出应当发生的事情,然而在现实中移动具体的事物更具有魔力。
如图2-3所示,我们通过按钮S1来启动夹持器夹紧的动作。如果夹持器上的传感器测量出被夹物体的温度过高,则夹持器会松开并把物体扔掉。经过了短暂的不应期,温度传感器会冷却下来到达抓取允许范围内,系统会再次对夹紧做出反应。我们分别用两个电位器P1和P2模拟肾上腺素对反射的刺激作用和大脑对反射的抑制效应。

3


相反,如果夹持器与物体接触后,温度没有超过限定值,那么夹持器将会夹紧物体,夹紧力可以由夹持器上的压力传感器测量得到。在这段时间内,物体可以被机械臂夹持着在空间内移动或者只是保持不动。按下按钮S2,夹持器将会打开,使得系统能够对按下按钮S1进行反应。

2.3.1 器材清单

我们用来探究行为链的实验平台是一个五自由度(DOF)的机械臂,它由廉价的模拟量舵机搭建而成。用传统的舵机搭建的机械臂的主要优点是使用方便、设置便捷以及有许多可兼容的软硬件。例如,有了适用于Sony PS/2控制器和诸如BotBoarduino的兼容Arduino控制卡的Arduino函数库,当我们要控制多个舵机时就会很容易。只要用到模拟量舵机,你就会用到这里包含的程序范例以及标准的Arduino函数库。
另一种方案是利用由AX-12A Dynamixel舵机搭建的机械臂。尽管数字量舵机由于特别的硬件装配以及不兼容Arduino串口而很难使用,然而它们有内置的温度、位置、负载电压、输入电压以及输出轴柔顺的传感器。如果你愿意在串行控制线中增加一个芯片,那么Savage Electronics公司针对Arduino 的Dynamixel舵机库是很值得尝试的。在这章中可以很容易地改造出Dynamixel 舵机或其他数字舵机环境,但是对于舵机的控制不可避免地将会与本章描述的有所不同。
如果你没有很多钱花费在机械臂上,那么你也可以考虑买一个或者自己做一个单一舵机的夹持器(没有机械臂)。或者你也可以参照第1章中用来做简单的反射弧仿真的两舵机实验平台。你可以在舵机摆臂上安装指示器用来观察关节的弯曲和夹持器的关闭。
除了现有的机械臂实验平台、Arduino微处理器、Sony PS/2控制器,或者其他交互地控制机械臂位置的方式,还需要以下器材:

  • 功率电阻或其他热源
  • 热源的供电电源(可选,由热源而定)
  • TMP36 模拟量温度传感器
  • 10kΩ热敏电阻
  • CdS光传感器
  • 力传感电阻器
  • 瞬时接触开关按钮(2个)
  • 10kΩ电位计(2个)
  • 给Arduino和舵机供电的 5V直流电源
  • 跳线帽和导线
  • 自选扩展板(可选)

本组实验的所有元器件如图2-4所示,包括一套标准的Arduino Uno、Grove扩展板、Grove按钮和电位计、力和温度传感器以及Lynxmotion机械臂。注意:功率电阻当作热源使用。

4


用一只已经标定过的温度探头和数字万用表(DMM)来确定热源的温度,如果有的话就更好了,实在没有也没关系。尽管你的手指不是一杯咖啡或者一个大型功率电阻,但是也可以作为热源的选项之一。在图2-4中没有显示的器件是为功率电阻、Arduino和机械臂供电的电源,还有连接机械臂舵机、传感器、按钮和电位器到Grove扩展板上的无数根导线。
热源由你选定。你的选择将会取决于机器夹持器的尺寸和负载能力。幸运的是,即使价值35美元的玩具机械臂也能够拿得动5W的功率电阻的和一些短的电源线。

2.3.2 电路

图2-5展示了第一个实验的完整电路。为了简化起见,肘关节、肩关节、基座舵机的详细的机械和电子结构没有表示在图的右侧。在电子方面,每个舵机配有5V直流电源和GND,以及连接自Arduino的脉宽调节(PWM)信号。内置温度和力传感器的夹持器的机械部分在图中左下角表示出来。
力传感电阻器FSR1不是强制性的。如果你很擅长操作夹持器,则可以不考虑这一部分。但是如果你不能熟练地在恰当的时候停止夹持器,便会面临破坏舵机中的齿轮的风险。就这一点而言,FSR1是相对便宜的保险,而且在机械臂的其他实验中也会更为方便。
10kΩ 热敏电阻T1与10kΩ的电阻器R2一起使用,形成一个分压器对5V直流供电电压进行分压。热敏电阻与温度负相关,随着温度的升高热敏电阻阻抗降低。在使用Sparkfun公司的热敏电阻的电路中,从Arduino中读到的环境温度是450(2.19Vdc)。抓紧手指时温度读数增加到475(2.32Vdc),响应速度也很快,小于一秒钟。

5


由于分压器的配置形式,温度读数随温度增加而升高(increase)。T1的阻值越低,电压在R2两端下降得越多,在Arduino模拟量输入端输入的电压就越高。
由于T1的阻抗变化与温度的关系不是线性的,因此需要用一个校准的温度计或温度传感器作为查询表或转化公式以收集数据,这样我们可以将热敏电阻处的压降值转化成准确的温度读数。当电阻自加热时,你也可以调整查询表或转化公式以保证测量准确。由于10kΩ的热敏电阻的阻值和1MΩ或更大的固态传感器的阻值相比是很小的,因此电流和散热效果都很明显。幸运的是,不必在这方面花费心思,因为相对于散热导致的温度变化,实验时的温度变化是十分显著的。而且热敏电阻价格不高且响应很快,对温度变化的响应时间只需要几百毫秒。

2.3.3 构造

除了在夹持器的两片相对的颚上安装温度和压力传感器以外,在构建过程中并没有更多的任务。用双面胶将Grove接线端子粘在两颚外侧,如图2-6所示,一个接线端子上装有热敏电阻和10kΩ电阻器。不论你是否在电路板上使用接线端子,都要在颚内侧粘上绝缘泡沫材料将热敏电阻和接线端子间裸露的电线隔离绝缘。

6


第二个接线端子上安装力传感电阻器FSR1,如图2-7所示,它安装在与热敏电阻相对的夹持器的颚上。注意,在力传感电阻器上粘接了垫套,垫套可以保护电阻器不被尖锐、硬质物体所破坏,也可以把力均匀地施加在电阻器表面。装在Grove接线端子上的10kΩ电阻器被力传感电阻器上的扁平引线盖住。
把开关按钮连接到合适的数字信号输入端,把两个电位计直接或经过扩展板接入模拟量输入端。Grove系统的一个不足之处是默认按下按钮的动作会使电位变为高电位。如果你想用Arduino内置的电阻器把电位提高,而用外部的按钮降低电位,这将是一个问题。一个简单的解决方案时将Grove电缆中的地线和Vcc交换。
如果你一定要与图2-5中不同,使用Arduino 的其他引脚,那么记住编码时要改变引脚分配。例如,你正好使用BotBoarduino以及PS/2接口,则应当更改管脚分配,为PS/2控制器的四个连接引脚腾出空间。

2.3.4 编程

由于你可能没有和我们例子中Lynxmotion机械臂有类似电路结构的机械臂,因此我们把重点放在夹持器舵机和温度传感器上。另外,为了方便起见,我们将用标准的Arduino舵机库函数和Arduino Uno。应当不需要任何麻烦就能将下述代码整合到你的机械臂上。
清单2-1 行为链实验中的Arduino代码
q1
q2
q3
q4

现在我们仔细地将清单2-1从上到下解释一遍,最初我们加载舵机库,之后定义Arduino Uno的输出引脚,初始化程序中的变量。启动时我们会测量周围环境的室温,并把表示温度的值存储在TMPValueStartup变量中。
在主循环中,我们读取扔物体反射的P1(抑制器)以及P2(激励器)的值并把其反映到变量P1Value和P2Value上。P1映射为0~100,同时P2映射为0~TMPDifference,将热敏电阻的当前读数与最初周围环境的温度差设置为触发值。在这个例子中,因为我们要处理的温度差较小,所以这个值仅为10。
当按钮S1被按下,软件会率先检测当前热敏电阻读数与设定的TMPDifference变量的差。如果温度差足够低(换言之,热敏电阻已冷却充分)且力传感电阻没有收到超出阈值的压力,当且仅当这种情况下夹持器闭合。S2按钮是手动控制按钮,按下后夹持器会迅速打开。
下面一段看起来简单的代码表达的就是由“皮质”抑制(P1Value)和“肾上腺素”激励(P2Value)控制的半自动行为:

随着P1顺时针旋转,P1Value增加,控制扔掉物体的温度和周围环境的有效温度差增加。相反,如果P2顺时针旋转,P2Value增加,控制扔掉物体的温度和周围环境的有效温度差减小。在这个例子中,P1Value的取值范围是0~100,P2Value的取值范围是0~TMPDifference。这样,夹持器受相对温度差的限制,不会不断地扔掉夹持物体。

2.3.5 操作

在实际操作中,使用Sony PS/2控制器、操纵杆或是一系列瞬时开关按钮,抑或其他控制方式把机器人的基座、肩、肘关节移动到腕关节可以捡起物体的地方。按下瞬时开关按钮S1直到夹持器与物体接触,之后通过电路控制系统夹起并移动物体。当然,如果你要移动连有供电线的电阻器,小心不要弄断电源连接。在电阻器和电源电缆的末端可以用弹簧夹或者用一个3.5mm的插塞接头把电传递给电阻器。
另外一个方案是用拇指当“热物体”,如图2-8所示。要保证手指肚与热敏电阻相接触。与手指上的软组织相比,指甲相对而言是好的绝缘体,能够与力传感器充分接触。
如图2-3所示,如果物体的温度低于软件中设定的允许温度值,那么夹持器和机械臂会依照你的指令而运动,即你可以把电阻器和其他物体移动到想要的位置。按下按钮S2则会释放物体,夹持器会完全张开,腕关节会回到等待位置。用其他控制器把基座和其他关节移动到初始位置,为下一次测试运行做准备。

8


但是,如果物体温度等于或高于定义的允许温度,且P1和P2都逆时针转到头,那么夹持器将张开并扔掉物体。几秒之后当热敏电阻冷却完全时,夹持器将继续对按钮S1做出反应。
如前所述,如果顺时针旋转P1,增加P1提供的阻抗,则自动扔掉物体的行为将会被抑制,在P1的顺时针极限位置将不会有根据被夹物体温度自动扔掉物体的行为。设想机器人拿着一杯热咖啡悬在你头上,你一定不希望服务机器人扔掉咖啡,甚至不惜为此而伤害机器人。理想情况下,仿人机器人应当具备一些高优先级的模式识别设备来识别即将发生的危险,并且有效地将P1表示的值最大化。
顺时针旋转P2将会削弱P1的作用,但是由于两电位计设定值范围的原因,最多只能到达一定程度。然而当P1在逆时针的极限位置时,P2的激励作用足以使热敏电阻中的噪声信号触发扔物体的反射。所有这些交互作用都是由TMPDifference的设定值以及P1和P2的权重决定的。
这中间简单的三条连接反射弧是很有实际应用价值的。设想服务仿人机器人的手上覆盖了昂贵的仿生乳胶,当仿人机器人从炉子上拿起一口极热的锅时,如果你已经提供了行为链功能,那么将不必为修复烧焦的乳胶而发愁。
对温度进行感知的夹持器会对皮肤和肌肉做出反应,这一点可应用于安全方面。设想机器人助理厨师在准备沙拉时抓取了一个西红柿,而此时你不小心也抓着这个西红柿。如果机器人具备温度感知和瞬间释放功能,你便可以逃脱手指被切的危险。
这种简单行为链的另一种替代方案是针对仿人机器人在厨房中的每一个动作,在中央处理器中写出特定工作条件下的大量规则。但是,你很有可能忘记了一些发生几率很小的情况,诸如当检查馅饼时不要把头伸进烤箱。一些情况下,提供简单、低级的行为链处理潜在事故,而在需要时提供皮质抑制或是肾上腺素激励。我们可以回忆老鼠参加迷宫比赛的情况。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: