资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2011/4/27,#,类,人机器人系统结构简介,西华大学机器人研究所,LW 2011-04-27,-,主要介绍系统概念及上位机算法,声明,本幻灯片主要用于对一些基础知识的概述,纯为个人理解,并非专业人员专业教材,全部内容仅供参考。,本幻灯片主要起到抛砖引玉的作用,真正的比赛实战等还需要同学们私下深度的介入,包括查阅一些技术资料,编写程序进行实际测试,与同学们进行更多的交流。,想弄好机器人足球首先要浓厚的兴趣还有持续的毅力,其次才是各种技术基础。,一些知识储备,基础语言,:,basic,(下位机),,C+,,,MFC,扩展,:,OpenCV,,串口通信,蓝牙通信,开发环境,:,VC6.0,,,VC2005,,,VC2008,电子方面:机器人硬件电路的掌握,电机控制,机械方面:步态控制,路径规划,运动学动力学分析(较难),类人,机器人系统,介绍,下位机这里指的是机器人执行终端,上位机我们采用的个人计算机来进行控制,利用蓝牙进行通信。,严格意义上的全自主机器人应该是上位机和下位机都是在机器人的终端上,不需要以来个人计算机。,METAL FIGHTER,2,17,个舵机(头部,1,个),机器人运动是通过,17,个电机连续的进行各种转角组合而形成。,为了使得上层控制简单,通常将一些基础动作存储到下位机内,比如直走,跑步,侧移,转弯等等。,下位,机的好坏很大程度上决定了比赛的成绩。,下位,机程序烧写好后,可以通过遥控器红外操控或者电脑端通过蓝牙控制,上位机通过一系列的指令发送来实现机器人的连续运动。,机器人的程序控制,为了便于上层规划,我们将基础动作写入到了下位机当中,假定我们的下位机已经实现了往前行走,左转弯,右转弯,其代号分别为,01,,,02,,,03,,那我们上位机可以通过发送指令,01,,,01,,,02,来实现机器人直行后左转,这样上层规划就不用考虑机器人行走的具体细节,便于简化整个系统。,实例,1,:如何实现短跑?,几,个需要弄清的问题,:,机器人如何“跑”?,往哪里跑?,怎么要机器人跑到终点?如何不走丢?,如何跑得更快?,a solution,如何“跑”?,跑步也是由一系列的姿势组成的。,把一个机器人运动的视频,按每秒,10,张,的速度来截图,我们就可以得到一系列机器人离散的姿态。,我们调下位机的时候分别调出这一系列的动作,然后依次让机器人执行,这样就可以实现跑步的动作了。,往哪里跑?,比赛首先要有一个目标。,就以短跑来说,目标就是远处的色标板。,所以我们的问题的答案就很清楚了,,往终点跑。往想要去的地方跑。,怎么要机器人跑到终点,?,如何不走丢?,这就涉及到与环境互动的问题了,一方面就是说机器人要体现出“智能”,机器人应该随着目标位置的变换,也能找到目的地。,所以我们的机器人必须要有“眼睛”。这里摄像头就是我们机器人的眼睛了。,有了眼睛之后,我们就要让机器人沿着我们眼睛看到的目的地跑。这里就要涉及到如何从摄像头取得图像?如何从得到的图像取得目标?如何跟踪目标?这些就都是编程方面需要解决的问题了。,如果突然走偏差太厉害了,看不到目标了呢?那就应该建立一个重新寻找目标的机制,等等,这些问题都要考虑。,如何跑过别人?,比赛是一项竞技运动,有很多指标来衡量系统性能,比如短跑最重要的一个指标就是时间。,如何使时间短?这就是同学们需要努力思考和解决的问题。,例如:首先肯定要分析目前策略哪些东西比较费时间?下位机动作是否不够好?上位机程序反应是否足够迅速?等等。,现在的代码,目前实验室的代码只是一份简单功能上的实现,如果要取得好的比赛成绩,还需要机器人实验室的同学们接着往下做。,现在的代码是采用,VS2008,开发环境下,C+,语言,,MFC,进行界面开发。,尽管,MFC,框架是比较复杂,但是搞清楚基本框架后,我们以后需要做的事情主要是策略上的问题,,MFC,只需要会简单使用就行,所以对编程本身要求不高。,MF_Control,函数调用图,void,CrecDlg,:,MF_Control,(void),if(,MotionEnable,=,1,),if,(,BT_Ack_Flag,=,0,),switch(,smode,),case,SC_FIND_BALL,:,MF_Find_Ball,(,SC_FAST_ACCESS,);,break;,case,SC_FAST_ACCESS,:,MF_GO_Access,(,SC_FIND_BALL,SC_FIND_BALL,LEFT_TURN_STAND,RIGHT_TURN_STAND,0,80,-,40,80,+,40,FAST_RUN_SHI1,10,);,break;,if(,gMFTimerFlag,=,1,),gMFTimer,+;,if(,gMFTimer,gap_speed,),BT_Ack_Flag,=,0,;,gMFTimerFlag,=,0,;,gMFTimer,=,0,;,MF_Find_Ball,void,CrecDlg,:,MF_Find_Ball,(int,NextStatus,),if(,target,.,flag,=,0,),if(,target_last_x,100,),SendByteWithWait,(,RIGHT_TURN_STAND,);,else,if(,target_last_x,40,),SendByteWithWait,(,LEFT_TURN_STAND,);,else,SendByteWithWait,(,FAST_RUN_SHI1,);,gMFTimerFlag,=,1,;,else,smode,=,NextStatus,;,MF_GO_Access,void,CrecDlg,:,MF_GO_Access,(int,FailStatus,int,NextStatus,BYTELturnway,BYTERturnway,int,TarDistance,int,Lval,int,Rval,BYTEwalkmotion,int,timedelay,),ball_S,=,cvPoint,(,Lval,*,2,0,);,ball_E,=,cvPoint,(,Rval,*,2,239,);,gap_speed,=,timedelay,;,if(,target,.,flag,=,1,),if(,target,.,cx,Rval,),/,在右侧,State,.,Format,(,_T,(,RIGHT_TURN,);,SendByteWithWait,(,Rturnway,);,else,/,正中间,State,.,Format,(,_T,(,WALK_FORWARD!,);,SendByte2BT,(,walkmotion,);,UpdateData,(,FALSE,);,gMFTimerFlag,=,1,;,else,smode,=,FailStatus,;,UpdateData,(,FALSE,);,/,更新显示,实例,2,:如何长跑?,思考:,跟短跑有何相似?,有何区别?,接下来,.,其实还有很多很多的东西需要大家去发现,去了解,去深入。,大家要了解目前实验室的工作,在此基础上进行开发。,
展开阅读全文