【导读】很多小伙伴都对机器人非常感兴趣,但是不知道一个机器人系统有哪些部分组成,到底是怎么实现的?今天我就以一个做项目的角度出发来告诉大家如何设计一个机器人,就以一个远程遥控的机器人为例来展开。 所谓远程遥控,就是遥控端通过天线或是5G远程向机器人发送指令,机器人端通过各种传感器融合技术,比如激光雷达,深度相机,超声波等传感器,对周边环境进行感知,并将感知结果通过传感器融合技术发送给主控单元,从而实现机器人在未知环境中半自主或自主工作。 此文章旨在让大家了解一个机器人项目涉及的技术,并且是如何实施的,不做具体技术的讨论。
01 机器人系统组成
我们就以一机械狗为载体来展开,涉及到的一些技术不一定是机械狗上有的技术,本文只是以机械狗作为一个载体来说明无人装备涉及的一些技术,其实换做无人机,无人车也都是可以的。 下图为一个机械狗的系统组成,列举了比较热门和主要的技术,还有一些技术未列出,但不影响如何设计一个机器人系统。 机器人一般有三大块组成: 1、机械机构设计 2、硬件电路设计 3、控制算法、感知决策算法设计 本文也是从这三大块开始入手,剖析机器人设计涉及的一些技能。 上面这副系统图所表达的一个机器人的流程就是: (1)操作员通过给出所需的平动速度和转向率来的高级命令 (2)接收到高级命令,CoM参考轨迹生成并传送给身体和腿部控制器 (3)控制器根据用户输入命令和机器人状态,如果腿处于腿在摆动中,则使用“摆动腿控制器”,如果腿处于腿在支撑中,则使用“力控支撑腿控制器” (4)力和位置指令被发送到微控制器,用于将电机指令传递给机器人的每条腿。 (5)如果对机械狗还有更高的要求,比如自主导航等,则可以在工控机中运行SLAM或者AI等算法。
02 机器人机械设计部分
涉及到的技能:1)动力学;2)运动学;3)系统仿真 涉及到的软件:1)三维设计软件(solidworks,UG,CATIA等);2)动力学和运动学软件(Adams,CoppeliaSim 等);3)系统仿真软件(CoppeliaSim ,Webots等);4)有限元仿真如软件(Ansys或Abuqus等) 当我们设计一个机器人本体的时候,我们通常最关心两个问题,一个是本体能否承受较大的载荷也即动力学问题,第二个是本体是否能按照我设定的轨迹进行运动也即运动学问题。 动力学问题首先要考虑的就是动力源的来源,比如电机,液压缸,电动缸等等,以机械狗为例,机械狗首先要考虑的就是动力问题,动力是否强劲,是否能满足机械狗的基本要求,下图就是机械狗的电机结构,你可以轻松猜到设计者的意图,设计者讲电机、行星减速机以及机械狗的外壳合二为一了,一方面降低了机械狗的重量,减小了惯量,另一方面节省了机械狗的空间,使得腿部更容易做出各种动作。 有了基本的设计方案以后,我们还需要对电机力矩进行校核,分析机器人受力情况,这就设计到动力学公式,比如牛顿三定律,达朗贝尔定律,拉格朗日动力学方程等等,往往一种方程无法解决全部问题,所以需要这些方程的配合。在使用这些公式的时候要求我们学会将复杂模型简单化,以方便对其进行建模,比如机械狗的腿部就可以简化成下图所示: 下面我来举个例子让大家感受一下不同动力学方程的作用: 2.1 达朗贝尔方程举例 汽车连同货物的总质量是其质心离前后轮的水平距离分别是和,离地面的高度是。当汽车以加速度沿水平道路行驶时,求地面给前、后轮的铅直反力。轮子的质量不计。 达朗贝尔的思想就是本来一个不平衡的系统,引进了惯性力以后,就可以把他当作一个静平衡系统来看待。 联立可以解得: 如果没有达朗贝尔原理,求起来还是相当费劲的。 2.2 拉格朗日动力学方程举例 即所有广义坐标都互相独立,则拉格朗日方程成立: 其中是拉格朗日量,是广义坐标,是时间的函数,是广义速度,是对应的广义力。 在力学建模中,拉格朗日量定义为动能减去势能,即 其中,为系统中的总动能, 为系统中的总势能。 下面举一个常见的倒立摆的建模过程,有如下的倒立摆,小车的质量为,小球的质量为,杆长为,外力作用于小车: 首先分析,系统中的广义坐标有两个:,所谓广义坐标的意思就是所选取的变量可以唯一确定这个系统的状态,比如小车的位置和摆杆的角度就可以确定这个系统的位置。因此,对小车我们有: 对杆,它的水平位移和竖直位移分别为,,所以 于是拉格朗日量为: 所以 依据拉格朗日方程, 将作为系统的状态变量,我们把上式中的和作为未知变量求解,经过繁琐的化简和整理,可得: 显然,这是一个非线性非定常微分方程。摆杆在竖直状态时附近可以看作是线性的,采用拉普拉斯变换即可。 得到系统的动力学方程后就可以进行各种控制,比如LQR,MPC等算法控制。 上述是几种动力学计算的方程,机器人设计中经常会用到,有了这些计算得到的公式,有了这些计算公式,我们很容易得到一些构件的受力情况,但是如果一个构件和其他很多构件连接,受力形式非常复杂,那么动力学公式将无从下手,因此我们就需要用到动力学仿真软件,比如Adams直接进行仿真,如下面机械臂就可以通过Adams软件对各个轴进行受力分析,运动速度,角速度等进行分析。 机械臂关节角位移和角速度Adams仿真 我们现在已经可以可以通过方程计算或者仿真得到了各个构件的受力,运动轨迹等了,但是我们还会面临一些结构件校核的问题,比如我计算出机械狗一条腿的支撑力是100N,起跳时候支撑力达到了200N,那么我的腿部构件是否可以支撑这么大的力量呢?如果构建比较简单,我可以通过力学方程计算构件受力并且和构件的材料屈服强度作比较,看是否满足要求,但是如果构件形状比较复杂呢?通过公式就无法解决,就需要用到有限元仿真比如Ansys,有限元仿真不但可以仿真构件受力情况,而且可以对构件进行拓扑优化,使的用最少的质量满足受力要求,比如下图,最左边是设计者最开始设计的形状,通过一步一步优化得到最佳的构件形状,即质量减少了又保证了构件强度。 机械狗的腿部结构也进行了拓扑优化,不然这么大的惯量,非常影响机械狗的控制算法。 经过上面一波分析以后,我们还需要验证机器人的运动学,比如机械狗的行走轨迹,机械狗的行走轨迹一般都要借助于仿真软件辅助分析。 比如CoppeliaSim ,就相当于是一个实物,你可以对其像对真实的机械狗进行控制一样,起到提前验证,减少试错成本的效果。
03 机器人硬件电路设计
需要掌握的技能:模电/数电;硬件原理图,硬件PCB制版;硬件调试;EMC/EMI分析; 需要掌握的软件:PCB制板(Altium Design,Allegro Viewer),电路仿真软件(PSPICE),信号仿真软件(HyperLynx), 硬件电路设计的第一步就是要根据机器人所具有的功能画出电路原理图,再根据原理图布置PCB板,用到的软件为Altium Design或者Allegro Viewer等,对于技术栈偏硬件的建议选用Altium Design或者Allegro功能完整,自定义程度高,支持很多插件,不过上手难度稍大一些。而不常画板子的可以用立创EDA即可,还集成了器件库,方便在制作同时就能找到可以买到的器件,不用自己去淘宝或者立创商城搜索。 电路板设计完成后还要进行PSPICE电路仿真,防止有短路等情况发生;信号仿真,防止信号有干扰等。 一般底层控制器用的最多的就是单片机,比如STM32,用来控制步进电机,舵机等等,可以脉冲控制,也可以走通信控制,比如RS485,CANopen等,(例如机械狗用了2颗STM32作为主控,用12颗STM32作为子控制单元,来控制机械狗四条腿部的运动),单片机搭配外围电路就构成了一个完整的PCB板,如下图所示。 Altium Design设计的电路原理图 机械狗的PCB板 制版完成后要对PCB板进行全方位的测试,用到的仪器仪表包括电烙铁,万用表,示波器,逻辑分析仪,误码仪,传输分析仪,以太网测试仪Smartbits/IXIA,热量计,衰减器,光功率计,射频信号 强度计等等。尤其对于电源电路的测试,现在芯片电压多样化,电压越来越低,电流越来越大,运营商对于通信设备功耗的严格要求,散热要求,对于电源设计的挑战越来越 大。可以说,对于一个硬件设计来说,40%的工作都是在于电源电路的原理图/PCB设计和后期测试验证,电源电路设计是硬件工程师电路能力的集中体现,各种被动器件、半导体器件、保护器件、DC/DC转换典型拓扑,都有很多参数,公式需要考虑到,计算到。下面是用示波器进行信号采集分析,电源波纹分析等。 示波器采集信号 除此之外还要进行电磁干扰,射频干扰测试,属于EMC/EMI范畴,目的就是防止外部电磁场或者静电对PCB板的干扰,同时也要防止自己本身对周边电子设备的干扰。 EMC干扰测试 不但要自己设计电路板,还要会各种CPU选型,比如M68k系列,PowerPC860,PowerPC8240,8260体系等,机械狗除了本身需要设计的PCB控制板外,还会使用到现有的处理器,比如: 波士顿动力的机器狗Spot的内置处理器完全专用于机器狗的移动和导航,不支持客户使用。如果客户想要处理和分析来自Spot或其搭载的任何传感器的数据,需要额外加装计算机或是支付3925美元购买波士顿动力提供的名为Spot CORE的附加处理器。Spot CORE的规格如下:
CPU=i5 Intel 8th Gen (Whiskey lake-U) Core CCG Lifecycle
操作系统=Ubuntu Desktop 18.04 LTS 64-bit
RAM=16 GB DDR4 2666 MHz
SSD=512 GB SSD
如果要在Spot上运行计算密集型任务,例如机器学习,则可以支付24500美元购买波士顿动力提供的名为Spot CORE AI的附加开发环境,其规格如下:
CPU=Intel Xeon E3-1515M V5
GPU=NVIDIA P5000
操作系统=Ubuntu Desktop 18.04 LTS 64-bit
CPU RAM=32 GB
SSD=480GB mSATA SSD
04 机器人软件设计
软件部分分为底层控制软件和上层软件 4.1 底层控制软件 掌握的技能:嵌入式编程C语言,freeRTOS操作系统 掌握的软件:单片机编程软件(keil,VSCode,Ozone等),调试软件(串口调试助手等) 现在主流的控制方案还是使用单片机,但是大有和桌面端统一的趋势,各种ROS支持的串口/FDCAN/Ether总线都能流畅运行,工业界也在积极适配x86和arm64平台的支持。linux的实时性也可以通过real time kernel patch得到提升,典型响应时间已经可以做到0~50ns,和单片机别无二致。 以STM32系列为例,很多老人都习惯用arm家的KEIL,网上很多教程也都是基于keil的,但keil主题支持和代码高亮智能提示检查等实在太落后了,甚至无法设置多线程编译,用起HAL库简直是一种折磨。推荐在学习嵌入式开发一段时间后,使用clion或vscode替代keil编程,利用ozone进行可视化的调试,通过segger RTT viewer来进行日志打印。 另外单片机是属于单线程的程序架构,可以通过已知freeRTOS实时操作系统,使其变成多线程的,这样可以大大提高系统的响应时间,对于重要的任务可以给予更高的优先级,使其最先得到执行。
freeRTOS实时操作系统示意图 对于单片机开发,推荐的软件如下:
keil,上手难度低,新手入门用。
VSCode,定制化程度极高,但不是keil一般开箱即用,需要有一定的基础并进行一些配置。
Ozone,SEGGER家的调试器(也就是做jlink的公司)。可视化调试是它的大杀器,和大家习惯的串口调试不同,他的调试信息是通过DBG发送的,也就是调试器连接的那几条线,通过这个方式调试不会占用系统的资源,能够以非阻塞的方式全速运行。
串口调试助手:推荐串口调试助手(就叫这个名字,在microsoft商店可以直接安装,图标就是一个9线的485串口)和VOFA,后者的图形化做的很好可以支持数据可视化。Linux下的替代品是cutecom和minicom,也有VOFA。
4.2 上层控制软件 需要掌握的技能:Linux操作系统、Ubuntu系统、ROS系统 需要掌握的软件:ROS操作系统,VScode等 机器人用到的控制器几乎都是linux系统,linux操作系统有很多的优点,运行空间占用内存小,可裁剪,可定制化等,在学习Linux的过程中,要了解开源软件的运行模式,文件系统和内核以及shell的概念,至于bootloader和虚拟内存、分页机制等最好也了解,包管理器和基本的终端命令则是一定要掌握的。还要了解编译器相关的基础知识,学习在没有IDE支持下如何编译c代码。make和cmake则是linux环境下构建项目的必选项,ROS的构建系统catkin_make就是基于cmake打造的。 至于ROS,这是工业4.0时代必学的软件。ROS实际上并不是操作系统,而是提供了一套完整的机器人开发软件栈,封装了包括模块间消息交互(这是ROS最重要的功能之一)、可视化、仿真在内的各种功能。虽然ROS目前提供了windows下的试验支持,但还是推荐在Linux系统下开发,也就是说,Linux是学习ROS的必要条件。
05 机器人算法设计
控制算法分为两种:机器人运动控制算法和基于大模型的算法 5.1 基于大模型的算法 机器人算法最核心的一个功能就是自主导航定位技术 传统方案:SLAM+路径规划+运动控制 现代方案:深度学习+运动控制 现代方案和传统方案的区别:传统方式是用概率学,或者控制论的方式进行机器人自主定位导航。但通过深度学习,直接通过摄像头数据作为信号输入,再通过神经网络直接产生出机器人的控制信号。其中像 SLAM 的过程、路径规划的过程,完全可以通过深度学习的方式就可以进行实现。下图是通过ROS的SLAM开发包进行的建图,并通过RVIZ进行显示。 SLAM 建图 另外机器人主流的感知算法仍然是机器视觉,因此OpenCV是必须掌握的计算机视觉库。 在图像处理之外,基于深度学习的目标检测/分割算法也不可或缺。推荐使用PyTorch构建神经网络。要使用PyTorch,基本的一些机器学习和统计学习算法,需要使用python下的ski-learn库。
神经网络模型 关于定位和建图(SLAM),使用最多的软件自然还是ROS,如果要处理点云,PCL(point cloud library)是不可或缺的,Eigen(矩阵运算库)、g2o(图优化库)、ceres(非线性最小二乘库)以及一些处理李群的库。 点云处理 5.2 运动控制算法 运动控制算法包括LQR,MPC,WBC等算法,传感器融合算法,全局规划A*算法,局部规划DWA算法等。 机械狗一般都采用WBC(优化后的MPC)等算法 WBC算法(优化后的MPC) 算法可以说是机器人的灵魂,算法涉及到很深的数学和力学功底,比如要知道动力学,坐标系变换,线性代数矩阵变换等等,比如机械狗的运动学就涉及到坐标变换,将对躯干质心的速度/位移要求转换到四肢上。 机械狗坐标变换 传感器融合算法比较常见的如使用EKF(卡尔曼滤波)或ESKF(扩展卡尔曼滤波)来实现(一般常见于LIO当中),当然还有其他各种先进的算法,卡尔曼滤波用的最为广泛,通过对传感器的滤波,使得得到的数据更为光顺。 卡尔曼滤波实现多传感器数据融合 全局规划A*算法,通过预先建立好的地图,可以使得机械狗运行到任意指定的终点位置。 不同改进型的A*算法效果 DWA局部规划算法,机械狗在全局规划好的路线中运行时,难免会遇到局部多出的障碍物,这个障碍物在预先建图的时候并不存在,这个时候就需要机械狗临时对这个障碍物进行避障,这也是局部规划的主要任务。 DWA局部规划算法
06 结束语
机器人是一个非常复杂的系统设计,涉及很多学科的交融,可以说是各个学科中比较尖端的存在,因此也决定了一款机器人产品想要商业化也变的非常困难,但是技术在不断的进步,相信这些问题终将不是问题,例如最近非常火的ChatGPT,就为机器人的智能化发展提供了一些思路。总之机器人的未来正变得越来越光明。
全部0条评论
快来发表一下你的评论吧 !