悟空、悟能双足机器人教程综述

发布时间:   来源:文档文库   
字号:


创梦智能机器人
双足竞步悟空、悟能双足机器人教程





创梦智能机器人工程部
2014.4.1



目录
第一章:双足竞步悟空、悟能双足机器人安装教程………3第二章:双足竞步悟空、悟能双足机器人快速编程指南…11
第一节:认识单片机……………………………………11第二节:STC单片机介绍…………………………………13第三节:程序代码的编译、纠错及烧写…………………183.1序代码的编译及纠错……………………183.1.1keil软件的安装………………………183.1.2keil的执行及程序编译………………213.2烧写软件的使用………………………24第四节:舵机简介…………………………………………26第五节:PWM信号介绍……………………………………30第六节:创梦控制板硬件功能介绍………………………33第七节:实例双足程序详解…………………………38第八节:如何快速会用双足程序………………………54




第一章:双足竞步悟空、悟能双足机器人安
装教程

专用舵机

头顶板

U型件




连接板

直角连接板

狭窄足脚底板




交叉足脚底板1

交叉足脚底板2

M2*6




M2自攻丝

M2螺母

第一步:头顶板与U型件连接




第二步:U型件与U型件
悟能交叉足:

悟空狭窄足:

第三步:脚底板的安装
悟空狭窄足:

悟能交叉足:





第四步:





第五步:
第六步:
第七步:






第八步:





第二章:双足竞步悟空、悟能双足机器人快
速编程指南
第一节:认识单片机
随着电子产品的多样化和普及,单片机已渐渐成为生活上不可的少的必需品了,从早上起床的电子闹钟,烹煮早餐的电磁炉定时及温控装置,上课、上班时吹冷风用的Fuzzy控制器,学校电梯控制电路,家中的电视机的遥控器,计算机及外围的控制电路以及许多的玩具应用等,这些电子产品内部都含有一个单片机。
因为单片机具有体积小、功能强大、编写容易等优点,自然就成为我们机器人中不可或缺的控制组件,这也可以减轻机器人的重量和缩小其体积,相对的,也减少对电池能量的消耗。接下来我们来了解单片机(微电脑)
微电脑具有和大脑一样的中央处理器,以及存储器,通过中央处理器去控制输出输入单元。
1、中央处理单元
用于指令的编码及存取,依此来控制整个系统的运作,并同时执行所有的算术与逻辑运算。中央处理器单元是微电脑的大脑,主要负责指令的提取、分析、执行并将结果送至内存,也能控制输出输入的动作,而中央处理单元每次所能处理的信号位数则代表该CPU的位数,如4位、8位、16



等、目前的微电脑已达到64位了。

2、存储器
用来存储数据及指令的地方,CPU要执行的指令、顺序及所需要的都存放在此,是微电脑的数据仓库。存储器又可分为:1ROM只读存储器,是一种可读不可写的存储器,在电路中,即使电源关闭其内部的数据或程序也不会因此而消失的,下次开启电源时,又可以再次执行,所以也称为非易失性存储器。2)随机存储器RAM内部的数据可以随时由电路CPU读取及存放,故其内容随时会因电源的关闭而消失,当下次开启电源时,CPU就得重新将数据写入RAM中,所以又称为易失性存储器。

3、输入/输出单元(I/OPort-连接外界及内部之间的通道
CPU产生的各种信号可以通过输出单元到达外界,继而控制各种外围电路及设备。相反的,外围电路及设备所要给CPU的信号,就得通过输入单元,传给CPU,这就是微电脑输出/输入单元的主要功能。




第二节:STC单片机介绍
STC12C5A60S2单片机图片

上图为48脚单片机,常见的还有下面40脚直插型的

单片机内部结构图





常接的复位电路和时钟电路


STC12C5A60S2单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强干扰的新一代8051单片机,指令代码完全兼容传统的8051,但速度快812.内部集成MAX810专用复位电路,2PWM8路高速10A/D转换(250K/S,25万次/秒),针对点击控制,强干扰场合。



1.增强型8051CPU,1T单时钟/机器周期,指令代码完全兼容传统80512.工作电压;
STC12C5A60S2系列工作电压:5.5V-3.5V5V单片机)
STC12C5A60S2系列工作电压:3.6V-2.2V3V单片机)
3.工作频率范围:0-35MHz,相当于普通80510-420MHz4.应用程序空间
8K/16K/20K/32K/40K/48K/52K/60K/62K节……
5.片上集成1280字节RAM
6.通过I/O口(36/40/44个),复位后为:准双向/弱上拉(普通8051传统I/O口)可以设置成四种模式:准双向口/弱上拉,强推挽/强上拉,紧为输入/高阻,开漏每个I/O驱动能力均可以达到20mA,但整个芯片最大不要超过120mA7.ISP(在系统可编程/IAP(在应用可编程)无需专用编程器,无需专用仿真器可以通过串口P3.0/P3.1)直接下载用户程序,数秒即可完成一片




8.EEROM功能(STC12C5A60S2/AD/PWM无内部EEPROM9.看门狗
10.内部集成MAX810专用复位电路(外部晶振12M以下时,复位脚可直接1K电阻到地)11.外部掉点检测电路:在P4.6口有一个低压门槛比较器
5V单片机为1.33V,误差为5%3.3V单片机为1.31V误差为3%
12.时钟源:外部高精度晶体/时钟,内部R/C荡器(温漂为5%10%以内)用户在下载用户程序时,可选择使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V片机为:11M-17M3.3V单片机为:8M-12M度要求不高时,可以选择使用内部时钟但是因为有制造误差和温漂,以实际测试为准13.416位定时器
两个与传统8051兼容的定时器/计数器,16定时器T0T1,没有定时器2,但是有独立的波特率发生器做串行通讯的波特率发生器,再加2PCA模块可实现216位定时器
14.3个时钟输出口,可以有T0的溢出在P3.4/T0



输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时
15.外部中断I/O7路,传统的下降沿中断或低
电平触发中断,并新增支持上升沿中断的PCA模块,PowerDown模式可由外部中断唤醒,INT0/P3.2INT1/P3.3TO/P3.4T1/P3.5,RxD/3.0CCP0/P1.3(也可以通过寄存器设置到P4.2,CCP1/P1.4(也可以通过寄存器设置到P4.3
16.PWM2路)/PCA(可编程计数器阵列,2路)17.A/D转换,10位精度ADC,8路,转换速速可
达到250K/S(每秒钟25万次)
18.STC12C5A60S2系列有双串口,后缀有S2标志
的才有双串口,RxD2/P1.2(可以通过寄存器设置到P4.2TxD2/P1.3(可以通过寄存器设置P4.3
19.通过全双工异步串行口(UART,由于STC12
系列是高速的8051可以再用定时器或PCA件实现多串口
20.工作温度范围:-40-+85(工业级)/0-75(商
业级)



21.封装:LQFP-48LQFP-44PDIP-40PLCC-44
QFN-40
第三节:程序代码的编译、纠错及烧写
3.1程序代码的编译及纠错
3.1.1keil软件的安装
1)在附带的资料里面找到(keil4+破解+汉化)这个文件夹,点进去然后双击C51v901.exe
2)接下来出来如图所示的界面,点击Next

3)在Iagreeto前面的方框打钩,再点击Next




4)以后一直点击Next,最后出来如下图所示的界面就点finish就完成安装了

5下面最主要就是破解了,打开keil4这个软件,点击file如图所示的界面,选择LicenseManagement




(6接着在下面界面中,把CID里面的数字复制下来,不要关闭这个界面

(7然后在Keil4+破解+汉化中找到KEIL_Lic.exe点击打开,把刚才复制的CID码粘贴到下面CID后面方框里,点击Generate接着会出来一串数字,把它复制下来然后粘贴到上图New



LicenseIDCode(LIC后面的方框,再点击AddLIC就搞定了!再把这个关掉就破解成功了!


3.1.2keil的执行及程序编译
安装编程软件现在就是该怎么使用了!
1第一步就是新建工程,见下图的界面点击蓝条选项
就是新建工程,然后根据提示选择程序保存位置,还有就是选择芯片型号,如果没有你需要的芯片型号,你可以添加或者选择AT89C51这个型号的也是可以的!




2然后就要添加文件了,file里面第一项就是添加,
把自己下的程序打出来,在保存一下再添加到工程目录下。
3现在就该编译程序了,点击
如果编译没通
过下面方框会出来如图所示的对话框,然后双击errorc202回用箭头指出错误的地方,根据错误修改就好


4如果没有出错,就对输出选择生成HEX文件,点击
Flash然后选择如图所示的蓝条






5得到如下图的界面,
6上面的界面在选择output得到下面界面,Create
HEXFile前面打勾,点击ok就行。然后重新编译一下就可以生成HEX文件了。




3.2烧写软件的使用
烧写软件首先要用的硬件有STCISP烧写器,首先就得给该硬件安装驱动,这个驱动的可以有驱动人生、360驱动、驱动精灵等都可以安装。安装完成就得看看驱动安装怎么样,查看电脑的设备管理器,安装完成就会出现端口(COM2不同电脑可能COM口不一样,但是COM口编号要记下来。

在附带的资料里面找到STC-ISP下载软件,将这个文件夹打开,打开如下图所示,然后双击击蓝条这个文件。




接下来有几个选项要选择,首先是芯片型号的选择这里STC12C5A60S2

然后就是端口的选着上面电脑的端口是COM2然后改成
COM就好
然后就是文件的选择,点击打开文件,选择编译好的文件



HEX文件

然后就是下载了,可能会提示给MCU上电的,直接给单片机上电就好了!有的下载器有冷启动就不会提示上电的!
第四节:舵机简介
微型伺服电机内部结构:
伺服电机(外形见图1)内部包括一只小型直流电机;变速齿轮组;反馈可调电位器及电子控制板处理输入的脉冲信号。
舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机发出讯号给舵机,经由电路板上的IC判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。一般的伺服马达是将细铜线缠绕在三极转子上,当电流流经线圈时便会产生磁场,与转子外围的磁铁



产生排斥作用,进而产生转动的作用力。依据物理学原理,物体的转动惯量与质量成正比,因此要转动质量愈大的物体,所需的作用力也愈大。舵机为求转速快、耗电小,于是将细铜线缠绕成极薄的中空圆柱体,形成一个重量极轻的五极中空转子,并将磁铁置於圆柱体内,这就是无核心马达。
为了适合不同的工作环境,有防水及防尘设计的舵机;并且因应不同的负载需求,舵机的齿轮有塑胶及金属之区分,金属齿轮的舵机一般皆为大扭力及高速型,具有齿轮不会因负载过大而崩牙的优点。较高级的舵机会装置滚珠轴承,使得转动时能更轻快精准。滚珠轴承有一颗及二颗的区别,当然是二颗的比较好。目前新推出的FET舵机,主要是采用FET(FieldEffectTransistor场效电晶体。FET具有内阻低的优点,因此电流损耗比一般电晶体少。伺服电机的工作原理:
伺服电机是一个典型闭环反馈系统,其原理可由下图表示:

减速齿轮组由电机驱动,其输出端带动一个线性的比例电位器作位置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动电机正向或反向地转动,使齿



轮组的输出位置与期望值相符,令纠正脉冲最终趋于为0从而达到使伺服电机精确定位的目的。
标准的伺服电机有三条控制线。分别为:电源、地及控制。电源线与地线用于提供内部的直流电机及控制电路所需的能源,电压通常介于4V6V之间,该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。甚至小伺服电机在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须合理。
伺服电机的电源引线:
伺服电机电源引线三条线中橙色的线是控制线,连到控制芯片上。红色的线是电源正极线,工作电压是5V黑色的是地线。
伺服电机的控制:
伺服电机的控制端需输入周期性的正向脉冲信号,这个周期性脉冲信号的高电平时间通常在1ms2ms之间,而低电平时间应在5ms20ms之间,并不很严格。下表表示出一个典型的20ms周期性脉冲的正脉冲宽度与微型伺服马达的输出臂在180˙范围内转动时与输入脉冲的对应关系:




舵机的技术参数:
厂商所提供的舵机规格资料,都会包含外形尺寸(mm扭力(kg-cm、速度(秒/60°、测试电压(V及重量(g等基本资料。扭力的单位是kg-cm,意思是在摆臂长度1公分处,能吊起几公斤重的物体。这就是力臂的观念,因此摆臂长度愈长,则扭力愈小。速度的单位是sec/60°,意思是舵机转动60°所需要的时间。
电压会直接影响舵机的性能,例如FutabaS-90014.8V时扭力为3.9kg、速度为0.22秒,在6.0V时扭力为5.2kg、速度为0.18秒。若无特别注明,JR的舵机都是以4.8V为测试电压,Futaba则是以6.0V作为测试电压。所谓天下没有白吃的午餐,速度快、扭力大的舵机,除了价格贵,还会伴随著高耗电的特点。因此使用高级的舵机时,务必搭配高品质、高容量的镍镉电池,能提供稳定且充



裕的电流,才可发挥舵机应有的性能。
伺服电机使用的注意事项:
伺服舵机转角在0~180°,当高电平脉冲大于2.5ms一般没有自我保护的舵机,都会使转角超出正常的范围,使内部直流电机处于堵转状态,一两分钟就会使舵机发烫,甚至烧坏舵机。使用时,尽量让舵机在-45°到45°之间转动,这范围内舵机转角也更精准。
第五节:PWM信号介绍
1PWM信号定义
PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。
优点是已经产业化,成本低,旋转角度大(目前所生产的都可达到185度);缺点是控制比较复杂。
但是它是一款数字型的舵机,其对PWM信号的要求较低:1不用随时接收指令,减少CPU的疲劳程度;2可以位置自锁、位置跟踪,这方面超越了普通的步
进电机;





PWM格式注意的几个要点:
1上升沿最少为0.5mS,为0.5mS---2.5mS之间;2数字舵机下降沿时间没要求,目前采用0.5Ms就行;
也就是说PWM波形可以是一个周期1mS的标准方波;3模拟舵机,其要求连续供给PWM信号;它也可以输
入一个周期为1mS的标准方波,这时表现出来的跟随性能很好、很紧密。
2PWM信号控制精度制定

8STC12C5A60S2CPU,其数据分辨率为256,那么经过舵机极限参数实验,得到应该将其划分为250份。
那么0.5mS---2.5Ms的宽度2mS=2000uS
2000uS÷250=8uS
则:PWM的控制精度为8us
我们可以以8uS为单位递增控制舵机转动与定位。
舵机可以转动185度,那么185度÷250=0.74度,
则:舵机的控制精度为0.74


1DWT=8uS;250DWT=2mS
时基寄存器内的数值为:#01H01——(#0FAH250
185度,分为250个位置,每个位置叫1DWT
则:185÷250=0.74/DWT
PWM上升沿函数:0.5mS+N×DWT0uSN×DWT2mS
0.5mS0.5Ms+N×DWT2.5mS
3、舵机控制方法
舵机的转角达到185度,由于采用8CPU控制,所以控制精度最大为256份。目前经过实际测试和规划,分了250份。具体划分参见“PWM信号控制精度制定”
0185分为250份,每份0.74度。
控制所需的PWM宽度为0.5ms2.5ms,宽度2ms2ms÷250=8us
所以得出:PWM信号高电平持续的时间=度数/8μs+500μs


舵机角度=0.74×N
PWM=0.5+N×DWTDWT=8us



角度N
00
45621ms
901251.5ms
1351872ms
1852502.5ms
PWM0.5ms
第六节:创梦控制板硬件功能介绍

除了机器人机体本身以外,还有很重要的一个部分就是机
器人的控制器系统。创梦智能机器人生产的控制板具有很好的操作性。目前市面上使用最广泛的是51系列单片机,我们的控制板采用STC12C5A60S2单片机,大部分元器件采用全表贴工艺。此控制板设计合理,扩展了STC12C5A60S2列单片机的六个端口以供双足使用。

电路板上面的主要元件:
CPUSTC12C5A60S248pinLQFP封装
IO口:此电路板共扩展6IO口,给双足六个舵机
控制
智能稳压:该电路板采用LM2596可调稳压芯片,解决了
舵机联动电压波动比较大的问题,还可以通过电位器调节改变舵机的供电电压,这样就可以使机器人运行在一个最佳的电压状态下!
一键快速启动:本控制板加了一个启动按钮,就是在机器人



在电源开启状态下,按下按钮机器人快速动起来,这在比赛的时候不必停留一两秒机器人才开始启动!
扩展电源管理模块:只要插上电源管理模块可以实现低压报
警,电视实时监控,不必担心在电池电量不佳的情况下让机器人运行!
控制板原理图:


创梦双足控制板实物图:




该控制板使用简介:
从上面图片中可以看出该板子是专门为双足机器人设计的,各个接口按键简单介绍一下:首先是电源接口配备了PCB专用插孔,采用两片锂电供电;接着就是10P下载接口和专用下载器给该控制板下载程序,下载线也是采用专用10P线;然后还有就是程序启动按键,它和单片机的P3.0脚接着,程序检测低电平信号,有这个信号机器人立马启动;然后就是有就是六个舵机的接口,上面J1J6分别就是六个舵机,让机器人背对自己,右手边从上到下依次为:J1J2J3;然后左手边从上到下依次为:J4J5J6。控制板上面对应的有:J1J2J3J4J5J6。注意舵机白色是信号线,白色头插在靠近芯片端,黑色端插在板子靠近外面!




这里需要强调几个注意:
17.4V电源的正负问题,一般情况下,红色线是正极,黑色线是负极。
2)舵机接线统一遵守标准:在控制板上靠内侧即靠近单
片机的一端是控制信号线,中间是电源(稳压后正端),最外面的是地(GND
电压检测模块的简介:
该电压检测模块也采用STC芯片控制,单片机自带十位数模转换,可以准确的测出电池和舵机供电电压,这个板子是专门为创梦双足控制板设计的,能够在使用机器人前使用知道电池的使用情况,避免了机器人在没电的情况下造成机器人损坏!上面可调报警电压根据自己实际情况调节所需的报警电压!图片如下:





两个连接图片如下:





第七节:实例双足程序详解

/***********************************************创梦智能机器人公司
文件名称:robot_test.c文件内容:狭窄足程序
创建人:创梦智能机器人创建时间:2014/4/16
***********************************************/#include//芯片头文件寄存器已经修改#include//数学函数
#include//延时程序通过示波器测试#defineucharunsignedchar#defineuintunsignedint
ucharposition[8];//用于记录8个舵机的位置
ucharpick_up[8];//kouchu[8];各个io口轮流输出是屏蔽其它位uchararr[8];//提供排序空间paixu_ncha[8]=0;中间过度用uchart0bit=0;//定时器0周期相同标志位ucharN;
//关于扫尾值的参数
ucharzsax=15;//14h,z平面sa修正参数ucharpsax=10;//15h,p平面sa修正参数交互2ucharzsag=20;//16h,z平面sa过渡参数ucharpsag=20;//17h,p平面sa过渡参数
/*************************************************************************************
函数名称:voidlow_level_500u
函数功能:PWM信号低电平时间子程序,控制舵机PWM信号的低电平时间决定舵机转动的速度积分思想输入time输出:无
*************************************************************************************/
voidlow_level_500u(uinttime{
uinti;
for(i=0;i



{delay500us(1;}}
/*************************************************************************************函数名称:voidt0_init
函数功能:t0定时器初始化,用于舵机2.5ms定时输入:无输出:无
备注:没有开启定时
*************************************************************************************/voidt0_init(void{
TMOD=TMOD&0xf0;//初始化定时器1的计数方式为方式1无用
TMOD=TMOD|0x01;
TH0=0xee;//晶振22.1184MHz,2.5Ms定时ee00TL0=0x00;ET0=1;EA=1;t0bit=1;}
/*************************************************************************************
函数名称:voidlow_level_t0
函数功能:同周期定时器0设置及启动程序,使每变化一个变化量的周期相同给寄存器填
输入THTL输出:无
*************************************************************************************/
voidlow_level_t0(uintTHTL{
TH0=THTL>>8;//晶振22.1184MHz,2.5Ms定时ee00TL0=THTL;t0bit=0;TR0=1;}



/*************************************************************************************
函数名称:voidT0_Interrupt(voidinterrupt1
函数功能:定时器t0中断服务函数函数中断一次填一次值标记一次一个2.5ms到了输入输出:无
*************************************************************************************/
voidT0_Interrupt(voidinterrupt1{
TH0=0xee;//晶振22.1184MHz,2.5Ms定时ee00TL0=0x00;t0bit=1;}
/*************************************************************************************函数名称:init_cpu
函数功能:单片机初始化程序输入:无输出:无
*************************************************************************************/voidinit_cpu(void{
t0_init(;//定时器0初始化delay500us(10;}
/*************************************************************************************函数名称:array(
函数功能:排序子程序,将各个口的8位根据时间的长短排序提供arr[i]=arr[i]-arr[i+1]相邻差值输入:无输出:无
*************************************************************************************/voidarray({
uchari=0,j=0,x=0;pick_up[0]=0xFE;pick_up[1]=0xFD;



pick_up[2]=0xFB;pick_up[3]=0xF7;pick_up[4]=0xEF;pick_up[5]=0xDF;pick_up[6]=0xBF;
pick_up[7]=0x7F;//赋值
//冒泡排序for(i=0;i<=6;i++{
for(j=i+1;j<=7;j++{
if(arr[i]//交换数据{
x=arr[j];arr[j]=arr[i];arr[i]=x;
x=pick_up[j];
pick_up[j]=pick_up[i];pick_up[i]=x;}}}for(i=0;i<7;i++{
arr[i]=arr[i]-arr[i+1];}}
/*************************************************************************************
函数名称:voidPWM_8(
函数功能:8路舵机输出子程序,实现8路舵机的PWM信号在最短的时间内输
输入position[i]输出:无备注P0
*************************************************************************************/voidPWM_8({
uchari=0,j;
for(i=0;i<8;i++//P0口舵机对应的值{



arr[i]=position[i];}
array(;//排序计算
low_level_t0(0xee00;//开启定时器并赋初始值P0=0xff;//使口P0全部拉高
delay500us(1;//调用延时500us函数for(i=0;i<8;i++//P08路同时输出{
for(j=0;j//此时arr为(安位置大小)相邻舵机位置相差值
{
delay8us(1;}
P0=P0&pick_up[7-i];//此时pick_up代表的是那一位为0逻辑与后拉低}
while(t0bit==0;//等待2.5ms应该说是一个周期的到来可自定义
TR0=0;//关闭定时器0}
/*************************************************************************************
函数名称:initial_position(;
函数功能:初始位置子程序,根据各个舵机的不同位置设置初始位置输入:无输出:无
*************************************************************************************/
voidinitial_position(void{
uchari,j,x=0;for(i=0;i<30;i++
{
x++;
position[0]=125;//0(舵机舵机的初始位置修改,改变数值大小就可以
position[1]=125;//1position[2]=124;//2
position[3]=125;//3position[4]=125;//4position[5]=128;//5
position[6]=125;//未使用



position[7]=113;//未使用PWM_8(;if(x<10{
j=20;j--;
low_level_500u(j;}else{
j=10;j++;
low_level_500u(j;}}}
/*************************************************************************************函数名称:main函数功能:入口函数输入:无输出:无
*************************************************************************************/voidmain(void{
SP=0x70;//堆栈指针初始化P0M1=0x00;//P0asDigitalOUTPUTP0M0=0x00;
init_cpu(;//初始化cpu设置定时器delay500us(10;P0=0xff;
delay500ms(1;
initial_position(;//初始位置delay500ms(1;
while(P3&0x01;//检测按键信号go_ahead_3(;//调用前进三步程序qian_gendou(;//调用前跟头程序go_ahead_3(;//调用前进三步程序hou_gendou(;//调用后跟头程序



go_ahead(;//调用一直前进程序while(1;}
/************************************************************************************************
****************************************************************************************************/
//#############################################################################
//函数名称:voidgoahead3(void//函数说明:前进3步子程序//入口参数:无//出口参数:无
//#############################################################################
voidgo_ahead_3(void{
uchari,t;
for(i=0;i<30;i++//侧身{position[2]++;if((i%2==0
{position[5]++;}PWM_8(;
low_level_500u(15;}
for(i=0;i<50;i++//半步{position[0]++;position[1]++;position[3]++;position[4]++;if((i%5==0{position[2]--;}if((i%10==0{position[2]--;}if((i%50==0



{position[5]+=3;}PWM_8(;
low_level_500u(15;}
for(i=0;i<15;i++//落脚{
position[2]--;position[5]--;if((i%5==0{position[5]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<30;i++//右侧{
position[5]--;if(i%2==0
{position[2]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<100;i++//大步{
position[0]--;position[1]--;position[3]--;position[4]--;if(i%10==0
{position[5]++;}if(i%20==0
{position[5]++;}if(i%100==0
{position[2]-=3;}PWM_8(;
low_level_500u(15;}
for(i=0;i<15;i++//落脚{
position[2]++;position[5]++;if(i%5==0
{position[2]++;}PWM_8(;
low_level_500u(15;







}
for(i=0;i<30;i++//左侧{
position[2]++;if(i%2==0
{position[5]++;}PWM_8(;
low_level_500u(15;}
for(i=0;i<100;i++//右侧大步{
position[0]++;position[1]++;position[3]++;position[4]++;if(i%10==0{position[2]--;}if(i%20==0
{position[2]--;}if(i%100==0
{position[5]+=3;}PWM_8(;
low_level_500u(15;}
for(i=0;i<15;i++//落脚{
position[2]--;position[5]--;if((i%5==0{position[5]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<30;i++//右侧{
position[5]--;if(i%2==0
{position[2]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<50;i++//立正准备{
position[0]--;








position[1]--;position[3]--;position[4]--;if(i%5==0
{position[5]++;}if(i%10==0
{position[5]++;}if(i%50==0{position[2]-=3;}PWM_8(;
low_level_500u(15;}
for(i=0;i<15;i++//立正{position[2]++;position[5]++;if(i%5==0
{position[2]++;}PWM_8(;
low_level_500u(15;}}
//#############################################################################
//函数名称:voidgoahead(void//函数说明:连续前进子程序//入口参数:无//出口参数:无
//#############################################################################
voidgo_ahead(void{
uchari,j,t;
for(i=0;i<30;i++//侧身{position[2]++;if((i%2==0
{position[5]++;}PWM_8(;
low_level_500u(15;}
for(i=0;i<50;i++//半步{



position[0]++;position[1]++;position[3]++;position[4]++;if((i%5==0
{position[2]--;}if((i%10==0{position[2]--;}if((i%50==0
{position[5]+=3;}PWM_8(;
low_level_500u(15;}
for(j=0;j<20;j++{
for(i=0;i<15;i++{
position[2]--;position[5]--;if((i%5==0
{position[15]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<30;i++//右侧{
position[5]--;if(i%2==0
{position[2]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<100;i++//左大步{
position[0]--;position[1]--;position[3]--;position[4]--;if(i%10==0{position[5]++;}if(i%20==0
{position[5]++;}if(i%100==0







{position[2]-=3;}PWM_8(;
low_level_500u(15;}for(i=0;i<15;i++//{
position[2]++;position[5]++;if(i%5==0
{position[2]++;}PWM_8(;
low_level_500u(15;}
for(i=0;i<30;i++//左侧{position[2]++;if(i%2==0
{position[5]++;}PWM_8(;low_level_500u(15;}for(i=0;i<100;i++//右侧大步{position[0]++;position[1]++;position[3]++;position[4]++;if(i%10==0
{position[2]--;}if(i%20==0
{position[2]--;}if(i%100==0
{position[5]+=3;}PWM_8(;
low_level_500u(15;}}}
//#############################################################################
//函数名称:voidqian_gendou(//函数说明:翻跟斗子程序//入口参数://出口参数:无



//#############################################################################
voidqian_gendou(void{
uchari,j;
for(j=0;j<3;j++{
for(i=0;i<55;i++{
position[0]+=2;position[3]-=2;PWM_8(;
low_level_500u(10;}
for(i=0;i<110;i++{
position[1]--;position[4]++;if(i%22==0
{position[2]++;position[1]--;}if(i%55==0
{position[5]--;position[0]--;position[1]--;position[4]+=2;position[3]--;}PWM_8(;
low_level_500u(15;}
for(i=0;i<50;i++{
position[0]--;position[3]++;PWM_8(;
low_level_500u(15;}
for(i=0;i<60;i++{
position[0]--;position[3]++;position[1]+=2;position[4]-=2;


本文来源:https://www.2haoxitong.net/k/doc/c1249bf427c52cc58bd63186bceb19e8b8f6eca7.html

《悟空、悟能双足机器人教程综述.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式