自主移动机器人培训教材.ppt
全自主移动机器人,自主移动机器人,培训教程,全自主移动机器人,深圳市鸥鹏科技有限公司简介,深圳市鸥鹏科技有限公司(OpenTechnologyLtd)是一家专业从事机电一体化和专业机器人创新产品研究、开发、生产和销售的高新技术企业,开发的具有自主知识产权的机电一体化和专业机器人集成技术及产品不仅可以广泛的应用于工业自动化领域,而且还可以广泛的应用于普通高等院校和职业技术学院的自动化和机电一体化等相关专业的实训、教学和研究。本手册主要围绕普通高等院校和职业技术学院的数控原理与数控技术、专业机器人和控制原理和控制工程等综合创新实验室的建设来介绍产品,但这些产品并不仅仅限于教学应用,他们的大多数产品都可以直接应用于工业领域。更详细信息请登录:www.open-,全自主移动机器人,自主移动机器人简介,Robocup足球机器人世界杯是目前世界上规模最大的智能机器人联盟。Robocup中型组足球机器人是目前Robocup足球机器人比赛中最富挑战性的课题之一,博得许多机器人研究机构和大学的青睐。DM-B系列智能机器人系统既能够面向RobotCup中型组足球机器人竞赛提供一个标准比赛任务。能够用于如实时计算机视觉、多机器人协作算法等其他多种研究。还可以满足机电,自动控制等课程的教学演示、工程实训,以提高学生的综合创新能力。可扩展成工业领域和服务领域的智能无人小车和智能服务机器人。,全自主移动机器人,DM-B系列智能机器人标准配置,DM-B200:,DM-B400:,全自主移动机器人,自主移动机器人整体外形图,全自主移动机器人,自主移动机器人机械模块,机械外壳,驱动轮,全维视觉安装架,踢球机构,传感器安装位,全自主移动机器人,自主移动机器人电气控制模块,直流伺服电机,电源系统,运动控制器,螺线管,全自主移动机器人,自主移动机器人传感器模块,全维视觉,前向视觉,电子罗盘(可选),红外传感器(可选),超声波传感器(可选),全自主移动机器人,自主移动机器人使用,接口连线,笔记本启动,机器人上电,硬件模块测试,硬件模块测试,硬件检查,全自主移动机器人,自主移动机器人软件模块,运动控制模块,视觉模块,策略模块,Windows XP Professional 操作系统需要摄像头驱动程序运动控制动态链接库TML_lib.dll,视觉动态库omni_vision.dll,决策动态库decision_making.lib和控制动态库control.lib。推荐运行在 PC CPU 800MHz以上,256M以上内存环境。,软件运行环境:,全自主移动机器人,程序模块划分及工作流程一,运行于BlackGen上的程序从结构上可以分为4个主要模块:视觉模块决策模块运动控制模块通信模块除BlackGen之外,还有一个教练(Coach)程序用于远程控制和查看当前信息。BlackGen运行在机器人的笔记本中,Coach运行在场外的计算机里面,一个Coach程序可以控制多个BlackGen程序。,全自主移动机器人,程序模块划分及工作流程二,全自主移动机器人,程序模块划分及工作流程三,BlackGen整个进程由5个线程组成:视觉线程,决策线程运动控制线程通信线程另外还有一个主线程,它是程序的入口,它先为整个进程作一些必要的初始化,如:初始化摄像头,读取配置文件等。然后创建另外4个线程,接着就等待键盘输入和处理指令,键盘输入的指令有start(开始),stop(暂停),end(程序结束)。,全自主移动机器人,程序模块划分及工作流程四,全自主移动机器人,视觉模块,全自主移动机器人,视觉模块主要完成以下任务,a)基于Camera类的视频采集。b)基于CBaseVision类及其子类(CFrontVision和COmniVision)的图像分析处理。c)两个视觉的信息融合(updateWorld函数)。,全自主移动机器人,基于Camera类的视频采集,Camera类表示摄像头设备,主要用来初始化摄像头和从摄像头中获得的图像原始数据,通过摄像头获得的是24位RGB格式的图像数据。RGB(red,green,blue)是在三基色理论基础上开发的相加混合颜色空间,这也是在图像处理中通常采用的颜色空间,其中在320240的图像上每个象素点用3个Byte表示其RGB值。主要采用了directShow技术进行视频捕捉。Camera类的接口很简单,为了方便使用,只有两个公共函数:bool Init(int dev_num,char*pBuffer);执行初始化摄像头,在第一次从设备读取图像原始数据(RGB颜色模式)之前,一定要执行初始化。第一个参数dev_num表示该设备的在当前操作系统中的枚举值;第二个参数pBuffer表示存放图像原始数据的缓冲区,该缓冲区大小至少为3320240个BYTE。void CaptureImage(char*pBuffer);捕捉图像原始数据,参数pBuffer表示存放图像原始数据的缓冲区。,全自主移动机器人,基于CBaseVision类及其子类的图像分析处理,软件在识别中使用颜色分割的方法,软件中需要识别八种颜色,我们通过对H、I、S三个数组都设成BYTE型,每一为为代表一种颜色,如果某个颜色分量的某个值属于某中颜色,则对应与该颜色的此颜色分量数组中的相应位设为1,否则设为0,这样通过用某个象素的H、I、S值作为H、I、S三个数组的索引对三个值进行位与即可得到当前象素属于的颜色,也成为“8通道”的方法。这样效率比较高。此部分已经被封装成vision.dll在程序中通过加载dll实现。其中的大部分文件的源代码是开放的。,全自主移动机器人,CBaseVision类图像处理的典型步骤,全自主移动机器人,CFrontVision类中图像处理实现过程,全自主移动机器人,两个视觉的信息融合,软件有两个摄像头采集视频,采用的是不同的图像处理方法,因此在视觉融合方面需要做一些工作。即不论所得的有效信息是从全维视觉得到还是从前向视觉得到,在决策模块认为是一致的。bool updateWorld(CFrontVision&frontVision,bool frontOK,COmniVision&omniVison,bool omniOK,World&w)更新信息函数。该函数为上面的结构体中变量赋值。第一个参数frontVision指向前向视觉对象。第二个参数frontOk,true表示前向视觉参与视觉融合,false表示不参与。第三个参数omniVision指向全维视觉对象。第四个参数omniOk,true表示全维视觉参与视觉融合,false表示不参与。注:在软件中主要是通过经验来融合两个视觉的信息。该部分应该根据具体情况考虑修改。并且没有写单独一个视觉的情况,如果需要可自己添加。第五个参数w,World对象中包含Vision2Player成员,该成员会被赋值。,全自主移动机器人,决策模块,决策模块的输入是视觉模块的输出,是球场上各个对象的信息,如球相对于机器人的坐标,两个球门中心点相对于机器人的坐标等等。决策模块的输出是具体的运动参数,如左右轮速,它们将成为运动控制模块的输入。在这里面运动控制模块所做的是根据过去部分的和当前的视觉信息判断出当前状态,根据这个状态使用对应的算法计算出适合的运动参数。决策模块主要是通过一个有限状态自动机来完成决策过程的。而这个状态机是通过读取配置文件来构建的。BlackGen在初始化的时候先读取这个配置文件并在程序中构建出一个状态机供决策使用。用户可以根据自己的需要针对不同情况编写不同的配置文件。,全自主移动机器人,决策模块的原理,全自主移动机器人,决策模块的原理,找球(FindBall)就是当视觉没有在图像上识别出球时所处的状态,机器人采用自转的方式找球,如果看到球,跳到拿球状态。拿球(GoToBall)就是机器人看见球了,但是球还没进入机器人的带球机构,这个状态的动作需要一个具体的算法,一个已知目标点求左右轮速的算法。当看不见球了状态跳到找球,如果球进入机器人的带球机构时跳到带球状态。带球(DriveToGoal)就是球在带球机构中,而球门并不在机器人的射程中所处的状态,机器人针对对方球门的位置算出不同的左右轮速,同样这里也需要一个特定的算法。如果球不见了状态跳到找球,如果球脱离了带球状态跳到拿球状态,如果对方球门看不见则跳到找球门的状态,如果对方球门进入射程范围就跳到射门状态。找球门(FindOppGoal)就是球在机器人的带球机构中,但是机器人看不见对方球门,机器人需要带着球找对方球门。这里我们直接设置左右轮速(25,40)走圆弧来完成这个工作。射门(Kick)是球在带球机构中,对方球门又在射程中,机器人打开踢球机构把球弹出。同样如果球不见了就跳到找球状态。,全自主移动机器人,具体决策线程的流程,全自主移动机器人,教练与通信模块,通信模块的主要作用就是监听网络等待教练程序发过来的指令。在这里我们只定义了两种指令:s(小写s)代表start开始,S(大写s)代表stop暂停教练程序与通信模块是通过数据结构Referee2Player来完成的。struct Referee2Player char cmd;roleType role;其中cmd为指令(即s和S),role还没有实际的用途。,全自主移动机器人,运动控制模块,BlackGen机器人采用TECHNOSOFT 公司的 IPM 100运动控制板作为运动控制器,用来将上位机指令转换为运动输出。BlackGen采用运动控制动态链接库TML_lib.dll来完成对IPM板的控制,而控制工作主要在ipm类里面实现。,全自主移动机器人,运动控制模块接口说明,主要成员函数:bool Ipm:initIpm()初始化控制板。int Ipm:readASPD()读取实际的左右轮速并把结果保存在R_ASPD和L_ASPD这两个成员变量中。bool Ipm:DetectBlock(double lwset,double rwset)判断机器人的左右轮是否处在堵转状态,输入为lwset和rwset实际向IPM板发送的左右轮速。函数给bLBlocking和bRBlocking两个成员变量赋值,这两个变量分别代表了左右轮是否堵转。第一个参数lwset为发到IPM板上的左轮速 第二个参数rwset为发到IPM板上的右轮速 bool Ipm:LoadConfig(const char*filename)读取配置文件,得到初始化参数。第一个参数filename为IPM板相关的配置文件,默认为ipm.cfgvoid Ipm:axisOff()让机器人处于poweroff的状态。void Ipm:axisOn()让机器人处于poweron的状态。void Ipm:kickerOn()打开机器人的踢球机构。void Ipm:kickerOff()关闭机器人的踢球机构。bool Ipm:SendToIPM()把类成员lv和rv作为左右轮速以速度控制的形式发送指令给IPM板。,全自主移动机器人,全自主移动机器人维护,保持设备正常,故障排除,检查相关连线,日常维护,