2.1 移动机器人的组成

移动机器人是机器人中的重要分支,也是我们在生活中最为常见的一种机器人类型,大家可以回想一下常见的移动机器人包括扫地机器人、送餐机器人或者工厂里的物流机器人。

2.1.1 移动机器人的四大组成部分

从控制的角度来讲,移动机器人可以划分为图2-1中的四大组成部分,分别是执行机构、驱动系统、传感系统和控制系统。

1.执行机构

执行机构是机器人动起来的重要装置,比如移动机器人需要“移动”,如何带动轮子旋转呢?这需要使用电机、舵机来执行运动。但并不是所有的运动部位都会安装电机,比如一辆真实的汽车,一般只有一个电机或者发动机,如何让两个轮子甚至四个轮子都转起来呢?这就需要一个完成动力分配的传动系统,比如转弯时动态调整左右两个轮子的速度,这就要用到差速器的功能。

除了移动机器人,在一些工业机器人中,驱动机器人的关节电机、抓取物体的吸盘夹爪,也可以看作是执行机构。总之,执行机构就是执行运动的一套装置。

2.驱动系统

为了让执行机构准确执行动作,还需要在执行机构前连接一套驱动系统,比如要让机器人的电机按照1m/s的速度旋转,如何动态调整电压、电流,达到准确的运动目的呢?这是由电机驱动系统来实现的。

图2-1 移动机器人四大组成部分

如果是电动执行机构,配套的驱动系统一般都是由驱动板卡+控制软件组成,这是嵌入式系统应用的重要领域,单片机、PID、数字电路等概念,都和这个部分紧密相连。驱动系统的选择是根据执行机构来的,比如普通的直流电机,用类似简单的电机驱动板就行,工业上常用的伺服电机,一般会用到220V甚者380V电压,这就得使用专业的伺服驱动器了;还有类似吸盘的气压驱动,外接键盘鼠标一样的外设驱动,以及各种各样的传感器驱动。总之,驱动系统的职责就是保证机器人各种设备的正常运行。

3.传感系统

机器人只能移动是不行的,还需要具备感知能力,这就得靠传感系统了。传感系统一般分为内部传感器和外部传感器,内部传感器用来感知机器人的自身状态,比如通过里程计计算轮子旋转的速度,从而计算累积位移;通过陀螺仪感知机器人自身的角加速度,判断转弯时的状态;通过加速度计,感知机器人在各个运动方向上的加速度,可以用来判断运动趋势或者上下坡;还有力传感器,感知机器人自身与外部的相互作用力度,比如抓一个鸡蛋,但又不至于抓破。

与内部传感器相反,外部传感器帮助机器人感知外部信息,类似人眼,使用摄像头看到外部的彩色图像。不过机器人可以通过多种外部传感器超越人类的极限能力,比如使用红外传感器,在没有光线的情况下,也可以看到外部环境,类似夜视仪;利用激光雷达、声呐、超声波等距离传感器,感知某个角度范围内的障碍物距离;还有麦克风和喇叭,方便我们与机器人语音交流。

传感系统是智能机器人的重要组成,很多机器人甚至装备了几十或上百个传感器,感知自身与环境的各种信息。

4.控制系统

在上述系统的上层,就是机器人的大脑——控制系统。控制系统一般由硬件+软件组成,硬件大多采用计算资源丰富的处理器,比如我们常用的笔记本电脑、树莓派、英伟达板卡等;其中运行的软件就是各种丰富的应用程序了,比如让机器人建立未知环境的地图,或者让机器人运动到送餐地点,再或者是让机器人识别人脸。

智能机器人的核心算法大部分是在控制系统中完成的,这也是未来做机器人软件开发的重要环节。

机器人的四大组成部分互相依赖,互相连接,组成了一个完整的机器人控制回路,如图2-2所示。

图2-2 机器人四大组成部分的控制回路

如果把机器人比作一个人:执行机构就是人体的手和脚,完成具体动作的执行,同时也会和外部环境产生关系;驱动系统类似人体的肌肉和骨骼,为身体提供源源不断的动力;传感系统是人体的感官和神经,完成内部与外部的信息采集,并且反馈给大脑做处理;控制系统是大脑,实现各种任务和信息的处理,下发控制命令。

随着机器人软硬件的迭代升级,这四大组成部分也在不断进化和优化,共同推进着机器人向智能化迈进。

2.1.2 多模态移动机器人LIMO

为了让大家尽量了解常用移动机器人形态的开发方法,本书选用了一款具备多种运动模态的移动机器人——LIMO,使用这样一台机器人,即可实现四轮差速、阿克曼、履带、全向移动等多种运动方式,如图2-3所示。LIMO机器人以Jetson Nano为核心控制器,装备了多种传感器和执行器,能够完成自主导航、图像识别、路径跟踪等多种功能。

1.LIMO机器人的执行器

LIMO的执行器是什么呢?就是底盘上的四个电机以及连接的四个轮子。

图2-3 多模态移动机器人——LIMO

LIMO使用的是轮毂电机,电机的定子和转子都集成在了轮子内部,节省了一般小车中电机需要占据的空间,而且加减速控制性能也更加突出。不仅如此,LIMO的底盘还设置了传动装置的切换开关,比如我们可以通过四个轮子单独的旋转运动,实现小车前进、后退、转弯;如果想要模拟真实汽车的阿克曼运动,直接拔起前边两个红色插销,就可以切换运动模态,通过前轮的平行转向实现小车的转弯;如果是在室外,可以把轮胎更换为履带,实现更好的越野性能;如果想要让小车像螃蟹一样横着走,还可以使用麦克纳姆轮来做全向运动。

所以在一台LIMO机器人身上,可以动态切换四种运动模式,如图2-4所示。这都是依赖小车本身执行机构的特殊设计实现的。

图2-4 LIMO机器人的四种运动模态

2.LIMO机器人的驱动系统

为了驱动LIMO四种运动模态以及装备的多种传感器,驱动系统功不可没。

如图2-5所示,这块驱动板卡安装在LIMO的底盘之中,通过丰富的接口连接到小车的各种设备之上。这块板卡以MCU为核心,驱动程序运行在其中,通过接插件与外界产生联系。

LIMO的驱动系统围绕驱动板卡,需要完成几个重要任务:

· 电源管理:LIMO使用的锂电池是12V,但电机、MCU、传感器、控制器等这些设备的电源不都是12V的,电源管理模块的任务就是给这些设备提供稳定的电源信号,电源滤波、电源保护、电压转换都属于电源管理的重要功能。

图2-5 LIMO机器人的驱动系统板

· 电机驱动:比如我们让LIMO旋转90°,在每一种运动模态下,分配到四个轮子上的速度可能是不一样的,这个速度如何分配,又如何让轮子按照给定的速度旋转,都是电机驱动模块的任务。对应的一些名词有PID控制、移动机器人运动学等。

· 传感器接口:以内部传感器为主,比如里程计、IMU这些传感器,基本都是I2C、串口等总线形式,使用嵌入式系统很容易实现数据采集的驱动过程。

别看这个板卡不大,其中涉及的功能可不少,这是机器人未来运动与传感器的底层保障。

3.LIMO机器人的传感系统

LIMO为了检测自身与外部信息,传感器系统必不可少。

类似于汽车记录行驶公里数的码表,可以通过轮子的旋转圈数记录里程,机器人一般也会在轮子或者电机上安装一个传感器,通过检测轮子的旋转速度,再对时间积分,得到机器人的实时位置和速度,这项功能所使用的设备叫作里程计。而实现这种功能的设备也并不是唯一的,比如大家在某些小车上,会看到电机旁边安装有一个码盘,上边有不少开缝,电机旋转带动码盘旋转,光电管发射的光线就会以某种频率穿过缝隙,被接收端采集到,通过这个采样频率就可以计算得到电机的旋转速度,从而得到机器人走了多远、旋转了多少度等自身状态信息。

LIMO采用的里程计是另外一种,叫作霍尔传感器,如图2-6所示。轮毂电机里边有电机的线圈,线圈边有一个霍尔传感器,当电机旋转时,霍尔传感器跟随运动,通过感应周边磁场产生的信号,测量出电机的旋转速度,进而得到机器人的状态信息。

图2-6 霍尔码盘测速

所以无论是光电码盘还是霍尔传感器,都是根据采样单位时间内产生的脉冲数计算出轮子旋转的圈数,再通过轮子的周长计算出机器人的运动速度,速度对时间积分后,就得到里程信息,这是里程计的基本原理。不过里程计也有一个问题,那就是每次测量会有误差,不断积分后,误差必然会被放大,也就是常说的里程计累积误差。

有了机器人自身的状态信息,外部环境信息该如何获取呢。LIMO装备了两个重要的外部传感器。

一个是三维相机,如图2-7所示。类似于人眼,三维相机不仅可以看到外部环境的颜色信息,还可以获取每一个障碍物距离自身的深度信息,原理和人眼的双目定位不同。三维相机有三个眼睛,第一个眼睛是普通的摄像头,用于获取一幅图像的颜色信息。剩下的两个眼睛,一个负责发射红外光,不是一个点,而是一个面;另外一个负责接收反射回来的红外光,从而得到一幅深度图像。有了彩色图像和深度图像,接下来把两个图像重叠到一起,就可以知道每个像素点的颜色和深度信息,这就是配准的过程。通过这一系列复杂的采集和配准过程,最终就得到了完整的环境信息,也称为三维点云,每一个点都是由RGB颜色值和XYZ坐标值组成。

图2-7 三维相机原理

三维相机虽然信息丰富,但是检测角度和精度都有限,所以移动机器人一般也会配置一台激光雷达。激光雷达的原理相对简单,一个激光头发射激光,另外一个接收头接收反射光,然后通过三角关系或者光的飞行时间测距,如图2-8所示。电机带动发射机和接收器匀速旋转,一边转一边检测,就可以得到360°范围内很多个点的距离,从而得到雷达所在平面中的障碍物深度信息。

图2-8 激光雷达原理

4.LIMO机器人的控制系统

驱动系统、传感系统,最终都会连接到控制系统,即Jetson Nano控制板卡,如图2-9所示。这块板卡的核心集成一个四核CPU,可以满足基础软件的运行,同时还有一个128核的GPU,基本的图像处理和机器学习轻松运转。为了方便操作,LIMO后部还有一个触摸屏幕,即使没有笔记本电脑,我们一样可以控制机器人行动。

图2-9 Jetson Nano控制板卡

主控板上运行的是以Linux为核心的Ubuntu系统,未来需要进一步开发的机器人应用,都会以这个系统为平台展开,Ubuntu系统也是后续机器人操作系统的核心,这里大家先明确LIMO机器人的四大组成部分即可。

2.1.3 LIMO机器人软件架构

我们通过图2-10来明确LIMO机器人中控制板卡与外接设备之间的联系。

运动控制器作为驱动系统的核心,负责控制电机和舵机,其中电机驱动小车运动,舵机在阿克曼模式下驱动前轮转向;另外还需要连接内部传感器里程计和IMU,完成对机器人自身状态的检测。

机器人控制系统是LIMO的大脑,完成自主导航、地图构建、图像识别等功能,同时也会兼具一部分传感器驱动的任务,通过USB采集外部相机和雷达的信息。这个控制系统和运动控制器之间的通信连接,通过串口完成。

图2-10 LIMO机器人软件架构

为了方便机器人的操控,我们还会使用笔记本电脑连接机器人进行编码和控制。

在这个软件架构中,虚线框中的应用功能都是基于ROS环境开发实现的,运动控制器中的功能基于嵌入式系统开发实现。ROS开发与嵌入式开发,一个偏向于上层应用,另一个偏向于底层控制,共同实现机器人的智能化功能。