本章围绕移动机器人展开,移动机器人到底是由哪些部分组成的呢,接下来我们就一起认识一下。
移动机器人是机器人中的重要分支,也是我们在生活中最为常见的一种机器人类型,大家可以回想一下常见的移动机器人包括扫地机器人、送餐机器人或者工厂里的物流机器人。
从控制的角度来讲,移动机器人可以划分为图2-1中的四大组成部分,分别是执行机构、驱动系统、传感系统和控制系统。
执行机构是机器人动起来的重要装置,比如移动机器人需要“移动”,如何带动轮子旋转呢?这需要使用电机、舵机来执行运动。但并不是所有的运动部位都会安装电机,比如一辆真实的汽车,一般只有一个电机或者发动机,如何让两个轮子甚至四个轮子都转起来呢?这就需要一个完成动力分配的传动系统,比如转弯时动态调整左右两个轮子的速度,这就要用到差速器的功能。
除了移动机器人,在一些工业机器人中,驱动机器人的关节电机、抓取物体的吸盘夹爪,也可以看作是执行机构。总之,执行机构就是执行运动的一套装置。
为了让执行机构准确执行动作,还需要在执行机构前连接一套驱动系统,比如要让机器人的电机按照1m/s的速度旋转,如何动态调整电压、电流,达到准确的运动目的呢?这是由电机驱动系统来实现的。
图2-1 移动机器人四大组成部分
如果是电动执行机构,配套的驱动系统一般都是由驱动板卡+控制软件组成,这是嵌入式系统应用的重要领域,单片机、PID、数字电路等概念,都和这个部分紧密相连。驱动系统的选择是根据执行机构来的,比如普通的直流电机,用类似简单的电机驱动板就行,工业上常用的伺服电机,一般会用到220V甚者380V电压,这就得使用专业的伺服驱动器了;还有类似吸盘的气压驱动,外接键盘鼠标一样的外设驱动,以及各种各样的传感器驱动。总之,驱动系统的职责就是保证机器人各种设备的正常运行。
机器人只能移动是不行的,还需要具备感知能力,这就得靠传感系统了。传感系统一般分为内部传感器和外部传感器,内部传感器用来感知机器人的自身状态,比如通过里程计计算轮子旋转的速度,从而计算累积位移;通过陀螺仪感知机器人自身的角加速度,判断转弯时的状态;通过加速度计,感知机器人在各个运动方向上的加速度,可以用来判断运动趋势或者上下坡;还有力传感器,感知机器人自身与外部的相互作用力度,比如抓一个鸡蛋,但又不至于抓破。
与内部传感器相反,外部传感器帮助机器人感知外部信息,类似人眼,使用摄像头看到外部的彩色图像。不过机器人可以通过多种外部传感器超越人类的极限能力,比如使用红外传感器,在没有光线的情况下,也可以看到外部环境,类似夜视仪;利用激光雷达、声呐、超声波等距离传感器,感知某个角度范围内的障碍物距离;还有麦克风和喇叭,方便我们与机器人语音交流。
传感系统是智能机器人的重要组成,很多机器人甚至装备了几十或上百个传感器,感知自身与环境的各种信息。
在上述系统的上层,就是机器人的大脑——控制系统。控制系统一般由硬件+软件组成,硬件大多采用计算资源丰富的处理器,比如我们常用的笔记本电脑、树莓派、英伟达板卡等;其中运行的软件就是各种丰富的应用程序了,比如让机器人建立未知环境的地图,或者让机器人运动到送餐地点,再或者是让机器人识别人脸。
智能机器人的核心算法大部分是在控制系统中完成的,这也是未来做机器人软件开发的重要环节。
机器人的四大组成部分互相依赖,互相连接,组成了一个完整的机器人控制回路,如图2-2所示。
图2-2 机器人四大组成部分的控制回路
如果把机器人比作一个人:执行机构就是人体的手和脚,完成具体动作的执行,同时也会和外部环境产生关系;驱动系统类似人体的肌肉和骨骼,为身体提供源源不断的动力;传感系统是人体的感官和神经,完成内部与外部的信息采集,并且反馈给大脑做处理;控制系统是大脑,实现各种任务和信息的处理,下发控制命令。
随着机器人软硬件的迭代升级,这四大组成部分也在不断进化和优化,共同推进着机器人向智能化迈进。
为了让大家尽量了解常用移动机器人形态的开发方法,本书选用了一款具备多种运动模态的移动机器人——LIMO,使用这样一台机器人,即可实现四轮差速、阿克曼、履带、全向移动等多种运动方式,如图2-3所示。LIMO机器人以Jetson Nano为核心控制器,装备了多种传感器和执行器,能够完成自主导航、图像识别、路径跟踪等多种功能。
LIMO的执行器是什么呢?就是底盘上的四个电机以及连接的四个轮子。
图2-3 多模态移动机器人——LIMO
LIMO使用的是轮毂电机,电机的定子和转子都集成在了轮子内部,节省了一般小车中电机需要占据的空间,而且加减速控制性能也更加突出。不仅如此,LIMO的底盘还设置了传动装置的切换开关,比如我们可以通过四个轮子单独的旋转运动,实现小车前进、后退、转弯;如果想要模拟真实汽车的阿克曼运动,直接拔起前边两个红色插销,就可以切换运动模态,通过前轮的平行转向实现小车的转弯;如果是在室外,可以把轮胎更换为履带,实现更好的越野性能;如果想要让小车像螃蟹一样横着走,还可以使用麦克纳姆轮来做全向运动。
所以在一台LIMO机器人身上,可以动态切换四种运动模式,如图2-4所示。这都是依赖小车本身执行机构的特殊设计实现的。
图2-4 LIMO机器人的四种运动模态
为了驱动LIMO四种运动模态以及装备的多种传感器,驱动系统功不可没。
如图2-5所示,这块驱动板卡安装在LIMO的底盘之中,通过丰富的接口连接到小车的各种设备之上。这块板卡以MCU为核心,驱动程序运行在其中,通过接插件与外界产生联系。
LIMO的驱动系统围绕驱动板卡,需要完成几个重要任务:
· 电源管理:LIMO使用的锂电池是12V,但电机、MCU、传感器、控制器等这些设备的电源不都是12V的,电源管理模块的任务就是给这些设备提供稳定的电源信号,电源滤波、电源保护、电压转换都属于电源管理的重要功能。
图2-5 LIMO机器人的驱动系统板
· 电机驱动:比如我们让LIMO旋转90°,在每一种运动模态下,分配到四个轮子上的速度可能是不一样的,这个速度如何分配,又如何让轮子按照给定的速度旋转,都是电机驱动模块的任务。对应的一些名词有PID控制、移动机器人运动学等。
· 传感器接口:以内部传感器为主,比如里程计、IMU这些传感器,基本都是I 2 C、串口等总线形式,使用嵌入式系统很容易实现数据采集的驱动过程。
别看这个板卡不大,其中涉及的功能可不少,这是机器人未来运动与传感器的底层保障。
LIMO为了检测自身与外部信息,传感器系统必不可少。
类似于汽车记录行驶公里数的码表,可以通过轮子的旋转圈数记录里程,机器人一般也会在轮子或者电机上安装一个传感器,通过检测轮子的旋转速度,再对时间积分,得到机器人的实时位置和速度,这项功能所使用的设备叫作里程计。而实现这种功能的设备也并不是唯一的,比如大家在某些小车上,会看到电机旁边安装有一个码盘,上边有不少开缝,电机旋转带动码盘旋转,光电管发射的光线就会以某种频率穿过缝隙,被接收端采集到,通过这个采样频率就可以计算得到电机的旋转速度,从而得到机器人走了多远、旋转了多少度等自身状态信息。
LIMO采用的里程计是另外一种,叫作霍尔传感器,如图2-6所示。轮毂电机里边有电机的线圈,线圈边有一个霍尔传感器,当电机旋转时,霍尔传感器跟随运动,通过感应周边磁场产生的信号,测量出电机的旋转速度,进而得到机器人的状态信息。
图2-6 霍尔码盘测速
所以无论是光电码盘还是霍尔传感器,都是根据采样单位时间内产生的脉冲数计算出轮子旋转的圈数,再通过轮子的周长计算出机器人的运动速度,速度对时间积分后,就得到里程信息,这是里程计的基本原理。不过里程计也有一个问题,那就是每次测量会有误差,不断积分后,误差必然会被放大,也就是常说的里程计累积误差。
有了机器人自身的状态信息,外部环境信息该如何获取呢。LIMO装备了两个重要的外部传感器。
一个是三维相机,如图2-7所示。类似于人眼,三维相机不仅可以看到外部环境的颜色信息,还可以获取每一个障碍物距离自身的深度信息,原理和人眼的双目定位不同。三维相机有三个眼睛,第一个眼睛是普通的摄像头,用于获取一幅图像的颜色信息。剩下的两个眼睛,一个负责发射红外光,不是一个点,而是一个面;另外一个负责接收反射回来的红外光,从而得到一幅深度图像。有了彩色图像和深度图像,接下来把两个图像重叠到一起,就可以知道每个像素点的颜色和深度信息,这就是配准的过程。通过这一系列复杂的采集和配准过程,最终就得到了完整的环境信息,也称为三维点云,每一个点都是由RGB颜色值和 X 、 Y 、 Z 坐标值组成。
图2-7 三维相机原理
三维相机虽然信息丰富,但是检测角度和精度都有限,所以移动机器人一般也会配置一台激光雷达。激光雷达的原理相对简单,一个激光头发射激光,另外一个接收头接收反射光,然后通过三角关系或者光的飞行时间测距,如图2-8所示。电机带动发射机和接收器匀速旋转,一边转一边检测,就可以得到360°范围内很多个点的距离,从而得到雷达所在平面中的障碍物深度信息。
图2-8 激光雷达原理
驱动系统、传感系统,最终都会连接到控制系统,即Jetson Nano控制板卡,如图2-9所示。这块板卡的核心集成一个四核CPU,可以满足基础软件的运行,同时还有一个128核的GPU,基本的图像处理和机器学习轻松运转。为了方便操作,LIMO后部还有一个触摸屏幕,即使没有笔记本电脑,我们一样可以控制机器人行动。
图2-9 Jetson Nano控制板卡
主控板上运行的是以Linux为核心的Ubuntu系统,未来需要进一步开发的机器人应用,都会以这个系统为平台展开,Ubuntu系统也是后续机器人操作系统的核心,这里大家先明确LIMO机器人的四大组成部分即可。
我们通过图2-10来明确LIMO机器人中控制板卡与外接设备之间的联系。
运动控制器作为驱动系统的核心,负责控制电机和舵机,其中电机驱动小车运动,舵机在阿克曼模式下驱动前轮转向;另外还需要连接内部传感器里程计和IMU,完成对机器人自身状态的检测。
机器人控制系统是LIMO的大脑,完成自主导航、地图构建、图像识别等功能,同时也会兼具一部分传感器驱动的任务,通过USB采集外部相机和雷达的信息。这个控制系统和运动控制器之间的通信连接,通过串口完成。
图2-10 LIMO机器人软件架构
为了方便机器人的操控,我们还会使用笔记本电脑连接机器人进行编码和控制。
在这个软件架构中,虚线框中的应用功能都是基于ROS环境开发实现的,运动控制器中的功能基于嵌入式系统开发实现。ROS开发与嵌入式开发,一个偏向于上层应用,另一个偏向于底层控制,共同实现机器人的智能化功能。
以上在机器人静态情况下分析了四大组成部分的设备和原理,接下来我们就让机器人动起来。
首先要启动LIMO机器人,如图2-11所示。按下机器人一侧的电源开关,进入启动过程,稍后可以看到开关周边的绿灯亮起,此时正在启动;当机器人后侧的屏幕显示桌面环境时,说明启动成功。
在使用过程中请及时关注电量指示灯,当电量低时,电源指示灯会闪红色并蜂鸣报警,需要及时充电。
为了快速控制LIMO运动,我们打开LIMO机器人的手机App,如图2-12所示,扫描并且连接对应的蓝牙。
接下来就可以使用手机App控制机器人运动了,左边控制杆控制LIMO前进、后退,右边控制杆控制LIMO左转、右转,中间进度条显示当前的实时速度。
图2-11 LIMO机器人的开关与屏幕桌面
图2-12 LIMO机器人的手机遥控App
LIMO机器人的四轮差速模态如图2-13所示。确认机器人两端的插销都处于插入状态,车轮使用的是普通橡胶轮胎,前边的车灯显示为橙色。在手机App上选择差速模式,然后就可以通过两个模拟摇杆控制机器人运动了,左边控制前进后退,右边控制左转右转。
除了四轮差速之外,在一些越障能力要求比较高的场景中,也可以使用履带差速,如图2-14所示。此时还是保持机器人两端的插销都处于插入状态,在普通轮的外侧加装附带的履带配件,前边的车灯依然显示为橙色。手机App的设置还是选择差速模式,左摇杆控制前进后退,右摇杆控制差速转向。
图2-13 LIMO机器人的四轮差速模态
图2-14 LIMO机器人的履带差速模态
马路上常见的汽车使用的是阿克曼运动模式,通过两个前轮的平行转向实现转弯,在LIMO机器人上也可以实现,如图2-15所示。这种模式下依然使用普通橡胶轮,但是需要将机器人两端的插销都拔起来,并且在拔起来之后旋转一下锁定住,两侧的车灯会变成绿色。
在手机App中切换为阿克曼模式,左摇杆控制前进后退,右摇杆控制两个前轮平行转向,两个摇杆同时操作,就可以实现转弯运动了。
如果想实现类似螃蟹一样横着走的效果,就需要切换到全向运动模态。
如图2-16所示,将机器人的四个轮子换成附带的麦克纳姆轮,注意将机器人两端的插销恢复到未拔起的状态,前边的车灯显示为蓝色。手机App上选择麦轮模式,此时左摇杆就支持左右摇动了,可以看到机器人出现了横向的运动效果,如果想要控制机器人差速转向,继续使用右摇杆左右转动,此时的运动原理和四轮差速是相同的。
图2-15 LIMO机器人的阿克曼运动模态
图2-16 LIMO机器人的全向运动模态
本章我们一起学习了机器人的组成,分别是执行机构、驱动系统、传感系统、控制系统;接下来以移动机器人LIMO为例,学习了移动机器人的操作方法,认识了机器人的多种运动模态,未来我们还会详细讲解这些运动的具体原理。