智能玩具机器人工作原理Word文件下载.docx
- 文档编号:18536756
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:24
- 大小:28.12KB
智能玩具机器人工作原理Word文件下载.docx
《智能玩具机器人工作原理Word文件下载.docx》由会员分享,可在线阅读,更多相关《智能玩具机器人工作原理Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
而不是指挥每一个行动都使用一个中央计算机,
智能玩具机器人控制低级的行为与低级别的电脑。
程序的导演,罗德尼?
布
鲁克斯认为,这是人类智慧的更精确的模型。
自动大多数事情;
我们不决定他们意识的最高水平。
人工智能的真正的挑战是了解自然的情报是如何工作的。
发展人工智能不
像建立一个人工心脏——科学家们没有一个简单的,具体的模型。
我们知道大脑包含数十亿数十亿的神经元,我们认为,通过建立学习不同神经元之间
的电气连接。
但我们不知道如何所有这些连接添加到更高的推理,甚至低级操作。
复杂的电路似乎难以理解。
因此,人工智能主要是理论研究。
科学家们假设如何以及为什么我们学习和思考,并使用智能玩具机器人他们尝试自己的想法。
布鲁克斯和他的团队专注于人形智能玩具机器人,因为他们认为能够体验世界像人类是至关重要
2/17
的发展类似人类的智能。
这也使人们更容易与智能玩具机器人交互,这可能
让智能玩具机器人更容易学习。
正如物理智能玩具机器人的设计是一个方便的工具,了解动物和人体解剖
学,人工智能的研究有助于理解自然的情报是如何工作的。
对于一些智能玩
具机器人,这观点是智能玩具机器人设计的终极目标。
其他人想象一个世界,
我们生活与智能机器和使用各种各样的小智能玩具机器人对体力劳动,卫
生保健和沟通。
大量的智能玩具机器人专家预测,智能玩具机器人进化最终会把我们变成半机械人,人类与机器集成。
可以想象,人们在未来可能决定加载到坚固的智能玩具机器人,活了几千年!
在任何情况下,智能玩具机器人一定会发挥更大的作用在未来在我们的日常生活中。
在未来的几十年里,智能玩具机器人将逐渐走出工业和科学世界和日常生活中,以同样的方式,电脑在1980年代蔓延到家里。
了解智能玩具机器人的最佳方法是看具体设计。
下一个页面上的链接将向您展示世界上目前的智能玩具机器人项目。
机器人、迷宫和包容体系结构
用Java语言编写虚拟机器人
机器人模拟器既是严肃的研究工具,也是能够通过Java?
编程创造乐趣
的领域。
学习如何使用Simbad(一种基于Java3D技术的开放源码机
器人模拟器)和Java语言创建能够跟踪光源和走迷宫的虚拟机器人,并
了解包容体系结构的机器人设计概念。
3/17
简介
机器人学很早就超出了科学幻想的领域,并在工业自动化、医疗、太空探索等领域发挥
着重要作用。
软件机器人模拟器不但简化了机器人工程师的开发工作,
还为研究人工智
能(artificialintelligence,AI)算法和机器学习提供了工具。
以这种研究为中心的模拟
器之一是开放源码的
Simbad项目,它基于Java3D
技术(参见参考资料)。
本文
讲解如何使用Simbad工具箱编写虚拟机器人,并介绍
包容体系结构(subsumption
architecture)的机器人设计原理。
本文首先简要概述机器人学并解释包容体系结构概念。
然后介绍
Simbad工具箱并演
示如何在Simbad
中实现包容体系结构。
然后使用这个体系结构编写一个简单的机器
人。
最后,讨论迷宫并编写第二个机器人,与HomerSimpson
不同(参见参考资料),
这个机器人会自己走出迷宫。
这里的机器人不是现实存在的,
但是“活”在Simbad的
虚拟世界中。
回页首
机器人编程
机器人这个词没有被普遍接受的定义。
根据本文的目的,可以认为一个机器人由三个部分组成:
一个传感器(sensor)集合
一个定义机器人的行为的程序
一个传动器(actuator)和受动器(effector)集合
传统的机器人学
在传统的机器人学中(也就是1986年之前的机器人学),机器人拥有一个中央“大脑”,
这个大脑构建并维护环境的“地图”,然后根据地图制定计划。
首先,机器人的传感器(例
如接触传感器、光线传感器和超声波传感器)从它的环境中获得信息。
机器人的大脑将
传感器收集的所有信息组合起来并更新它的环境地图。
然后,机器人决定运动的路线。
它通过传动器和受动器执行动作。
传动器基本上是一些发动机,它们连接到受动器,受
动器与机器人的环境交互。
受动器包括轮子和机械臂等(传动器这个词常常用来泛指
传动器或受动器)。
简单地说,传统的机器人接收来自传感器(可能有多个传感器)的输入,组合传感器信
息,更新环境地图,根据它当前掌握的环境视图制定计划,最后执行动作。
但是,这种
方法是有问题的。
问题之一是它需要进行大量计算。
另外,因为外部环境总是在变化,
所以很难让环境地图符合最新情况。
一些生物(比如昆虫)不掌握外部世界的地图,甚
4/17
至没有记忆,但是它们却活得非常自在;
模仿它们会不会更好呢?
这些问题引出了一种
新型的机器人学,称为基于行为的机器人学(behavior-basedrobotics,BBR)。
BBR
在当今的机器人实验室中占主要地位。
包容体系结构
可以使用包容体系结构(subsumptionarchitecture)实现BBR。
包容体系结构的发明
者是RodneyA.Brooks(MITAILab的现任领导)在1986年的文章“Elephants
Don'
tPlayChess”中提出了包容体系结构(参见参考资料)。
基于行为的机器人依赖
于一组独立的简单的行为。
行为的定义包括触发它们的条件(常常是一个传感器读数)
和采取的动作(常常涉及一个受动器)。
一个行为建立在其他行为之上。
当两个行为发生冲突时,一个中央仲裁器(arbitrator)决定哪个行为应该优先。
机器人的总体行为是突然的(emergent),根据BBR支持者的说法,它的效果好于其部分之和。
较高层行为包容(subsume)较低层行为。
我们并不创建整个机器人,只需添加行为并看看会发生什么。
Simbad:
一个机器人模拟环境
LEGOMindstorms
本文主要关注软件机器人的构建,但是如果希望构建物理机器人,那么可以考虑使用
。
总部的宣言说,“我们将让机器人学发生巨变,
就像iPod
给音乐界
带来的影响。
”LEGO于1998
年推出了Mindstorms
机器人学工具箱的第一版。
这
个工具箱很快就变得畅销了,大大超出了LEGO
的预期。
尽管它的价格似乎不便宜
($250),但是要知道这只相当于
iPodClassic
的价格,而且每个人都拥有iPod。
但是,iPod没Mindstorms
那么容易破解。
在
Mindstorms发布后不久,硬件黑客就
开始取出MindstormsRCXbrick
(Mindstorms
机器人的“大脑”)并进行反向工程。
LEGO没有预料到这种情况,而且不确定是否应该制止这种做法。
最后,
LEGO
的管
理层决定允许Mindstorms黑客的这种行为。
由此产生了一个兴旺的
Mindstorms社区(参见参考资料)。
尽管Mindstorms
只附
带一种拖放式图形化编程语言
NXT-G,但是软件黑客很快就在
Mindstorms
中添加了
对C和Java等其他语言的支持。
结果,大约一半的
由成年人使用。
可以使用Simbad
在软件中模拟机器人。
该项目
Web
站点指出,它
“让程序员能够
编写自己的机器人控制器、修改环境和使用可用的传感器。
它主要向研究人员
/程序员
提供一个基本工具,用来在自治机器人学和自治代理上下文中研究情景人工智能
(SituatedArtificialIntelligence
)、机器学习和其他
AI算法。
”
5/17
Simbad是由LouisHugues和NicolasBredeche用Java语言编写的。
在符合
GNUGeneralPublicLicense的条件下,可以免费使用和修改这个项目(可从SourceF上获得)。
技术细节
Simbad环境可以包含代理(Agent,也就是机器人)和固定对象(盒子、墙、灯等等)。
Simbad环境中的时间划分成离散的“嘀嗒(tick)”。
Simbad在代理之间调度时间分配。
与物理机器人一样,Simbad代理也有传感器(距离、接触、光线等等)和传动器
(常常是轮子)。
在每个嘀嗒时刻,一个机器人可以执行动作。
代理通过覆盖performBehavior()方法决定它们的行为。
在performBehavior()中,机器人可以读取传感器读数并设置它的平移和旋转速
度。
performBehavior()执行的时间很短,所以不能发出“前进一米”这样的命令。
为了解决这个限制,通常必须跟踪机器人的状态。
还可以使用计时器变量记录保持当前状态的时钟嘀嗒数。
SimbadAPI
在本文的练习中,主要使用两个SimbadAPI包:
simbad.sim:
这个包中的类代表机器人和它所在的环境。
包括:
oAgent:
Agent就是机器人。
oArch:
机器人可以绕过或从下面通过的拱形结构。
oBox:
可以作为机器人的环境中的障碍物。
oCameraSensor:
可以从机器人的视角查看机器人的环境。
oEnvironmentDescription:
代表“环境”,可以在其中添加机器人和墙或
盒子等对象。
oLampActuator:
可以添加到机器人上的灯。
oLightSensor:
感应光线的强度。
oRangeSensorBelt:
包含机器人周围的一组距离传感器。
oRobotFactory:
用这个类在机器人上添加传感器。
6/17
oWall:
另一种障碍物。
simbad.gui:
这个包中的类显示机器人环境并提供控制手段。
这些类包
括:
oSimbad:
显示机器人环境、传感器输入和控制的框架。
在Simbad中实现包容体系结构
Roomba
Roomba用真空吸尘器打扫地毯。
它是由iRobot开发的,这是一家由三位MIT校友
(RodneyBrooks、ColinAngle和HelenGreiner)创办的公司。
Roomba是使用包
容体系结构构建的并提供一个开放接口,可以通过这个接口实现各种有趣的效果。
TodE.
Kurt的书HackingRoomba介绍了许多有意思的应用(参见参考资料)。
要在Simbad中实现包容体系结构,首先定义Agent的一个子类
BehaviorBasedAgent。
BehaviorBasedAgent包含一个Behavior数组和
一个boolean矩阵,这个矩阵决定Behavior的优先级:
privateBehavior[]behaviors;
privatebooleansuppresses[][];
BehaviorBasedAgent作为Behavior的调度器。
清单1中的代码循环处理各
个行为(使用currentBehaviorIndex类变量记录接下来应该执行哪个行为)并
在它们之间做出仲裁:
清单1.循环处理行为并进行仲裁的代码
protectedvoidperformBehavior(){
booleanisActive[]=newboolean[behaviors.length];
for(inti=0;
i<
isActive.length;
i++){
isActive[i]=behaviors[i].isActive();
}
booleanranABehavior=false;
while(!
ranABehavior){
booleanrunCurrentBehavior=isActive[currentBehaviorIndex];
if(runCurrentBehavior){
suppresses.length;
if(isActive[i]&
&
suppresses[i][currentBehaviorIndex]){
runCurrentBehavior=false;
break;
7/17
if(currentBehaviorIndex<
behaviors.length){
VelocitiesnewVelocities=behaviors[currentBehaviorIndex].act();
this.setTranslationalVelocity(newVelocities
.getTranslationalVelocity());
this
.setRotationalVelocity(newVelocities
.getRotationalVelocity());
ranABehavior=true;
if(behaviors.length>
0){
currentBehaviorIndex=(currentBehaviorIndex+1)
%behaviors.length;
注意,performBehavior()覆盖
了simbad.sim.Agent.performBehavior()。
Behavior有两个abstract方法:
isActive()返回一个布尔值,表示根据当前的传感器状态,是否应该激
活这个行为(所有Behavior共享一组传感器)。
act()返回两个速度(依次为平移速度和旋转速度),表示希望发动机执
行的动作。
示例:
追逐光线的漫游机器人
现在创建一个机器人示例,它有以下四个Behavior(按照优先级的降序列出),见清单2到清单5(下载本文使用的源代码)。
Avoidance:
在发生冲突之后或为了避免冲突,改变方向。
LightSeeking:
向光线移动。
8/17
Wandering:
随机地改变方向。
StraightLine:
沿直线移动。
清单2.Avoidance类(基于SimbadSingleAvoiderDemo.java演
示代码)
publicbooleanisActive(){
returngetSensors().getBumpers().oneHasHit()
||getSensors().getSonars().oneHasHit();
publicVelocitiesact(){
doubletranslationalVelocity=0.8;
doublerotationalVelocity=0;
RangeSensorBeltsonars=getSensors().getSonars();
doublerotationalVelocityFactor=Math.PI/32;
if(getSensors().getBumpers().oneHasHit()){
//ifranintosomethingtranslationalVelocity=-0.1;
rotationalVelocity=Math.PI/8
-(rotationalVelocityFactor*Math.random());
}elseif(sonars.oneHasHit()){
//readsthethreefrontquadrants
doubleleft=sonars.getFrontLeftQuadrantMeasurement();
doubleright=sonars.getFrontRightQuadrantMeasurement();
doublefront=sonars.getFrontQuadrantMeasurement();
//ifobstaclenear
if((front<
0.7)||(left<
0.7)||(right<
0.7)){
doublemaxRotationalVelocity=Math.PI/4;
if(left<
right)
rotationalVelocity=-maxRotationalVelocity
-(rotationalVelocityFactor*Math.random());
else
rotationalVelocity=maxRotationalVelocity
translationalVelocity=0;
}else{
rotationalVelocity=0;
translationalVelocity=0.6;
9/17
returnnewVelocities(translationalVelocity,rotationalVelocity);
清单3.LightSeeking类(基于SimbadLightSearchDemo.java
演示代码)
floatllum=getSensors().getLightSensorLeft().getAverageLuminance();
floatrlum=getSensors().getLightSensorRight().getAverageLuminance();
doubleluminance=(llum+rlum)/2.0;
//Seeklightifit'
snear.
returnluminance>
LUMINANCE_SEEKING_MIN;
//turntowardslight
doubletranslationalVelocity=0.5/(llum+rlum);
doublerotationalVelocity=(llum-rlum)*Math.PI/4;
清单4.Wandering类
returnrandom.nextDouble()<
WANDERING_PROBABILITY;
returnnewVelocities(0.8,random.nextDouble()*2*Math.PI);
清单5.StraightLine类
returntrue;
returnnewVelocities(0.8,0.0);
清单6指定行为的优先次序:
10/17
清单6.指定行为的优先次序
privatevoidi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 玩具 机器人 工作 原理
![提示](https://static.bdocx.com/images/bang_tan.gif)