Ros

导航概述

首先说下导航要达到什么目标。机器人会用两种方法控制设备,一是无线,二是机械臂。

  • 无线。包括蓝牙、wifi等。如果机器人能走到距离设备小于半米,应该就可以了。至于角度,无所谓。
  • 机械臂。这时机器人须要接触设备。但是,机器人在靠近设备后和操作设备之间会有个过程,这过程主要工作是打开摄像头,通过图像识别进行定位。也就是说,导航其实分两个阶段,先是粗略导航移到设备附近,然后通过摄像头进行精准定位。本文不讨论第二阶段精准定位,而对第一阶段,能移到设备半米内,应该可以了。对这一阶段要达到角度,希望是设备在机器人正前方,但即使180度,理论上应该也没问题。

综上所述,可以这么设定导航目标:移动到设备25厘米内,角度可以和要求的相差10度。

确定目标后,看技术上如何实现。不同使用场景须使用不同技术,这里只讨论室内场景,因而无法使用卫星信号,像北斗。

 

一、室内,2D,障碍物变化大

  • 不须要路标
  • 须要预先生成地图。
  • SLAM传感器是激光雷达,不建议深度摄像头。
  • 须要电子罗盘,实时告知机器人角度。

它对应着普通家庭,是Ros中MoveBase包重点解决的场景。和其它场景主要区别是,它可以不须要路标。以下是总逻辑。

  1. 预先生成一张栅格地图,称之为参考地图。
  2. 使用MoveBase+costmap_2d。先在全局代价地图算出起点到目标的全局路径,然后在局部代价地图规划出实时路径,并生成速度发向机器人。

在MoveBase+costmap_2d,全局代价地图依次包括静态层StaticLayer、障碍层ObstacleLayer和膨胀层InflationLayer,局部代价地图则只有障碍层和膨胀层。因为局部代价地图全都在雷达可覆盖范围,要考虑的障碍物已全在实时得到的雷达点云,不再须要参考地图。

障碍物变化大

计算位姿有两种方法。一是通过硬件,具体是里程计算平移,IMU算角度。二是通过一次次移动前后、雷达得到的点云分布,由这些分布估算出位姿。对第一种,个人认为里程计是不可靠的,尤其当地面会打滑时,这会引入电机空转。默认使用第二种,这就要求障碍物变化大,让各次点云间有更明显的区别。

机器人绑架

  • 机器人被强行从A点挪到B点,这当中偏移可能很大。
  • 多次导航机器人。第一次导航,从A点到B点,这个B和参考地图预期目标“B”,会存在些许偏差。一次导航时,这偏差可能不大,一旦导航多了,偏差会不断累积。因为要消除这个偏差,认为导航前,须认为机器人被绑架过了,只是这绑架偏移很小。
  • 导航时有人无意碰了下,导致机器人引入了未知偏移。

解决机器人绑架核心是要使用参考地图,基本思路是拿着实时雷达点云,转过适当角度后,在参考地图暴力匹配,障碍物重合度最高的位姿就认为是机器人真实位姿。位姿包括平移和角度,候选位姿数等于“平移候选数*角度候选数”,为实现这暴力匹配可实用,必须减少角度候选数。这意味要求机器人有个电子罗盘,实时告知机器人角度,这个角度可以有些许误差,像2度。因为角度有误差,“角度候选数”不是1。

在解决机器人绑架时,为提高障碍物匹配精度,最好是360度都有障碍物,但深度摄像头视角一般不会超过180度,要求用激光雷达。

大地图

让考虑resolution是0.05mx0.05m,面积25mx25m,存储一张栅格图须要的内存大小。

(25 / 0.05) * (25 / 0.05) = 500 * 500 = 250000 = 244.140625K字节

栅格图中,一个字节表示一个栅格,以最节省的内存块方式,也须要244.140625K字节。而在OccupancyGrid,存储栅格用的是std::vector<uint8_t>,这会加大些内存用量,可能比这更严重,生成std::vector时若用push_back,像cartographer中node节点,光250000次push_back就会消耗不少cpu。

发布、订阅OccupancyGrid,每秒都会执行数次,为降低内存、cpu消耗,一旦地图过大时,须进行拆分。

 

二、室内,障碍物变化小,能在楼层间往返

  • 须要路标
  • 不须要预先生成地图
  • SLAM传感器可以是激光雷达、深度摄像头。
  • 可以不须要电子罗盘。

典型场景:羽毛球馆,商场,候车大厅,宾馆。

此时机器人确定自个在哪位置离不开路标。要导航了,先用路标确定起点真实坐标,由于目标点坐标是已知的,按着起点到目标方向,径直走,中间要做的是实时避障。

只要路标表示的信息够多,这种场景可实现楼层间往返,像电梯放路标,就可让机器人在一楼拿东西,然后乘电梯,送到三楼。

相比于第一种,这种算法要简单很多,还可以不受2D限制。但为什么要存在第一种呢?——因为不希望使用路标。

全部评论: 0

    写评论: