分享我的Gatech OMSCS学位的网课笔记,开始上课都没时间刷题了。。

https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373

这是第一课: Localization的

基本原理

这一章主要讲如何通过先验概率+观察结果+移动后的观察结果,给机器人定位。

【Udacity笔记】AI for Robitics - Localization 机器人定位

从上到下四根线,所有的前提都是门的位置已知。

  1. 没有任何条件下的车的位置的均匀概率分布
  2. 已知车感应到在一扇门旁边,此时车的位置的概率分布。
  3. 已知车初始感应在一扇门旁边,并向右移动了距离x,此时车的位置的概率分布。(注意到峰会比第二条线要低,因为向右移动的距离x是自身的参数(而非环境感应),置信度相比2要低。
  4. 车再次进行感应,发现旁边还是一扇门,门的分布与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个格子。

 

贝叶斯法则

【Udacity笔记】AI for Robitics - Localization 机器人定位

以上面的例子举例:

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) : 什么条件都不知道的情况下,机器人看到红色的概率。

 

全概率公式

 

【Udacity笔记】AI for Robitics - Localization 机器人定位

 

对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为度量的数量)

相关文章:

  • 2021-11-24
  • 2021-10-17
  • 2021-07-15
  • 2021-08-31
  • 2021-10-21
  • 2021-07-07
  • 2021-07-19
  • 2021-10-23
猜你喜欢
  • 2021-04-30
  • 2021-06-21
  • 2021-11-18
  • 2021-06-17
  • 2021-09-10
  • 2021-09-23
  • 2021-05-04
相关资源
相似解决方案