智能机器人制作完全手册
上QQ阅读APP看书,第一时间看更新

第1章 机器人来了

01 从小车开始你的机器人爱好之旅

◇胡泊

很多初学者可能都看过一些机器人的视频或现场比赛,无论是“奥特曼”、“大黄蜂”,还是近年的“WALL-E”(见图1.1),往往都会勾起我们儿时的美好回忆,也会激起自己动手制作机器人的念头。但很多人并不是嵌入式开发的业内人士,甚至没有听说过单片机、步进电机这些名词,看着别人制作的满地乱跑的各种机器人,颇有无处下手的感觉。有的人一开始就准备做一个双足人形机器人,可以稳步行走,可以靠摄像头来读取环境信息,可以语音识别,当然,最好还可以变形……

图1.1 电影《机器人总动员》中的机器人小车WALL-E

作为一名机器人爱好者,我中肯地提出建议:从小车开始你的机器人爱好之旅吧!

人形机器人可以说是一个系统的大工程,不是一个人玩得起来的,而且资金上的投入也是不可计量的。一个人形机器人的成型产品最少需要几千元才能买到——这还不包括机器人产品在开发过程中可能出现的种种错误导致的额外成本投入。而机器人小车就不同了,在技术上门槛较低,资金投入也少,市场上的各种产品和零配件的支持也较多,虽然简单,但可以实现的功能可一点也不少,是我们进入机器人天地非常合适的入门工具。

本文中,我们以机器人小车为载体,来解读机器人的一些基础知识。如果你是曾经自己动手做过机器人的高手,那么可以绕行。

1.1 小车的整体控制系统

小车是如何控制的?为什么小车判断出障碍物后可以自动绕开?为什么小车可以“听话”地按照路线行进?要解答这些问题,我们先来了解两个概念。

闭环控制:指由信号正向通路和反馈通路构成闭合回路的自动控制系统,又称反馈控制系统。反馈控制系统可以使系统的精确度提高,响应时间缩短,适合于对系统的响应时间和稳定要求高的系统。

开环控制:这是最简单的一种控制方式,是指受控客体不对控制主体产生反作用的控制过程。开环控制没有反馈环节,系统的稳定度不高,响应时间相对来说很长,精确度也不高,通常使用于对系统稳定性、精确度要求不高的简单系统。

一般稍微复杂一点的机器人小车都采用闭环控制,也就是说有一个反馈机制,会根据自己配备的各种传感器来读取环境信息,并且根据这些环境信息来决定自己下一步的行动,再将行动指令发给执行系统,使机器人小车做出合适的动作。当然也有的机器人小车采用开环控制方式,我就见过一个机器人小车,配了一支笔,将小车放在纸上,小车一转,刷地一下在纸上画出一个圈来。当然,由于摩擦力和机械误差等原因,画出来的圆圈可能不闭合,也可能不圆,不过人家阿Q都说了:“孙子才画得圆呢……”

有点迷糊?没关系,其实简单一点说:机器人可以分为3部分——传感器部分、控制器部分、执行器部分。

在传感器部分,有机器人用来读取各种外部信号的传感器,以及控制机器人行动的各种开关。好比人的眼睛、耳朵等感觉器官。

控制器部分用于接收传感器部分传递过来的信号,并根据事前写入的决策系统(软件程序),来决定机器人对外部信号的反应,将控制信号发给执行器部分。好比人的大脑。

执行器部分让机器人可以完成各种动作,包括前进、后退、左转、右转、点亮发光二极管、发出声音等,并且可以根据控制器输出的信号调整自己的状态。对机器人小车来说,最基本的执行器就是轮子。这部分就好比人的四肢一样。

好的,现在我们来分析一下机器人小车的避障行为控制。机器人小车正在行走过程中(人在路上走),忽然接收到装在小车前部的传感器发来的一个“左前方有障碍物”的信号(人眼发现左前方有一根电线杆),我们事先写在机器人控制芯片中的程序算法要求机器人发现左前方有障碍物就往右边转(人发现左前方有电线杆就应该往右躲——什么,你还要继续往前走?你牛!那我就等着听响了,哦,原来你只是想去看上面的小广告……),控制芯片对小车的驱动器——轮子——发出向右转的指令(人大脑发出向右转的指令,通俗点说就是“拐了、拐了”),此时机器人的执行器部分应该立即响应控制器的指令,改变自己的状态,使机器人的前进方向改变,以避开障碍物(恭喜你,躲开了电线杆)。

怎么样,是不是有了点机器“人”的意思?

那么这3部分是怎么联系起来的呢?很简单——电!机器人小车就是一个机电结合的作品,传感器将外部的光信号、声音信号、温度信号等全部转换为控制部分可以接收的电信号,控制系统发出的指令也是各种电信号,通过执行部分转变为电机输出的扭矩、声音、光信号等。

下面我来分别介绍一下这3个部分。

1.2 传感器部分

传感器是机器人的眼睛,想要小车完成不同的任务就要配备各种不同的传感器。

电子市场上林林总总的传感器数不胜数,通常机器人爱好者最经常使用的传感器有碰撞检测传感器(碰撞开关)、红外测障传感器、红外测距传感器、光敏电阻、电子温度计、电子指南针等。

机器人用的传感器返回的信号分两种:一种返回值很简单,只有两个状态:“有”或者“没有”、“是”或者“不是”、“0”或者“1”。我们一般习惯把这种量称为“状态量”。它所反映的是一种状态,比如“机器人左边有没有障碍物”,“有没有声音信号”等。还有一种返回值,返回的是一个已知范围内任意值,比如,1个光敏电阻返回的信号就可能是0~5V范围内的任意电压信号。我们一般把这种量称为“强度量”。它所反映的是一个有效范围内的强度,比如“机器人左边的障碍物有多远”,“现在的声音信号有多强”等。

“状态量”反映的信息较简单,相应的传感器也较简单,成本较低。而“强度量”反映的信息较丰富,相应的传感器的成本就会比较高,同时给控制上也带来了更大的灵活性和复杂性。

对于传感器,很多人觉得只要看看相关技术文档,知道怎么用了就行。但我的建议是:不但要知道怎么用,还要知道其检测原理。只有深刻地理解了传感器的检测原理,才能具有更好的发散思维。

举一个例子:当初笔者在学校参加机器人灭火比赛,我们用了厂家提供的地面灰度传感器,依靠可见光反射来检测地面白线,效果一直不是很理想。后来有同学仔细研究了当时电机上配备的光电编码器,发现其原理就是利用红外线在不同颜色表面上的反射率不同,检测高速旋转的电机上黑白相间的码盘,来测出电机的旋转速度的,于是就动手将光电编码器上的红外检测模块拆下来,装在机器人底部,用来检测地面白线,检测效果一下子好了很多。

再说说传感器的购买途径。各地的电子市场或是网上商店都可以买到一些常用的传感器(现在很多机器人商家都提供各种各样的传感器,其实原理和适用范围都差不多,很多都可以互换通用)。购买时需要注意的是传感器的电压范围和有效范围。

说到机器人传感器的“终极开发”,图像识别算一个,依靠一只摄像头,根据摄像头返回的视频信号,计算出各个不同物体距自己的距离,并调整相应的运动速度和方向等。如果你可以跨过这一步,那么,有一门叫作“机器视觉”的学科大门也就向你敞开了。

1.3 控制器部分

适合机器人的控制芯片有很多,单片机、DSP,甚至我们计算机上所用的CPU,都可以。不过我们这里主要介绍的针对机器人小车的技术,所以其他的先放一放,让我们把注意力放到物美价廉的单片机上来,小芯片有大智慧。

首先还是理论课,不要抱怨,我的信条是:不懂理论的开发者永远只能是一个拼装师。

单片机又称微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一颗芯片上(见图1.2)。概括地讲,一颗芯片就成了一台计算机。它的体积小、质量轻、价格便宜,为机器人学习、开发和应用提供了便利条件。

图1.2 单片机可以作为机器人的控制芯片

单片机是自动控制系统中应用非常广泛的控制芯片,在我们身边的许多的电器中都有单片机的身影。想自己动手制作机器人的话,相应的单片机知识是必不可少的。

系统的单片机知识我这里不想多说,单片机不同于其他电器,拿过插头直接插在电源上就可以使用。一块空白的单片机想要使用,还需要一些其他的电路来支持。一般来说,最基本的电路就是单片机最小系统,它是可以让单片机工作起来的最基本的电路。在所有的单片机系统中,你都可以找到类似的电路。至于它的原理,这里就不赘述了。

单片机最终需要程序来控制,一般都是在PC上编写好程序,通过下载线来下载到单片机中执行。下载需要一个电路来支持,以前的通常做法是连接到PC的串口,不过现在有很多通过USB下载程序的电路。

机器人开发除了需要最基本的单片机电路,其他还需要一些电机驱动、A/D转换、开关选择等电路。

也许你感到有一点棘手了,这些电路对于一个从未接触过单片机的新手来说可能有些头大,没关系,现在市场上有很多成熟的单片机开发系统出售,价格极为低廉。如果不想在底层电路上多花精力的话,到网上搜索一下“单片机开发板”,一百多元就可以买到功能十分齐全,还赠送软件+教程及技术支持服务的适用开发板了(当然,你如果自己动手的话,成本会更低)。

至于软件,说白了就是你自己给单片机设计的指令程序,让机器人可以具有最简单的智能。不要看到“智能”这两个字就觉得多么高深,看到前面有电线杆知道要拐,这,就是智能。

不同的单片机需要不同的开发环境,这个要在购买的时候就弄清楚,很多单片机公司都有自己配套的开发软件,不少都是可以在公司网站上免费下载的。一般来说,国外的很多芯片公司在自己的网站上都有非常丰富和适用的资料,抱本英汉词典,将网站上的资料浏览一下,你会发现,一切都将变得十分简单。

以前一说起单片机开发,我们就会想到汇编语言,那时候的芯片成本很高,芯片的运算开销和存储开销都要精打细算,高效率的汇编语言是单片机的最佳选择。而现在,随着芯片成本的降低,开销问题已经不再是制约单片机程序开发的瓶颈,所以很多类C或Basic语言的开发环境都已经出现。只要有一定的程序开发基础,对单片机的各种引脚足够熟悉,那么写出一个简单的智能程序就不是难事。

现在单片机的价格已经十分低廉,价格上无需考虑太多,关键是要选择一款合适的、资料较多、容易上手的。就机器人开发来说,要满足以下几个条件:有程序下载线,可以方便地将程序从PC上下载到单片机上;集成了A/D转换;有PWM输出(便于控制电机)。

当然,单片机终究能力有限,想要做一些运算量较大的应用(如音频、视频的处理)时,就需要一些更高端的芯片,比如DSP等,或者干脆把你的电脑机箱加上几个轮子,让你的电脑跑起来吧!

相关名词:C51、PIC、AVR、PWM……啥意思?自己搜去!

1.4 执行器部分

对于机器人小车来说,最基本的执行器部分就是轮子。要有轮子,小车才能被称为小车。这部分可能也是各位爱好者最发愁的部分,传感器和控制器到处都有卖,而一般适合机器人小车上用的轮子、机械结构、车体等部分却很难寻觅。找人订做成本极高,现在很多朋友都用玩具小车来进行改装。其实现在已经开始有机器人小车底盘(见图1.3)出售,不过在电子市场很难见到,在一些教育机器人公司的网店里可以购买到。

图1.3 机器人小车的车体

说到轮子,就不得不提到电机,那是机器人的“发动机”。机器人常用的电机分为三种:普通的直流电机、步进电机、伺服电机。

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件(见图1.4)。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。给电机加一个脉冲信号,电机就转过一个步进角。这一线性关系的存在,加上步进电机只有周期的误差而无累积误差等特点,使得在速度、位置等机器人控制领域,用步进电机来实现相应控制,变得非常简单。

图1.4 步进电机

伺服电机又称执行电机,在自动控制系统中,用作执行件,把所收到的电信号转换成电动机轴上的角位移或角速度输出(见图1.5)。分为直流和交流伺服电机两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。

图1.5 伺服电机

一般来说,这三种电机的成本排序是:直流<步进<伺服,控制精度排序是:直流<步进<伺服(当然也有不一般的时候,有时伺服电机不一定比步进电机便宜)。

初学者对单片机控制电机不太熟悉,起步可以先用单片机输出的PWM信号来控制直流电机,更进一步可以试着控制步进电机,以求更高的控制精度。对于小车的运动驱动来说,一般可以选用直流电机或步进电机,而伺服电机一般用在机械臂上,用来得到精确的旋转角度。

通常单片机要通过驱动电路来控制步进电机、伺服电机。有专门的模块来负责驱动电机,单片机只需要为这样的模块提供一定频率的脉冲和控制信号就可以了。网上相关的资料很多,大家需要的话可以自己去找一下。

各种电机可通过电子市场、五金商店、网购等途径买到,也可拆解旧家电得到。

当你可以自如地控制机器臂的时候,你就会发现,制作一个类人机器人将不再遥远。

其他的常用驱动装置还有机械臂、机械手等,装在小车上去抓取东西。可以自己利用伺服电机开发(初学者最好绕行),也可以选择市面上的成型产品,这些产品一般都有完整的文档,仔细阅读,使用起来都是很方便的。

1.5 后记

最后再介绍一点电子电路开发的东西吧。提起电路,可能很多朋友首先想起来的就是墨绿色的印制电路板,现在很多电子市场都可以根据你的电路图为你加工印制电路板。不过在设计阶段,很多东西都会改来改去,每次都去重新制作电路板,效率和成本都是大问题,一般在电路开发中,有一种专门的实验板(也叫面包板,见图1.6~图1.8),适合在开发阶段使用。

图1.6 面包板

图1.7 面包板可以方便地修改电路

图1.8 用面包板也能做出机器人小车

这篇文章的目的只是想让一些对机器人有兴趣而又不知如何着手的朋友知道制作机器人需要哪些知识储备,没有写什么具体的技术,只是将新手可能会感到迷茫的一些问题列出来。想要成为机器人高手,还是需要埋头“啃”一些专业书籍和不断动手实践。

学习没有捷径,如果你走了捷径,那只能说明你比别人少看了风景。

希望能有更多的朋友加入到机器人开发的行列中,如果更多的人——尤其是学生,以制作机器人作为一种娱乐项目,应该也是一件令人高兴的事吧。