分享我的Gatech OMSCS学位的网课笔记,开始上课都没时间刷题了。。
https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373
这是第一课: Localization的
基本原理
这一章主要讲如何通过先验概率+观察结果+移动后的观察结果,给机器人定位。
从上到下四根线,所有的前提都是门的位置已知。
- 没有任何条件下的车的位置的均匀概率分布
- 已知车感应到在一扇门旁边,此时车的位置的概率分布。
- 已知车初始感应在一扇门旁边,并向右移动了距离x,此时车的位置的概率分布。(注意到峰会比第二条线要低,因为向右移动的距离x是自身的参数(而非环境感应),置信度相比2要低。
- 车再次进行感应,发现旁边还是一扇门,门的分布与3中的分布相叠加,得到第四根线,出现一个置信度很高的当前机器人的位置。
感应函数
p=[0.2, 0.2, 0.2, 0.2, 0.2]
world=['green', 'red', 'red', 'green', 'green']
measurements = ['red', 'green']
pHit = 0.6
pMiss = 0.2
def sense(p, Z):
q=[]
for i in range(len(p)):
hit = (Z == world[i])
q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
s = sum(q)
for i in range(len(q)):
q[i] = q[i] / s
return q
for i in range(len(measurements)):
p = sense(p, measurements[i])
print(p)
p:代表世界地形分布密度的array
world:每一块地方的实际颜色
pHit和pMiss:这里的意思是,当感应器感知到一块地方的颜色,它感知正确的概率是感知错误的概率的三倍。这两个p不是随便给的,具体来说,假设感应Z是红色的,那么在这里,pHit是已知Xi是红色,然后感应到Z的概率(0.6);pMiss是已知Xi是绿色,感应到Z的概率(0.2)。
measurements: 感应器在同一个地方一共进行了两次感应,第一次感应到红色,第二次感应到绿色。
q = sense(p, Z) 在sense之前,当前认为小车的位置分布是p(这个p包括了所有之前的信息),进行sense后,sense到的结果是Z,将此次sense的结果更新,更新后得到新的小车位置分布q。
这里的小车是在静止的状态下sense了两次,每一次都是在之前的状态上叠加,因此每次传入和更新的都是p。
非精确移动函数
设机器人往前移动了U格,但机器人不一定移动的这么准确,有10%的概率少移动一格,10%的概率多移动一格。取余号在这里是简化了问题,认为世界是循环的,机器人走过了最后一格后 自动回到第一格。
pOvershoot = 0.1
pUndershoot = 0.1
pExact = 0.8
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i-U) % len(p)]
s = s + pOvershoot * p[(i-U-1) % len(p)]
s = s + pUndershoot * p[(i-U+1) % len(p)]
q.append(s)
return q
print(move(p, 1))
pOvershoot: 往前多移动了一格的概率
pUndershoot:少往前移动了一格的概率
q = move(p, U) 已知当前机器人位置的概率分布是p,计算它移动U格(它认为自己移动了U格,而不是实际移动了U格)后,新的位置的概率分布q。
这里用i-U取余是因为,我们要求新的机器人在每一个格子上的概率,那么就要对每一个新格子问:“你有可能是从哪里来的?”已知机器人认为自己移动了U步以后,到了格子i,那么它可能来自格子i-U (准确移动),可能来自格子i-U-1(多移动了一步),可能来自格子i-U+1 (少移动了一步)。所以在这些原先的概率上,乘以各自对应的转移概率(准确、多移、少移),就可以得到机器人在新的格子i上的概率。
感应和移动
每次感应,得到信息;每次移动,丢失信息(移动但不感应)。
measurements = ['red', 'green']
motions = [1,1]
for k in range(len(measurements)):
p = sense(p, measurements[k])
p = move(p, motions[k])
print(p)
这一个过程是,对每一步,机器人先感应,然后再移动。
在这里,机器人首先感应到了红色,然后它向右移动了一步;然后它又感应到了绿色,然后它又向右移动了一步。
这时候的输出是:[0.21157894736842103, 0.1515789473684211, 0.08105263157894739, 0.16842105263157897, 0.3873684210526316]
可以发现,这时机器人在最后一个格子的概率最大。对比环境可以发现,这与直观的结果相符,初始状态下,机器人最有可能是站在第3个格子。
贝叶斯法则
以上面的例子举例:
P(Xi|Z) : 机器人不移动的情况下,看到了红色(Z),这时机器人在第i个位置的概率
P(Z|Xi):如果机器人在第i个位置,看到红色(Z)的概率是多少 (也就是pHit和pMiss,如果第i个位置实际上是红色,pHit就是P(Z|Xi),如果第i个位置实际上是绿色PMiss就是P(Z|Xi))
P(Xi) : 什么条件都不知道的情况下,机器人在第i个格子的概率,题给说均匀分布
P(Z) : 什么条件都不知道的情况下,机器人看到红色的概率。
全概率公式
对t时刻的格子Xi,机器人在它上面的概率P,等于所有可能转移过来的t-1时刻的格子所对应的概率与转移概率的乘积之和。
For the flying robot with six variables, how does the memory use of the basic histogram representation scale? —— Exponentially 因为对N维,每个度量都会变成长度为N的向量,状态就有x^N种(设x为度量的数量)