机器人笔记 - 基于感知的模型
内部世界模型 (Internal World Model)
机器人需要其周边环境的内部表示,以便能够意识到周围环境以及与之交互的方式。由于现实世界中的场景是动态的,因此从文件中加载静态环境模型还不够。传感器数据需要进行处理并不断地整合到机器人应用程序的世界模型中。
场景数据可以存储在各种数据结构中,并用于路径规划 (path planning),任务协调 (task coordination),运动控制模块 (motion control modules) 或感知功能 (perception functionality)。
世界模型 (world model) 的主要模型是回答以下问题(机器人视角):
我要去哪?
去那儿最好的方法是什么?
我现在在哪儿?
我能抵达那里吗?
对于移动机器人,可以通过使用距离传感器 (range sensors) 和里程计 (odometry) 的地图来实现内部世界模型。
映射(mapping)时的问题
映射涉及在更新地图时同时估算车辆的姿势(即位置和朝向)。问题被称为同时定位和映射问题 (Simultaneous localization and mapping problem - SLAM)。
在未知环境中移动的机器人会累积里程计误差 (errors in odometry),从而使其越来越不确定其位置。
如果机器人的姿势不确定,则难以构建准确的环境图。
我们将描述在已知车辆或机器人姿态的情况下如何计算地图。
难点集中在:
- 尺寸(size):环境越大,获取地图就越困难。
- 噪声(noise):机器人的传感器和执行器永远不会没有噪声。噪声越大,问题就越困难。
- 感知歧义(perceptual ambiguity):如果不同的地方看起来相似,则在地图上建立与不同点的对应关系就越困难。
- 循环(cycles):如果机器人可以循环运动,则里程误差会累积到很大的值。
传感器解释:
我们如何从原始传感器数据中提取相关信息?
随着时间的推移,我们如何表示和整合这些信息?
机器人位置必须估算:
机器人如何识别它之前去过的地方?
这就是所谓的数据关联问题(data association problem)。
如何映射原始数据,以便从原始数据获得准确得环境图?
声纳传感器模型
声纳模型可以帮助将原始数据映射到地图。
两种最常见的声纳传感器模型是:
- 几何表示 (geometric representations) (如弧模型-arc models)
- 占据栅格 (occupancy grid) : 大型网格(计算量大)
占据栅格
一种基于传感器数据构建静态环境(static environment)内部模型的工具。
要映射的环境分为多个区域。
每个网格单元(grid cell)都是一个元素,代表环境的一个区域。每个网格单元都有空闲(free)或占据(occupancy)的概率。
占据栅格是描述三维世界二维切片(2D slide)的二维平面图(2D floor plan maps)。
当机器人在平坦的表面上移动且传感器只能捕获到世界的一小部分时使用。
特点:
- 用网格(grid)代表环境。
- 估计某个位置被障碍物占据的可能性。
假设:
- 单个网格的占有变量(occupancy)是独立的。
- 机器人位置和方向(x, y, θ)已知。
将感知信号映射到 (x, y)。同一位置的重复信号会增加该位置出现障碍的可能性。
优点:
简单且准确。
缺点:
精度受网格的基数(分辨率)限制。
如果分辨率高,则计算量大且需要的内存多。
如果分辨率低,则精度低。
需要固定的大小。如果映射区域的大小更改,则很难更新。
命令和传感器中的噪声:
- 命令执行不正确:如,打滑会导致里程表错误。
声纳有几个错误问题:
- 串扰 (cross-talk)
- 透视 (foreshortening)
- 镜面反射 (specular reflection)
因此,声纳数据可提供物体位置的概率。
最大似然图 (Maximum Likelihood Map)
最大似然图是通过将占用栅格图裁剪到某个阈值而获得的。生成的映射是二进制的。(设置某个阈值,大于该阈值的就是物体栅格,小于该阈值的就是空闲栅格)
动态扩展占据栅格 (dynamically expanding occupancy grids)
可变大小的地图。
如果将新区域添加到环境中,则能够增加地图的大小。
在九宫格的中心开始进行映射。随着机器人的探索,新的单元会被添加。
新单元的数量取决于传感器的作用范围。全局映射存储在RAM外部文件或者数据库中。
优点:
- 提供用于映射不断变化的环境的解决方案。
- 节省RAM
- 其他有用的信息可以存储在地图中。
缺点:
- 其程序要比常规的占据栅格复杂。
定位
解决机器人认知自己所在位置的问题。
标志性定位 (Iconic localization)
- 使用原始传感器数据。
- 使用占据栅格。
- 将当前地图和原始地图进行比较。
如果原始地图有错误,则定位可能会非常不准确。
定位错误会随着时间累积。
**方法:**将小型的位置占据栅格与已经存储的全局占据栅格进行比较(比较当前位置和方向),最佳的匹配姿态便会被认为是正确的姿态。
基于特征的定位 (feature-based localization)
将当前提取的特征与地图中标记的特征进行比较。
这要求环境中存在已于提取的特征。
如果特征难以区分,则可能会和其他位置混淆。
Monte-Carlo定位
- 从均匀分布(uniform distribution)可能的姿势 (x, y, θ) 开始。(均匀随机生成许多粒子,每个粒子表示可能的状态,即机器人所在位置的假设)
- 在给定当前传感器数据和映射的情况下计算每个姿势的概率。(递归贝叶斯估计对粒子重新采样。当机器人观察环境时,它会丢弃与此观察结果不一致的例子,并产生更多接近的看起来一致的例子。)
- 归一化概率 (丢掉低概率点)
表现: 在映射环境中表现出色。需要非对称几何。
同时定位和映射(Simultaneous Localisation and Mapping - SLAM)
这个问题分为两个阶段:1. 映射。2. 定位。
为了解决映射之前需要定位,而定位之前需要地图这一个问题。解决方案是在两个步骤之间交替进行。
多个部分:
- 地标提取(landmark extraction)。
- 数据关联(data association)。
- 状态估计(state estimation)。
- 状态更新(state update)。
- 地标更新(landmark update)。
有许多方法可以解决每个较小的部分。
硬件:
移动机器人 - 带里程表(odometry)
范围测量装置:
- 激光扫描仪 - 不能在水下使用
- 声纳 - 不够准确
- 视觉 - 在光线不足的情况下无法使用
SLAM流程
- 使用环境更新机器人的位置。由于机器人的里程表经常是错误的,因此我们不能直接依靠里程表。
- 我们可以使用激光(laser)扫描环境来纠正机器人的位置。
- 这是通过从环境中提取特征并观察机器人何时移动来实现的。
扩展卡尔曼滤波器 (extended kalman filter)
EKF (扩展卡尔曼滤波器) 是SLAM流程的核心。
- 可以过滤状态转换和测量/观测中的不准确性 (噪声)。
- 是导航系统 (即GPS) 中的事实标准。
- 它负责根据地标landmark(特征)更新机器人认为的位置。
- EKF会跟踪对机器人位置的不确定性以及在环境中看到的这些地标的不确定性的估计。
激光和里程表数据
激光数据是从扫描获得的读数。
里程表数据的目的是提供机器人的大概位置。
关于里程计数据和激光数据的困难部分是正确的计时。
地标 (landmarks)
地标是可以轻松地被重新观察(reobserved)并与环境区分开的特征。
机器人使用它们来找出其位置 (以对其进行定位)。
好地标的要点:
- 地标应该易于重新观察。
- 各个地标应相互区分(distinguishable)。
- 地标应该在环境中丰富(plentiful)。
- 地标应该固定(stationary)。
一旦确定了机器人应该使用的地标,我们就需要能够以某种方式可靠地从机器人的感官输入中提取它们。两种基本地标提取算法(landmark extraction algorithm):
- Spikes
- RANSAC
Spike
Spike地标提取使用极值(extrema)来寻找地标。
当某些激光扫描仪光束从墙壁反射而有些激光扫描仪光束未撞击该墙壁,但被其他物体反射。
Spike地标依赖于场景在两个激光束之间变化很大。 这意味着该算法将在平滑环境中失败。
RANSAC (随机抽样共识 - Random Sampling Consensus)
该方法可用于从激光扫描中提取线条,这些线条可以用作地标。
RANSAC通过随机抽取激光读数样本,然后用最小二乘法(least sqaures approximation)近似来找到贯穿这些读数的最佳拟合线(best fit line),从而找到这些线地标(line landmarks)。
数据关联
数据关联的问题是使来自不同(激光)扫描的观察到的地标彼此匹配。
问题:
- 你可能不会每次都重新观察到地标。
- 你可能会观察到某些东西是地标但是之后再也看不到它。
- 你可能错误将地标和其他之前看到的地标相关联。
Nearest Neighbour Approach
当新的激光扫描被获得时,使用地标提取来提取所有可见的地标。
将每个提取到的地标与我们在数据库中看到N次以上的最近的地标相关联。
通过验证门传递每对关联(提取的地标,数据库中的地标)。
- 如果验证通过。则这两个地标是同一个地标。因此,数据库中看到该地标的次数将会+1。
- 如果验证不通过。则将该地标添加为数据库中的新地标,并将我们观测到它的次数设置为1。
流程总览
- 更新当前的状态估计。
- 通过重新观察地标更新估计状态。
- 将新的地标添加到当前状态。
有一个问题叫闭环(closing the loop)。当机器人返回到以前见过的地方,它应该能识别出这里并使用新发现的信息来更新位置。
此外,机器人应该更新在其返回到已知位置之前找到的地标,并沿路径传播校正。