机器人实验实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩
中国农业大学
课程论文
(2013-2014学年秋季学期)
论文题目:机器人创新实验(1)实验报告课程名称:机器人创新实验(1)
任课教师:
班级:
姓名:
学号:
机器人创新实验(1)实验报告
关键字:ARM TKStudio集成化编程 C语言传感器舵机控制
摘要:机器人创新实验课引导我们综合利用机械扩展、电子扩展、软件扩展及传感器扩展能力,以创新为主题,自主完成从机器人的机构组装到编程控制。
通过这门课程,我初步掌握了有关机器人技术的基本知识和机器人学所涉及的技术的基本原理和方法,加深了对理论知识的理解和掌握。
一、认知实验:了解探索者
机器人实验一这门课用到的教学材料是探索者教学机器人创新套件。
通过这个实验平台,我们可以完成机器人的创新设计、组装以及编程控制。
在前期的认知实验中,我们搭建了一个二轮驱动的自动避障小车,并且实现了对它的控制,从而对探索者有了很好的了解。
(一)机械部分
探索者的机械零件包括金属件、塑胶件、舵机、零配件四部分。
其中金属件共有29种,具有相同的壁厚和丰富的扩展孔。
舵机分为圆周舵机和标准舵机两种。
同学们在创新设计的过程中可以根据零件的特点,灵活运用,合理搭配,从而实现自己所设计的机械结构以及运动方式。
(二)控制部分
我们使用的Robotway ARM7 LPC2138 主控板采用32位高性能实时嵌入式芯片,支持用户自定义开发,开放电路图、源代码、库函数。
探索者套件中包含了触碰传感器、触须传感器、近红外传感器、声控传感器等八种传感器,可以实现寻线、避障、声光等多种控制。
(三)编写和烧录程序
我们使用的编译环境是TKStudio。
由于我们并没有学习过单片机,所以编程对我们来说是一个难点。
我们先从实验指导书上简单的例程开始学习,结合C 语言的知识,逐渐掌握了ARM的编程方法。
烧写程序的时候,我们用到的是Philips Flash Utility软件。
使用的过程是:1、选择端口;2、读取主控板的ID号;3、擦除主控板中原有的程序;4、选择自己的程序;5、上传。
(四)认知实验成果
仿照扫地小车例子,我们制作了属于我们自己的自动避障小车,功能包括碰到左右障碍在制作的过程中详细了解了安装机械部件的技巧以及圆周舵机、传感器等的控制方法,为之后的创新实验积累了宝贵的经验。
经验总结:
1.检验器材:
在使用主板和传感器之前,要先对各个端口进行检查。
做好前期的准备工作是很重要的。
具体方法是:编写一个让所有端口均输出令圆周舵机不停旋转信号的程序,烧制程序至主板芯片中,然后启动芯片,将一个圆周舵机依次连接各端口即可检查每个端口的完好性,同时这也是检验舵机完好性的好方法。
在实验前对器材进行测试是必要的。
2.构件连接:
机械结构可能会随着设计而进行局部的改变,因此拧连接螺钉时不必将所有空位均固定牢靠,开始搭建时可以只对必要的空位进行连接,比如只拧紧对角线两个螺钉,待到结构确认无误时在紧固所有螺钉,方便改造重组,节约时间。
另外为方便拆卸,应将螺母统一放置一侧,最好是便于使用扳手的部件外部。
3.程序编写:
编写程序前需按照教程进行相应配置,否则编译时即使没有语法错误,也无法编译成功。
在阅读例程并进行实验充分理解语句含义以及传感器、舵机、端口的使用方法的基础上开始编程,为了便于调试编写相关语句(LedIn,LedOut)将各个端口的工作状态用led信号灯表示出来,实验时可根据led信号灯判断程序运行是否正常,舵机、传感器是否运行正确。
二、创新实验方案设计
(一)结构组装
在最后一次创新实验中,我们最初的构想是一只可以切换运动方式的机器小猫。
第一种运动方式是标准四足的行走方式。
由一个圆周舵机带动两组偏心轮四杆机构,实现和动物相似的对角线交替的行走方式。
如下图所示:
第二种运动方式为两轮驱动,四足静止的行走方式。
两个车轮最初处于悬空状态,声音传感器触发后,控制两个标准舵机转动一定角度,使车轮着地,完成前进方式的转换。
下面是我们依据这种构想搭建的机械小猫:
之后我们在不接传感器的情况下用简单的程序来测试机械猫两种方式下的运动情况,结果却不尽人意。
首先是舵机太多。
其次整个机构的结构太繁琐,稳定性不够,很难维持平衡。
由于带动四杆机构的轴比较短,机构太重的话也不够稳固。
所以我们对整个机构进行了简化,舍弃了车轮的部分。
下面是改进后的机械小猫:
(二)传感器设置
改进后,我们对机械小猫的功能设计为:电源启动后,圆周舵机工作,小猫开始前进。
如遇到前方有障碍物,则后退10秒。
当接收到声音信号时,停止前后运动,同时颈部的标准舵机转动一定角度,完成转头的动作。
因此我们的小猫中对应地设置了一个近红外传感器和一个声音传感器,分别实现避障和转头的功能。
上图中的触须传感器是为了美观设置的。
(三)程序编写
1.初步设计
端口元件类型安装位置及功能
Servo(1,*) 圆周舵机左轮前进、后退、转弯
Servo(2,*) 圆周舵机右轮前进、后退、转弯
Servo(3,*) 标准舵机左臂旋转90度收放左轮
Servo(4,*) 标准舵机右臂旋转90度收放右轮
Servo(5,*) 标准舵机脖子左右转动幅度180度
Servo(6,*) 圆周舵机带动四足机构单向匀速旋转
Input(1,1) 触觉传感器左头部左侧收到信号右转
Input(2,1) 触觉传感器右头部右侧收到信号左转
Input(3,1) 红外传感器头部前方收到信号后退并原地转弯
Input(4,1) 声音传感器机身后方收到信号由轮子跑模式切换到四足行走模式
#include "config.h"
#include "lib_io.h"
#include "lib_arm.h"
int main(void)
{
int i;
unsigned int flag=1;
Initial_ARM();
DelayNS(1500);
while (1)
{
if (Input(1,1)==1) //左触觉传感器触发
{
LedIn(1,2);
LedIn(2,0);
LedIn(3,0);
LedIn(4,0);
LedOut(1,1);
LedOut(2,0);//信号灯标识舵机、传感器工作状态
Servo(1,60); //左轮向前转,右转
Servo(2,90); //右轮不动,右转
DelayNS(1500); //右转1.5s
flag=1;
}
else if (Input(2,1)==1) //右触觉传感器触发
{
LedIn(1,0);
LedIn(2,2);
LedIn(3,0);
LedIn(4,0);
LedOut(1,0);
LedOut(2,1);//信号灯标识舵机、传感器工作状态
Servo(1,90); //左轮不动,左转
Servo(2,120); //右轮向前转,左转
DelayNS(1500);//右转1.5s
flag=1;
}
else if (Input(3,1)==1) //前方有障碍物,红外传感器触发
{
LedIn(1,0);
LedIn(2,0);
LedIn(3,2);
LedIn(4,0);
LedOut(1,1);
LedOut(2,1);//信号灯标识舵机、传感器工作状态
Servo(1,120);
Servo(2,60);//左右轮同向同速转,后退
DelayNS(1000);//后退1s
Servo(1,175);
Servo(2,175); //左右轮反向同速转,原地旋转
DelayNS(2100); 原地打转2.1s
flag=1;
}
else if (Input(4,1)==1) //声音传感器触发
{ Servo(1,90);
Servo(2,90); //左右轮停止旋转
Servo(3,90);
DelayNS(1000);
Servo(4,90);
DelayNS(1000);//标准舵机带动左右臂向前上方旋转,收起轮子for (i=0;i<6;i++)
{
Servo(5,0);//脖子标准舵机左转至0度
DelayNS(200);
Servo(5,180);//脖子标准舵机右转至180度
DelayNS(200);
Servo(5,90);//脖子标准舵机回归原始方位
DelayNS(200);
}//以上程序实现脖子扭动数次
Servo(6,60);//圆周舵机匀速旋转,带动四足机构向前踱步DelayNS(10000);//持续10秒
flag=1;
}
if (flag==1)
{
flag=0;
LedIn(1,0);
LedIn(2,0);
LedIn(3,0);
LedIn(4,2);
LedOut(1,1);
LedOut(2,1);//信号灯标识舵机、传感器工作状态
Servo(3,0);
DelayNS(1000);
Servo(4,180);
DelayNS(1000);//标准舵机带动左右臂向下方旋转,放下轮子
Servo(1,60);
Servo(2,120);//左右轮同速同向旋转,前进
}//不经传感器触发,向前行走
return(1);
}
}
2.改进程序:
#include "config.h"
#include "lib_io.h"
#include "lib_arm.h"
int main(void)
{
int i;
unsigned int flag=1;
Initial_ARM();
DelayNS(1500);
while (1)
{
if (Input(1,1)==1)//声音传感器触发,摇头
{
for (i=0;i<10;i++)
{
Servo(2,0);//脖子标准舵机左转至0度
DelayNS(200);
Servo(2,180);//脖子标准舵机右转至180度
DelayNS(200);
Servo(2,90);//脖子标准舵机回归原始方位
DelayNS(200);
}
flag=1;
}
else if (Input(2,1)==1)//红外传感器触发,摇前方有障碍,后退
{
Servo(1,120); //圆周舵机带动四足机构进行后退踱步
DelayNS(10000);
flag=1;
}
if (flag==1)
{
flag=0;
Servo(1,60); //圆周舵机带动四足机构进行前进踱步
}
return(1);
}
}
编程设计经验总结:
1)舵机控制:
实现机器人各个动作的核心是舵机控制,而我们的实验器材中有两种舵机,一种是圆周舵机,可以实现正反向圆周转动;另一种是标准舵机,可实现180度范围内的指定角度的旋转。
通过实验发现,圆周舵机的控制值范围为0~180,其中值为90时舵机静止,小于90为逆时针(从舵机外部看,也就是从舵机伸向外部的旋转端看)旋转,大于90为顺时针旋转,且值偏离90越多,速度越大,即0和180为正反向旋转的最大速度。
标准舵机的控制值范围也为0~180,值得大小代表旋转的度数大小,可以进行指定度数的旋转控制。
根据两种舵机的特性,我们设计将圆周舵机用于轮子的传动,并通过对左右轮转向、速度的控制,实现机器人左转、右转、前进、后退、原地转圈等一系列动作(具体体现见程序段注释)。
标准舵机用于机器的关节旋转,如摆头以及收放连接轮子的机械臂。
由于不确定圆周舵机的初始位置与数值的对应关系,需要通过实验确定适合本机器人的参数。
2)传感器控制:
在初步的设计方案中,我们使用了触觉传感器、红外传感器、声音传感器等多个不同的传感器,通过合理布置,可以得到来自传感器针对不同外部环境的信息的输入,程序设计的要求就是正确获取传感器的输入值,并有效地做出相关的反应动作,而这在程序中是通过分支语句完成的。
(四)心得体会
上完机器人实验课后,我对机器人的认识发生了很大改变,它们变得不再那么神秘、那么复杂、那么不可接近,原来只要我们愿意,就可以轻松地做出我们想要的机器人。
在这门实验课中,我们将以前学习的机械原理、C语言课程应用到了实践当中,锻炼动手动脑能力的同时,也对从前的知识有了更深入的理解。
我在实验中主要负责编写程序。
由于之前对C语言掌握的不错,所以对这一部分的处理自信满满,看过例程后也觉得语句并不复杂,但是实际操作起来却发现机器人程序的任务并不轻松。
首先,机器人编程不同于一般编程在于一般编程是前提条件规定好参数,编程者只需要按照要求设置即可,而机器人编程很多时候需要自己进行测试。
比如圆周舵机的转向和圆周舵机各参数对应的角度都需要编写小程序分别进行测试,而这也让我认识到工程人员在设计机器时必须根据现实环境对自己的机器参数进行不断实验测试与修正。
另外,在创新实验中,机器人的结构可能会随着一些客观条件的改变不得不进行修改,这事程序也必须要根据新的解雇与环境进行相应的修改,修改也许是局部的参数,也许是整个程序的构造,但无论如何,程序设计者必须在任何时候准确地了解整个机构的运动状态并给出合理的程序实现方案,因此细心、耐心与决心就是设计人员所必备的素质。
在创新实验中不能说是一帆风顺,但跌跌绊绊最后总算完成了作品,在这过程中也特别感谢陪伴我们做实验并予以指导的老师,由于我们的设计复杂两次实验都是最后才走,而老师也一直陪我们一直到晚上接近十一点,早已超出了正常的工作时间,我们班几位同学都非常感动。
在实验中中我们的动手能力、创新能力、团队合作能力均得到提升,同时也对科研实验更加感兴趣,希望以后能够有更多的机会能够得到这样的锻炼。