《仿人机器人原理与实战》一1.3 反射弧实验入门-阿里云开发者社区

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

《仿人机器人原理与实战》一1.3 反射弧实验入门

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

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

1.3 反射弧实验入门

现在到了你卷起衣袖运用理论的时间了,我们从一个简单的反射弧模拟器开始。该模拟器可以模仿之前详述的简单反射,但是两者之间有一些区别:在脊髓中的突触被隐藏了,而纺锤体纤维中的牵引传感器首先由瞬时接触开关代替,再由力传感器代替。事实上,你们会发现将模拟装置简单化的设计方法可以应用在任何一个仿人机器人的设计上。

1.3.1 器材清单

为了构建在本章的第一部分提到的一系列简单反射弧,我们需要以下器材:

  • 模拟量舵机(2个)
  • 瞬时接触开关(2个)
  • 10kΩ电位器(2个)
  • Arduino Uno微控制器
  • 5V直流电源
  • 10kΩ,1/4W电阻
  • 力敏电阻(1个)
  • 跳线或电线

现成的扩展板(可选)
这些产品的外形和品牌无关紧要,任何开关、舵机、电位器和Arduino兼容的微控制器都可以。例如,我们可以用一个微型按钮作为瞬时接触开关,也可以用两根裸电线、簧片开关和触发磁铁,或者光敏晶体管和发光二极管(LED)触发器进行替换。对于电位器,你可以用音量调节电位器代替,因为它更类似于关节在肌肉收缩下的运动。但与舵机连接使用时,音量调节电位器的反应太过灵敏,所以我们一般选用线性电位器。
如果你发现缺少一些零件,可以参考我们实验装置中的零件进行订购,如图1-5所示。在接线端我们安装了一对模拟量舵机、一对瞬时接触开关、一对10kΩ分压器和一个安装在端子上的力敏电阻(稍后详述)。Arduino Uno微控制器隐藏在Grove底座扩展板下。

5


我们通常对于不需要焊接的现成扩展板情有独钟,因为安装和拆卸都轻而易举。但正如图1-5所示,Grove扩展板有一个缺点:它没有面包板区,没有为附加组件留下足够的安装空间。另一个选择是利用Sparkfun和Maker Shed生产的螺纹扩展板,它为每一个Arduino接口留出螺丝端子接头和中央成型区,但是又缺少外部零件的插口。如果你不使用扩展板,那么至少要选择两边插头的跨接线,这样才能把舵机和微控制器连在一起。而Sparkfun 和Maker Shed也生产大量色彩鲜艳、容易辨别的跨接线,包括两边插头、一边插头一边内孔、两边内孔三种配置。
虽然我们已经看到过一些用Arduino上的5V电源驱动舵机的例子,但这不是好主意。我们要么为舵机配备独立的5V电源,要么为整个系统提供外部的5V电源。如果不为舵机配备独立电源,那么你可能会烧坏Arduino上的5V稳压器。考虑到Arduino Uno的每一引脚额定电流约40mA,而以HiTec HS-422为例,在无负荷的状态下,驱动一个模拟量舵机需要140mA。如果舵机处于重载状态,电流就会更大。
此外,我们标准的实验装置是安装在刨花板上的一对Arduino和公用电源。其中一个Arduino用于工作,另外一个用来测试代码和硬件。只有这样,我们才能把一个Arduino维持在最新版本,用于跟进项目,而另一个用于解决突发问题。配备两个微控制器不是必须选择,但我们发现这样做确实能节约很多时间。

1.3.2 电路

电路图如图1-6所示,模拟了一个简单的反射弧。其中,一套模拟量舵机充当肌肉,瞬时接触开关模拟肌肉纺锤体纤维,而电位器可以设置“肌肉”位置。Arduino Uno用于模拟纺锤体纤维或伸缩感受器的信号,以及肌肉的运动信号。

6


10kΩ线性电位器P1起分压作用,现将触头用导线连接至输入端A0。当开关接通时,瞬时接触开关S1将数字输入引脚D7与地接通。舵机1从引脚P9上接收脉宽调制信号。注意,5V直流电源直接与模拟量舵机相连,同时也与板上的5V稳压器接通。

1.3.3 构造

构建这个模型十分简单。你可以把舵机放在塑料或铝制支架上,或者简单地摆在桌面上。如果你配备了支架,那么可以选择把开关安装到模拟量舵机的臂上。还有一些零件我们没有用到,别担心,在接下来的实验中将一一用到。

1.3.4 编程

编写一个简单反射弧模拟器的Arduino程序需要调用舵机库,如清单1-1所示。舵机库隐藏了生成PWM信号的复杂过程, PWM信号不仅可以控制模拟舵机的位置,而且可以操控其运动速度。
q1
q2

清单1-1是对一个舵机例程的改写,这个例程包含在Arduino 1.0编程环境中。关键不同之处在于,当按下S1按钮时,保存舵机的当前位置,然后反射流程开始运行。反射完成之后,舵机回到对应电位器P1值的位置。
我们从头开始看一下这段代码,首先要调用舵机库,然后定义Arduino中使用的常数和引脚。本例中,系统输入端A0能读取电位器旋钮P1的位置,而通过数字引脚D7连接开关接口S1。D9连接舵机引脚servo1pin,PWM信号输出接驱动舵机。
servoDelay和servoReflexDelay变量定义了舵机的响应。为了使模拟舵机产生适当的响应,你可以调整延迟变量的值。实验显示,表中提供的值适用于初级的HiTec和TowerPro舵机。如果舵机在不工作的状态下抖动,你可以将延迟变量增加几毫秒。事实上,舵机反射延迟时间servoReflexDelay比舵机延迟时间servoDelay短,否则,相对正常的舵机速度来说,反射的运动速度较慢。
在安装过程中,首先按照舵机库的要求,把舵机和伺服对象连接在一起。其次,把牵引按钮引脚当作一个输入端,该端口内部自带上拉启动。或者,你也可以将10kΩ、0.125W电阻与5V电源连接起来实现输入,但这仅仅降低了编程的难度,对于外部硬件来说没有什么好处。
主循环函数首先从电位器的触头上读出一个0~5V的电压值。然后,map函数将A0输入端的值转化成0~1023个刻度,用来对应模拟量舵机的转角范围,一般为180°。当按下按钮S1时,通常为高电平的D7端口接地,同时反射被触发。
在模拟肌肉真实活动时,反射的幅度取决于舵机的初始位置。当舵机处于一个极限位置时—相当于肌肉完全收缩,反射仅刚好可以察觉。在另一极限位置时—相当于肌肉完全伸展,反射活动就会包含舵机的180°转角的大部分区域。
在调试系统时,直接在编程部分修改无法直观地看到舵机位置的微小变化。而Serial.println函数可以直接观察到任何变量的瞬时变化,所以,利用这一函数我们可以尽量减少调试时间。例如:
q3

输出变量FSRValue的值。注意,需要打开串行监视窗口并将Serial.begin函数加入启动程序,如
q4

q5

define DEBUG声明应该出现在程序的开头,你可以很方便地找到它,并且在调试完成后将其注释掉而不需要编译。同样,如果在本例中你调用该函数的波特率为默认值9600,那么串口监控器的波特率也应设置为9600。

1.3.5 操作

这样的模拟器或机电能近似模拟之前所描述的牵张反射触发时所发生的现象。模拟装置运转时,旋转电位器P1可以调整、校正舵机摇臂的转动位置,当按下开关S1时,反射立即触发。此时,反射的作用是通过旋转摇臂,躲避或阻挡物体的撞击,这取决于开关的安装位置。在反射发生后的1~2秒内,由于电位器P1的控制,舵机回到初始位置。更进一步,上载程序软件,确认在电位器P1的不同阻值下,摇臂能在180°范围内控制自如。接着,旋转电位器旋钮P1使得舵机摇臂处于中间位置,接着按下按钮S1。如果进展顺利,舵机将快速旋转至终点,紧接着回到中间位置。
接下来,你需要解决系统中存在的问题。如果你的舵机抖动,则尝试改变servoDelay变量的值。如果你闻到什么东西烧焦了,大概是Arduino的稳压器烧坏了。这是一个很好的机会,你们可以尝试不同型号的舵机和电位器。

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

分享:

华章出版社

官方博客
最新文章
相关文章
展开
官网链接