如何设计基于ROS的移动机器人
但是关于ROS的书并不多,国内可用的学习社区就更少了。这堂辛苦的公开课将带你了解如何使用ROS设计移动机器人。
分享嘉宾李进榜:EAI科技创始人兼CEO,毕业于北京理工大学,硕士。在网易、雪球、腾讯技术部有多年的linux底层技术研发经验。2015联合创办EAI科技,负责SLAM算法及相关定位导航软件产品的研发。EAI科技,专注于机器人移动,提供消费级高性能激光雷达、slam算法和机器人移动平台。
移动机器人的三个部分
所谓智能运动,就是机器人能够根据周围环境的变化,自主规划路线,避开障碍物,到达目标。
机器人模拟人的各种行为。想象一下,人走路需要哪些器官的配合。先用眼睛观察周围的环境,然后用大脑分析怎么走才能到达目标,再用腿走,如此反复,直到到达目标地址。机器人要想智能移动,还需要眼、脑、腿的密切配合。
腿
“腿”是机器人运动的基础。机器人的“腿”并不局限于人或动物的腿,还包括轮子、履带等能使机器人运动的部件,统称为“腿”。
仿人腿的优点是不仅能在复杂路况下移动(比如爬楼梯),还能更生动地模仿人类的动作(比如跳舞)。缺点是:结构和控制单元复杂,成本高,动作慢。
所以大部分移动机器人都是轮式机器人,具有轮子设计简单,成本低,移动速度快的优点。轮式车辆也有很多种:两轮平衡车、三轮、四轮和多轮车等等。目前最经济实用的是两个驱动轮和一个万向轮。
眼睛
机器人的眼睛实际上是一个传感器。它的功能是观察周围环境,有适合机器人眼睛的激光雷达、视觉(深度摄像头、单双摄像头)和辅助(超声波测距、红外测距)。
“大脑”
机器人的大脑负责接收“眼睛”传输的数据,实时计算路线,指挥腿部移动。
其实就是把你看到的东西转换成一种数据语言。针对如何描述数据、如何实现处理逻辑等一系列问题。ROS系统为我们提供了一个很好的开发框架。
ROS简介
ROS是基于linux的操作系统。其前身是斯坦福人工智能实验室为支持斯坦福智能机器人而建立的项目,主要可以提供一些标准的操作系统服务,如硬件抽象、底层设备控制、常用功能实现、进程间消息和数据包管理等。
ROS基于图形架构,因此不同节点的进程可以接收、发布和聚合各种信息(如传感、控制、状态、规划等。).目前ROS主要支持Ubuntu操作系统。
有人问ROS能不能装在虚拟机里,一般都可以,但是我们建议装双系统,用Ubuntu独占运行ROS。
ROS其实可以分为两层,下层是上面说的操作系统层,上层是实现不同功能的各种软件包,比如定位绘图、动作规划、感知、仿真等等。ROS(低级)使用BSD许可证,都是开源软件,可以免费用于研究和商业目的,而高级用户提供的包使用很多不同的许可证。
用ROS实现机器人的运动
对于二维空间,轮式机器的随机运动可以用线速度+角速度来实现。
线速度:描述机器人来回移动的速度。
角速度:描述机器人旋转的角速度。
所以控制机器人运动的主要目的是将线速度和角速度转换成左右轮的速度,再通过轮径和轮距,将线速度和角速度转换成左右轮的速度。
这里有一个关键问题,就是编码器和pid调速的选择。
编码器的选择:一般情况下,编码器和车轮在同一根轴上。目前速度在0.7m/s以下的话,从600键到1200键选择编码器是可以的。不过,需要注意的是,最好使用双线编码器,双线输出A和B相差90度,这样可以实现图像稳定。图像稳定器可以在后面的里程计算中更加精确。
通过车轮编码器的反馈和PID对电机PMW的实时调节,实现左右车轮的速度控制。实时计算汽车的里程,得到汽车运动位置的变化。
计算轿厢的位置变化由编码器计算。如果车轮打滑,计算出的变化可能与实际变化不同。解决这个问题,其实就是看到问题更严重了。重要的是走5米只走4.9米,还是走180度只走179度。
其实角度不准对车的影响更大。一般来说,小车的直线距离精度可以控制在厘米以内,角度精度可以控制在1%~2%。因为角度是一个重要的参数,所以很多人用陀螺仪来校正。
所以有时候会有人问车有多准。其实现在准确率比较高,难免会出现打滑等问题,不可能做到100%的准确率。
现在自建地图导航达到车的距离和角度是可以接受的。要提高精度,可能需要其他设备的辅助,比如激光雷达,可以进行二次探测和校正。
激光雷达数据的存储格式,它首先会有一个大小范围,如果超出范围,就是无效的。还有几个采样点,这样激光雷达就能告诉你采样点有几度。
另外最后一个强度是告诉你数据的精度,因为激光雷达也是取最高点的数据,有一定的精度。上面的ppt其实是在用激光雷达扫描一面墙的形状。
其实激光雷达扫描一个静态的形状是没有意义的。雷达测绘的意义其实就是建立房间的地图。
怎么画地图?
第一步是收集眼睛数据:
对于激光雷达,ROS在sensor_msgs包中定义了一种特殊的数据结构来存储激光报文的相关信息,称为LaserScan。
它规定了激光的有效范围,扫描点的采样角度和每个角度的测量值。激光雷达通过360度实时扫描,可以实时测量障碍物的距离、形状和实时变化。
第二步是把眼睛看到的数据变成地图:
ROS的Gmapping将激光雷达/扫描数据转换为光栅地图数据,其中黑色代表障碍物,白色代表空白区域,可以顺利通过,灰色:未知区域。随着机器人的移动,激光雷达可以在许多不同的方向上观察同一位置是否有障碍物。如果障碍物阈值超过设定值,则标志此处有障碍物。否则校准没有障碍。它是一种光栅地图,用不同的灰度表示障碍物、空白区域和未知区域的大小。便于下一步的定位导航。
有时候会有很直的墙,但是机器人走不直。这时候问题可能是机器人轮子打滑等问题,走歪了。这时候画出来的地图也可能是歪的。这种情况可以通过添加陀螺仪来避免。因为激光雷达的特性,有时候黑色或者镜面会导致测距不准。
目前的解决方案是不使用激光雷达,或者使用激光雷达和超声波进行辅助处理。
ROS的地图是多层的,我可以把多个不同高度的lidar叠加在一起,一起画一张地图。地图画好之后,就可以做定位导航了。
如何定位和导航?
定位:其实是一个概率定位,不是100%的精度。根据激光雷达扫描到的周围障碍物的形状,可以将机器人与地图的形状进行匹配,判断机器人位置的概率。
机器人定位成功与否与地图特征有很大关系。如果地域特征明显,机器人很容易判断自己的位置。如果难以定位,可能需要有人指定初始位置,或者添加led来识别位置,或者其他定位设备来帮助定位。
目前,通过颜色或光线进行视觉的技术越来越多。
导航:全局路径规划+局部调整(动态避障)
导航其实就是全球定位。一是根据现有地图进行规划,但在运营过程中会进行局部路线规划。但大局还是以全局路径为主。
导航还有很多工作要做。比如扫地机的路径规划和服务机器人的路径规划是不一样的。扫地机器人可能需要一个带拐角的全覆盖地图,而服务机器人主要围绕指定路径或最短路径进行规划,这是ROS工作量最大的部分。
路径规划根据不同的应用场景差异很大,但是ROS提供了基本的路径规划开发包,在此基础上我们会自己做路径规划。
机器人描述和坐标系转换
导航时,哪些区域可以通过取决于机器人的形状和其他信息。ROS通过URDF(unified robot description format,统一机器人描述格式)来描述机器人硬件的尺寸布局,比如车轮的位置、底盘的大小、激光雷达的安装位置等,这些都会影响到坐标系的变换。
坐标系遵循每个帧只能有一个父帧的前提,然后进行一些眼神接触或者联想。
激光雷达的安装位置直接影响/scan的输出数据。因此,激光雷达和机器人的相对位置需要进行坐标转换,以便将激光雷达数据转换为机器人视角数据。
ROS的坐标系最终归结为三个标准框架,可以简化很多常见的机器人问题:
1)全局精确但局部不连续的帧(“映射”)
2)具有全局不精确但局部平滑的帧(“odom”)
3)机器人自己的框架(“base_link”)
很多传感器(如激光雷达、深度相机、陀螺加速度计)都可以计算出base_link和odom的坐标关系,但由于“每帧只能有一个父帧”,所以只有一个节点(如robot_pose_ekf融合多传感器)可以发布base_link和odom的坐标关系。
Base link自己的坐标系,因为不同的部件安装在机器人上的不同位置,所以应该对应base link的坐标系,因为所有的传感器都要通过机器人的视角“看”。
有朋友问我,激光雷达在建图的时候,车动了以后地图会很乱,因为车底盘的坐标系和激光雷达的坐标系没有校准准确。
地图与奥多姆的关联
因为汽车运动需要一个局部的联系,比如汽车在前进,不断积累,这就是里程表的作用,而地图起的是全局的、不连续的作用,通过激光雷达与地图对应。
想学ROS,坐标系的变化是很重要的一点。坐标系变换还有一点,就是每个帧只有一个父帧。有时候,如果两个坐标都与之相关,就说明A和B相关,B和C相关,而不是B/C和A相关..
三个坐标框架的父子关系如下:
地图-& gt;奥多姆-& gt;基本链接
其实map和odom都应该和base_link关联,但是为了遵守每个帧只能有一个父帧的原则,根据map和base_link和Odom->;Base_link,计算地图和odom的坐标关系并发布。
奥多姆-& gt;里程表节点计算并发布base_link的坐标关系。
地图-& gt;base_link的坐标关系由定位节点计算,但不发布,而是接收Odom->;Base_link坐标,计算地图->;奥多姆坐标,然后释放。
在只有里程表的情况下,没有激光雷达也可以跑,但首先要简单地按照预设的地图进行避障。
精彩问答
问:ROS的实时性能有提升吗?
答:实时提升取决于ROS2.0的设计,其实ROS2.0的进度是网上公布的。但实际上他的进步离实际应用还很远,至少在今年下半年,但我们可以研究他的代码。他大大改进了实时内存管理和线程管理。
问:vslam需要大量内存和CPU。李小姐在实际项目中使用了什么硬件配置?你能做多大的地图?
答:确实如此。目前还是用激光雷达和传感器辅助。这和地图的大小关系不大,主要和地形障碍的复杂程度有关。