机器人
自动寻迹机器人设计
摘要:
前言 ........................................................................................................................................ 1
(一)、机器人的大脑 ............................................................................................. 2
(二)、机器人的眼睛耳朵 ..................................................................................... 3
(三)、机器人的腿——驱动器与驱动轮 ............................................................. 4
(四)、机器人的手臂——机械传动专制 ............................................................. 4
(五)、机器人的心脏——电池 ............................................................................. 5 一、arm简介 .......................................................................................................................... 5
(一)、arm主要功能列举如下: .......................................................................... 5 二、控制系统电路图 ............................................................................................................... 7
三、微型伺服马达原理与控制 ............................................................................................... 8
(一)、微型伺服马达内部结构 ............................................................................. 8
(二)、微行伺服马达的工作原理 ......................................................................... 8
(三)、伺服马达的控制 ......................................................................................... 8
(四)、选用的伺服马达 ......................................................................................... 8
四、光电传感器 ..................................................................................................................... 9
五、控制程序 ........................................................................................................................... 9
六、
........................................................................................... 18
1
1920年 捷克斯洛伐克作家卡雷尔?恰佩克在他的科幻小说《罗萨姆的机器人万能公司》中,根
据Robota(捷克文,原意为“劳役、苦工”)和Robotnik(波兰文,原意为“工人”),创造出“机
器人”这个词。
1998年 丹麦乐高公司推出机器人(Mind-storms)套件,让机器人制造变得跟搭积木一样,相对
简单又能任意拼装,使机器人开始走入个人世界。
1999年 日本索尼公司推出犬型机器人爱宝(AIBO),当即销售一空,从此娱乐机器人成为目前机器人迈进普通家庭的途径之一。
2002年 丹麦iRobot公司推出了吸尘器机器人Roomba,它能避开障碍,自动设计行进路线,还能在电量不足时,自动驶向充电座。Roomba是目前世界上销量最大、最商业化的家用机器人。
2006年 6月,微软公司推出Microsoft Robotics Studio,机器人模块化、平台统一化的趋势越来越明显,比尔?盖茨预言,家用机器人很快将席卷全球。
操作型机器人:能自动控制,可重复编程,多功能,有几个自由度,可固定或运动,用于相
关自动化系统中。
程控型机器人:按预先要求的顺序及条件,依次控制机器人的机械动作。
示教再现型机器人:通过引导或其它方式,先教会机器人动作,输入工作程序,机器人则自动重
复进行作业。
数控型机器人:不必使机器人动作,通过数值、语言等对机器人进行示教,机器人根据示教后的
信息进行作业。
感觉控制型机器人:利用传感器获取的信息控制机器人的动作。
适应控制型机器人:机器人能适应环境的变化,控制其自身的行动。
学习控制型机器人:机器人能“体会”工作的经验,具有一定的学习功能,并将所“学”的经验
用于工作中。
智能机器人:以人工智能决定其行动的人。
下面我介绍一下机器人的基本组成部分:
它可以有很多叫法,可以叫做:可编程控制器、微控制器,微处理器,处理
器或者计算器等,不过这都不要紧,通常微处理器是指一块芯片,而其它的是一
2
整套控制器,包括微处理器和一些别的元件。任何一个机器人大脑就必须要有这
块芯片,不然就称不上机器人了。在选择微控制器的时候,主要要考虑:处理器
的速度,要实现的功能,ROM和RAM的大小,I/O端口类型和数量,编程语言以及功耗等。
其主要类型有:单片机、PLC、工控机、PC机等。
单有这些硬件是不够的,机器人的大脑还无法运行。只有在程序的控制下,
它才能按我们的要求去工作。可以说程序就是机器人的灵魂了。而程序是由编程
语言所编写的。
编程语言是一个控制器能够接受的语言类型,一般有C语言,汇编语言或者basic语言等,这些通常能被高级一点的控制器直接执行,因为在高级控制器里
面内置了编译器能够直接把一些高级语言翻译成机器码。微处理器将执行这些机
器码,并对机器人进行控制。
传感器,是机器人的感觉器官,是机器人和现实世界之间的纽带,使机器人
能感知周围的环境情况。其主要有:光电传感器、红外传感器、力传感器、
超声波传感器、位置和姿态传感器等等。下面我将就几种常用传感器进行介绍:
1、光电传感器:光电传感器的原理是光电效应。其主要用途是颜色识别(机
器人就可以沿着地上的线条行进了)和光电编码等。
2、红外传感器:红外传感器是用来测量距离和感知周围情况的。因为发射
出去的红外信号在一定距离内遇到物体就会反射回来。通过发送红外线信号,并
接收反射回来的信号,机器人就可以感知前方或身体周围的情况,做出相应的调
整(如:倒退或绕行等)。
3、力传感器:力传感器是用来检测碰撞或者接触信号的,比如机械手的应
用,当你放一个东西到机械手的时候,机械手自动抓住它,它就需要力传感器检
测东西抓的紧不紧。典型的力传感器是微动开关和压敏传感器。微动开关其实就
是一个小开关,通过调节开关上的杠杆长短,能够调节触动开关的力的大小。用
来做碰撞检测这是最好不过了。但是这种传感器必须事先确定好力的阀值,也就
是说只能实现硬件控制(开还控制)。而压敏传感器是能根据受力大小,自动调
节输出电压或者电流,从而可以实现软件控制(闭环控制)。
4、超声波传感器:超声波传感器是从蝙蝠那里学来的,通过把发射出的信
号与接收到的信号进行对比,就可以测定周围是否有障碍物,及障碍物的距离,
也属于距离探测传感器,能提供交远的探测范围,而且还能提供在一个范围内的
探测而不是一条线的探测。
5、位置和姿态传感器:机器人在移动或者动作的时候必须时时刻刻知道自
己的姿态动作,否则就会产生控制中的一个开环问题,没有反馈,无法获知运动
3
是否正确。 位置传感器和姿态传感器就是用来解决这个问题的。常用的有光电
编码器,由于机器人的执行机构一般是电机驱动,通过计算电机转的圈数,可以
得出电机带动部件的大致位置,编码器就是这样一种传感器,它一般和电机轴或
者转动部件直接连接,电机或者转动部件转了多少圈或者角度能够通过编码器读
出,控制软件再根据读出数据进行位置估计计算。还有一种是陀螺仪,这是利用
陀螺原理制作的传感器,主要可以测得移动机器人的移动加速度,转过的角度等
信息。
驱动器就是驱动机器人的动的部件。最常用的是电机了。当然还有液压,气
动等别的驱动方式。一个机器人最主要的控制量就是控制机器人的移动,无论是
自身的移动还是手臂等关节的移动,所以机器人驱动器中最根本和本质的问题就
是控制电机,控制电机转的圈数,就可以控制机器人移动的距离和方向,机械手
臂的弯曲的程度或者移动的距离等。所以,第一个要解决的问题就是如何让电机
能根据自己的意图转动。一般来说,有专门的控制卡和控制芯片来进行控制的。
有了这些控制卡和芯片,我们所要做的就是把微控制器和这些连接起来,然后就
可以用程序来控制电机了。第二个问题是控制电机的速度,在机器人上的实际表
现就是机器人或者手臂的实际运动速度了,机器人走的快慢全靠电机的转速,这
样,我们就要求控制卡对电机有速度控制。电机目前常用的有两种,步进电机和
直流电机。下面我将就这两种电机进行介绍:
1、直流电机:这是最最普通的电机了。直流电机最大的问题是你没法精确
控制电机转的圈数,也就前面所说的位置控制。你必须加上一个编码盘,来进行
反馈,来获得实际转的圈数。但是直流电机的速度控制相对就比较简单,用一种
叫PWM(脉宽调速)的调速方法可以很轻松的调节电机速度。现在也有很多控制
芯片带调速功能的。选购时要考虑的参数是电机的输出力矩,电机的功率,电机
的最高转速。
2、步进电机:看名字就知道了,它是一步一步前进的。也就是说,它可以
一个角度一个角度旋转,不象直流电机,你可以很轻松的调节步进电机的转角位
置,如果你发一个转10圈的指令,步进电机就不会转11圈,但是如果是直流电
机,由于惯性作用,它可能转11圈半。步进电机的调速是通过控制电机的频率
来获得的。一般控制信号频率越高,电机转的越快,频率越低,转的越慢。选购
时要考虑的参数是电机的输出力矩,电机的功率,每个脉冲电机的最小转角。
还有就是关于输出的动力,要说明一下:一般情况下,电机都没法直接带动
轮子或者手臂,因为速度过高力矩不够大,所以我们需要加上一个减速箱来增加
电机的输出力矩,但是代价是电机速度的减小,比如一个1:250的齿轮箱,会
让你电机的输出力矩增大250倍,但是速度只有原来的1/250了。首先计算出机
器人所需要的速度与力矩大小,然后根据速度与力矩去选择电机与减速器。
机械传动专制就是,由电机驱动的一些杆件和机构(如:凸轮机构、螺杆机
构等),用以实现机械手臂的上升、下降、伸缩、弯曲等动作。通常运用的机构
有四杆机构、凸轮机构、螺杆机构、摇臂等。
4
电池为机器人的控制系统与驱动系统提供能源供应。主要有:电瓶及可充电
电池、电池。
前面介绍了机器人的一些基本知识,但这是远远不够的。机器人学科,是在
多学科基础上发展起来的综合性技术。机器人技术涉及机械、电子、计算机、语
言学和人工智能等许多学科。现在机器人已经应用在人类社会生活的各个领域,
发挥着越来越重要的影响。
我设计了一个六足爬虫机器人,用日立(HITACHI)的录像机遥控器来对它进行控制。基本原理是:遥控器发出红外学号,机器人通过红外接收器接收倒红
外信号后,对信号进行解码,并以存储的代码进行比较,确定指令的含义,后可
以实现前进、后退、左转、右转及发声等功能。控制系统我使用的是AT89S51
单片机,编程语言使用的是汇编语言,动力系统使用的是微型伺服马达,能源系
统使用的是9V电池。下面我将就具体设计进行介绍。
arm
arm
, 16/32位ARM7TDMI-S核;
, 16/32/64kB片内SRAM;
, 128/256kB片内Flash程序存储器;
, 128位宽度接口/加速器可实现高达60 MHz工作频率;
, Embedded ICE可实现断点和观察点;
, 嵌入式跟踪宏单元(ETM)支持对执行代码进行无干扰的高速实时跟踪;
, 10位A/D转换器,转换时间低至2.44μs;
, CAN接口,带有先进的验收滤波器; 2, 多个串行接口,包括2个16C550工业标准UART、高速IC接口(400 kHz)
和2个SPI接口。
? 通过片内Boot-loader 软件实现在系统编程(ISP)和在应用编程(IAP);Flash 编程时间:1ms 可编程512 字节,单扇区擦除和整片擦除只需400ms。
? 向量中断控制器,可配置优先级和向量地址。
?当前台任务使用片内RealMonitor 软件调试时,中断服务程序可继续执行。
? 嵌入式跟踪宏单元对指令的执行实现了非插入的高速实时跟踪
? 两个32 位定时器(7 路捕获/比较通道)、PWM 单元(6 路输出)、实时时钟和看门狗定时器。
5
? 小型的LQFP48 封装(7×7mm2)有多达32 个可承受5V 的通用I/O 口 ? 通过可编程的片内锁相环可实现最大为60MHz 的 CPU 操作频率,设置时间为100us。 ? 片内晶振的操作频率范围:1MHz~30MHz
? 两个低功耗模式:空闲和掉电
? 通过外部中断将处理器从掉电模式中唤醒
? 外设功能可单独使能/禁止,实现功耗最优化
? 双电源
-CPU 操作电压范围:1.65V~1.95V(1.8V?8.3%)
-I/O 电源电压范围:3.0V~3.6V(3.3V?10%),I/O 可承受5V 电压
? 通过片内Boot-loader 软件实现在系统编程(ISP)和在应用编程(IAP);Flash 编程时间:1ms 可编程512 字节,单扇区擦除和整片擦除只需400ms。
6
控制系统电路图
7
一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反
馈可调电位器;及一块电子控制板。其中,高速转动的直流马达提供了原始动力,
带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服
马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。
一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示:
减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位
置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板
将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动马达正向或反向地转动,
使齿轮组的输出位置与期望值相符,令纠正脉冲趋于为0,从而达到使伺服马达精确定位的目的。
标准的微型伺服马达有三条控制线,分别为:电源、地及控制。电源线与地
线用于提供内部的直流马达及控制线路所需的能源,电压通常介于4V—6V之间,该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。甚至
小伺服马达在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例
必须合理。
我选用的伺服马达为TowPro的,型号为SG303。其主要技术参数如下:
, 转速:0.23秒/60度。
, 力矩:3.2kg?cm。
, 尺寸:40.4mm×19.8mm×36mm。
, 重量:37.2g。
, 5V电源供电。
, 控制周期脉冲宽度为20ms。送出不同的正脉冲宽度是,就可以得到不
同的控制效果。控制正脉冲宽度如下:正脉冲宽度为0.3ms时,伺服马
达反转。
, 正脉冲宽度为2.5ms时,伺服马达正转。
, 正脉冲宽度为1.4ms时,伺服马达回到中点。
8
四、光电传感器
输出电流 DC:<200mA AC:<200mA 继电器输出,触点电流1A 3A 消耗电流 5mA-30mA 响应时间 DC:<2.5ms AC:<30ms 开关频率 <300Hz 绝缘电阻 >200MΩ 外壳体材料 金属/塑料ABS 工作环境照度 太阳光10000LX以下 白炽灯300LX以下 工作环境温度 -20?~+55? 检测物体 透明或不透明 不透明体 指向角 3?~20? 3?~10? 接线方式 2m PVC电缆 插头
; 沿黑线走c代码
线的颜色比地面深。
, 机器人将沿着线的左边前进(例如:检测不到线时向右转,检测到线时左转) , 输出端口A和C分别控制左、右驱动轮。
, 输出端口B控制手臂。
, 输入端口1通过缓冲装置与触动传感器连接。缓冲器被触动时关闭(从状态
0到状态1)
, 输入端口2是连接光电传感器,检测端朝下,以读取黑线的光值。 下面即为该机器人的程序码:
int floor,line;
task Main()
{
9
Initialize();
Calibrate();
Go_Straight();
while(true)
{
Check_Bumper();
Follow_Line();
}
}
.
void Initialize()
{
SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_2,SENSOR_LIGHT); }
void告诉 NQC你正在记述一个子程序,其后为你对它的命名;SetSensor语句用
于在1端口设置触动传感器,在2端口设置光电传感器。
void Calibrate()
{
WaitBumperPress();
floor=SENSOR_2;
WaitBumperPress();
line=SENSOR_2;
WaitBumperPress();
10
}
void Wait_Bumper_Press()
{
PlaySound(SOUND_DOUBLE_BEEP);
while (SENSOR_1==0); // wait for bumper press while (SENSOR_1==1); // wait for bumper release }
Check_Bumper程序负责测试机器人是否碰到障碍及如何反应:
void Check_Bumper()
{
if (SENSOR_1==1)
{
Stop();
Remove_Obstacle();
Go_Straight();
}
}
检查缓冲器是否找到机器人障碍物,叫做Remove_Obstacle子程序,清除路径然
后继续运行。Follow_Line程序是使你的机器人接近线的边缘——也就是左边缘。
如果光电传感器长时间读到的场地数值,它向右边线的方向转弯。如果相反,它
长时间读到线的光值,它会远离线。(看第4章这个方法的讨论)
void Follow_Line()
{
#define SENSITIVITY 5
if (SENSOR_2<=floor+SENSITIVITY) // reading too "floor"
11
Turn_Right();
else if (SENSOR_2>=line-SENSITIVITY) // reading too "line"
Turn_Left();
else
Go_Straight(); void Go_Straight() {
OnFwd(OUT_A+OUT_C); }
void Stop()
{
Off(OUT_A+OUT_C); }
void Turn_Left() {
Off(OUT_A);
OnFwd(OUT_C);
}
void Turn_Right() {
Off(OUT_C);
OnFwd(OUT_A);
}
12
我通过这次实习收获了佷多,不仅在能力上得到了提高,拓展了知识面,锻练自己的能力
参考:C Programming Language(2nd Edition)
单片机典型模块设计实例导航
嵌入式.系統c程式設計
步进电机程序控制
13
14
15