创意之星之四足机器人

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大学

专业实践课题:四足追光机器人

姓名:

学院:机械工程学院

专业:机械设计制造及其自动化

班级:

学号:

指导教师:

四足追光机器人

一、实验目的

用“创意之星”机器人套件组装可以进行追光行走的四足机器人;

二、实验套件(创意之星)

1.机械结构:基本结构件、舵机动力关节、可转向轮子、机械爪等;

2.控制系统:控制卡、舵机、直流电机、各类传感器、电源等;

3.控制软件:NorthSTAR 图形化开发环境

三、实验步骤

1、确定其基本功能

基本功能:

a.在平地上通过步态设计,可以正常迈步行走。同时头部传感器检测前方光源,便于及时调整运行动作,追光行走。

b.当左侧红外线传感器检测到光源强于右侧红外线传感器检测到的光源时,机器人运行步态会改变,控制机器人左转。右侧的光源强于左侧的光源时用同样的原理控制机器人右转。

c.当两侧均检测到光源亮度相等时,调整步态,追光机器人会向前走。直至检测不到光源停止,再控制向后退。

2、机构设计

整个巡视机器人由大致三个模块组成:

a.由8个舵机组成四足机器人的4条腿模块;

b.由2个舵机组成四足机器人尾部部分;

c.由2个红外接近传感器和1个舵机组成的感应模块。

3、机构的装配

整个四足避障机器人由1个控制板,1个舵机和两个红外接近传感器组成可转动头部,8个舵机组成主要的4条机械腿,由两个舵机构成尾部部分。整个四足机器人共由11个舵机、两个红外接近传感器及“创意之星”机器人零部件组成。

安装可分为零件的安装,部件的组装以及最后的总装过程。根据预先设计好的机器人结构方案,组装四条腿的部件、头部、尾部以及机器人主体部分,最后组装到一块,形成完整的整体结构。

4、连接电线

由于我们此次使用的是创意之星的标准套件,舵机接线、传感器模拟与数字端口的连接都及其方便简单。

5、设置各个舵机的限制参数

一方面保护所使用器件的性能,防止过载或错误操作而将其损坏;另一方面

也为我们进行各种复杂的调试做良好的准备,能够顺利的完成设计任务。

6、微调初始姿态

为了更好的进行预期动作,可以将机器人的舵机位置调整合适,由于之前已将舵机调整中位,所以这部调整较为简单,只需旋转舵机的舵盘的位置即可,即当机器人通电后,舵机自动调至中位,此时为机器人的初始姿态,之后的所有调试,都是基于这个初始姿态设计的。

7、绘制程序流程图

8、AVR Studio的程序书写与调试

在该编译环境下,图形化的编程界面极大的方便和提高的了我们编写一系列动作的程序,而且可以更直观的观测到所有输出与输入端口,很好的完成对机器人的控制。

下面是图形化的程序语言:

9、源程序如下:

#include "background.h"

int main(int argc, char * argv[]) {

int Diff = 0;

int Left = 0;

int Right = 0;

MFInit();

MFSetPortDirect(0x00000FFF); MFADEnable(0);

MFADEnable(1);

MFDigiInit(100);

DelayMS(100);

MFADInit(100); MFSetServoMode(1,0); MFSetServoMode(2,0); MFSetServoMode(3,0); MFSetServoMode(4,0); MFSetServoMode(5,0); MFSetServoMode(6,0); MFSetServoMode(7,0); MFSetServoMode(8,0); MFSetServoMode(9,0); MFSetServoMode(10,0);

//左侧

Left = MFGetAD(-1);

//右侧

Right = MFGetAD(-1);

Diff = Left - Right;

//左侧的值大于右侧

if (!Diff>50)

{

//左转

{

MFSetServoPos(1,512,512);

MFSetServoPos(2,512,512);

MFSetServoPos(3,512,512);

MFSetServoPos(4,512,512);

MFSetServoPos(5,512,512);

MFSetServoPos(6,512,512);

MFSetServoPos(7,512,512);

MFSetServoPos(8,512,512);

MFSetServoPos(9,405,512);

MFSetServoPos(10,512,512);

MFServoAction();

}

}

//左侧的值小于右侧

if (Diff<-50)

{

//右转

{

MFSetServoPos(1,512,512);

MFSetServoPos(2,512,512);

MFSetServoPos(3,512,512);

MFSetServoPos(4,512,512);

MFSetServoPos(5,512,512);

MFSetServoPos(6,512,512);

MFSetServoPos(7,512,512);

MFSetServoPos(8,512,512);

MFSetServoPos(9,654,512);

MFSetServoPos(10,512,512);

MFServoAction();

}

}

相关文档
最新文档