当前位置:首页 > 智能硬件 > 机器人
[导读]   最近几年各种移动机器人开始涌现出来,不论是轮式的还是履带式的,如何让移动机器人移动都是最核心的工作。要让机器人实现环境感知、机械臂控制、导航规划等一系列功能,就需要操作系统的支持,而ROS就

  最近几年各种移动机器人开始涌现出来,不论是轮式的还是履带式的,如何让移动机器人移动都是最核心的工作。要让机器人实现环境感知、机械臂控制、导航规划等一系列功能,就需要操作系统的支持,而ROS就是最重要的软件平台之一,它在科研领域已经有广泛的应用。

  不过有关ROS的书籍并不多,国内可供的学习社区就更少了。本文就带大家了解一下如何利用ROS来设计移动机器人。

  移动机器人的三个部分

  所谓的智能移动, 是指机器人能根据周围的环境变化,自主地规划路线、避障,到达目标地。

  机器人是模拟人的各种行为,想象一下,人走动需要哪些器官的配合? 首先用眼睛观察周围环境,然后用脑去分析如何走才能到达目标地,接着用腿走过去, 周而复始,直到到达目标地址为至。机器人如果要实现智能移动,也需要眼、脑和腿这三部分的紧密配合。

  腿

  “腿”是机器人移动的基础。机器人的“腿”不局限于类人或类动物的腿,也可以是轮子、履带等,能让机器人移动起来的部件,都可以笼统地称为“腿”。

  类人的腿式优点是:既可以在复杂路况(比如爬楼梯)下移动、也可以更形象地模仿人的动作(比如跳舞),缺点是:结构和控制单元比较复杂、造价高、移动慢等。

  所以大部分移动的机器人都是轮式机器人,其优势在于轮子设计简单、成本低、移动快。而轮式的也分为多种: 两轮平衡车、三轮、四轮和多轮等等。目前最经济实用的是两个主动轮+一个万向轮。

  眼睛

  

  机器人的眼睛其实就是一个传感器。它的作用是观察周围的环境,适合做机器人眼睛的有激光雷达、视觉(深度相机、单双相机)、辅助(超声波测距、红外测距)等。

  “脑”

  机器人的大脑就负责接收“眼睛”传输的数据,实时计算出路线,指挥腿去移动。 其实就是要把看到的东西转换为数据语言。针对如何描述数据,如何实现处理逻辑等一系列问题。 ROS系统给我们提供一个很好的开发框架。

  

  ROS简介

  ROS是建立在linux之上的操作系统。它的前身是斯坦福人工智能实验室为了支持斯坦福智能机器人而建立项目,主要可以提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。

  ROS是基于一种图状架构,从而不同节点的进程能接受、发布、聚合各种信息(例如传感,控制,状态,规划等等)。目前ROS主要支持Ubuntu操作系统。

  有人问ROS能否装到虚拟机里,一般来说是可以的,但是我们建议装个双系统,用Ubuntu专门跑ROS。

  

  实际上,ROS可以分成两层,低层是上面描述的操作系统层,高层则是广大用户群贡献的实现不同功能的各种软件包,例如定位绘图,行动规划,感知,模拟等等。ROS(低层)使用BSD许可证,所有是开源软件,并能免费用于研究和商业用途,而高层的用户提供的包则使用很多种不同的许可证。

  用ROS实现机器人的移动

  对于二维空间,使用线速度 + 角速度可以实现轮式机器的随意移动。

  线些速度:描述机器人前后移动的速度大小

  角速度:描述机器人转动的角速度大小

  所以控制机器人移动主要是要把线速度角速度转换为左右轮的速度大小,然后,通过轮子直径和轮间距,可以把线速度和角速度转化为左轮和右轮的速度大小。

  这里有一个关键问题就是编码器的选择和pid的调速。

  编码器的选择:一般编码器和轮子是在一个轴上,目前来说,速度在0.7m/s以下的话,编码器选600键到1200键之间都ok。不过需要注意的是,编码器最好用双线的,A、B两线输出,A向和B向输出相差90度,这样可以防抖动。防抖动就是可以在之后里程计算时可以更准确。

  左轮和右轮的速度大小的控制,通过轮子编码器反馈,通过PID实时调整电机的PMW来实现。实时计算出小车的里程计(odom),得到小车移动位置的变化。

  计算车的位置变化是通过编码器来计算的,如果轮子打滑等情况,那么计算的变化和实际的变化可能不同。要解决这个问题,其实是看哪个问题更严重。要走5米只走了4.9米重要,还是要走180度只走了179度重要。

  其实角度的不精确对小车的影响更大。一般来说,小车的直线距离精确度可以控制在厘米范围内,在角度方面可以控制精准度在1%~2%。因为角度是比较重要的参数,所以很多人就用陀螺仪来进行矫正。

  所以有时候大家问小车精度有多高?其实现在这样已经精度比较高了,难免打滑等问题,不可能做到百分之百的精准。

  小车在距离和角度方面做到现在这样对于自建地图导航已经是可以接受的,要提高更高的精度可能就要其他设备辅助,比如激光雷达来进行辅助,激光雷达可以进行二次检测进行纠正。

  激光雷达数据的存储格式,它首先会有一个大小范围,如果超出范围是无效的。还有就是有几个采样点,这样就可以激光雷达可以告诉你隔多少度有一个采样点。

  

  另外最后那个IntensiTIes是告诉大家数据的准确率,因为激光雷达也是取最高点的数据,是有一定的准确率的。上面的ppt其实就是用激光雷达扫了一个墙的形状。

  激光雷达扫出一个静态形状其实没有意义,雷达建图的意义其实在于建立房间的地图。

  如何绘制地图?

  第一步是收集眼睛数据:

  针对激光雷达,ROS在sensor_msgs 包中定义了专用了数据结构来存储激光消息的相关信息,成为LaserScan。

  它指定了激光的有效范围、扫描点采样的角度及每个角度的测量值。激光雷达360度实时扫描,能实时测出障碍物的距离、形状和实时变化。

  第二步就是把眼睛看到的数据转化为地图:

  

  ROS的gmapping把激光雷达的/scan数据转换为栅格map数据,其中黑色代表障碍物、白色代表空白区域,可以顺利通行、灰色 :未知领域。随着机器人的移动,激光雷达可以在多个不同方位观测同一个位置是否有障碍物,如果存在障碍物的阈值超过设置值是,就标定此处是存在障碍物;否则标定不存在障碍物。 把障碍物、空白区域和未知领域的尺寸用不同灰度表示出来,就是栅格地图。便于下一步定位和导航。

  有时候会出现很直的墙,机器人却无法直着行走,这时的问题可能就是机器人的轮子出现打滑等其他问题,而走歪了,这时绘制出的地图也可能是歪的。这种情况可以通过加一个陀螺仪来避免这个情况。因为激光雷达的特性,有时候遇到黑色或镜面会导致测距不准。

  目前的解决方法就是不用激光雷达,或者用激光雷达和超声波进行辅助处理。

  ROS的地图是分多层的,我可以在不同高度放多台激光雷达来一起叠加,共同绘制一张地图。地图绘制结束之后,就可以进行定位和导航等工作。

  如何定位和导航?

  定位:其实是概率性的定位,而不是100%的精度。根据激光雷达扫描周围障碍物的形状,与地图的形状做匹配,判断机器人所在位置的概率。

  机器人的定位是否成功,与地图特征有很大关系,如果区域特征明显,那么机器人就很容易判断自己的位置。如果出现难以定位的问题,可能需要人给指定初始位置,或者加led来进行位置识别,或者其他的定位设备来协助定位。

  目前的视觉通过色彩或者光的技术越来越多。

  导航:全局路径规划+局部调整(动态避障)

  导航其实就是全局定位,首先根据现有地图进行规划,但是在运行过程中会进行局部的路线规划。但是总体还是根据全局路径来走。

  导航中工作量还很大,比如扫地机的路径规划和服务机器人的路径规划是不一样的,扫地机器人可能要全覆盖的有墙角的地图,而服务机器人主要围绕指定的路径或者最短路径来进行规划,这部分是ROS工作量最大的一块。

  路径规划根据不同应用场景变化比较大,但是ROS提供基础的路径规划的开发包,在这个基础上我们会做自己的路径规划。

  机器人描述和坐标系变换

  

  在导航时,哪些区域可以通过,取决于机器人形状等信息,ROS通过URDF(UnifiedRobot DescripTIon Format) 就是描述机器人硬件尺寸布局,比如轮子的位置、底盘大小、激光雷达安装位置,这些都会影响到坐标系的转换。

  坐标系遵循的前提是每个帧只能有一个父帧,再往上进行一些眼神或者关联。

  激光雷达的安装位置直接影响/scan输出数据。所以激光雷达和机器人的相对位置是需要做坐标变换,才能把激光雷达的数据转化为机器人视角的数据。

  ROS的坐标系,最终归结为三个标准框架,可以简化许多常见的机器人问题:

  1)全局准确,但局部不连续的帧(’map”)

  2)全局不准确,但局部光滑框架(’odom”)

  3)机器人自身框架(’base_link”)

  多种传感器(像激光雷达、深度摄像头和陀螺仪加速度计等)都可以计算base_link和odom的坐标关系,但由于“每个帧只能有一个父帧”,所以只能有一个节点(比如 robot_pose_ekf 融合多传感器)发布base_link和odom的坐标关系。

  Base link自身的坐标系,因为不同元件装在机器人上不同位置,都要对应到base link的坐标系中,因为所有的传感器都是要通过机器人的视角来“看”。

  有些朋友问我,激光雷达在建地图的时候,小车移动后地图就乱了,这是因为小车的底盘坐标系和激光雷达的坐标系没有标定准确。

  map和odom之间的关联

  因为小车移动需要一个局部联系,比如小车在向前走,不停的累加,这是里程计的作用,map起到全局的、不连续的作用,经过激光雷达和map对应。

  如果要学习ROS的话,坐标系的变化是重要的点。坐标系的变换还有一个点,就是每个帧都只有一个父帧,有时候两个坐标都和它有关联的话,就是A和B关联,B再和C关联,而不是B/C都和A关联。

  三个坐标帧的父子关系如下:

  map –》 odom –》 base_link

  其实, map和odom都应该和base_link关联,但为了遵守“每个帧只能有一个父帧”的原则,根据map和base_link 以及 odom-》base_link的关系,计算出map与odom的坐标关系并发布。

  odom-》base_link的坐标关系是由里程计节点计算并发布的。

  map -》 base_link的坐标关系是由定位节点计算出来,但并不发布,而是利用接收odom-》base_link的坐标关系,计算出map-》odom的坐标关系,然后发布。 只有里程计的时候,没有激光雷达,也可以跑,但是要先根据预设地图进行简单避障。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭