cartographer概率栅格地图更新过程

1.占据栅格地图理论推导

对于一个点,它要么有(Occupied状态,下面用1来表示)障碍物,要么没有(Free状态,下面用0来表示)障碍物。在占据栅格地图中,对于一个点,我们用 p ( s = 0 ) p(s=0) p(s=0)来表示它是Free状态的概率,用 p ( s = 1 ) p(s=1) p(s=1)来表示它是Occupied状态的概率,当然两者的和为1。两个值太多了,我们引入两者的比值来作为点的状态。
O d d ( s ) = p ( s = 1 ) p ( s = 0 ) (1) Odd(s)=\frac{p(s=1)}{p(s=0)} \tag1 Odd(s)=p(s=0)p(s=1)​(1)

如果当前时刻对该点进行了一次观测z,如何更新此点的栅格状态?
设对该点进行观测之前该点的状态表示为 O d d ( s ) Odd(s) Odd(s),观测后的状态表示为 O d d ( s ∣ z ) Odd(s|z) Odd(s∣z)
根据推导可以得到该点进行了一次观测z后此点的栅格状态:
O d d ( s ∣ z ) = p ( z ∣ s = 1 ) p ( z ∣ s = 0 ) O d d ( s ) (2) Odd(s|z)=\frac{p(z|s=1)}{p(z|s=0)}Odd(s) \tag2 Odd(s∣z)=p(z∣s=0)p(z∣s=1)​Odd(s)(2)
公式(2)具体推导如下:
由定义
O d d ( s ∣ z ) = p ( s = 1 ∣ z ) p ( s = 0 ∣ z ) (3) Odd(s|z)=\frac{p(s=1|z)}{p(s=0|z)} \tag3 Odd(s∣z)=p(s=0∣z)p(s=1∣z)​(3)
由贝叶斯公式
p ( s = 1 ∣ z ) = p ( z ∣ s = 1 ) p ( s = 1 ) p ( z ) (4) p(s=1|z)=\frac{p(z|s=1)p(s=1)}{p(z)} \tag4 p(s=1∣z)=p(z)p(z∣s=1)p(s=1)​(4)
p ( s = 0 ∣ z ) = p ( z ∣ s = 0 ) p ( s = 0 ) p ( z ) (5) p(s=0|z)=\frac{p(z|s=0)p(s=0)}{p(z)} \tag5 p(s=0∣z)=p(z)p(z∣s=0)p(s=0)​(5)

公式(4)(5)代入公式(3)得到
O d d ( s ∣ z ) = p ( z ∣ s = 1 ) p ( s = 1 ) p ( z ∣ s = 0 ) p ( s = 0 ) = p ( z ∣ s = 1 ) p ( z ∣ s = 0 ) O d d ( s ) Odd(s|z)=\frac{p(z|s=1)p(s=1)}{p(z|s=0)p(s=0)}\\ = \frac{p(z|s=1)}{p(z|s=0)}Odd(s) Odd(s∣z)=p(z∣s=0)p(s=0)p(z∣s=1)p(s=1)​=p(z∣s=0)p(z∣s=1)​Odd(s)

这里有疑问?如果该点这一次观测为占用z=1,那么p(z|s=1)和p(z|s=0)为多少?

对于以上的更新需要计算一次乘法,效率太低。
为了提高效率,可以对公式(2)取对数,
l o g O d d ( s ∣ z ) = l o g p ( z ∣ s = 1 ) p ( z ∣ s = 0 ) + l o g O d d ( s ) = l o g p ( z ∣ s = 1 ) p ( z ∣ s = 0 ) + l o g O d d ( s ) log Odd(s|z)=log\frac{p(z|s=1)}{p(z|s=0)}+logOdd(s) \\ =log\frac{p(z|s=1)}{p(z|s=0)}+logOdd(s) \\ logOdd(s∣z)=logp(z∣s=0)p(z∣s=1)​+logOdd(s)=logp(z∣s=0)p(z∣s=1)​+logOdd(s)

由于每次观测只有两种情况,
当观测为占用的时候z=1,
l o o c c u = l o g p ( z = 1 ∣ s = 1 ) p ( z = 1 ∣ s = 0 ) looccu=log\frac{p(z=1|s=1)}{p(z=1|s=0)} looccu=logp(z=1∣s=0)p(z=1∣s=1)​
looccu为定值。

当观测为占用的时候z=0,
l o f r e e = l o g p ( z = 1 ∣ s = 1 ) p ( z = 1 ∣ s = 0 ) lofree=log\frac{p(z=1|s=1)}{p(z=1|s=0)} lofree=logp(z=1∣s=0)p(z=1∣s=1)​
lofree为定值。

这样每次观测就只需要在前一次的观测基础上加上一个固定的值就行了。
例如,假设我们设定looccu=0.9,lofree=-0.7。初始的时候该栅格的概率为p(s=1)=0.5,p(s=0)=0.5, l o g O d d = l o g 0.5 0.5 = 0 logOdd=log\frac{0.5}{0.5}=0 logOdd=log0.50.5​=0。
进行了一次观测,且观测结果为z=1障碍物,观测后的状态为

l o g O d d ( s ∣ z ) = 0.9 + 0 = 0.9 log Odd(s|z)=0.9+0=0.9 logOdd(s∣z)=0.9+0=0.9

同样的疑问?实际情况下定值looccu和lofree如何取值?

参考文献
https://zhuanlan.zhihu.com/p/21738718

上一篇:1116. 打印零与奇偶数


下一篇:linux的IP配置