




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章装配步行机器人需要的工具搭建步行机器人需要以下工具:(包含在零配件中)步骤1:安装顶部的 倾斜”伺服电机图1-1安装倾斜伺服电机需要以下配件:4颗M3x8盘头螺钉4颗普通M3螺母用螺丝刀取出电机连接部件和电机输出轴之间的螺钉,将电机连接部件从电 机输出轴上取下来。保存好螺钉及电机连接件,以备后面使用。如图1-1所示,正确安装步行机器人的伺服电机。用 4个M3x8盘头螺钉和 4个普通M3螺母将其固定。最简单的方法是用一只手扶螺母另一只手拧螺丝刀。步骤2:安装底部的“跨步”伺服电机图1-2安装跨步伺服电机需要以下配件:4颗M3x8盘头螺钉4颗普通M3螺母1颗步行机器人的伺服电机用螺丝刀取出电
2、机连接部件和电机输出轴之间的螺钉,将电机连接部件从电 机输出轴上取下来。保存好螺钉及电机连接件,以备后面使用。如图1-2所示,正确安装步行机器人的底部伺服电机。用 4个M3x8盘头螺 钉和4个普通M3螺母将其固定。步骤3:伺服电机归中的电气调整需要以下配件:电池盒4只AA电池用口线(RS-232 DB-9 and straight-through)Keil编译软件:伺服电机归中的调整应该在步行机器人的其它组装之前进行, 这样可避免之后编写程序时出现一些问题。切不能缺省这一步,它可使后面的调整更加容易。将两个伺服电机的连接插头插入步行机器人电路板的P12和P13插针。字母B对应着伺服电机的黑色导
3、线,参考图 1-3。接下来,将4节电池装入电池盒中,并将电源的开关拨至0位。电池盒的插 头和电路板插孔相连,其中开关旁边的排针要用跳线帽来选择电机供电电源。使用一根用口线,将步行机器人的电路板与计算机相连,ISP下载线与十针 的排线座子相连。伺服电机的线与插接到3针的排针上,顺序是:黑线对应标有 B的一端。机器人的电源开关有3种位置。每一位置对应着一种状态。三种位置中的1” 对应给伺服电机外所有电路提供电源。位置0”一-不提供电源;位置1” 一-为步行机器人电路板提供电源;位置2” 一-为电路板、伺服电机等所有元件提供电源。步骤4:安装伺服角需要以下配件:两个伺服电机连接角2颗将伺服角安装到伺
4、服电机上的黑色小螺丝伺服角与伺服电机通过齿形槽连接,利用步骤1和步骤2中取出的螺丝将连接 件固定在伺服电机上。步骤5:在跨步伺服电机上安装黄铜夹头需要以下配件:2个黄铜夹头(黄铜支架,固定螺丝和金属扣眼-也称为E-Z连接器)2个M2x5螺丝将两个黄铜夹头安装在跨步伺服电机连接件最外端的两个孔上(如图1-5所示,安装在伺服电机白色塑料连接件的两端)。用钳子将橡胶夹头压入黄铜夹头 内,再用两个M2x5螺丝将其固定,使其不会脱离。(如图1-6所示)。图1-5在踏步电机上安装黄铜夹头 图1-6固定黄铜夹头3 / 58图1-7安装顶板步骤6:安装顶板需要以下配件:步行机器人的顶板4颗M3x8平头螺钉4颗
5、普通M3螺母如图1-7所示,在步行机器人支架上安装 顶板。一只手将M3x8平头螺钉从顶板上方穿 过顶板及机器人身躯上对应的孔,另一只手将 M3的螺母旋入螺钉,然后将其拧紧。重复以上 步骤直至顶板安装完毕。注意:这一步用到的 是M3x8平头螺钉,而不是平底的圆头螺钉。步骤7:安装身躯与腿之间的不锈钢连接杆需要以下配件:77毫米长金属圆杆 四个5塑料垫圈如图1-8所示,将两根金属圆杆分别穿过步行机器人支架上对应的两个孔, 然后在杆的两端分别上一个垫圈。垫圈可减小步行机器人与身体之间的摩擦。图1-8安装连接杆图1-9安装四条腿步骤8:在步行机器人的身体上安装双腿需要以下配件:四只步行机器人的腿如图1
6、-9所示,将步彳T机器人的4条腿分别安装在两根金属圆柱杆上步骤9:用轴环固定腿部需要以下配件:四个带有固定螺丝的轴环4颗M3x5螺丝在配件中找到金属轴环并将其套在金属圆杆的两端。 如图1-10所示,用M3x5 螺丝将每一个轴环固定在金属杆上。 如果螺丝拧的不够紧,则在感觉到有阻力的 情况下再转过一个很小的角度,这样的松紧程度最为合适。但如果拧的太紧,它 可能阻碍伺服电机的正常工作,致使步行机器人不能很好的行走。图1-10安装轴环步骤10:安装两腿间的连接件需要以下配件:2个白色塑料垫圈(也称为E-Z调节角质托架)2颗M3x15盘头螺钉,2颗M2x5螺钉2颗M3防松螺母2个黄铜直角金属杆图1-1
7、1加装直角托架图1-12连接四条腿这一步分为两个子步骤:首先,如图1-11所示用一颗M3x15盘头螺钉和一颗防松螺母将机器人左腿 与塑料直角托架连接起来,再用一颗 M3x15盘头螺钉和一颗防松螺母将机器人 右腿与塑料直角托架连接起来。拧螺丝时,注意确保托架与螺丝在两腿部件上有 足够的旋转空间可进行180度的旋转。取出两根直角黄铜线,将黄铜线较长的一端穿过黄铜垫圈,如图1-12所示。 然后将黄铜线较短的一端穿过塑料直角托架。 用手扶住黄铜线,并用M2x5螺丝 将其固定到黄铜夹头上。调整连接,保证两条腿没有倾斜,并能垂直的站立。假如你需要或者伺服电 机被移动过,你可以再次校正伺服电机的中心位置。
8、重复以上步骤,调整机器人 的另一只脚。步骤11:加装步行机器人的脚踝需要以下配件:2个脚踝配件4个M2x10盘头螺钉普通M2螺母图1-13加装脚踝如图1-13所示,用4颗M2x10盘头螺钉将脚踝加装到步行机器人腿上。脚 踝较长的一端应朝向步行机器人腿的后方, 这样有利于步行机器人前进过程中重 心的调整,可以更好的控制机器人。步骤12:安装步行机器人的双脚需要以下配件:步行机器人的左脚和右脚4颗普通M3x8螺钉中号十字螺丝刀图1-14加装脚板如图1-14所示,将步行机器人脚踝安装在步行机器人脚掌上的第2个大孔上。如果太紧,可以将双脚稍微向外侧弯曲。用两颗M3x8螺钉(这种螺钉不宜安装过紧,安装完
9、毕后用手转动一下,确 保能够容易转动)在步行机器人脚踝上加装左脚底板。然后以同样的方法安装步 行机器人的右脚底板。为其写入程序前,确保每一只脚都能自由倾斜。步骤13:安装倾斜杆需要以下配件:2根直径2mm不锈钢杆,两端有螺纹4个带有螺纹的半圆形接头在不锈钢杆的两端分别旋入2个半球形接头,调整半圆形接头旋入程度, 者之间的连接距离比步行机器人直立状态下电机连接件最外侧孔到脚掌最外侧 小孔间的距离稍长一点最为合适。这样有利于机器人拐弯时脚紧贴在地面上。以相同的方法加装另一根倾斜杆。图1-15带螺纹的半球形接头图图1-16加装好的倾斜杆步骤14:固定倾斜杆需要以下配件:4颗M2x10螺钉4个M2螺母
10、4个3塑料垫片如图1-17所示,用M2x10螺丝将倾斜杆的半圆形接头固定到电机连接件最 外侧的孔上,注意在电机连接件和半圆形接头之间垫上3塑料垫片,并且螺丝不能拧太紧。两根倾斜杆分别装到电机连接件两侧的孔上。如图1-18所示,用M2x10螺丝将倾斜杆的另一半圆形接头固定到步行机器 人脚掌最外侧的孔上,注意二者之间需垫上 3塑料垫片,然后将两颗 M2螺母 拧到螺丝上,用2颗螺母是由于它们自身可以形成自锁,这样机器人运动时螺母不易脱落。用相同的方法将另一根倾斜杆连接到机器人另一脚掌上。步行机器人的微调:当步行机器人的身体略往后倾斜时,步行机器人的性能是最佳的。也就是说,当两台伺服电机都处在中心位置
11、时, 步行机器人的双脚是 平站在地面上的或者略微的有一点向后倾斜。图1-17安装倾斜杆图1-18半圆形接头和脚掌的连接检查机器人时,首先要确定步行机器人的双脚平站在地面上, 或者略向前倾 斜。如果需要再一次调整其他硬件,可以利用AT89S52®新调整伺服电机的中心 位置。步骤15:安装电池盒需要以下配件:电池盒2颗M3x8平头螺钉2颗普通M3螺母将步行机器人直立摆好。如图1-19所示,用两颗平头螺钉和螺母将电池盒 固定在步行机器人的顶部。拧紧平头螺钉,使平头螺钉嵌入电池盒中,并且从电 池盒另一侧穿出。图1-19安装电池盒 图1-20安装支柱步骤16:安装四个支柱需要以下配件:4根支柱
12、4颗M3x8盘头螺钉如图1-20所示,用M3x8盘头螺钉在步行机器人顶板上安装 4根支柱步骤17:连接步行机器人的电路板和电池管之间的导线需要以下配件:步行机器人的AT89S52电路板步骤18:装入4个AA电池需要以下配件:4节AA电池安装4节电池。然后将步行机器人电路板上的电源开关拨至“1”位,检验电源是否连接正确。如果正确,绿色的电源指示灯将变亮。步骤19:安装步行机器人电路板需要以下配件:M3x8平头螺钉如图1-22所示,在步行机器人的顶板上,用平头螺钉将机器人的电路板周 定在4个支柱上。将步行机器人下方的伺服电机(跨步伺服电机)连接到电路板 的P13处,而将上方的伺服电机(倾斜伺服电机
13、)连接到电路板的P12处。注意黑色线对应“ B”插头,红色线对应“ R”插头。步骤20:再次归中伺服电机并作调整这是装配步行机器人最终的一步,重复前面步骤3一对伺服电机进行中位调 整,调整后步行机器人的双脚应该均衡平坦地站在地面上。检查机器人的上部时,步行机器人的双腿应略向前倾斜。步行机器人的最佳行走状态是步行机器人 脚略微向后倾斜1至2度而不是直立在地面上,以保证重心处在两足之间。图1-22安装完成的步行机器人第二章步行机器人的行走编程步行机器人的各种运动编程方式方式1:野蛮方法这种方式应用了大量的子程序,每一个子程序对应着一个动作。通过调用和 组合这些子程序来完成步行机器人复杂的运动。这种
14、方式简明易懂,但一一列出36种运动方式极大浪费了宝贵的存储空间,更加不利于程序的修改。例如,要 改变运动速度这一参数,就必须修改程序中所有的运动速度参数,极不方便。方式2:用数组表格这种方式通过找寻36种运动之间的共性,特别是一些具有相似功能的子程 序,他们通过带入不同的参数实现不同的动作。 把这些参数归纳到数组中,是简 化程序设计的一种手段。构造数组与编写各子程序相比更简洁,因为数组中只包 含参数。方式3:状态迁移前面两种编程方式中,程序员必须记下步行机器人脚步的位置以及需要调用 的例程,并且要在表格中填入适当的参数值。 而状态迁移方式不同于前面的两种 编程方式,因为步行机器人跟踪的双脚的运
15、动轨迹。 迁移动作用于从一个状态运 动到另一个状态,基本动作是3种倾斜动作和3种跨步动作,这就明显少于其他 方式中用到的36种基本运动。步行机器人的运动原理步行机器人只有2种基本的运动:直线行走和原地旋转。利用这两种基本运 动,仍然可以让步行机器人从 A点移动到B点。步行机器人白行走的分4个步骤:a.向一边倾斜b.移动被提起的那只腿c.向另一边倾斜d.移动被提起的那只腿以上步骤实现一步行走。腿的运动方向决定了机器人的运动的行走方向,腿 的移动距离决定了机器人的行走距离。步行机器人移动的速度,则主要取决于动 作的执行频率,以及每次移动的距离。步行机器人通过原地旋转实现转弯的,步行机器人从A点直线
16、运动到B点, 在B点原地旋转,转向C点的方向,然后直线运动至 C点。原地旋转也有4个步骤:a.向一边倾斜b.移动被提起的那只腿c.两条腿同时着地d.向相反的方向移动双腿这个过程靠摩擦力起作用。实际上,步行机器人的原地旋转是在最后一步(步 行机器人的双脚同时在地面上)完成的。它基本的工作原理是一只脚向前运动时, 另一只脚向后运动,通过双脚与地面间的摩擦里来实现原地旋转。转动的角度受 腿的运动幅度和两脚与地面之间的摩擦系数的影响。过低的摩擦系数,导致机器 人转动很小。过大的摩擦系数则会使步行机器人跌倒。61 / 58任务1:基本的步行运动:野蛮编程Movement 0:Starting Posit
17、ionLlovenreiit. 1:Lean Right frorr 513rtMovement 2:Lsan Rig fl 匚 _eft Fa"ir;3rdMoveine-nt 3:Lean Ltft Right 占玳xMownent 4:Lean LM Right FfifwardMovement 5:Lean F ght. Left BachMowemeni 6:Lear Right, Lrt Forward图2-1前进运动的几个动作例 2.1FirstStep/*任务一:基本的步行运动:野蛮编程,对照实验指导书中图片*/#include <AT89X52.h>#i
18、nclude <stdio.h>#include <toddler.h>#define RightTilt 1260 向右倾角度#define CenterTilt 1500 /中间位置#define LeftTilt 1720 / 向左倾角度#define RightForward 1300 /& 腿向前#define StrideCenter 1500 /中间位置#define LeftForward 1700 /左腿向前#define StrideServo P1_3 /跨步电机连接到 P13#define TiltServo P1_2 倾斜电机连接至U
19、P12int TiltStep = 10; /调整步长可以调节倾斜电机的运动速度int StrideStep = 10; /删整步长可以调节跨步电机的运动速度int MoveDelay = 25;/*起始位置*/void Movement0(void)int i;for(i=0;i<100;i+=StrideStep)StrideServo = 1; /给拖动电机发delay_nus(CenterTilt); /一个宽度为:CenterTiltStrideServo=0; /微秒的脉冲TiltServo = 1; /给倾斜电机发delay_nus(StrideCenter);/k个宽度为
20、:StrideCenterTiltServo = 0; /微秒的脉冲delay_nms(MoveDelay);/* 从起始向右倾斜*/void Movement1(void)int i;for(i=CenterTilt;i>RightTilt;i=i-TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾迈左脚*/void Movement2(void)int i;for(i=S
21、trideCenter;i<LeftForward;i+=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向左倾斜右脚回收*/void Movement3(void)int i;for(i=RightTilt;i<LeftTilt;i+=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;dela
22、y_nus(LeftForward);StrideServo = 0;delay_nms(MoveDelay);/* 向左倾斜右脚向前*/void Movement4(void)int i;for(i=LeftForward;i>RightForward;i-=StrideStep)TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾斜左脚回收*/void Movement5(void)int i;fo
23、r(i=LeftTilt;i>RightTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(RightForward);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾斜左脚向前*/void Movement6(void)int i;for(i=RightForward;i<LeftForward;i+=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;Stri
24、deServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 机器人腿居中*/void Movement7(void)int i;for(i=LeftForward;i>StrideCenter;i-=StrideStep)TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 机器人倾斜电机居中*/void Movement8(void)int
25、 i;for(i=LeftTilt;i>CenterTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);int main(void)int MoveLoop;Movement。; 起始位置Movement1(); /从起始向右倾斜Movement2(); /向右倾迈左脚for(MoveLoop=0;MoveLoop<10;MoveLoop+) Movement3();
26、 /向左倾斜右脚回来Movement4(); /向左倾斜右脚向前Movement5(); /向右倾斜左脚回来Movement6(); /向右倾斜左脚向前Movement3(); /向右倾迈左脚Movement7(); /机器人腿居中Movement8(); /机器人倾斜电机居中修改例程中的代码。尝试以下实验:调整TiltStep和StrideStep0一个较小值,观察步行机器人的行为。调整相同常 量到一个较大值,进行同样的观察。你能想象出伺服电机的时序图,并解释步行 机器人不同行为的原因吗?减小MoveDelay值,并观察步行机器人的行为。为你的步行机器人挑选适当 的MoveDelay、Til
27、tStep和StrideStepfi,让步行机器人按照你的要求进行动作。 记录这些参数值,为将来的程序设计做准备。任务2:向后行走:野蛮编程事耐 io:Lesr lefl,.4Movs-mBnrt il;由t g./gtrt BackLesr 同g Lefl 5抑Mowment 12:L«5i Rlgr Right 63HMovement 13:Lm巨广-北图2-2后退的几个动作例 2.2WalkingBackward/*任务二:向后行走:野蛮编程,对照实验指导书中图片*/#include <AT89X52.h>#include <stdio.h>#inclu
28、de "toddler.h"#define RightTilt 1260 /向右倾角度#define CenterTilt 1500 /中间位置#define LeftTilt 1720 / 向左倾角度#define RightForward 1300 /& 腿向前#define StrideCenter 1500 /中间位置#define LeftForward 1700 /左腿向前#define StrideServo P1_3 /跨步电机连接到 P13#define TiltServo P1_2 /倾斜电机连接到 P12int TiltStep = 10; /
29、调整步长可以调节倾斜电机的运动速度int StrideStep = 10; /倜整步长可以调节跨步电机的运动速度int MoveDelay = 25;/*起始位置*/void Movement0(void)int i;for(i=0;i<100;i+=StrideStep)StrideServo = 1; /给拖动电机发delay_nus(CenterTilt); /一个宽度为:CenterTiltStrideServo=0; /微秒的脉冲TiltServo = 1; /给倾斜电机发delay_nus(StrideCenter);/ 个宽度为:StrideCenterTiltServo
30、= 0; /微秒的脉冲delay_nms(MoveDelay);/* 从起始向右倾斜*/void Movement1(void)int i;for(i=CenterTilt;i<RightTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);/* 机器人倾斜电机居中*/void Movement8(void)int i;for(i=LeftTilt;i>CenterTi
31、lt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾迈左脚*/void Movement9(void)int i;for(i=StrideCenter;i>RightForward;i-=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);S
32、trideServo = 0;delay_nms(MoveDelay);/* 向左倾斜右脚回收*/void Movement10(void)int i;for(i=RightTilt;i<LeftTilt;i+=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(RightForward);StrideServo = 0;delay_nms(MoveDelay);/* 向左倾斜右脚向前*/void Movement11(void)int i;for(i=RightForward ;i<
33、;LeftForward;i+=StrideStep) TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾斜左脚回收*/void Movement12(void) int i;for(i=LeftTilt;i>RightTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(LeftForw
34、ard);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾斜左脚向前*/void Movement13(void)int i;for(i=LeftForward;i>RightForward;i-=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向右倾斜左脚向前*/void Movement14(void)int i;for(i=RightFo
35、rward;i<StrideCenter;i+=StrideStep)TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);int main(void)int MoveLoop;Movement。; 起始位置Movement1(); /从起始向右倾斜Movement9(); /向右倾迈左脚for(MoveLoop=0;MoveLoop<3;MoveLoop+)Movement10(); /向左倾斜右脚回收Mov
36、ement11(); /向左倾斜右脚向前Movement12(); /向右倾斜左脚回收Movement13(); 向右倾斜左脚向前Movement10(); /向右倾迈左脚Movement14(); /机器人腿居中Movement8(); /机器人倾斜电机居中尝试以下实验:改变程序中的常量为以下各数值并实验。说明步行机器人的运动为什么与先 前的运动不同。TiltStep 5 ' TiltServo step sizeStrideStep 5 ' StrideServo step sizeMoveDelay 15 ' in micrcoseconds写一个程序,实现步行机
37、器人向前走,然后向后回到原地。任务3:采用数组存储动作进行编程例:2.3 First Step Forward with table/*任务三:用数组和指针实现步行机器人的基本运动*/#include <AT89X52.h>#include <stdio.h>#include "toddler.h"#include "uart.h"#define RightTilt 1300 向右倾角度#define CenterTilt 1500 /中间位置#define LeftTilt 1760 / 向左倾角度#define RightFo
38、rward 1300 /& 腿向前#define StrideCenter 1500 /中间位置#define LeftForward 1700 /左腿向前#define StrideServo P1_3 /跨步电机连接到 P13#define TiltServo P1_2 /倾斜电机连接到 P12int TiltStep = 8; /调整步长可以调节倾斜电机的运动速度int StrideStep = 8; /倜整步长可以调节跨步电机的运动速度int MoveDelay = 20;static unsigned int code Movement_array84= CenterTilt
39、,RightTilt,StrideCenter,StrideCenter,RightTilt,RightTilt,StrideCenter,LeftForward, RightTilt,LeftTilt,LeftForward,LeftForward, LeftTilt,LeftTilt,LeftForward,RightForward, LeftTilt,RightTilt,RightForward,RightForward, RightTilt,RightTilt,RightForward,LeftForward, LeftTilt,LeftTilt,LeftForward,StrideC
40、enter, LeftTilt,CenterTilt,StrideCenter,StrideCenter ;unsigned int code StartForward4 = 1,2,0; / movement tableunsigned int code WalkForward21 = 3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,0;unsigned int code FinishForward4 = 3,7,8,0;unsigned int *Movement_Index; /动作指针/* 起始位置*/void Movement0(void)unsign
41、ed char i;for(i=0;i<100;i+=StrideStep)StrideServo = 1; /给跨步电机发delay_nus(CenterTilt); /一个宽度为:CenterTiltStrideServo=0; /微秒的脉冲TiltServo = 1; /给倾斜电机发delay_nus(StrideCenter);/ 个宽度为:StrideCenterTiltServo = 0; /微秒的脉冲delay_nms(MoveDelay);void Movement(void)unsigned int i;unsigned int TiltStart,TiltEnd,St
42、rideStart,StrideEnd;while(*Movement_Index!=0)TiltStart = Movement_array*Movement_Index-10;TiltEnd = Movement_array*Movement_Index-11;StrideStart = Movement_array*Movement_Index-12;StrideEnd = Movement_array*Movement_Index-13;Movement_Index+;if(TiltStart=TiltEnd)/ 判断倾斜值是否相等,如果相等则是跨步if(StrideStart>
43、StrideEnd)/判断循环是增量还是减for(i=StrideStart;i>StrideEnd;i-=StrideStep)TiltServo = 1;delay_nus(TiltStart);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);elsefor(i=StrideStart;i<StrideEnd;i+=StrideStep)TiltServo = 1;delay_nus(TiltStart);TiltServo = 0;StrideServo = 1;d
44、elay_nus(i);StrideServo = 0;delay_nms(MoveDelay);else / 步行机器人倾斜if(TiltStart>TiltEnd)/ 判断循环是增量还是减for(i=TiltStart;i>TiltEnd;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideStart);StrideServo = 0;delay_nms(MoveDelay);elsefor(i=TiltStart;i<TiltEnd;i+=TiltSte
45、p)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideStart);StrideServo = 0;delay_nms(MoveDelay);/for end/while endint main(void)unsigned int i;uart_Init(); /串口初始化,函数在uart.h 里TiltServo = 0; /倾斜电机IO 口初始状态StrideServo = 0;/跨步电机IO 初始状态Movement0();Movement_Index = StartForward;Movem
46、ent();for(i=0;i<3;i+) Movement_Index = WalkForward;Movement();Movement_Index = FinishForward;Movement();尝试以下实验:修改TiltStep, StrideStep 和MoveDelay 的值,使步行机器人行走尽可能平滑,但并不需要很快。修改WalkForward 数组,增加步行机器人行走的步数。第三章转弯任务1:做一个转弯的动作步行机器人转弯是靠两脚平放在地面然后朝相反的方向滑行来实现的Movement 1Movement 2Movement 3:Movement 4:图3-1完整的右
47、转弯行走的四个基本动作/*任务1:做一个转弯动作,实现右转关键就是在程序2.4中增加了 TurnRight程序条目。*/#include<AT89X52.H>#include <toddler.h>#define RightTilt 1300 向右倾角度#define CenterTilt 1500 /中间位置#define LeftTilt 1760 / 向左倾角度#define RightStride 1300 /& 腿向前#define CenterStride 1500 /中间位置#define LeftStride 1700 /左腿向前# define
48、 StrideServo P1_3 /区动跨步电机的 IO# define TiltServo P1_2 /当区动倾斜电机的IO# define TL 0 向左彳皈斜 TiltLeft# define TC 1 /不倾斜TiltCenter# define TR 2 /向右倾斜 TiltRight# define SL 3 /左脚向前跨步StrideLeft# define SC 4 /脚对齐StrideCenter# define SR 5 /右脚向前跨步StrideRight# define xx 255 /结束标志unsigned int TiltStep = 8;unsigned in
49、t StrideStep = 8;unsigned int MoveDelay = 18;/state tableunsigned int WalkForward5=TR,SL,TL,SR,xx; / 向前走unsigned int WalkBackward5=TR,SR,TL,SL,xx;unsigned int TurnLeft5=TL,SR,TC,SL,xx;unsigned int WideTurnLeft9=TL,SR,TC,SL,TR,SL,TL,SR,xx;unsigned int TurnRight5=TR,SL,TC,SR,xx;unsigned int PivotRight
50、9=TR,SL,TC,SR,TL,SL,TC,SR,xx;unsigned int FinishForward4=TR,SC,TC,xx;/variablesunsigned int MoveLoop; /循环次数unsigned int CurrentTilt; /用于保存倾斜值unsigned int CurrentStride; /用于保存跨步值unsigned int NewTilt; /用于赋新值unsigned int NewStride; /用于赋新值unsigned int *Movement_Index; /查表指针/movement routines/* 起始位置*/voi
51、d ResetCC(void)unsigned int i;for(i = 0;i<100;i += StrideStep)StrideServo = 1; /给拖动电机发delay_nus(CenterTilt); /一个宽度为:CenterTiltStrideServo=0; /微秒的脉冲TiltServo = 1; /给倾斜电机发delay_nus(CenterStride);/ 个宽度为:StrideCenterTiltServo = 0; /微秒的脉冲delay_nms(MoveDelay);void TiltMovement(void)unsigned int i;if(Cu
52、rrentTilt>NewTilt)/ 判断循环是增量还是减for(i = CurrentTilt;i>NewTilt;i -= TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(CurrentStride);StrideServo = 0;delay_nms(MoveDelay);elsefor(i=CurrentTilt;i<NewTilt;i+=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo =
53、 1;delay_nus(CurrentStride);StrideServo = 0;delay_nms(MoveDelay);/for endCurrentTilt = NewTilt;void StrideMovement(void) unsigned int i;if(CurrentStride>NewStride)/判断循环是增量还是减for(i = CurrentStride;i>NewStride;i -= StrideStep)TiltServo = 1;delay_nus(CurrentTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);else for(i = CurrentStride;i<NewStride;i += StrideStep)TiltServo = 1;delay_nus(CurrentTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提升通过率的光电工程师考试试题及答案
- 金山 学年第二学期高三质量测试政治试卷
- 历史试题及答案绥化模拟
- 浔郡中学招生试题及答案
- 脑卒中的急救与处理试题及答案
- 激光焊接与检测技术相结合试题及答案
- 水泥机械专业试题及答案
- 空航乘务面试题及答案
- 河南教资作文试题及答案
- 系统规划与管理师考试应对复杂问题的策略试题及答案
- 广告媒体投放分包合作协议
- 2024年甘肃省中考历史试题卷
- DZ∕T 0187-2016 地面磁性源瞬变电磁法技术规程(正式版)
- 威尼斯的小艇省公开课一等奖新名师比赛一等奖课件
- 主题二 小钱币大历史-2024年中考历史专项复习
- 第5课 认识情绪 管理情绪(课件)-【中职专用】高一思想政治《心理健康与职业生涯》(高教版2023·基础模块)
- 2024年知识竞赛-中小学财务管理知识笔试参考题库含答案
- 工商业源网荷储一体化分析报告-培训课件
- T∕CACM 1333.4-2019 儿科系列常见病中药临床试验 设计与评价技术指南 第4部分:小儿腹泻
- GB/T 43747-2024密封胶粘接性的评价胶条剥离法
- 2023年4月自考00318公共政策试题及答案含解析
评论
0/150
提交评论