2024年9月1日发(作者:荤清宁)
目录 i
目 录
第一章 绪论 .......................................................... 1
1.1 机器人开发平台现状 ........................................... 1
1.2 Microsoft Robotic Studio 概述 ................................ 3
1.3 Microsoft Robotic Studio的组成 ............................... 4
1.2.1 Visual Programming Language(VPL) ........................ 4
1.2.2 Microsoft DSS Manifest Editor(DDSME) .................... 5
1.4 本文主要研究成果与内容安排 ................................... 5
第二章 VPL的组件与功能 .............................................. 7
2.1 数据类组件 ................................................... 7
2.1.1 Variable(变量组件) ...................................... 7
2.1.2 Calculate(计算组件) ..................................... 7
2.1.3 Data(数据组件) .......................................... 8
2.1.4 Math Function(数学组件) ................................. 8
2.2 逻辑类组件 ................................................... 9
2.2.1 If组件 ................................................. 9
2.2.2 Switch组件 ............................................. 9
2.2.3 Join组件 ............................................... 9
2.2.4 Merge组件 ............................................. 10
2.3 输出类组件 .................................................. 10
2.3.1 Simple Dialog组件 ..................................... 10
2.3.2 Flexible Dialog组件 ................................... 11
2.3.3 Log组件 ............................................... 12
2.3.4 TexttoSpeechTSS组件 ................................... 12
2.4 通用器件 .................................................... 13
2.4.1 Generic Contact Sensors ................................ 13
2.4.2 Sick Laser Range Finder ................................ 14
2.4.3 Generic Differential Driver ............................ 14
目录
ii
2.5 输入类器件 ................................................... 15
2.5.1 Desktop Joystick组件 ................................... 15
2.5.2 Direction Dialog组件 ................................... 15
2.5.3 Game Controller组件 .................................... 16
2.5.4 Webcam组件 ............................................. 16
2.6 定义类组件 ................................................... 16
2.7 本章小结 ..................................................... 17
第三章 机器人运动规划 ............................................... 19
3.1 避障规划(避障行为) ........................................... 19
3.1.1 基于接触传感器的避障实现 ............................... 19
3.1.2 测距传感器的避障实现 ................................... 21
3.2 运动规划中会出现的问题 ....................................... 22
3.2.1 抖动问题 ............................................... 22
3.2.2 峡谷效应问题 ........................................... 24
3.3 本章小结 ..................................................... 25
第四章 基于Microsoft Robotic Studio的机器人避障的实现 .............. 27
4.1 采用模型的选择 ............................................... 27
4.2 基于激光测距传感器的避障程序实现 ............................. 30
4.3 基于接触传感器的避障程序实现 ................................. 35
4.4 本章小结 ..................................................... 38
第五章 虚拟环境的实现与测试 ......................................... 39
5.1虚拟环境简介 ................................................. 39
5.2 虚拟环境的组成 ............................................... 40
5.3 试验环境的设定 ............................................... 41
5.4 机器人避障在虚拟环境中的实测 ................................. 44
第六章 总结与展望 ................................................... 47
6.1 本文总结 ..................................................... 47
6.2 下一步的试验方向 ............................................. 48
致谢 ................................................................ 49
参考资料 ............................................................ 50
第一章 绪论 1
第一章 绪论
当今,随着低成本开发平台变得日益唾手可得,人们将机器人用于教育与最
终应用的机会也在不断增加。在这个过程中,开发环境也随着机器人的发展而发
展。开发环境如今正在不断提升自己的应用性和兼容性,一个好的开发平台将能
完成机器人开发的大部分工作,包括程序设计、虚拟测试、驱动设定等。在2006
年,Microsoft®公司发布了新一代的机器人开发平台Microsoft Robotics Studio,并
广泛的与机器人厂商合作,如LEGO®公司,iRobot®公司等,使该平台兼容更多
机器人平台。该平台还使用了虚拟环境进行机器人的调试,使开发成本大大降低。
其中提供的Visual Programming Language编程环境使机器人开发的进入门坎降低,
使更多的学生、开发人员、爱好者能够投入到机器人开发中,在微软大旗的号召
下,这个平台发展迅速,越来越多的厂商与其合作,在2008年初,微软公司正式
发布了新的开发平台Microsoft Robotics Developer Studio 2008。
1.1 机器人开发平台现状
“机器人软件开发平台”指的是用来给多种机器人设备开发程序的软件包。它一
般包括下列内容:
·统一的编程环境
·统一的编译执行环境
·可重用的组建库
·完备的调试/仿真环境
·对多种机器人硬件设备的“驱动”程序支持通用的常用功能控制组件,例
如计算机视觉技术、导航技术和机械手臂控制等[1]。
机器人控制软件的花费在整个机器人应用系统预算中占据了很大比例。比如,
一个自动控制项目的80%工作量都集中在系统集成方面,包括软件的发开和定制。
所以机器人开发平台的作用就是减少软件工程师的工作量,同时减少项目开支。
基于Microsoft Robotics Studio的机器人设计
2
除了软件工程的问题外,在一个真正的机器人项目中还要涉及大量的人工智
能。一个集成了许多现成的、可靠的组件库的统一软件开发平台,在应付各种机
器人工程时能帮上大忙。
最后的问题是“行为协作”。许多文献中都有对行为协作的讨论。正因为这是一
个普遍存在的问题,所以一些平台提供了统一的解决方案。
目前,主流的机器人软件开发平台有10种,见下表:
表1.1 各软件开发环境
平台名称
Evolution Robotics ERSP
Microsoft Robotics Studio
OROCOS
Skilligent
URBI
Webots
Player,Stage,Gazebo
iRobot AWARE
OpenJAUS
CLARAty
平台
平台
控件库
机器学习插件
平台
仿真环境
平台
平台
平台
平台
所属类型
商用
非商业用途免费
开源且免费
商用
商用
商用
开源且免费
商用
开源
开源
第一章 绪论 3
表1.2 功能评测
开源
免费
支持
Windows
支持
Linux
分布式
行为协作
内置机械
臂模块
内置物体
识别模块
内置导航
模块
学习工具
仿真环境
硬件支持
范围
可重用自
定义组件
实时系统
综上所述,由费用和功能方面考虑,我们选择了MSRS作为这次论文的软件
开发环境,MSRS具有免费,支持硬件范围大,有部分硬件虚拟且可以重复使用自
定义模块、有虚拟环境的特点,所以非常适合我们这次试验。
ERSP MSRS OROCOS Skilligent URBI Webots
否
是
是
是
否
是
否
是
是
否
否
小
是
否
否
非商
业用
是
否
是
是
是
否
是
否
是
大
是
否
是
是
否
是
否
否
是
否
否
否
否
中
是
是
否
否
是
是
是
是
是
是
是
是
否
中
无数据
否
否
否
是
是
是
是
否
否
否
否
是
大
是
否
否
否
是
是
是
否
否
否
否
否
是
大
否
否
Player,
Stage,Gazebo
是
是
是(仿真)
是
是(有限的)
否
否
否
否
否
是
中
否
否
1.2 Microsoft Robotic Studio 概述
Microsoft Robotic Studio 是一款基于Windows操作系统,为机器人爱好者、
学术研究和商业开发人员对不同机器人硬件设计应用程序的平台。这个平台包含
了一些简单的REST-style程序,实时的基础服务,部分虚拟硬件和虚拟工具。这
个平台可以让开发人员为各种各样的机器人设计程序。
基于Microsoft Robotics Studio的机器人设计
4
Microsoft Robotic Studio包含了Visual Programming Language(VPL),这是一种
基于C# 程序的新的开发软件,是机器人的开发变得非常简单。只需要拖动框体并
连接起来就可以完成自己特有的服务[2]。
同时在这个开发环境中包含了3D图形虚拟程序,可以用3D虚拟模型仿真机
器人的运动。开发环境中的虚拟工具包括AGEIA科技公司出产的AGEIA™
PhysX™ Technology,这是一种硬件加速的图形环境,可以模拟真实世界的机器人
物理环境。
Microsoft Robotic Studio使用了Windows窗口或者网页作为控制界面,开发人
员或操作人员可以连接网络直接控制机器人的行为。
该开发环境还自带有多种传感器的数据和驱动,在编程中可以方便的调用,
同时Microsoft还与多家大型机器人开发厂商进行合作,越来越多的机器人和传感
器的数据将会添加到这个开发环境里,使开发过程更加方便。
1.3 Microsoft Robotic Studio的组成
Microsoft Robotic Studio包含了许多组件,主要由Visual Programming
Language(VPL)、Microsoft DSS Manifest Editor(组件加载程序DDSME)、虚拟环境
组成。下面将逐一介绍这三个工具。
1.2.1 Visual Programming Language(VPL)
Microsoft Visual Programming Language是一个基于图形化数据流的程序模型。
它适合于编写并行或是分布式处理程序。VPL面对的对象是对变量和逻辑有一定
概念初级程序员。但是,VPL也不只是面对新手的,各组件可以让高级程序员进
行进一步的开发。同样的,VPL也不是只能用于机器人的开发,它在其它程序方
面也有不错的表现。VPL为程序爱好者、学生、网页程序员、高级程序员建立了
一个广阔的开发环境。
第一章 绪论 5
1.2.2 Microsoft DSS Manifest Editor(DDSME)
Microsoft DSS Manifest Editor是为开发者建立和编辑DSS服务清单而设计的。
服务清单是一个XML文件,包含了服务列表及服务的设置。你可以用这个程序开
始一个DSS runtime服务(清单加载服务)。
DSSME的窗口包含了建立、加载和储存清单的选项。编辑器是用来创建你所
使用的连接设置文件(清单文件)的项目的。DSSME同样包含工具栏,用来快速的
连接到所需的普通命令。
1.2.3 虚拟环境
Microsoft Robotics Studio的目标是加快机器人的开发、试验与应用。在这个过
程中虚拟系统扮演着重要的角色。由于价格、广泛的应用性和强大的性能,基于
PC和高端游戏机的虚拟系统出现了。
平台所提供的虚拟环境对真实世界的时间环境、物理环境进行了逼真的模拟,
同时提供了一定的视觉效果。AGEIA PhysX Technologies为这个虚拟环境提供了相
当强大的图形环境[3]。
1.4 本文主要研究成果与内容安排
由于这次选择的平台较新,所以当前可用的资料很少且都是英文资料,作者
在译制学习的过程中同时进行了大量尝试性的试验,阅读了大量有关机器人运动
规划相关文献,掌握了运动避障的程序设计及存在的问题,己经对Microsoft
Robotics Studio环境下机器人程序开发有了较清楚的了解,对MSRS系统的编程与
虚拟和机器人避障规划开展了系统的研究,取得了如下研究结果:
1、对MSRS开发平台有了较全面的了解,并且对VPL提供的各组件进行了
尝试性的试验。
2、对MSRS平台的虚拟环境进行了研究,建立了试验所用的虚拟环境,并加
入了具有多种组件的机器人模型。
基于Microsoft Robotics Studio的机器人设计
6
3、对机器人的两种避障方式进行了研究,分析了程序流程,并根据避障理论
设计了试验用机器人程序。
4、对避障过程中出现的问题进行了学习,对峡谷效应和抖动现象进行了分析
并研究了解决方案。
作者在前期主要尝试和学习MSRS平台的各种功能,在MSDN的资料库中进
行了搜索和阅读,了解了当前MSRS平台的研究方向和研究成果。同时还进行了
机器人运动规划的学习,了解了机器人避障实现的流程和编程方法,学习了机器
人的行为规则。
中期作者主要开始自行设计基于不同传感器的机器人的避障程序,并对所编
写的程序进行修改和完善,解决避障运动中出现的问题,同时尝试分析这些问题,
了解了峡谷效应和抖动问题。
后期作者将任务集中在论文的编写和虚拟环境的实现与调试,自行设计并完
成了试验所使用的虚拟环境,并尝试在虚拟环境中测试了所完成的基于激光测距
传感器的避障程序。
第二章 VPL的组件与功能 7
第二章 VPL的组件与功能
Visual Programming Language为机器人的开发提供了大量预置的组件,可以让
用户轻松搭建所需要的程序,同时这些组件也可以进行二次开发,本章将介绍这
些组件,我们将会在后面的应用中大量应用这些组件[4]。
2.1 数据类组件
数据类组件包括Variable组件、Calculate组件、Data组件和Math Function组
件。
2.1.1 Variable(变量组件)
Variable模块是变量的实体
化,这个模块可以在内部建立多
个变量,同时这些变量可以使用
不同的数据类型(见图2.1)。该模
块只具有单输入单输出。 图2.1 Variable组件及其数据类型设定
2.1.2 Calculate(计算组件)
Calculate组件是建立数学运算公式的模块,在中间的输入对话框中可以调用
前方模块输入的数据进行运算。该模块单输入单输出。
图2.2 Calculate组件
基于Microsoft Robotics Studio的机器人设计
8
2.1.3 Data(数据组件)
Data组件是定义定量的模块,用户可以自己定义需要的值,与Variable相同,
Data模块也可以定义定量的数据类型。该模块单输入单输出。
图2.3 Data组件与数据定义
2.1.4 Math Function(数学组件)
Math Function模块是提供数学模型的一个组件,这个组件可以提供随机数、
平方、角度变换、弧度变换等功能。该组件使用单输入单输出。
图2.4 Math Function组件与其所提供的运算类型
第二章 VPL的组件与功能 9
2.2 逻辑类组件
逻辑类组件主要包括If组件、Switch组件、Join组件和Merge组件。
2.2.1 If组件
If组件同C语言环境中的If语言相同,这个组件由一个输入
口和两个输出口组成,中间可以填写判断语句,判断语句可以在文
字栏中选择前方输入的数据量。
图2.5 If组件
2.2.2 Switch组件
Switch模块是一个控制模块,它通过将控制
传递给其体内的一个处理单元来处理多个选择和
枚举。框体左下角的加号可以增加更多的判断语
句,文本输入栏用来输入判断公式。此模块为单
输入多输出模块。 图2.6 Switch组件
2.2.3 Join组件
Join组件是用来将多种输入加入
名称并进行合并输出的组件,我们可以
使用这个组件将多种数据命名,然后通
过一个输出口输出,这个模块默认可以
为两个名称赋值,我们可以在框体上单
击右键添加更多名称。该模块为单输入
多输出模块。 图2.7 Join组件
基于Microsoft Robotics Studio的机器人设计
10
2.2.4 Merge组件
Merge组件和Join组件有许多相同的地方,它们都是将多数据合并然后通过
单端口输出,但是Merge组件并没有为数据命名的能力,同时,Merge组件不能
进行数据的命名,且Merge组件需要输入的数据具有相同属性。Merge模块是一
个多输入多输出的模块。
图2.8 Merge组件及其应用
2.3 输出类组件
输出类组件有Simple Dialog组件、Flexible Dialog组件、Log组件和Text to
Speech(TTS)组件。
2.3.1 Simple Dialog组件
Simple Dialog组件为VPL的环境提供了一个简单实用的输出模型。它采用对
话框的模式显示所要输出的数据,连接方式包括Alert Dialog、Prompt Dialog、
Confirm Dialog三种。其中Alert Dialog是出现框体,中间包含文字数据,Prompt
Dialog是对话框模式,用户在使用时可以输入部分数据,而Confirm Dialog可以使
用OK和Cancel来对框体进行操作。
第二章 VPL的组件与功能 11
图2.9 SimpleDialog组件
2.3.2 Flexible Dialog组件
Flexible Dialog组件是一个可变的对话输出组件,组件提供了大量的可更改的
对话框选项,包括标题等类型都可以根据需要进行改变。
图2.10 FlexibleDialog组件及其连接选项
基于Microsoft Robotics Studio的机器人设计
12
2.3.3 Log组件
Log组件是VPL为程序调试数据进行记录的模块,它的数据输入选项有三个:
Log Info选项,用于记录程序中的信息;Log Warning用于记录程序运行中的警告;
Log Error用于记录程序运行中的错误。
图2.11 Log组件
2.3.4 TexttoSpeechTSS组件
TexttoSpeechTSS组件是一个文字语音转换的模块,它可以将字符或者数字通
过语音进行输出。
图2.12 TexttoSpeechTSS组件及其连接选项
第二章 VPL的组件与功能 13
2.4 通用器件
MSRS中集合了许多传感器和驱动器的模拟程序,其中包括许多机器人厂商的
产品,如LEGO品牌下的NXT、RXT两个系列的机器人使用的接触传感器、光敏
传感器和单轮或多轮驱动器,Pioneer 3DX的激光传感器等,还有一些通用传感器
和驱动器,通过加载不同的驱动清单,从而达到在不同的机器人平台上使用通用
的程序。
在VPL中我们主要用到3种通用器件,分别是Generic Contact Sensors、Sick
Laser Range Finder、Generic Differential Drive、这3个组件包含一个驱动组件和两
个传感器组件。
2.4.1 Generic Contact Sensors
Generic Contact Sensors组件是接触传感器的虚拟模块。这个模块能在大部分
的机器人硬件平台上使用。该模块有一进两出的接口,可以同时通过接口来设定
传感器的开启和关闭,同时也可以从输出口获取接触时传感器的实时状态。
图2.13 GenericContactSensors组件及其连接方式
基于Microsoft Robotics Studio的机器人设计
14
2.4.2 Sick Laser Range Finder
Sick Laser Range Finder是通用激光传感器模块。该模块同接触传感器类似,
有3个输入输出端口,通过输入端口可以设定测量开始和重新启动,而输出端口
有两个,橘红色圆形端口用来输出测量数据,方形端口用来获取传感器状态。
图2.14 SickLaserRangeFinder组件及其连接方式
2.4.3 Generic Differential Driver
Generic Differential Driver是通用差分运动驱动器模块。只要具有差分驱动器
的机器人硬件就可以使用该模块进行程序设计。该模块具有1输入2输出共3个
端口,其中输入端口可以设定驱动器的驱动力、速度、转角、转弯弧度等数据,
而两个输出口,方形可以输出差分驱动器的各种状态量,如启动是否成功,转角
是否成功等,圆形输出端口可以输出转角度数等实时变量,使开环和闭环系统的
设计更加方便。
图2.15 GenericDifferentialDrive组件及其连接方式
第二章 VPL的组件与功能 15
2.5 输入类器件
输入类组件为机器人添加外部控制提供了良好的对话界面。在VPL里为用户
提供了专用输入组件和通用输入组件,这些输入组件有对话框、图像输入等多种
模式,使程序设计更加方便快捷。在VPL中经常使用的是Desktop Joystick、Direction
Dialog、Game Controller、Webcam四种组件[5]。
2.5.1 Desktop Joystick组件
Desktop Joystick组件能够在桌
面虚拟一个操纵杆界面。该模块具
有1输入2输出,输入口可以设定
按键和X,Y轴的初始值,输出口
可以输出按键和轴向状态和各按键
的值。 图2.16 DesktopJoystick组件及控制界面
2.5.2 Direction Dialog组件
Direction Dialog组件提供一个类似操控板的界面,上面有“上、“下”、“左”、
“右”和“Stop”四个按键。这个组件同Desktop Joystick组件一样,通过一个输
入口进行初始值的设定,两个输出口分别输出按键状态和按键值。
图2.17 DirectionDialog组件及控制界面
基于Microsoft Robotics Studio的机器人设计
16
2.5.3 Game Controller组件
Game Controller组件是一个设定为硬件驱动的
模块,通过加载不同的Manifest(驱动清单)即可在不
同的控制器上使用基于该模块所设计的程序。此模块
的输入输出程序同Desktop Joystick相同,可以设置
初始值同时可以输出状态和变化值。 图2.18 GameController组件
2.5.4 Webcam组件
Webcam组件同Game Controller组件相同,也为硬件驱动组件,加载Manifest
可以实现平台的移植。通过输入口可以设定Webcam的开启与重起,通过数据输
出口可以输出视频图像、状态值,同时可以连接图像处理模块进行图像处理,可
以实现识别、辨认等程序,状态输出口输出Webcam的实时状态。
图2.19 WebCam组件
2.6 定义类组件
定义类组件可以由用户自己设计组件所能完成的功能,也可以理解为文字编
程中的子程序。用户可以在其中添加多种组件,从而使模块完成特定的功能,在
VPL中,Microsoft为用户提供了Activity组件实现这些功能。
Activity组件是一个单输入自定义输出的模块,一个模块可以
分为多个子模块,通过输入选择的不同从而选择不同的子模块执
行,同时每个子模块可以自定义输出数量和模式。
第二章 VPL的组件与功能 17
图2.20 Activity组件的实际应用
2.7 本章小结
本章介绍了VPL为用户提供的各种组件,这些组件通过不同的组合即可轻松
完成程序的设计,我们可以看到VPL语言中包括了数据类组件、逻辑类组件等多
种组件。在VPL中,左侧的借口就代表着接入,而右侧相应的就是输出口。通过
连接框体到框体的输入输出口就可以完成一个程序,连接线间的箭头代表了数据
流的方向。
数据类组件可以根据不同程序来改变变量或者定量的数据类型,并且数据类
组件可以进行数据的读取与写入的工作。
硬件组件功能都可以来进行定义,所有组件都可以通过加载不同Manifest(驱
动清单)完成硬件平台的移植。
定义类组件在VPL中是一个很重要的组件,根据自己设定的Activity组件可
以在整个程序中随意调用,而且可以自己定义其中的输入输出功能。
基于Microsoft Robotics Studio的机器人设计
18
第三章 机器人运动规划 19
第三章 机器人运动规划
典型的计算机程序按照规划顺序执行每项操作,直到计算出所需要的结果。
但是,机器人则需要具有根据机会进行处理的能力。
移动机器人不知道自己在环境中将会发现什么东西;附近的物体可能没有事
先通知机器人;移动机器人通常也不能非常明确地知道自己当前正在什么位置(随
着机器人的移动,这种定位不确定性会越来越严重)。
早期的机器人研究是通过解释环境中的每一个物体建立环境模型,然后据此
规划机器人的相应运动,最后控制机器人执行这些规划。这种方法的效果非常不
好。由于计算量太大,移动机器人的行走缓慢,反应迟钝,从而容易受到环境中
意想不到的变化的冲击。在机器人进行规划的过程中,动态环境经常容易发生变
化,等到机器人规划完毕准备执行时,环境的当前状况可能已经完全不符合这种
规划了。
因此,新的运动规划方法诞生了。这些新方法应该能使机器人在环境中自主
地寻找每个物体,而不是让编程人员去告诉它哲学物体的具体位置。为了达到这
个目的,移动机器人必须具备能够检测环境变化的传感器系统。由于环境中的物
体可能会发生变化,机器人不能仅对物体进行一次感知,然后通过记忆确定出每
个物体的位置,而是要对环境中的物体进行连续实时监测,一旦检测结果发生变
化就立即作出反应。为了能够有效地处理非结构化的动态环境需要进行合理的运
动规划,同时还要合理的设计机器人控制系统,这是基于行为的机器人所要突破
的重点[6]。
3.1 避障规划(避障行为)
3.1.1 基于接触传感器的避障实现
基于接触传感器的避障是以机器人的逃离行为作为基础的,当机器人同障碍
物发生碰撞,接触传感器受到挤压,机器人据此感知是否有碰撞发生。许多机器
基于Microsoft Robotics Studio的机器人设计
20
人通过在机器人两侧分别安装接触传感器来实现碰撞检测功能。当机器人同障碍
物发生碰撞时,接触传感器受压,其中的一个或两个检测开关开始工作,发出电
信号通知机器人有碰撞发生。逃离行为是在这种情况下调用,用来使机器人产生
反应以脱离碰撞区域的软件程序。
当发生碰撞时机器人所做出的反应在很大程度上取决于自身的几何形状,圆
柱体对称机器人采用简单的策略就能可靠、有效的做到这一点。当发生碰撞时,
机器人首先应该后退一定距离以使接触传感器的挤压状态得到缓解。此时,机器
人能够比较方便的进行转弯操作。后退以后,接触传感器将不再同障碍物发生强
烈接触,警示机器人碰撞发生的电信号也会消失。在这个程序设计中,会出现问
题,若后退距离不够大,则会出现接触传感器信号消失,而传感器还轻微接触着
障碍物。
我们曾尝试采用以下方案建立伺服逃离行为:如果左侧发生碰撞机器人原地
向右旋转;如果右侧发生碰撞则原地向左旋转。这种方案存在一些问题:若机器
人两个接触传感器同时触发,这时若是进行后退,则两个传感器将会同时释放,
机器人将会忘记曾有物体出现,然后又会向前行走,从而进入一个死循环。
当两个接触传感器同时触发时,不让机器人后退,而是让它随机的向左或者
向右旋转,这样可能能够解决这个问题。但是,采用这种方法又会带来另外一个
问题:当机器人同障碍物发生正面碰撞时,机器人会一直旋转,直到检测不到障
碍物为止。在停止旋转时,机器人同墙之间仍然存在轻微的接触,而这种接触还
不足以触发接触传感器。在这种情况下,机器人有可能贴着障碍物继续前进,草
儿导致这种逃离行为的实效性很差。
正是由于存在以上问题,逃离行为要进行一些更改。只要有一个接触传感器
由于碰撞而改变,机器人就会立即开始后退,为变量d设定一个值,使机器人记
录是由哪个传感器发生了碰撞,为逃离行为设定下一步的转向值。同时为变量b
也会设定一个值,用来规定机器人向后退开的距离。紧随后退行动的就是转向行
动,可以预设这个转角θ或者进行随机的θ值设定。如图所示:
第三章 机器人运动规划 21
无动作
移动距离f
左侧碰撞
输出d=右
右侧碰撞
输出d=左
后退
前进
移动距离x
原地向d方向旋
转过角度θ
图3.1 接触传感器的避障程序流程图
3.1.2 测距传感器的避障实现
基于测距传感器的机器人利用传感器在它所关注的潜在危险对机器人造成损
坏之前检测出这种危险的存在并逃离这种危险。最常用的避障行为在实现过程中
经常使用红外接近传感器、红外测距传感、声纳传感器以及激光传感器。
我们以安装了多个激光测距传感器的机器人来举例:当激光测距传感器开始
工作时会收集周围环境信息,由这些信息机器人可以判断是哪几个传感器接收到
了数据信息,并根据这些信息更改某些变量的标签信息。主程序根据标签信息来
确定周围的环境状态。输出左侧的测量值到变量L,右侧的测量值到变量R,对L、
R变量的值进行处理并执行:
1、若变量L、R的值没有低于最小值Limit,则设定驱动直行;
2、若变量L>变量R的值,且变量L>Limit的同时R 行旋转并持续检测各传感器输出的距离信息,若两侧变量L、R的值都大于 Limit的值则设定向前行进; 基于Microsoft Robotics Studio的机器人设计 22 3、若变量R>变量L的值,且变量R>Limit的同时L 行旋转并持续检测各传感器输出的距离信息,若两侧的变量L、R的值都大 于Limit的值则设定向前行进; 4、若变量L、R的值都小于最小值Limit,则机器人进入后退程序,同时检测 测距传感器发回的信息,到变量L、R的值都超出Limit所设定的下限时, 根据随机时间决定进行后退距离,同时开始进行随机的转向,这种专向一 般角度不超过90°。 至此,整个检测—判断—驱动程序完成,在复杂的环境中这个程序也可以发 挥正常的作用。 检测 L>Limit R L R>Limit L>Limit R>Limit 随机 转向 L R 随机 后退 左转 右转 直行 图3.2 基于测距传感器的程序流程图 3.2 运动规划中会出现的问题 3.2.1 抖动问题[7] 抖动问题在机器人领域是一个普遍的问题。当两个不同的行为轮流控制机器 人,或者一个行为的两个不同部分互相抵触时,机器人就有可能发生抖动现象。 假设有两个行为:一个行为驱动机器人向位于自己前方的光源前进,另一个行为 第三章 机器人运动规划 23 用来在机器人遇到障碍物时控制机器人后退,后者具有更高的优先级。当机器人 没有发现自己要追寻的光源位置位于某个矮墙的后面时,它能够可靠运行。然而, 随着离墙越来越近,机器人会突然看上去好像停止了,但却又伴有轻微的抖动现 象。这种情况的发生是由于光源跟踪行为一致命令机器人前进,直到检测到障碍 物的存在,此时避障行为触发,该行为驱动机器人后退。然而,只要机器人稍微 后退一点距离避障行为就会变成非触发状态,光源跟踪行为又开始接管控制权, 从而再次驱动机器人前进。这样,仲裁器在两个行为之间轮流选择,并且每个行 为发布的命令都与前一个行为发布的命令相互抵触,从而导致了抖动现象发生。 红外传感器 光电传感器 图3.3 抖动问题 解决这种问题的一个方法是使用循环行为,这种行为能使机器人具有一定的 自我反省能力,他检测的对象不是外部环境信息,而是机器人本身的运行状态。 当感知到轮子正在进行一系列快速切换地前进—后退操作时,或者当发现机器人 没有任何动作是,循环诊断行为将会接管机器人的控制权,并采取一些截然不同 的操作方式,控制机器人随机旋转或者发布其他一些能够打破目前僵局的随机命 令。 基于Microsoft Robotics Studio的机器人设计 24 循环诊断行为提供了一种能够避免行为组合出现不良运行后果的通用方法。 然而,如果可能的话,更好的办法是深入了解经常邻近调用的两种行为之间的相 互影响方式。 3.2.2 峡谷效应问题 在机器人运动中,若环境中遍布许多障碍,或者有些占该物的形状是非凸的, 则会造成程序出现一些错误。这种错误发生在机器人遇到某个拐角或者箱形峡谷 时,如图所示: 图3.4 峡谷效应示意图 在这种情况下,机器人首先检测到自己左侧出现障碍物,并开始向右旋转; 经过旋转,它将会感知到右侧物体的存在,并将因此左转,从而再次感知到左侧 障碍物。这种恶性循环将会无休止的进行下去,从而使机器人陷入了本应该很容 易就能摆脱的角落里。机器人这种不能脱离内部角落的现象被称为峡谷效应。 可以利用这种方法对避障行为进行修正:当机器人检测到两侧都有障碍物时, 进行后退操作,这样,机器人就能从任何一个峡谷中退出来。然而遗憾的是,这 种做法只是将问题变换了一下表现形式,对于行为的改善没有起到根本性的作用。 此时,机器人驶入峡谷,如果检测到两侧同时都有物体,它将进行后退操作,直 第三章 机器人运动规划 25 到感知不到任何物体位置;随后机器人将再次前进,又一次检测到两侧的墙壁, 然后又一次后退,„,这样机器人又一次陷入了永不停止的重复循环过程。 根据上面的分析我们可以看出,修改部分程序就可以完成机器人的行动任务, 我们在后退后添加一个状态,让机器人进行随机的转向,这样机器人就从峡谷效 应中脱离出来,使后续任务可以继续完成。 3.3 本章小结 本章介绍并分析了基于接触传感器的避障程序和基于测距传感器的避障程 序,同时还分析了机器人避障程序中通常会发生的两种问题,同时也提出了解决 方案,本章的分析使后面设计机器人避障程序时有了基本思路。 基于Microsoft Robotics Studio的机器人设计 26 第四章 基于Microsoft Robotics Studio的机器人避障的实现 27 第四章 基于Microsoft Robotic Studio的机器人避障的实现 在这章中我们将使用Microsoft Robotic Studio来建立机器人。我们设计的机器 人包含了操作型机器人和移动型机器人,我们将使用多种传感器和辅助控制设备 来设计,同时我们还将使机器人获得躲避障碍物的能力。在程序设计过程中我们 会用到VPL提供的大量组件,如激光测距传感器、接触传感器、Activity组件等[8]。 4.1 采用模型的选择 MSRS与大量机器人厂商有合作关系,所以在VPL中为我们提供了许多机器 人模型可以进行编程和虚拟,但是不是所有的机器人模型都适合于我们这次的试 验,所以我们将从这些机器人中挑选出本次试验所需要的机器人模型。 Microsoft Robotic Studio提供的能够虚拟运行的机器人有以下几种: ① iRobot Create™机器人平台 图4.1 iRobot Create™机器人平台 iRobot Create™拥有32个内置传感器包括我们所需要的接触传感器,两个驱 动轮,一个车辘和四个可移动小轮,一个预排程序的行为编码器,一个可以扩大 的输入输出端口和一个后挡板。在指令模块等许多可选择性附件的如iRobot Command Module, iRobot Roomba standard remote和iRobot Roomba Virtual Wall, 独立充电底板等。能源方面,你可以选择使用可持续使用的充电电池或标准碱性 电池。 在MSRS的系统中,我们可以使用通用的差分驱动器和接触传感器来对iRobot 基于Microsoft Robotics Studio的机器人设计 28 Create™进行编程,同时MSRS还提供了iRobot Create™的虚拟模型,这个虚拟模 型同样提供了驱动和多个传感器。 ② LEGO RCX™和LEGO NXT™ 图4.2 LEGO RCX™和LEGO NXT™的控制模块和在虚拟系统中的模型 LEGO RCX™和LEGO NXT™是乐高公司推出的两套套机器人系统,分别面 对不同的用户群,通过组合搭建机器人的物理平台,你可以根据需要自行安装标 准统一的传感器或其他组件。RCX使用的微型控制器,是日立H8/3292系列的 H8/300单片机,属于H8/3297系列[9]。 RCX支持的输入设备(传感器)有:接触传感器、光感传感器、角度传感器、 温度传感器、以及火焰传感器。但是在没有安装固件时传感器将不能工作,也不 能执行编译的程序。仅可以运行固化在硬件内的默认程序。输出接口只能接到 LEGO专用马达(标准马达和微型马达)以及扬声器。RCX可以同时控制所有输 入/输出设备RCX使用6节5号电池,安装于背部凹槽。也可以使用9~12伏的外 接直流电。当RCX没电时,其内部储存的所有数据都会消失,包括固件和已编译 的程序。位于顶部的红外线数据接口是RCX唯一的数据来源,RCX与外界一切通 讯都通过此接口与LEGO专用红外线接收器(接口分别为COM和USB)进行数 据交换,通讯频率为38500Hz。 在MSRS系统中,LEGO系列的机器人被设计成具有差分驱动器、碰撞传感 第四章 基于Microsoft Robotics Studio的机器人避障的实现 29 器、光电传感器的一个综合体,具体效果见图4.2。 ③ Pioneer 3DX™ 图4.3 Pioneer在虚拟环境中的模型 我们所能获得的关于Pioneer 3DX的资料较少,通过MSRS的资料库我们可以 了解到Pioneer 3DX机器人具有大量的传感器组件,已获得的资料中我们可以看 到,该机器人安装有接触传感器、激光传感器、声纳传感器、光电传感器、图像 传感器等,大量的传感器让各种程序都可以方便的获取需要的环境信息,该机器 人还具有差分驱动器,据观察,该机器人使用一个辅助轮和两个差分驱动轮,这 使得机器人的运动十分灵活。同时该机器人具有无线连接的功能,可以远程操控。 该机器人在许多大学被用作教学机器人。 除了以上机器人,MSRS还提供了例如机械臂机器人、多机器人系统等大量的 具有虚拟模型的机器人环境。 我们按试验的需求在众多机器人模型中选择出符合要求的机器人平台模型: 由于Pioneer 3DX机器人具有红外测距传感器,使得试验要求满足,所以选择 基于Microsoft Robotics Studio的机器人设计 30 Pioneer 3DX作为基于激光测距传感器的避障程序试验的平台。iRobot Create具有 接触传感器,且机器人形状为圆形,使得避障程序容易实现,所以接触传感器避 障试验使用了iRobot Create™模型作为试验模型。手动操控类的可以使用任何带有 差分驱动器的机器人,选择面较广。 4.2 基于激光测距传感器的避障程序实现 激光避障传感器的避障程序算法我们已经在第三章3.1.2小节进行了讨论,整 个避障算法是由如下程序流程所组成: 激光测距传感器 Label Nearest 变量Right=t Label==Right Label=? 变量Left=t Label==Left 数据集合 Input State=? State=Forward 变量State=Turn <1500 Left>Right? < Or > 转向 前进 图4.4 基于激光传感器的避障程序流程图 我们基于这个原理图来使用Visual Programming Language实现机器人测距避 障的程序。 第四章 基于Microsoft Robotics Studio的机器人避障的实现 31 首先我们建立一个Activity框体,这个框体包括了激光传感器自身循环检测和 数据前期处理与输出组件,我们将该模块命名为LaserRangeFinder。 图4.5 LaserRangeFinder的命名 我们将在这个窗体里建立激光测距传感器的数据预处理,,所以我们需要设定 该模块的输入数据的数据类型和名称,在这里我们设置了六个输入量,分别是(括 号中代表其数据类型): i (int) 该数据代表激光传感器检测角度 Data (List of int) 该数据代表所测得的数据量表 Increment (int) 该数据代表步进的角度数 Nearest (int) 该数据代表一个用来记录所测量中的最小值的变量 Label (string) 该数据为字符型量,作为输出的数据标签 Limit (int) 该数据设定了检测角度的最大量 图4.6 LaserRangeFinder输入数据定义 基于Microsoft Robotics Studio的机器人设计 32 接下来我们将在Start标签页下建立最基础的服务,将激光测距传感器的数据 传输到数据预处理组件中。我们将激光传感器按角度分为三个部分,分别赋予标 签Label的值为Right、Center、Right,角度范围在输出端有专门的名称 ,我们将设定: 右侧(Label=Right) 0 < I < 3/, 中部(Label=Center) 3/ < I < 5/ 左侧(Label=Left) 5/ < I < 我们将i的初始值设定成为每个标签中角度的最小值,同时将Limit的值设定 为各标签中的最大值,作为各标签的界限。 同时我们设定三个标签下的角度步进量(Icrement)为12,这样检测的时候激光 传感器会以12度的步进速度进行距离检测。Nearest的初始值我们统一设定为 8000,这个值超出判断条件很多,不会引起误判断。Data值直接设定为激光测距 传感器的测量数据列表。 图4.7 三个循环模块的初始值设定 第四章 基于Microsoft Robotics Studio的机器人避障的实现 33 现在我们对FindNearest这个分页面开始进行编辑,这个分程序是用来进行数 据预处理的,该程序实现对每个角度范围内的障碍物到传感器最小值进行记录并 赋到Nearest这个输出量上。 我们将刚才激光测距传感器输入的测量数据和预设值输入该模块,使用一个 判断语句,若i+Increment>Limit则输出当前的Nearest值和标签Label;若这个条 件不成立时将当前的测量数据Data[i]与Nearest的值进行比对,如果当前Data[i] 值小于当前Nearest的值则将Data[i]的值赋到Nearest的值中,同时使i的值增加 12度进行循环,这样在循环中程序可以输出在每个分割的范围中障碍物与传感器 间最小值并输出到FoundNearest。 图4.8 分支程序FindNearest的程序设定 下面我们开始设计主程序,主程序的功能是将LaserRangeFinder输出的数据进 行处理,同时将这些数据综合输入驱动模块。 在LaserRangeFinder中我们输出了三个标签和各自的数据,这些数据的同步性 没有办法保证,所以我们使用主程序来进行处理,读出各标签所包含的数值。我 们建立了两个变量Left和Right,这两个变量使用int的数据类型,将各个标签下 的Nearest值读出后使用Join组件更改数值名输入驱动模块。 基于Microsoft Robotics Studio的机器人设计 34 图4.9 主程序的设定 最后我们将设计驱动模块,驱动模块包含了对传感器数据的处理和对驱动器 行为的设定。 驱动模块的输入有三个数值:Right、Center、Left,这些数值是由 LaserRangeFinder组件读取的三个角度部分中的障碍物到传感器的最小值。我们在 这个模块中使用了一个子变量State,这个变量设定为一个字符型变量,我们可以 根据不同的输入数据设定该变量的数值,使其改变驱动器的状态。 当数据输入时,会分到三个判断中,第一个判断获得输入的数据,如果 Center<1500则设定为向前驱动的同时将变量State赋值为Turn;第二个判断读取 变量State的当前值,并判断State的值是否为Forward,如果State的值为Forward 则转到第一个判断程序,如果否则转向第三个判断;第三个判断Center的数据是 否大于2000,如果是则设定State的值为Forward,如果否则读取和 的值的大小,若>则向左转,反之向右转。 第四章 基于Microsoft Robotics Studio的机器人避障的实现 35 图4.10 驱动模块程序设定 至此,整个程序设置完成,该程序能够完成测距和避障过程。 4.3 基于接触传感器的避障程序实现 基于接触传感器的避障算法我们在第三章3.1.1小节进行了分析,这里我们将 使用iRobot Create™机器人平台实现该避障程序。 我们建立一个Activity组件,将其命名为RandomDrive,这个组件将作为驱动 模块,该模块我们设计要包含三个页面,分别为:Backup、Drive、Turn三个页面, 这三个页面将控制机器人前进、后退和随机转向,该模块只有一个变量Polarity输 入,该变量设定为double的数据类型。 基于Microsoft Robotics Studio的机器人设计 36 图4.11 RandomDrive模块的命名及其子程序的输入量名称/类型设定 接下来我们开始设定Turn页面中的驱动处理,Turn页面中我们将设定一个随 机两量,然后将输入的变量Polarity和随机变量相乘赋入Left变量中,Left取反赋 入Right值中,然后将两个值输入差分驱动器的左右轮,驱动器开始转弯,我们使 用Data和Timer来设定一个1500ms的延时程序,使转弯的角度受到控制,最后 将结果输出到RandomDrive的Result接口上。 图4.12 Random子程序Turn的程序设定 第四章 基于Microsoft Robotics Studio的机器人避障的实现 37 根据Turn页面相同的操作,我们在Backup页面和Drive页面。在Backup页 面中读入Polarity的数据,然后将Polarity的数据乘以-0.4,输入到差分驱动器中, 让机器人开始缓速后退,进行延时,使后退时间定在1500ms;在Drive页面中, 中我们采用了随机速度驱动的方式,使用了Polarity和Random的随即量乘积设定 差分驱动器的驱动力。 图4.13 Random子程序Backup的设定 图4.14 Random子程序Drive的设定 现在我们开始设置主程序,主程序用来获得接触传感器的数据并进行处理, 当接触传感器触发时,使变量Polarity获得变量的当前值,同时输入RandomDrive 中进行驱动判断。 基于Microsoft Robotics Studio的机器人设计 38 图4.15 基于接触传感器的避障主程序 至此,基于接触传感器的程序编写完毕。 4.4 本章小结 本章选择了试验所使用的虚拟机器人模型,并逐一对其介绍,然后我们编写 了基于激光测距传感器和接触传感器的两种避障程序,并着重分析了基于激光测 距传感器的避障程序。同时向读者展示了如何使用Visual Programming Language 编写机器人程序。 第六章 总结与展望 39 第五章 虚拟环境的实现与测试 机器人开发的困难在于:1、机器人硬件价格昂贵。模块化的机器人平台,如 LEGO的Mindstorms®™和Fischertechnik®系列,价格属于中低档水平,但是对于 国内用户价格还是偏高,如果要进行更复杂的机器人,这个花费还会成倍的增加; 2、硬件故障排除困难。消费类的电子产品非常可靠,像DVD或者电视之类,但 是当用户用零件组装或修复一个机器人的时候,其实是对精力的一种浪费,这些 时间应该投入到程序的开发与调整中去;3、硬件损伤,在大规模的机器人比赛中 或在危险的试验环境中,由于机器人硬件的唯一性使得试验变得束手束脚,不敢 尝试更多的危险性试验[10]。 正是因为如此多的问题才使机器人的学习与开发一直不能普及,虚拟系统的 出现让这种技术壁垒大大降低,使普通人也可以在家中进行机器人的研究,下面 我们将使用MSRS所提供的虚拟系统完成环境建立和基于激光传感器的避障试验。 5.1虚拟环境简介 MSRS所包含虚拟环境为我们提供了一个良好的试验平台,这个平台设计了可 视化仿真环境,调节也相当容易。由于采用了AGEIA物理引擎,我们可以在虚拟 环境中模仿真实的物理环境。 MSRS提供的虚拟环境的优势有: 虚拟环境可以使技术壁垒降低,让人们不再为机器人硬件的购买、组装、维 护操心,而是将精力投入到程序的开发上去。 虚拟环境允许开发者进行分部调试,这是开发人员在真实环境中很难实现的。 开发人员可以在任何时刻停止机器人的运动,来观察执行的正确性,或者改动程 序的某些部分。 同时,虚拟环境所提供的机器人是根据实体建立的,所有的传感器、运动系 统都参考了硬件机器人的原形,这样在虚拟过程中可以更贴近现实的表现机器人 的行为,而且这种虚拟也可以保护硬件机器人不会受到操作失败的碎坏。 基于Microsoft Robotics Studio的机器人设计 40 开发者也可以自己添加组件到机器人上,这种添加在虚拟环境中也可以应用, 这种行为可能在硬件系统上完成较困难,但是在虚拟系统里我们可以轻松的完成, 并且把精力投入到为添加的组件进行程序设计上去[11]。 机器人的学习功能也可以在虚拟系统中实现,我们可以建立一个特殊的虚拟 环境,让有学习能力的机器人在这个虚拟环境中进行训练,然后在程序中查看机 器人所学到的内容,如果是好的方面就可以运用到真实环境中去。 当然,虚拟系统还有自己的缺点和局限性: MSRS的虚拟系统是将硬件问题放在一边,使开发人员集中精力开发软件程 序。但是,硬件的设计同样也是机器人设计领域的问题,我们不能只将精力集中 在软件方面,或许,在以后的Microsoft Robotic Studio里会加入硬件设计的模块。 同时,MSRS所提供的虚拟环境缺乏真实环境中的噪声数据,你在使用真实的 机器人时会发现,就算你的机器人在虚拟环境中运行的再流畅,你还要花许多时 间来根据真实的机器人调整程序。因为真实世界的不可预知性和真实传感器的噪 声问题、齿轮间的误差问题,你所编写的程序面临着真实世界的巨大挑战。 尽管MSRS的虚拟环境中的机器人是根据实体进行模型建立的,但是在真实 世界中的误差总是难免的,虚拟系统无法准确的模拟一切,特别是实时性的问题。 像轮式机器人在低速环运动时的模拟对虚拟环境还是一个巨大的挑战。 5.2 虚拟环境的组成 仿真环境是有以下几部分组成: 1、虚拟引擎服务——该组件是用于绘制实体部分,同时它还为硬件引擎提供 虚拟的时间。该组件建立了整个虚拟世界的框架,同时它还提供了整个虚拟环境 的服务或者分布式的系统。 2、物理引擎管理包——使用户从底层的物理引擎界面脱离出来,该组件为硬 件模拟提供了一个更加简洁和易于管理的界面。 3、本地硬件引擎库——硬件支持AGEIA PhysX技术的处理器(PC上的一种硬 件加速卡)可以通过AGEIA PhysX技术加速。 第六章 总结与展望 41 4、实体——虚拟世界的一些仿真实体模型,Microsoft Robotic Studio给这些 实体预定义,使用户在虚拟环境中调用更加方便,用户可以在虚拟环境中使用这 些预定义的模块建立复杂的环境。 使用虚拟环境可以让我们方便的检查机器人的状态和调试代码。 5.3 试验环境的设定 我们将在虚拟环境中测试我们完成的基于激光测距传感器的避障机器人,所 以我们的试验环境设定有以下几个特点: 1. 由于我们的机器人采用的是自由避障,所以试验环境不能过大,否则避 障的效果会不明显,所以我们的试验环境将会固定在一定范围之内。 2. 我们将要检测机器人的避障效果,所以我们将会大量的添加障碍物到试 验环境中,这个数量由人为判断。 3. 我们将采用的机器人种类,由于拥有激光测距传感器的机器人平台不 多,所以选择面较窄。 基于以上几个条件,进行了讨论和规划,最终的结果: 1. 建立一个正方形的试验场地,由于是测试避障程序,所以可以用重量不 计的长方体模块进行搭建。 2. 避障效果的检测需要一个合适的环境,这个环境中的障碍物应该维持在 一个较合适的数量,我们设定了15个长方体模块和3个路障模块 3. 我们采用了Pioneer 3DX机器人平台作为这次的实验用机器人,该机器 人具有大量传感器,特别是具有激光测距传感器,同时还具有差分驱动 器,所以我们选择该模型。 由此我们开始建立所需要的虚拟环境。 我们使用MSDN资料库里提供的Ground环境开始建立,该环境包括地面模 块、天空贴图和光照模块,见图5.1。 基于Microsoft Robotics Studio的机器人设计 42 图5.1 Ground环境 这时我们可以开始添加为控制机器人活动界限而人为设定的墙体,我们从 MSRS所提供的其他虚拟环境中找到所需要的正方体模型,移植成为围墙: 图5.2添加了围墙的Ground环境 第六章 总结与展望 43 同时我们将墙体的数值进行更改,作为障碍物模块放入围墙内部,我们一共 放置了15个长方体障碍物和3个路障型障碍物。这个数量使得避障行为较明显且 有利于观察机器人的运动行为: 图5.3 加入障碍物的试验环境 同时,为了观察方便我们还加入了红色灯光模块,最后一步我们从Pioneer 3DX 的默认虚拟环境中取得了Pioneer 3DX机器人模块,该机器人模块没有加载任何程 序,同时该机器人模块组件附带了我们所需求的激光测距传感器和差分驱动器: 图5.4 加入了红色灯光模块的试验环境 基于Microsoft Robotics Studio的机器人设计 44 完成所有工作后,我们将通过Microsoft Visual Simulation Environment框体File 菜单中的Save Scene As选项保存所完成的环境,这时Microsoft Visual Simulation Environment会在保存Scene的目录下生成Manifest文件,该文件包含了所建立的 虚拟环境中各组件的信息,在虚拟试验中我们将会加载Manifest文件,使得虚拟 能够使用我们所建立的环境。 至此,试验环境的建立结束,我们将开始进行机器人程序的虚拟环境测试。 5.4 机器人避障在虚拟环境中的实测 在上一节中我们已经将避障程序的虚拟环境建立完毕,我们获得了虚拟的实 验场地和加载有模型的Manifest清单,若我们在VPL中加载该清单,则程序会输 入虚拟环境中的机器人。我们可以双击GenericDifferentialDrive和 SickLaserRangeFinder组件,在下拉框中选择使用已有的Manifest清单,见图5.5。 图5.5 在GenericDifferentialDrive和SickLaserRangeFinder中加载Manifest 我们选择已建立的Manifest清单,这个Manifest清单 包括了我们的虚拟环境和虚拟环境中机器人的传感器和驱动组件。 第六章 总结与展望 45 图5.6 避障程序在虚拟环境中实测 在这个环境中我们还可以对障碍物的位置和性质进行修改以适应程序测试的 需求,打开Microsoft Visual Simulation Environment窗口下的Mode选项,我们可 以找到Edit选项,在这个设定窗口中我们可以像预定环境时一样进行环境的重新 设定。 我们得到了良好的反馈,运行程序我们可以看到组件在Microsoft Visual Simulation Envronment环境中顺利的加载了我们刚设定的环境,包括围墙、障碍物 模块和Pioneer 3DX机器人模块,经过开启SickLaserRangeFinder组件的等待时间, 第一组数据顺利的进入程序循环,开始避障实测,我们可以看到,在机器人的运 动过程中,完全按照我们预先设想的行为运动。至此试验成功。 基于Microsoft Robotics Studio的机器人设计 46 第六章 总结与展望 47 第六章 总结与展望 6.1 本文总结 Microsoft凭借自身在软件领域的优势开发了这款机器人设计平台,MSRS为 我们提供了一个更加方便的开发平台,让我们看到了机器人的开发能够变得如此 简单。或许有一天MSRS会成为机器人界的Windows操作系统,在机器人开发系 统中占据龙头的地位。 在缺乏资料的状况下我开始了这次的论文,开始没有想象中的容易,大量的 英文入门资料让我着实烦恼,尝试了很多遍,失败过很多遍,终于在不断的摸索 中成功建立了第一个试验程序,当我阅读完MSRS中所附带的帮助文档后,我发 现使用VPL编程的便利。之后的时间里我参考了许多机器人方面的资料,这些资 料虽然不是以MSRS平台编辑的,但是资料中的思想给我很多启发,在最终的程 序中我也借鉴了这些资料中的算法和规划。 MSRS提供的VPL编程环境在现在看来还略为简陋,只能提供机器人平台的 一些组件,但是在不久的将来我认为这种高度模块化的语言会在编程领域占有一 席之地,这些程序在视觉上较为直观,它将程序员从大量的编码中解放出来,使 人们将更多的精力放在算法和规划上。个人认为VPL将会有更大的发展。 MSRS提供的虚拟环境也是机器人开发低价化的保证,它将机器人的入门门槛 降低,使开发具有了实时性,可以方便的观察和修改。但是这个模拟环境和真实 环境还是有不可逾越的差距。真实环境总是复杂多变的,虚拟环境不能完全模仿, 但是我认为这个模块的存在对于现在的开发环境还是很有意义的。 程序规划方面我参考了许多资料,发现运动的规划是一个很深的问题,对于 同一个目标,每个人有不同的算法。我通过资料了解到许多新的算法,但是对于 完成这些算法还有许多问题要解决,有软件的问题也有人为的问题,最终我使用 了一个不算困难的算法,容易实现且能达到我所期望的目标。 这次论文我觉得对我来说是一个很好的锻炼,我在不断的寻找和消化我所需 求的资源的过程中学到了许多知识。在完成这个试验的过程中,不断的分析和改 进程序,提高了我的分析能力。这次毕业设计将在我今后的工作生活中留下深深 基于Microsoft Robotics Studio的机器人设计 48 的烙印。 6.2 下一步的试验方向 本次试验已经达到目标,我认为下一步的方向将有三个: 一、 虚拟环境 在这次试验中我们只用到了虚拟环境的一小部分,MSRS所提 供虚拟环境非常强大,这个环境可以调整各个传感器的方位,可以建立更 多的物体,并且可以模拟不同的重力环境等。下一步的目标可以对该虚拟 系统进行进一步的学习和研究。 二、 Visual Programming Language VPL不仅提供了一些默认的组件,它还包含 了许多其他综合类的组件,包括图像处理、音频处理等高端组件,这些组 件在Windows环境下可以直接调用,这就可以使许多在其他语言环境下 复杂的程序简单化,在这方面可以进行尝试。 三、 机器人运动规划 机器人运动规划如今还在不停的发展,将来会有更加精 简且高效的算法出现,我们可以对所拥有的算法进行进一步的分析,使其 更易于执行。 致谢 49 致 谢 本文是在段清娟老师的指导下,与王培华同学共同研究完成的。从论文开始 时的资料收集到后期的制作中,段老师给予了极大的关心和帮助,她与我们一起 收集信息,一起分析程序,经常连午饭都不能按时吃,这里向段老师表示深深的 敬意。同时我要感谢王培华同学,由于选择题目相近,我们经常会在一起研究讨 论,给我很多的启发。 感谢我在北京交通大学学习软件工程的同学宣欣,他在程序出现问题的时候 通过网络帮我做调试,并和我一起分析程序! 感谢宿舍的同学们,是他们陪我度过了程序设计时的一个又一个通宵,而没 有对我打扰他们发出任何怨言! 感谢家里对我工作的支持,给我了极大的支持和理解! 参考资料 50 参考资料 [1] /en-us/library/ [2] /en-us/library/ [3] /en-us/library/ [4] /en-us/library/ [5] Microsoft Robotics Studio Documents Lab Tutorial 3 (VPL) [6] Michael Somby , A review of robotics software platforms.(2007) [7] /Article/HTML/ [8] Joseph L Jones , Daniel Roth ,Robot Programming : A Practical Guid to Behavior Based Robotics(2006.3) [9] /en-us/library/ [10] /en-us/library/ [11] /en-us/library/ 2024年9月1日发(作者:荤清宁) 目录 i 目 录 第一章 绪论 .......................................................... 1 1.1 机器人开发平台现状 ........................................... 1 1.2 Microsoft Robotic Studio 概述 ................................ 3 1.3 Microsoft Robotic Studio的组成 ............................... 4 1.2.1 Visual Programming Language(VPL) ........................ 4 1.2.2 Microsoft DSS Manifest Editor(DDSME) .................... 5 1.4 本文主要研究成果与内容安排 ................................... 5 第二章 VPL的组件与功能 .............................................. 7 2.1 数据类组件 ................................................... 7 2.1.1 Variable(变量组件) ...................................... 7 2.1.2 Calculate(计算组件) ..................................... 7 2.1.3 Data(数据组件) .......................................... 8 2.1.4 Math Function(数学组件) ................................. 8 2.2 逻辑类组件 ................................................... 9 2.2.1 If组件 ................................................. 9 2.2.2 Switch组件 ............................................. 9 2.2.3 Join组件 ............................................... 9 2.2.4 Merge组件 ............................................. 10 2.3 输出类组件 .................................................. 10 2.3.1 Simple Dialog组件 ..................................... 10 2.3.2 Flexible Dialog组件 ................................... 11 2.3.3 Log组件 ............................................... 12 2.3.4 TexttoSpeechTSS组件 ................................... 12 2.4 通用器件 .................................................... 13 2.4.1 Generic Contact Sensors ................................ 13 2.4.2 Sick Laser Range Finder ................................ 14 2.4.3 Generic Differential Driver ............................ 14 目录 ii 2.5 输入类器件 ................................................... 15 2.5.1 Desktop Joystick组件 ................................... 15 2.5.2 Direction Dialog组件 ................................... 15 2.5.3 Game Controller组件 .................................... 16 2.5.4 Webcam组件 ............................................. 16 2.6 定义类组件 ................................................... 16 2.7 本章小结 ..................................................... 17 第三章 机器人运动规划 ............................................... 19 3.1 避障规划(避障行为) ........................................... 19 3.1.1 基于接触传感器的避障实现 ............................... 19 3.1.2 测距传感器的避障实现 ................................... 21 3.2 运动规划中会出现的问题 ....................................... 22 3.2.1 抖动问题 ............................................... 22 3.2.2 峡谷效应问题 ........................................... 24 3.3 本章小结 ..................................................... 25 第四章 基于Microsoft Robotic Studio的机器人避障的实现 .............. 27 4.1 采用模型的选择 ............................................... 27 4.2 基于激光测距传感器的避障程序实现 ............................. 30 4.3 基于接触传感器的避障程序实现 ................................. 35 4.4 本章小结 ..................................................... 38 第五章 虚拟环境的实现与测试 ......................................... 39 5.1虚拟环境简介 ................................................. 39 5.2 虚拟环境的组成 ............................................... 40 5.3 试验环境的设定 ............................................... 41 5.4 机器人避障在虚拟环境中的实测 ................................. 44 第六章 总结与展望 ................................................... 47 6.1 本文总结 ..................................................... 47 6.2 下一步的试验方向 ............................................. 48 致谢 ................................................................ 49 参考资料 ............................................................ 50 第一章 绪论 1 第一章 绪论 当今,随着低成本开发平台变得日益唾手可得,人们将机器人用于教育与最 终应用的机会也在不断增加。在这个过程中,开发环境也随着机器人的发展而发 展。开发环境如今正在不断提升自己的应用性和兼容性,一个好的开发平台将能 完成机器人开发的大部分工作,包括程序设计、虚拟测试、驱动设定等。在2006 年,Microsoft®公司发布了新一代的机器人开发平台Microsoft Robotics Studio,并 广泛的与机器人厂商合作,如LEGO®公司,iRobot®公司等,使该平台兼容更多 机器人平台。该平台还使用了虚拟环境进行机器人的调试,使开发成本大大降低。 其中提供的Visual Programming Language编程环境使机器人开发的进入门坎降低, 使更多的学生、开发人员、爱好者能够投入到机器人开发中,在微软大旗的号召 下,这个平台发展迅速,越来越多的厂商与其合作,在2008年初,微软公司正式 发布了新的开发平台Microsoft Robotics Developer Studio 2008。 1.1 机器人开发平台现状 “机器人软件开发平台”指的是用来给多种机器人设备开发程序的软件包。它一 般包括下列内容: ·统一的编程环境 ·统一的编译执行环境 ·可重用的组建库 ·完备的调试/仿真环境 ·对多种机器人硬件设备的“驱动”程序支持通用的常用功能控制组件,例 如计算机视觉技术、导航技术和机械手臂控制等[1]。 机器人控制软件的花费在整个机器人应用系统预算中占据了很大比例。比如, 一个自动控制项目的80%工作量都集中在系统集成方面,包括软件的发开和定制。 所以机器人开发平台的作用就是减少软件工程师的工作量,同时减少项目开支。 基于Microsoft Robotics Studio的机器人设计 2 除了软件工程的问题外,在一个真正的机器人项目中还要涉及大量的人工智 能。一个集成了许多现成的、可靠的组件库的统一软件开发平台,在应付各种机 器人工程时能帮上大忙。 最后的问题是“行为协作”。许多文献中都有对行为协作的讨论。正因为这是一 个普遍存在的问题,所以一些平台提供了统一的解决方案。 目前,主流的机器人软件开发平台有10种,见下表: 表1.1 各软件开发环境 平台名称 Evolution Robotics ERSP Microsoft Robotics Studio OROCOS Skilligent URBI Webots Player,Stage,Gazebo iRobot AWARE OpenJAUS CLARAty 平台 平台 控件库 机器学习插件 平台 仿真环境 平台 平台 平台 平台 所属类型 商用 非商业用途免费 开源且免费 商用 商用 商用 开源且免费 商用 开源 开源 第一章 绪论 3 表1.2 功能评测 开源 免费 支持 Windows 支持 Linux 分布式 行为协作 内置机械 臂模块 内置物体 识别模块 内置导航 模块 学习工具 仿真环境 硬件支持 范围 可重用自 定义组件 实时系统 综上所述,由费用和功能方面考虑,我们选择了MSRS作为这次论文的软件 开发环境,MSRS具有免费,支持硬件范围大,有部分硬件虚拟且可以重复使用自 定义模块、有虚拟环境的特点,所以非常适合我们这次试验。 ERSP MSRS OROCOS Skilligent URBI Webots 否 是 是 是 否 是 否 是 是 否 否 小 是 否 否 非商 业用 是 否 是 是 是 否 是 否 是 大 是 否 是 是 否 是 否 否 是 否 否 否 否 中 是 是 否 否 是 是 是 是 是 是 是 是 否 中 无数据 否 否 否 是 是 是 是 否 否 否 否 是 大 是 否 否 否 是 是 是 否 否 否 否 否 是 大 否 否 Player, Stage,Gazebo 是 是 是(仿真) 是 是(有限的) 否 否 否 否 否 是 中 否 否 1.2 Microsoft Robotic Studio 概述 Microsoft Robotic Studio 是一款基于Windows操作系统,为机器人爱好者、 学术研究和商业开发人员对不同机器人硬件设计应用程序的平台。这个平台包含 了一些简单的REST-style程序,实时的基础服务,部分虚拟硬件和虚拟工具。这 个平台可以让开发人员为各种各样的机器人设计程序。 基于Microsoft Robotics Studio的机器人设计 4 Microsoft Robotic Studio包含了Visual Programming Language(VPL),这是一种 基于C# 程序的新的开发软件,是机器人的开发变得非常简单。只需要拖动框体并 连接起来就可以完成自己特有的服务[2]。 同时在这个开发环境中包含了3D图形虚拟程序,可以用3D虚拟模型仿真机 器人的运动。开发环境中的虚拟工具包括AGEIA科技公司出产的AGEIA™ PhysX™ Technology,这是一种硬件加速的图形环境,可以模拟真实世界的机器人 物理环境。 Microsoft Robotic Studio使用了Windows窗口或者网页作为控制界面,开发人 员或操作人员可以连接网络直接控制机器人的行为。 该开发环境还自带有多种传感器的数据和驱动,在编程中可以方便的调用, 同时Microsoft还与多家大型机器人开发厂商进行合作,越来越多的机器人和传感 器的数据将会添加到这个开发环境里,使开发过程更加方便。 1.3 Microsoft Robotic Studio的组成 Microsoft Robotic Studio包含了许多组件,主要由Visual Programming Language(VPL)、Microsoft DSS Manifest Editor(组件加载程序DDSME)、虚拟环境 组成。下面将逐一介绍这三个工具。 1.2.1 Visual Programming Language(VPL) Microsoft Visual Programming Language是一个基于图形化数据流的程序模型。 它适合于编写并行或是分布式处理程序。VPL面对的对象是对变量和逻辑有一定 概念初级程序员。但是,VPL也不只是面对新手的,各组件可以让高级程序员进 行进一步的开发。同样的,VPL也不是只能用于机器人的开发,它在其它程序方 面也有不错的表现。VPL为程序爱好者、学生、网页程序员、高级程序员建立了 一个广阔的开发环境。 第一章 绪论 5 1.2.2 Microsoft DSS Manifest Editor(DDSME) Microsoft DSS Manifest Editor是为开发者建立和编辑DSS服务清单而设计的。 服务清单是一个XML文件,包含了服务列表及服务的设置。你可以用这个程序开 始一个DSS runtime服务(清单加载服务)。 DSSME的窗口包含了建立、加载和储存清单的选项。编辑器是用来创建你所 使用的连接设置文件(清单文件)的项目的。DSSME同样包含工具栏,用来快速的 连接到所需的普通命令。 1.2.3 虚拟环境 Microsoft Robotics Studio的目标是加快机器人的开发、试验与应用。在这个过 程中虚拟系统扮演着重要的角色。由于价格、广泛的应用性和强大的性能,基于 PC和高端游戏机的虚拟系统出现了。 平台所提供的虚拟环境对真实世界的时间环境、物理环境进行了逼真的模拟, 同时提供了一定的视觉效果。AGEIA PhysX Technologies为这个虚拟环境提供了相 当强大的图形环境[3]。 1.4 本文主要研究成果与内容安排 由于这次选择的平台较新,所以当前可用的资料很少且都是英文资料,作者 在译制学习的过程中同时进行了大量尝试性的试验,阅读了大量有关机器人运动 规划相关文献,掌握了运动避障的程序设计及存在的问题,己经对Microsoft Robotics Studio环境下机器人程序开发有了较清楚的了解,对MSRS系统的编程与 虚拟和机器人避障规划开展了系统的研究,取得了如下研究结果: 1、对MSRS开发平台有了较全面的了解,并且对VPL提供的各组件进行了 尝试性的试验。 2、对MSRS平台的虚拟环境进行了研究,建立了试验所用的虚拟环境,并加 入了具有多种组件的机器人模型。 基于Microsoft Robotics Studio的机器人设计 6 3、对机器人的两种避障方式进行了研究,分析了程序流程,并根据避障理论 设计了试验用机器人程序。 4、对避障过程中出现的问题进行了学习,对峡谷效应和抖动现象进行了分析 并研究了解决方案。 作者在前期主要尝试和学习MSRS平台的各种功能,在MSDN的资料库中进 行了搜索和阅读,了解了当前MSRS平台的研究方向和研究成果。同时还进行了 机器人运动规划的学习,了解了机器人避障实现的流程和编程方法,学习了机器 人的行为规则。 中期作者主要开始自行设计基于不同传感器的机器人的避障程序,并对所编 写的程序进行修改和完善,解决避障运动中出现的问题,同时尝试分析这些问题, 了解了峡谷效应和抖动问题。 后期作者将任务集中在论文的编写和虚拟环境的实现与调试,自行设计并完 成了试验所使用的虚拟环境,并尝试在虚拟环境中测试了所完成的基于激光测距 传感器的避障程序。 第二章 VPL的组件与功能 7 第二章 VPL的组件与功能 Visual Programming Language为机器人的开发提供了大量预置的组件,可以让 用户轻松搭建所需要的程序,同时这些组件也可以进行二次开发,本章将介绍这 些组件,我们将会在后面的应用中大量应用这些组件[4]。 2.1 数据类组件 数据类组件包括Variable组件、Calculate组件、Data组件和Math Function组 件。 2.1.1 Variable(变量组件) Variable模块是变量的实体 化,这个模块可以在内部建立多 个变量,同时这些变量可以使用 不同的数据类型(见图2.1)。该模 块只具有单输入单输出。 图2.1 Variable组件及其数据类型设定 2.1.2 Calculate(计算组件) Calculate组件是建立数学运算公式的模块,在中间的输入对话框中可以调用 前方模块输入的数据进行运算。该模块单输入单输出。 图2.2 Calculate组件 基于Microsoft Robotics Studio的机器人设计 8 2.1.3 Data(数据组件) Data组件是定义定量的模块,用户可以自己定义需要的值,与Variable相同, Data模块也可以定义定量的数据类型。该模块单输入单输出。 图2.3 Data组件与数据定义 2.1.4 Math Function(数学组件) Math Function模块是提供数学模型的一个组件,这个组件可以提供随机数、 平方、角度变换、弧度变换等功能。该组件使用单输入单输出。 图2.4 Math Function组件与其所提供的运算类型 第二章 VPL的组件与功能 9 2.2 逻辑类组件 逻辑类组件主要包括If组件、Switch组件、Join组件和Merge组件。 2.2.1 If组件 If组件同C语言环境中的If语言相同,这个组件由一个输入 口和两个输出口组成,中间可以填写判断语句,判断语句可以在文 字栏中选择前方输入的数据量。 图2.5 If组件 2.2.2 Switch组件 Switch模块是一个控制模块,它通过将控制 传递给其体内的一个处理单元来处理多个选择和 枚举。框体左下角的加号可以增加更多的判断语 句,文本输入栏用来输入判断公式。此模块为单 输入多输出模块。 图2.6 Switch组件 2.2.3 Join组件 Join组件是用来将多种输入加入 名称并进行合并输出的组件,我们可以 使用这个组件将多种数据命名,然后通 过一个输出口输出,这个模块默认可以 为两个名称赋值,我们可以在框体上单 击右键添加更多名称。该模块为单输入 多输出模块。 图2.7 Join组件 基于Microsoft Robotics Studio的机器人设计 10 2.2.4 Merge组件 Merge组件和Join组件有许多相同的地方,它们都是将多数据合并然后通过 单端口输出,但是Merge组件并没有为数据命名的能力,同时,Merge组件不能 进行数据的命名,且Merge组件需要输入的数据具有相同属性。Merge模块是一 个多输入多输出的模块。 图2.8 Merge组件及其应用 2.3 输出类组件 输出类组件有Simple Dialog组件、Flexible Dialog组件、Log组件和Text to Speech(TTS)组件。 2.3.1 Simple Dialog组件 Simple Dialog组件为VPL的环境提供了一个简单实用的输出模型。它采用对 话框的模式显示所要输出的数据,连接方式包括Alert Dialog、Prompt Dialog、 Confirm Dialog三种。其中Alert Dialog是出现框体,中间包含文字数据,Prompt Dialog是对话框模式,用户在使用时可以输入部分数据,而Confirm Dialog可以使 用OK和Cancel来对框体进行操作。 第二章 VPL的组件与功能 11 图2.9 SimpleDialog组件 2.3.2 Flexible Dialog组件 Flexible Dialog组件是一个可变的对话输出组件,组件提供了大量的可更改的 对话框选项,包括标题等类型都可以根据需要进行改变。 图2.10 FlexibleDialog组件及其连接选项 基于Microsoft Robotics Studio的机器人设计 12 2.3.3 Log组件 Log组件是VPL为程序调试数据进行记录的模块,它的数据输入选项有三个: Log Info选项,用于记录程序中的信息;Log Warning用于记录程序运行中的警告; Log Error用于记录程序运行中的错误。 图2.11 Log组件 2.3.4 TexttoSpeechTSS组件 TexttoSpeechTSS组件是一个文字语音转换的模块,它可以将字符或者数字通 过语音进行输出。 图2.12 TexttoSpeechTSS组件及其连接选项 第二章 VPL的组件与功能 13 2.4 通用器件 MSRS中集合了许多传感器和驱动器的模拟程序,其中包括许多机器人厂商的 产品,如LEGO品牌下的NXT、RXT两个系列的机器人使用的接触传感器、光敏 传感器和单轮或多轮驱动器,Pioneer 3DX的激光传感器等,还有一些通用传感器 和驱动器,通过加载不同的驱动清单,从而达到在不同的机器人平台上使用通用 的程序。 在VPL中我们主要用到3种通用器件,分别是Generic Contact Sensors、Sick Laser Range Finder、Generic Differential Drive、这3个组件包含一个驱动组件和两 个传感器组件。 2.4.1 Generic Contact Sensors Generic Contact Sensors组件是接触传感器的虚拟模块。这个模块能在大部分 的机器人硬件平台上使用。该模块有一进两出的接口,可以同时通过接口来设定 传感器的开启和关闭,同时也可以从输出口获取接触时传感器的实时状态。 图2.13 GenericContactSensors组件及其连接方式 基于Microsoft Robotics Studio的机器人设计 14 2.4.2 Sick Laser Range Finder Sick Laser Range Finder是通用激光传感器模块。该模块同接触传感器类似, 有3个输入输出端口,通过输入端口可以设定测量开始和重新启动,而输出端口 有两个,橘红色圆形端口用来输出测量数据,方形端口用来获取传感器状态。 图2.14 SickLaserRangeFinder组件及其连接方式 2.4.3 Generic Differential Driver Generic Differential Driver是通用差分运动驱动器模块。只要具有差分驱动器 的机器人硬件就可以使用该模块进行程序设计。该模块具有1输入2输出共3个 端口,其中输入端口可以设定驱动器的驱动力、速度、转角、转弯弧度等数据, 而两个输出口,方形可以输出差分驱动器的各种状态量,如启动是否成功,转角 是否成功等,圆形输出端口可以输出转角度数等实时变量,使开环和闭环系统的 设计更加方便。 图2.15 GenericDifferentialDrive组件及其连接方式 第二章 VPL的组件与功能 15 2.5 输入类器件 输入类组件为机器人添加外部控制提供了良好的对话界面。在VPL里为用户 提供了专用输入组件和通用输入组件,这些输入组件有对话框、图像输入等多种 模式,使程序设计更加方便快捷。在VPL中经常使用的是Desktop Joystick、Direction Dialog、Game Controller、Webcam四种组件[5]。 2.5.1 Desktop Joystick组件 Desktop Joystick组件能够在桌 面虚拟一个操纵杆界面。该模块具 有1输入2输出,输入口可以设定 按键和X,Y轴的初始值,输出口 可以输出按键和轴向状态和各按键 的值。 图2.16 DesktopJoystick组件及控制界面 2.5.2 Direction Dialog组件 Direction Dialog组件提供一个类似操控板的界面,上面有“上、“下”、“左”、 “右”和“Stop”四个按键。这个组件同Desktop Joystick组件一样,通过一个输 入口进行初始值的设定,两个输出口分别输出按键状态和按键值。 图2.17 DirectionDialog组件及控制界面 基于Microsoft Robotics Studio的机器人设计 16 2.5.3 Game Controller组件 Game Controller组件是一个设定为硬件驱动的 模块,通过加载不同的Manifest(驱动清单)即可在不 同的控制器上使用基于该模块所设计的程序。此模块 的输入输出程序同Desktop Joystick相同,可以设置 初始值同时可以输出状态和变化值。 图2.18 GameController组件 2.5.4 Webcam组件 Webcam组件同Game Controller组件相同,也为硬件驱动组件,加载Manifest 可以实现平台的移植。通过输入口可以设定Webcam的开启与重起,通过数据输 出口可以输出视频图像、状态值,同时可以连接图像处理模块进行图像处理,可 以实现识别、辨认等程序,状态输出口输出Webcam的实时状态。 图2.19 WebCam组件 2.6 定义类组件 定义类组件可以由用户自己设计组件所能完成的功能,也可以理解为文字编 程中的子程序。用户可以在其中添加多种组件,从而使模块完成特定的功能,在 VPL中,Microsoft为用户提供了Activity组件实现这些功能。 Activity组件是一个单输入自定义输出的模块,一个模块可以 分为多个子模块,通过输入选择的不同从而选择不同的子模块执 行,同时每个子模块可以自定义输出数量和模式。 第二章 VPL的组件与功能 17 图2.20 Activity组件的实际应用 2.7 本章小结 本章介绍了VPL为用户提供的各种组件,这些组件通过不同的组合即可轻松 完成程序的设计,我们可以看到VPL语言中包括了数据类组件、逻辑类组件等多 种组件。在VPL中,左侧的借口就代表着接入,而右侧相应的就是输出口。通过 连接框体到框体的输入输出口就可以完成一个程序,连接线间的箭头代表了数据 流的方向。 数据类组件可以根据不同程序来改变变量或者定量的数据类型,并且数据类 组件可以进行数据的读取与写入的工作。 硬件组件功能都可以来进行定义,所有组件都可以通过加载不同Manifest(驱 动清单)完成硬件平台的移植。 定义类组件在VPL中是一个很重要的组件,根据自己设定的Activity组件可 以在整个程序中随意调用,而且可以自己定义其中的输入输出功能。 基于Microsoft Robotics Studio的机器人设计 18 第三章 机器人运动规划 19 第三章 机器人运动规划 典型的计算机程序按照规划顺序执行每项操作,直到计算出所需要的结果。 但是,机器人则需要具有根据机会进行处理的能力。 移动机器人不知道自己在环境中将会发现什么东西;附近的物体可能没有事 先通知机器人;移动机器人通常也不能非常明确地知道自己当前正在什么位置(随 着机器人的移动,这种定位不确定性会越来越严重)。 早期的机器人研究是通过解释环境中的每一个物体建立环境模型,然后据此 规划机器人的相应运动,最后控制机器人执行这些规划。这种方法的效果非常不 好。由于计算量太大,移动机器人的行走缓慢,反应迟钝,从而容易受到环境中 意想不到的变化的冲击。在机器人进行规划的过程中,动态环境经常容易发生变 化,等到机器人规划完毕准备执行时,环境的当前状况可能已经完全不符合这种 规划了。 因此,新的运动规划方法诞生了。这些新方法应该能使机器人在环境中自主 地寻找每个物体,而不是让编程人员去告诉它哲学物体的具体位置。为了达到这 个目的,移动机器人必须具备能够检测环境变化的传感器系统。由于环境中的物 体可能会发生变化,机器人不能仅对物体进行一次感知,然后通过记忆确定出每 个物体的位置,而是要对环境中的物体进行连续实时监测,一旦检测结果发生变 化就立即作出反应。为了能够有效地处理非结构化的动态环境需要进行合理的运 动规划,同时还要合理的设计机器人控制系统,这是基于行为的机器人所要突破 的重点[6]。 3.1 避障规划(避障行为) 3.1.1 基于接触传感器的避障实现 基于接触传感器的避障是以机器人的逃离行为作为基础的,当机器人同障碍 物发生碰撞,接触传感器受到挤压,机器人据此感知是否有碰撞发生。许多机器 基于Microsoft Robotics Studio的机器人设计 20 人通过在机器人两侧分别安装接触传感器来实现碰撞检测功能。当机器人同障碍 物发生碰撞时,接触传感器受压,其中的一个或两个检测开关开始工作,发出电 信号通知机器人有碰撞发生。逃离行为是在这种情况下调用,用来使机器人产生 反应以脱离碰撞区域的软件程序。 当发生碰撞时机器人所做出的反应在很大程度上取决于自身的几何形状,圆 柱体对称机器人采用简单的策略就能可靠、有效的做到这一点。当发生碰撞时, 机器人首先应该后退一定距离以使接触传感器的挤压状态得到缓解。此时,机器 人能够比较方便的进行转弯操作。后退以后,接触传感器将不再同障碍物发生强 烈接触,警示机器人碰撞发生的电信号也会消失。在这个程序设计中,会出现问 题,若后退距离不够大,则会出现接触传感器信号消失,而传感器还轻微接触着 障碍物。 我们曾尝试采用以下方案建立伺服逃离行为:如果左侧发生碰撞机器人原地 向右旋转;如果右侧发生碰撞则原地向左旋转。这种方案存在一些问题:若机器 人两个接触传感器同时触发,这时若是进行后退,则两个传感器将会同时释放, 机器人将会忘记曾有物体出现,然后又会向前行走,从而进入一个死循环。 当两个接触传感器同时触发时,不让机器人后退,而是让它随机的向左或者 向右旋转,这样可能能够解决这个问题。但是,采用这种方法又会带来另外一个 问题:当机器人同障碍物发生正面碰撞时,机器人会一直旋转,直到检测不到障 碍物为止。在停止旋转时,机器人同墙之间仍然存在轻微的接触,而这种接触还 不足以触发接触传感器。在这种情况下,机器人有可能贴着障碍物继续前进,草 儿导致这种逃离行为的实效性很差。 正是由于存在以上问题,逃离行为要进行一些更改。只要有一个接触传感器 由于碰撞而改变,机器人就会立即开始后退,为变量d设定一个值,使机器人记 录是由哪个传感器发生了碰撞,为逃离行为设定下一步的转向值。同时为变量b 也会设定一个值,用来规定机器人向后退开的距离。紧随后退行动的就是转向行 动,可以预设这个转角θ或者进行随机的θ值设定。如图所示: 第三章 机器人运动规划 21 无动作 移动距离f 左侧碰撞 输出d=右 右侧碰撞 输出d=左 后退 前进 移动距离x 原地向d方向旋 转过角度θ 图3.1 接触传感器的避障程序流程图 3.1.2 测距传感器的避障实现 基于测距传感器的机器人利用传感器在它所关注的潜在危险对机器人造成损 坏之前检测出这种危险的存在并逃离这种危险。最常用的避障行为在实现过程中 经常使用红外接近传感器、红外测距传感、声纳传感器以及激光传感器。 我们以安装了多个激光测距传感器的机器人来举例:当激光测距传感器开始 工作时会收集周围环境信息,由这些信息机器人可以判断是哪几个传感器接收到 了数据信息,并根据这些信息更改某些变量的标签信息。主程序根据标签信息来 确定周围的环境状态。输出左侧的测量值到变量L,右侧的测量值到变量R,对L、 R变量的值进行处理并执行: 1、若变量L、R的值没有低于最小值Limit,则设定驱动直行; 2、若变量L>变量R的值,且变量L>Limit的同时R 行旋转并持续检测各传感器输出的距离信息,若两侧变量L、R的值都大于 Limit的值则设定向前行进; 基于Microsoft Robotics Studio的机器人设计 22 3、若变量R>变量L的值,且变量R>Limit的同时L 行旋转并持续检测各传感器输出的距离信息,若两侧的变量L、R的值都大 于Limit的值则设定向前行进; 4、若变量L、R的值都小于最小值Limit,则机器人进入后退程序,同时检测 测距传感器发回的信息,到变量L、R的值都超出Limit所设定的下限时, 根据随机时间决定进行后退距离,同时开始进行随机的转向,这种专向一 般角度不超过90°。 至此,整个检测—判断—驱动程序完成,在复杂的环境中这个程序也可以发 挥正常的作用。 检测 L>Limit R L R>Limit L>Limit R>Limit 随机 转向 L R 随机 后退 左转 右转 直行 图3.2 基于测距传感器的程序流程图 3.2 运动规划中会出现的问题 3.2.1 抖动问题[7] 抖动问题在机器人领域是一个普遍的问题。当两个不同的行为轮流控制机器 人,或者一个行为的两个不同部分互相抵触时,机器人就有可能发生抖动现象。 假设有两个行为:一个行为驱动机器人向位于自己前方的光源前进,另一个行为 第三章 机器人运动规划 23 用来在机器人遇到障碍物时控制机器人后退,后者具有更高的优先级。当机器人 没有发现自己要追寻的光源位置位于某个矮墙的后面时,它能够可靠运行。然而, 随着离墙越来越近,机器人会突然看上去好像停止了,但却又伴有轻微的抖动现 象。这种情况的发生是由于光源跟踪行为一致命令机器人前进,直到检测到障碍 物的存在,此时避障行为触发,该行为驱动机器人后退。然而,只要机器人稍微 后退一点距离避障行为就会变成非触发状态,光源跟踪行为又开始接管控制权, 从而再次驱动机器人前进。这样,仲裁器在两个行为之间轮流选择,并且每个行 为发布的命令都与前一个行为发布的命令相互抵触,从而导致了抖动现象发生。 红外传感器 光电传感器 图3.3 抖动问题 解决这种问题的一个方法是使用循环行为,这种行为能使机器人具有一定的 自我反省能力,他检测的对象不是外部环境信息,而是机器人本身的运行状态。 当感知到轮子正在进行一系列快速切换地前进—后退操作时,或者当发现机器人 没有任何动作是,循环诊断行为将会接管机器人的控制权,并采取一些截然不同 的操作方式,控制机器人随机旋转或者发布其他一些能够打破目前僵局的随机命 令。 基于Microsoft Robotics Studio的机器人设计 24 循环诊断行为提供了一种能够避免行为组合出现不良运行后果的通用方法。 然而,如果可能的话,更好的办法是深入了解经常邻近调用的两种行为之间的相 互影响方式。 3.2.2 峡谷效应问题 在机器人运动中,若环境中遍布许多障碍,或者有些占该物的形状是非凸的, 则会造成程序出现一些错误。这种错误发生在机器人遇到某个拐角或者箱形峡谷 时,如图所示: 图3.4 峡谷效应示意图 在这种情况下,机器人首先检测到自己左侧出现障碍物,并开始向右旋转; 经过旋转,它将会感知到右侧物体的存在,并将因此左转,从而再次感知到左侧 障碍物。这种恶性循环将会无休止的进行下去,从而使机器人陷入了本应该很容 易就能摆脱的角落里。机器人这种不能脱离内部角落的现象被称为峡谷效应。 可以利用这种方法对避障行为进行修正:当机器人检测到两侧都有障碍物时, 进行后退操作,这样,机器人就能从任何一个峡谷中退出来。然而遗憾的是,这 种做法只是将问题变换了一下表现形式,对于行为的改善没有起到根本性的作用。 此时,机器人驶入峡谷,如果检测到两侧同时都有物体,它将进行后退操作,直 第三章 机器人运动规划 25 到感知不到任何物体位置;随后机器人将再次前进,又一次检测到两侧的墙壁, 然后又一次后退,„,这样机器人又一次陷入了永不停止的重复循环过程。 根据上面的分析我们可以看出,修改部分程序就可以完成机器人的行动任务, 我们在后退后添加一个状态,让机器人进行随机的转向,这样机器人就从峡谷效 应中脱离出来,使后续任务可以继续完成。 3.3 本章小结 本章介绍并分析了基于接触传感器的避障程序和基于测距传感器的避障程 序,同时还分析了机器人避障程序中通常会发生的两种问题,同时也提出了解决 方案,本章的分析使后面设计机器人避障程序时有了基本思路。 基于Microsoft Robotics Studio的机器人设计 26 第四章 基于Microsoft Robotics Studio的机器人避障的实现 27 第四章 基于Microsoft Robotic Studio的机器人避障的实现 在这章中我们将使用Microsoft Robotic Studio来建立机器人。我们设计的机器 人包含了操作型机器人和移动型机器人,我们将使用多种传感器和辅助控制设备 来设计,同时我们还将使机器人获得躲避障碍物的能力。在程序设计过程中我们 会用到VPL提供的大量组件,如激光测距传感器、接触传感器、Activity组件等[8]。 4.1 采用模型的选择 MSRS与大量机器人厂商有合作关系,所以在VPL中为我们提供了许多机器 人模型可以进行编程和虚拟,但是不是所有的机器人模型都适合于我们这次的试 验,所以我们将从这些机器人中挑选出本次试验所需要的机器人模型。 Microsoft Robotic Studio提供的能够虚拟运行的机器人有以下几种: ① iRobot Create™机器人平台 图4.1 iRobot Create™机器人平台 iRobot Create™拥有32个内置传感器包括我们所需要的接触传感器,两个驱 动轮,一个车辘和四个可移动小轮,一个预排程序的行为编码器,一个可以扩大 的输入输出端口和一个后挡板。在指令模块等许多可选择性附件的如iRobot Command Module, iRobot Roomba standard remote和iRobot Roomba Virtual Wall, 独立充电底板等。能源方面,你可以选择使用可持续使用的充电电池或标准碱性 电池。 在MSRS的系统中,我们可以使用通用的差分驱动器和接触传感器来对iRobot 基于Microsoft Robotics Studio的机器人设计 28 Create™进行编程,同时MSRS还提供了iRobot Create™的虚拟模型,这个虚拟模 型同样提供了驱动和多个传感器。 ② LEGO RCX™和LEGO NXT™ 图4.2 LEGO RCX™和LEGO NXT™的控制模块和在虚拟系统中的模型 LEGO RCX™和LEGO NXT™是乐高公司推出的两套套机器人系统,分别面 对不同的用户群,通过组合搭建机器人的物理平台,你可以根据需要自行安装标 准统一的传感器或其他组件。RCX使用的微型控制器,是日立H8/3292系列的 H8/300单片机,属于H8/3297系列[9]。 RCX支持的输入设备(传感器)有:接触传感器、光感传感器、角度传感器、 温度传感器、以及火焰传感器。但是在没有安装固件时传感器将不能工作,也不 能执行编译的程序。仅可以运行固化在硬件内的默认程序。输出接口只能接到 LEGO专用马达(标准马达和微型马达)以及扬声器。RCX可以同时控制所有输 入/输出设备RCX使用6节5号电池,安装于背部凹槽。也可以使用9~12伏的外 接直流电。当RCX没电时,其内部储存的所有数据都会消失,包括固件和已编译 的程序。位于顶部的红外线数据接口是RCX唯一的数据来源,RCX与外界一切通 讯都通过此接口与LEGO专用红外线接收器(接口分别为COM和USB)进行数 据交换,通讯频率为38500Hz。 在MSRS系统中,LEGO系列的机器人被设计成具有差分驱动器、碰撞传感 第四章 基于Microsoft Robotics Studio的机器人避障的实现 29 器、光电传感器的一个综合体,具体效果见图4.2。 ③ Pioneer 3DX™ 图4.3 Pioneer在虚拟环境中的模型 我们所能获得的关于Pioneer 3DX的资料较少,通过MSRS的资料库我们可以 了解到Pioneer 3DX机器人具有大量的传感器组件,已获得的资料中我们可以看 到,该机器人安装有接触传感器、激光传感器、声纳传感器、光电传感器、图像 传感器等,大量的传感器让各种程序都可以方便的获取需要的环境信息,该机器 人还具有差分驱动器,据观察,该机器人使用一个辅助轮和两个差分驱动轮,这 使得机器人的运动十分灵活。同时该机器人具有无线连接的功能,可以远程操控。 该机器人在许多大学被用作教学机器人。 除了以上机器人,MSRS还提供了例如机械臂机器人、多机器人系统等大量的 具有虚拟模型的机器人环境。 我们按试验的需求在众多机器人模型中选择出符合要求的机器人平台模型: 由于Pioneer 3DX机器人具有红外测距传感器,使得试验要求满足,所以选择 基于Microsoft Robotics Studio的机器人设计 30 Pioneer 3DX作为基于激光测距传感器的避障程序试验的平台。iRobot Create具有 接触传感器,且机器人形状为圆形,使得避障程序容易实现,所以接触传感器避 障试验使用了iRobot Create™模型作为试验模型。手动操控类的可以使用任何带有 差分驱动器的机器人,选择面较广。 4.2 基于激光测距传感器的避障程序实现 激光避障传感器的避障程序算法我们已经在第三章3.1.2小节进行了讨论,整 个避障算法是由如下程序流程所组成: 激光测距传感器 Label Nearest 变量Right=t Label==Right Label=? 变量Left=t Label==Left 数据集合 Input State=? State=Forward 变量State=Turn <1500 Left>Right? < Or > 转向 前进 图4.4 基于激光传感器的避障程序流程图 我们基于这个原理图来使用Visual Programming Language实现机器人测距避 障的程序。 第四章 基于Microsoft Robotics Studio的机器人避障的实现 31 首先我们建立一个Activity框体,这个框体包括了激光传感器自身循环检测和 数据前期处理与输出组件,我们将该模块命名为LaserRangeFinder。 图4.5 LaserRangeFinder的命名 我们将在这个窗体里建立激光测距传感器的数据预处理,,所以我们需要设定 该模块的输入数据的数据类型和名称,在这里我们设置了六个输入量,分别是(括 号中代表其数据类型): i (int) 该数据代表激光传感器检测角度 Data (List of int) 该数据代表所测得的数据量表 Increment (int) 该数据代表步进的角度数 Nearest (int) 该数据代表一个用来记录所测量中的最小值的变量 Label (string) 该数据为字符型量,作为输出的数据标签 Limit (int) 该数据设定了检测角度的最大量 图4.6 LaserRangeFinder输入数据定义 基于Microsoft Robotics Studio的机器人设计 32 接下来我们将在Start标签页下建立最基础的服务,将激光测距传感器的数据 传输到数据预处理组件中。我们将激光传感器按角度分为三个部分,分别赋予标 签Label的值为Right、Center、Right,角度范围在输出端有专门的名称 ,我们将设定: 右侧(Label=Right) 0 < I < 3/, 中部(Label=Center) 3/ < I < 5/ 左侧(Label=Left) 5/ < I < 我们将i的初始值设定成为每个标签中角度的最小值,同时将Limit的值设定 为各标签中的最大值,作为各标签的界限。 同时我们设定三个标签下的角度步进量(Icrement)为12,这样检测的时候激光 传感器会以12度的步进速度进行距离检测。Nearest的初始值我们统一设定为 8000,这个值超出判断条件很多,不会引起误判断。Data值直接设定为激光测距 传感器的测量数据列表。 图4.7 三个循环模块的初始值设定 第四章 基于Microsoft Robotics Studio的机器人避障的实现 33 现在我们对FindNearest这个分页面开始进行编辑,这个分程序是用来进行数 据预处理的,该程序实现对每个角度范围内的障碍物到传感器最小值进行记录并 赋到Nearest这个输出量上。 我们将刚才激光测距传感器输入的测量数据和预设值输入该模块,使用一个 判断语句,若i+Increment>Limit则输出当前的Nearest值和标签Label;若这个条 件不成立时将当前的测量数据Data[i]与Nearest的值进行比对,如果当前Data[i] 值小于当前Nearest的值则将Data[i]的值赋到Nearest的值中,同时使i的值增加 12度进行循环,这样在循环中程序可以输出在每个分割的范围中障碍物与传感器 间最小值并输出到FoundNearest。 图4.8 分支程序FindNearest的程序设定 下面我们开始设计主程序,主程序的功能是将LaserRangeFinder输出的数据进 行处理,同时将这些数据综合输入驱动模块。 在LaserRangeFinder中我们输出了三个标签和各自的数据,这些数据的同步性 没有办法保证,所以我们使用主程序来进行处理,读出各标签所包含的数值。我 们建立了两个变量Left和Right,这两个变量使用int的数据类型,将各个标签下 的Nearest值读出后使用Join组件更改数值名输入驱动模块。 基于Microsoft Robotics Studio的机器人设计 34 图4.9 主程序的设定 最后我们将设计驱动模块,驱动模块包含了对传感器数据的处理和对驱动器 行为的设定。 驱动模块的输入有三个数值:Right、Center、Left,这些数值是由 LaserRangeFinder组件读取的三个角度部分中的障碍物到传感器的最小值。我们在 这个模块中使用了一个子变量State,这个变量设定为一个字符型变量,我们可以 根据不同的输入数据设定该变量的数值,使其改变驱动器的状态。 当数据输入时,会分到三个判断中,第一个判断获得输入的数据,如果 Center<1500则设定为向前驱动的同时将变量State赋值为Turn;第二个判断读取 变量State的当前值,并判断State的值是否为Forward,如果State的值为Forward 则转到第一个判断程序,如果否则转向第三个判断;第三个判断Center的数据是 否大于2000,如果是则设定State的值为Forward,如果否则读取和 的值的大小,若>则向左转,反之向右转。 第四章 基于Microsoft Robotics Studio的机器人避障的实现 35 图4.10 驱动模块程序设定 至此,整个程序设置完成,该程序能够完成测距和避障过程。 4.3 基于接触传感器的避障程序实现 基于接触传感器的避障算法我们在第三章3.1.1小节进行了分析,这里我们将 使用iRobot Create™机器人平台实现该避障程序。 我们建立一个Activity组件,将其命名为RandomDrive,这个组件将作为驱动 模块,该模块我们设计要包含三个页面,分别为:Backup、Drive、Turn三个页面, 这三个页面将控制机器人前进、后退和随机转向,该模块只有一个变量Polarity输 入,该变量设定为double的数据类型。 基于Microsoft Robotics Studio的机器人设计 36 图4.11 RandomDrive模块的命名及其子程序的输入量名称/类型设定 接下来我们开始设定Turn页面中的驱动处理,Turn页面中我们将设定一个随 机两量,然后将输入的变量Polarity和随机变量相乘赋入Left变量中,Left取反赋 入Right值中,然后将两个值输入差分驱动器的左右轮,驱动器开始转弯,我们使 用Data和Timer来设定一个1500ms的延时程序,使转弯的角度受到控制,最后 将结果输出到RandomDrive的Result接口上。 图4.12 Random子程序Turn的程序设定 第四章 基于Microsoft Robotics Studio的机器人避障的实现 37 根据Turn页面相同的操作,我们在Backup页面和Drive页面。在Backup页 面中读入Polarity的数据,然后将Polarity的数据乘以-0.4,输入到差分驱动器中, 让机器人开始缓速后退,进行延时,使后退时间定在1500ms;在Drive页面中, 中我们采用了随机速度驱动的方式,使用了Polarity和Random的随即量乘积设定 差分驱动器的驱动力。 图4.13 Random子程序Backup的设定 图4.14 Random子程序Drive的设定 现在我们开始设置主程序,主程序用来获得接触传感器的数据并进行处理, 当接触传感器触发时,使变量Polarity获得变量的当前值,同时输入RandomDrive 中进行驱动判断。 基于Microsoft Robotics Studio的机器人设计 38 图4.15 基于接触传感器的避障主程序 至此,基于接触传感器的程序编写完毕。 4.4 本章小结 本章选择了试验所使用的虚拟机器人模型,并逐一对其介绍,然后我们编写 了基于激光测距传感器和接触传感器的两种避障程序,并着重分析了基于激光测 距传感器的避障程序。同时向读者展示了如何使用Visual Programming Language 编写机器人程序。 第六章 总结与展望 39 第五章 虚拟环境的实现与测试 机器人开发的困难在于:1、机器人硬件价格昂贵。模块化的机器人平台,如 LEGO的Mindstorms®™和Fischertechnik®系列,价格属于中低档水平,但是对于 国内用户价格还是偏高,如果要进行更复杂的机器人,这个花费还会成倍的增加; 2、硬件故障排除困难。消费类的电子产品非常可靠,像DVD或者电视之类,但 是当用户用零件组装或修复一个机器人的时候,其实是对精力的一种浪费,这些 时间应该投入到程序的开发与调整中去;3、硬件损伤,在大规模的机器人比赛中 或在危险的试验环境中,由于机器人硬件的唯一性使得试验变得束手束脚,不敢 尝试更多的危险性试验[10]。 正是因为如此多的问题才使机器人的学习与开发一直不能普及,虚拟系统的 出现让这种技术壁垒大大降低,使普通人也可以在家中进行机器人的研究,下面 我们将使用MSRS所提供的虚拟系统完成环境建立和基于激光传感器的避障试验。 5.1虚拟环境简介 MSRS所包含虚拟环境为我们提供了一个良好的试验平台,这个平台设计了可 视化仿真环境,调节也相当容易。由于采用了AGEIA物理引擎,我们可以在虚拟 环境中模仿真实的物理环境。 MSRS提供的虚拟环境的优势有: 虚拟环境可以使技术壁垒降低,让人们不再为机器人硬件的购买、组装、维 护操心,而是将精力投入到程序的开发上去。 虚拟环境允许开发者进行分部调试,这是开发人员在真实环境中很难实现的。 开发人员可以在任何时刻停止机器人的运动,来观察执行的正确性,或者改动程 序的某些部分。 同时,虚拟环境所提供的机器人是根据实体建立的,所有的传感器、运动系 统都参考了硬件机器人的原形,这样在虚拟过程中可以更贴近现实的表现机器人 的行为,而且这种虚拟也可以保护硬件机器人不会受到操作失败的碎坏。 基于Microsoft Robotics Studio的机器人设计 40 开发者也可以自己添加组件到机器人上,这种添加在虚拟环境中也可以应用, 这种行为可能在硬件系统上完成较困难,但是在虚拟系统里我们可以轻松的完成, 并且把精力投入到为添加的组件进行程序设计上去[11]。 机器人的学习功能也可以在虚拟系统中实现,我们可以建立一个特殊的虚拟 环境,让有学习能力的机器人在这个虚拟环境中进行训练,然后在程序中查看机 器人所学到的内容,如果是好的方面就可以运用到真实环境中去。 当然,虚拟系统还有自己的缺点和局限性: MSRS的虚拟系统是将硬件问题放在一边,使开发人员集中精力开发软件程 序。但是,硬件的设计同样也是机器人设计领域的问题,我们不能只将精力集中 在软件方面,或许,在以后的Microsoft Robotic Studio里会加入硬件设计的模块。 同时,MSRS所提供的虚拟环境缺乏真实环境中的噪声数据,你在使用真实的 机器人时会发现,就算你的机器人在虚拟环境中运行的再流畅,你还要花许多时 间来根据真实的机器人调整程序。因为真实世界的不可预知性和真实传感器的噪 声问题、齿轮间的误差问题,你所编写的程序面临着真实世界的巨大挑战。 尽管MSRS的虚拟环境中的机器人是根据实体进行模型建立的,但是在真实 世界中的误差总是难免的,虚拟系统无法准确的模拟一切,特别是实时性的问题。 像轮式机器人在低速环运动时的模拟对虚拟环境还是一个巨大的挑战。 5.2 虚拟环境的组成 仿真环境是有以下几部分组成: 1、虚拟引擎服务——该组件是用于绘制实体部分,同时它还为硬件引擎提供 虚拟的时间。该组件建立了整个虚拟世界的框架,同时它还提供了整个虚拟环境 的服务或者分布式的系统。 2、物理引擎管理包——使用户从底层的物理引擎界面脱离出来,该组件为硬 件模拟提供了一个更加简洁和易于管理的界面。 3、本地硬件引擎库——硬件支持AGEIA PhysX技术的处理器(PC上的一种硬 件加速卡)可以通过AGEIA PhysX技术加速。 第六章 总结与展望 41 4、实体——虚拟世界的一些仿真实体模型,Microsoft Robotic Studio给这些 实体预定义,使用户在虚拟环境中调用更加方便,用户可以在虚拟环境中使用这 些预定义的模块建立复杂的环境。 使用虚拟环境可以让我们方便的检查机器人的状态和调试代码。 5.3 试验环境的设定 我们将在虚拟环境中测试我们完成的基于激光测距传感器的避障机器人,所 以我们的试验环境设定有以下几个特点: 1. 由于我们的机器人采用的是自由避障,所以试验环境不能过大,否则避 障的效果会不明显,所以我们的试验环境将会固定在一定范围之内。 2. 我们将要检测机器人的避障效果,所以我们将会大量的添加障碍物到试 验环境中,这个数量由人为判断。 3. 我们将采用的机器人种类,由于拥有激光测距传感器的机器人平台不 多,所以选择面较窄。 基于以上几个条件,进行了讨论和规划,最终的结果: 1. 建立一个正方形的试验场地,由于是测试避障程序,所以可以用重量不 计的长方体模块进行搭建。 2. 避障效果的检测需要一个合适的环境,这个环境中的障碍物应该维持在 一个较合适的数量,我们设定了15个长方体模块和3个路障模块 3. 我们采用了Pioneer 3DX机器人平台作为这次的实验用机器人,该机器 人具有大量传感器,特别是具有激光测距传感器,同时还具有差分驱动 器,所以我们选择该模型。 由此我们开始建立所需要的虚拟环境。 我们使用MSDN资料库里提供的Ground环境开始建立,该环境包括地面模 块、天空贴图和光照模块,见图5.1。 基于Microsoft Robotics Studio的机器人设计 42 图5.1 Ground环境 这时我们可以开始添加为控制机器人活动界限而人为设定的墙体,我们从 MSRS所提供的其他虚拟环境中找到所需要的正方体模型,移植成为围墙: 图5.2添加了围墙的Ground环境 第六章 总结与展望 43 同时我们将墙体的数值进行更改,作为障碍物模块放入围墙内部,我们一共 放置了15个长方体障碍物和3个路障型障碍物。这个数量使得避障行为较明显且 有利于观察机器人的运动行为: 图5.3 加入障碍物的试验环境 同时,为了观察方便我们还加入了红色灯光模块,最后一步我们从Pioneer 3DX 的默认虚拟环境中取得了Pioneer 3DX机器人模块,该机器人模块没有加载任何程 序,同时该机器人模块组件附带了我们所需求的激光测距传感器和差分驱动器: 图5.4 加入了红色灯光模块的试验环境 基于Microsoft Robotics Studio的机器人设计 44 完成所有工作后,我们将通过Microsoft Visual Simulation Environment框体File 菜单中的Save Scene As选项保存所完成的环境,这时Microsoft Visual Simulation Environment会在保存Scene的目录下生成Manifest文件,该文件包含了所建立的 虚拟环境中各组件的信息,在虚拟试验中我们将会加载Manifest文件,使得虚拟 能够使用我们所建立的环境。 至此,试验环境的建立结束,我们将开始进行机器人程序的虚拟环境测试。 5.4 机器人避障在虚拟环境中的实测 在上一节中我们已经将避障程序的虚拟环境建立完毕,我们获得了虚拟的实 验场地和加载有模型的Manifest清单,若我们在VPL中加载该清单,则程序会输 入虚拟环境中的机器人。我们可以双击GenericDifferentialDrive和 SickLaserRangeFinder组件,在下拉框中选择使用已有的Manifest清单,见图5.5。 图5.5 在GenericDifferentialDrive和SickLaserRangeFinder中加载Manifest 我们选择已建立的Manifest清单,这个Manifest清单 包括了我们的虚拟环境和虚拟环境中机器人的传感器和驱动组件。 第六章 总结与展望 45 图5.6 避障程序在虚拟环境中实测 在这个环境中我们还可以对障碍物的位置和性质进行修改以适应程序测试的 需求,打开Microsoft Visual Simulation Environment窗口下的Mode选项,我们可 以找到Edit选项,在这个设定窗口中我们可以像预定环境时一样进行环境的重新 设定。 我们得到了良好的反馈,运行程序我们可以看到组件在Microsoft Visual Simulation Envronment环境中顺利的加载了我们刚设定的环境,包括围墙、障碍物 模块和Pioneer 3DX机器人模块,经过开启SickLaserRangeFinder组件的等待时间, 第一组数据顺利的进入程序循环,开始避障实测,我们可以看到,在机器人的运 动过程中,完全按照我们预先设想的行为运动。至此试验成功。 基于Microsoft Robotics Studio的机器人设计 46 第六章 总结与展望 47 第六章 总结与展望 6.1 本文总结 Microsoft凭借自身在软件领域的优势开发了这款机器人设计平台,MSRS为 我们提供了一个更加方便的开发平台,让我们看到了机器人的开发能够变得如此 简单。或许有一天MSRS会成为机器人界的Windows操作系统,在机器人开发系 统中占据龙头的地位。 在缺乏资料的状况下我开始了这次的论文,开始没有想象中的容易,大量的 英文入门资料让我着实烦恼,尝试了很多遍,失败过很多遍,终于在不断的摸索 中成功建立了第一个试验程序,当我阅读完MSRS中所附带的帮助文档后,我发 现使用VPL编程的便利。之后的时间里我参考了许多机器人方面的资料,这些资 料虽然不是以MSRS平台编辑的,但是资料中的思想给我很多启发,在最终的程 序中我也借鉴了这些资料中的算法和规划。 MSRS提供的VPL编程环境在现在看来还略为简陋,只能提供机器人平台的 一些组件,但是在不久的将来我认为这种高度模块化的语言会在编程领域占有一 席之地,这些程序在视觉上较为直观,它将程序员从大量的编码中解放出来,使 人们将更多的精力放在算法和规划上。个人认为VPL将会有更大的发展。 MSRS提供的虚拟环境也是机器人开发低价化的保证,它将机器人的入门门槛 降低,使开发具有了实时性,可以方便的观察和修改。但是这个模拟环境和真实 环境还是有不可逾越的差距。真实环境总是复杂多变的,虚拟环境不能完全模仿, 但是我认为这个模块的存在对于现在的开发环境还是很有意义的。 程序规划方面我参考了许多资料,发现运动的规划是一个很深的问题,对于 同一个目标,每个人有不同的算法。我通过资料了解到许多新的算法,但是对于 完成这些算法还有许多问题要解决,有软件的问题也有人为的问题,最终我使用 了一个不算困难的算法,容易实现且能达到我所期望的目标。 这次论文我觉得对我来说是一个很好的锻炼,我在不断的寻找和消化我所需 求的资源的过程中学到了许多知识。在完成这个试验的过程中,不断的分析和改 进程序,提高了我的分析能力。这次毕业设计将在我今后的工作生活中留下深深 基于Microsoft Robotics Studio的机器人设计 48 的烙印。 6.2 下一步的试验方向 本次试验已经达到目标,我认为下一步的方向将有三个: 一、 虚拟环境 在这次试验中我们只用到了虚拟环境的一小部分,MSRS所提 供虚拟环境非常强大,这个环境可以调整各个传感器的方位,可以建立更 多的物体,并且可以模拟不同的重力环境等。下一步的目标可以对该虚拟 系统进行进一步的学习和研究。 二、 Visual Programming Language VPL不仅提供了一些默认的组件,它还包含 了许多其他综合类的组件,包括图像处理、音频处理等高端组件,这些组 件在Windows环境下可以直接调用,这就可以使许多在其他语言环境下 复杂的程序简单化,在这方面可以进行尝试。 三、 机器人运动规划 机器人运动规划如今还在不停的发展,将来会有更加精 简且高效的算法出现,我们可以对所拥有的算法进行进一步的分析,使其 更易于执行。 致谢 49 致 谢 本文是在段清娟老师的指导下,与王培华同学共同研究完成的。从论文开始 时的资料收集到后期的制作中,段老师给予了极大的关心和帮助,她与我们一起 收集信息,一起分析程序,经常连午饭都不能按时吃,这里向段老师表示深深的 敬意。同时我要感谢王培华同学,由于选择题目相近,我们经常会在一起研究讨 论,给我很多的启发。 感谢我在北京交通大学学习软件工程的同学宣欣,他在程序出现问题的时候 通过网络帮我做调试,并和我一起分析程序! 感谢宿舍的同学们,是他们陪我度过了程序设计时的一个又一个通宵,而没 有对我打扰他们发出任何怨言! 感谢家里对我工作的支持,给我了极大的支持和理解! 参考资料 50 参考资料 [1] /en-us/library/ [2] /en-us/library/ [3] /en-us/library/ [4] /en-us/library/ [5] Microsoft Robotics Studio Documents Lab Tutorial 3 (VPL) [6] Michael Somby , A review of robotics software platforms.(2007) [7] /Article/HTML/ [8] Joseph L Jones , Daniel Roth ,Robot Programming : A Practical Guid to Behavior Based Robotics(2006.3) [9] /en-us/library/ [10] /en-us/library/ [11] /en-us/library/