本文主要是介绍如何设计一款四轮智能小车,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
此部分共分为五个小节,通过这个 Part 的学习,我们将了解机器人的概念和组成,对机器人的整体设计有一个明确的思路,然后通过机械结构、驱动系统、传感系统、控制系统四大组成部分,展开介绍设计一款智能小车的基本思路。
通过这一讲课程,我们希望大家脑海中能够对智能小车有一个明确的认识和开发思路,未来我们再逐个击破,把它一点一点做出来。
总体设计思路
从控制的角度来讲,机器人可以划分为图中四大组成部分,分别是:传感系统、执行机构、驱动系统和控制系统。
先来看执行机构,这是机器人要动起来的重要装置,比如移动机器人是需要移动的,那如何带动轮子旋转或者转弯呢,就是类似这样的电机、舵机来执行运动的。但并不是所有运动部位都会安装电机,比如一辆真实的汽车,一般只有一个电机或者发动机,那如何让两个轮子,甚至四个轮子都转起来呢,这就需要一个完成动力分配的传动系统,比如转弯的时候动态调整左右两个轮子的速度,这需要严密的机械设计,也就是差速器的功能。除了移动机器人,在一些工业机器人中,驱动机器人的关节电机、抓取物体的吸盘夹爪,也可以看做是执行机构。总之,执行机构就是执行运动的一套装置。
为了让执行机构准确的执行动作,还需要在执行机构前连接一套驱动系统,比如我们要让机器人的电机按照1m/s的速度旋转,如何动态的调整电压、电流,来达到准确的运动目的呢,这就是由电机驱动器来实现的。如果是电动执行机构的话,其配套的驱动系统一般都是由驱动板卡+控制软件组成,也是嵌入式系统应用的重要领域,我们在学校中学习的单片机、PID、数字电路等概念,都和这个部分紧密相连。驱动系统的选择是根据执行机构来的,比如普通的直流电机,用类似这样的电机驱动板就行,工业上常用的伺服电机,都会用到220V甚者380V电压,就得用专业的伺服驱动器了,还有类似吸盘的气压驱动,外接键盘鼠标一样的外设驱动,以及各种各样的传感器驱动,总之,驱动系统的职责就是保证机器人各种设备的正常运行。
机器人光动是不行的,还需要具备感知能力,这就得靠传感系统了。传感系统一般分为内部传感和外部传感,内部传感是用来感知机器人自身状态的,比如通过里程计计算自己轮子旋转的速度,从而计算累积位移,通过陀螺仪感知机器人自身的角加速度,判断转弯时的状态,通过加速度计,感知机器人在各个运动方向上的加速度,可以用来判断运动趋势或者上下坡,还有力传感器,可以用来感知机器人自身与外部的相互作用力度,比如抓一个鸡蛋,但又不至于抓破。
与内部传感器相反,外部传感器帮助机器人感知外部信息,类似人眼一样,使用摄像头来看到外部的彩色图像,不过机器人可以通过多种外部传感器超越人类的极限,比如可以使用红外传感器,在没有光线的情况下,也可以看到外部环境,类似夜视仪一样,还可以利用激光雷达、声纳、超声波等距离传感器,感知在某个角度范围内的障碍物距离,还有麦克风和喇叭,方便我们与机器人语音交流。
传感系统是智能机器人的重要组成,很多机器人甚至装备了几十上百个传感器,感知自身与环境的各种信息,比如自动驾驶汽车就是如此。
在这些系统的上层,就是机器人的大脑——控制系统了。控制系统一般也是硬件+软件组成,硬件大多采用计算资源丰富的处理器,比如我们常用的笔记本电脑、树莓派、英伟达板卡等;其中运行的软件就是各种丰富的应用程序了,比如让机器人建立未知环境的地图,或者让机器人运动到送餐地点,再或者是让机器人识别人脸。
智能机器人的核心算法体现,都是在控制系统中完成,这也是我们未来做机器人软件开发的主要位置。
机器人实例
机械结构设计
以上述机器人为例,直观看上去,似乎这个小车并不复杂。
底盘是整个小车的底座,通过螺丝安装了四个个车轮和配套的电机以及舵机,用来驱动小车运动。
底盘上第一层是电池,相对比较重,尽量放在下边,可以让小车的中心靠下,第二层则用来放置主要的传感器和控制器板卡,这样可以很好的隐藏两层板的叠加同时让板卡更加安全。
小车底盘的前端,为了安装相机,我们要设计一个安装的支架,一侧用螺丝固定在底盘上,另外一侧可以固定相机,最好还可以调节相机可视角度。
第三层则有一个LED显示屏以及一些通孔,可以用来放置一些方便调试以及需要一定高度的传感器如雷达等。
此外在车体两侧还放置了RGB灯带,可以让小车看起来更加炫酷。
这就是智能小车的机械结构啦,大家可以根据自己选择的各种零部件尺寸。
接下来,我们把焦点放到小车的执行结构上,也就是这两个电机和四个轮子,它们如何控制小车运动呢?
其实对于智能小车而言,常见的有三种形态运动方式,接下来一一介绍。
差速运动模式
什么叫差速?简单来说,就是通过两侧运动机构的速度差,来驱动机器人前进或转弯。
平衡车就是典型的差速驱动。大家想象一下平衡车的运动方式,如果两个轮子的速度相同,一起往前转,平衡车整体就向前走,一起往后转,平衡车整体就向后走。如果左边轮子的速度比右边快,平衡车就会向右转,反之则是向左转。这就是差速运动最基本的运动方式。
从这张图中,大家也可以看到,差速运动的重点是两侧轮子的速度差,像我们家里用的扫地机器人,大家有兴趣可以翻起来看一下,一般左右两侧都有一个驱动轮,一共是两个轮子,可以叫做两轮差速。大家可能还看到过稍微大一些的车子,比如美团京东的自动物流机器人,很多都是有四个驱动轮的,原理和两轮差速类似,但是负载和越障能力都更强,这就类似汽车中的两驱和四驱的差别,四驱的动力性能会更加强劲。
全向轮运动模式
如果要让机器人向前运动,就得让左右两侧的轮子把这里的横向分力抵消掉,所以两个轮子是对称的,如果不对称,那横向分力都是朝一个方向,机器人就走偏了。
如果要让机器人横着向左运动,那就得把纵向分力抵消掉,一个轮子向后转,一个轮子向前转。
如果要让机器人斜着走怎么办,对侧的轮子不转就可以了,运动的这两个轮子合力就是斜向前45度的。
可见,麦轮平台的运动就是各个轮子之间“力” 的较量。
阿克曼运动模式
这个是阿克曼运动的原理图,大家仔细看两个前轮和两个后轮的状态,像不像两个并驾齐驱的自行车呢,大家手拉手一起转弯。没错,我们一般性的把阿克曼模型等效简化为自行车模型,这两种模型在运动机理方面基本是一致的。大家再想想我们平时骑自行车的画面,车把控制前轮转向,但没有动力,脚蹬通过一系列齿轮,传送动力到后轮上,驱动自行车运动,这些齿轮就相当于是差速器。
驱动系统设计
之前我们有介绍过,机器人的驱动系统可以分为这几种方式,大家想一下,在智能小车中,我们需要用到哪些呢。
电机驱动肯定是需要的,我们得让小车的电机转起来;
传感驱动也是需要的,小车里的里程计、IMU都要驱动之后才能获取数据。
还有外设驱动,作为下位机的控制器板卡和上位机应用处理器之间,需要通过串口传输数据,这需要串口驱动,我们还希望了解小车的一些状态,一般会在控制器板卡上设计LED或者蜂鸣器来做人机交互,这也需要IO的驱动。
这样看来,驱动系统需要支持的设备不少,它是智能小车的底层基础,强壮稳定的驱动系统,是未来上层应用开发的必要保障,大家在设计开发中千万不要忽视。
传感系统设计
传感系统分为内部和外部之分,相信大家通过之前的讲解,已经了解了智能小车中都有哪些传感器了。
内部传感器主要是电机上的编码器,和控制板卡上的IMU。
外部传感器主要是前端的相机。
里程计
里程计,是移动机器人普遍使用的传感器。
类似于汽车记录行驶公里数的码表,可以通过轮子的旋转圈数记录里程,机器人一般也会在轮子或者电机上安装一个传感器,通过检测轮子的旋转速度,再对时间积分,得到机器人的实时位置和速度,这项功能所使用的设备就叫做里程计,而实现这种功能的设备也并不是唯一的。
比如大家在某些小车上,会看到电机旁边安装有这样一个码盘,上边有不少开缝,电机旋转带动码盘旋转,光电管发射的光线就会以某种频率穿过缝隙,被接收端采集到,通过这个频率我们就可以计算得到电机的旋转速度,从而得到机器人走了多远、旋转了多少度等自身状态信息。
我们这里设计的智能小车采用的里程计是另外一种,叫做霍尔传感器,安装在电机尾部,当电机旋转时,霍尔传感器通过感应周边磁场产生的信号,测量出电机的旋转速度,继而得到机器人的状态信息。
所以无论是光电码盘还是霍尔传感器,都是根据采样单位时间内产生的脉冲数计算出轮子旋转的圈数,再通过轮子的周长计算出机器人的运动速度,速度对时间积分后,就得到里程信息啦,这就是里程计的基本原理。
不过里程计也有一个问题,那就是每次测量会有误差,不断积分后,误差必然会被放大,也就是我们常说的里程计累积误差。
相机成像
https://www.guyuehome.com/46197
控制系统设计
硬件选择
之前我们介绍的驱动系统、传感系统,最终都会和控制系统这个大脑中枢产生联系。
一般情况下,我们会在控制系统中完成这些功能,这也是我们进行机器人开发的主战场,后边使用的ROS就是这个战场上我们使用的主要武器。
在智能小车的开发中,直接放一个电脑在机器人身上肯定是不合适的,常用的方式是使用更加小型的嵌入式应用处理器,比如常见的树莓派、Jetson Nano、RDK X3,都可以满足智能小车的开发需求。
我们就拿这三款板卡做一个参数对比,CPU和内存两项都大差不差,智能小车的应用开发我们更加关注算力和框架的支持,在算力方面,理论上数值越高,我们能够实现的应用就会越流畅,比如人体识别之类的,RDK X3有5T的算力,相比其他板卡优势较为明显。在框架方面,三者都支持我们后续使用的ROS,RDK X3中还提供了一套深度优化的ROS2系统,名为TogetheROS,包含很多智能化的应用功能。
综合而言,我们这里选择RDK X3作为控制系统的硬件平台,当然,大家在自己智能小车的设计中,使用其他平台也都可以,里边的软件基本都是通用的,只是在算力要求较高的应用上会有一些差别。
控制系统中的软件部门该如何实现呢?
我们通过这张图来明确一下。
运动控制器作为驱动系统的核心,负责控制电机,完成对机器人自身状态的检测。这其中各项功能的实现,都是嵌入式开发的过程,会用到定时器、IO、PWM、PID等很多概念的原理和实现。
控制系统是智能小车的大脑,运行自主导航、地图构建、图像识别等功能,同时也会兼具一小部分传感器驱动的任务,通过USB采集外部相机和雷达的信息。
这个控制系统和运动控制器之间的通讯连接,通过串口来完成的。
为了方便机器人的操控,我们还会在机器人之外,使用自己的笔记本连接机器人进行编码和控制。
在整个这个大框架中,虚线框中的应用功能都是基于ROS2和TogetheROS环境进行开发实现,运动控制器中的功能是基于嵌入式开发来实现,从这张图中,大家也可以更好的理解ROS开发与嵌入式开发的关系,两者各司其职,一个偏向于上层应用,另一个偏向于底层控制,共同实现机器人的智能化功能。
好啦,讲到这里,相信大家已经对智能小车的设计思路有了清晰的理解。
回到我们最初的问题,如何从零设计并开发一款智能小车呢?
我们的目标是要做出这样一台智能小车,拆解之后由这些部件组成,可以划分为执行机构、驱动系统、传感系统、控制系统四大组成部分,未来课程,我们就会继续沿着这个思路,详细展开每一个部分的设计与实现。
这篇关于如何设计一款四轮智能小车的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!