我试图让一个移动机器人根据它从相机上看到的东西来映射竞技场。我创建了一张地图,并设法让机器人识别放置在竞技场中的物品并给出估计的位置,但是,由于我只使用RGB相机,因此结果数字可能会有所不同。噪音,或照明等的变化。现在我要做的是使用贝叶斯'创建概率图。提供更好的竞技场地图的公式。
贝叶斯'式
P(i | x) = (p(i)p(x|i))/(sum(p(j)(p(x|j))
这是我到目前为止所得到的。地图上的所有点都初始化为0.5。
// Gets the Likely hood of the event being correct
// Para 1 = Is the object likely to be at that location
// Para 2 = is the sensor saying it's at that location
private double getProbabilityNum(bool world, bool sensor)
{
if (world && sensor)
{
// number to test the function works
return 0.6;
}
else if (world && !sensor)
{
// number to test the function works
return 0.4;
}
else if (!world && sensor)
{
// number to test the function works
return 0.2;
}
else //if (!world && !sensor)
{
// number to test the function works
return 0.8;
}
}
// A function to update the map's probability of an object being at location (x,y)
// Para 3 = does the sensor pick up the an object at (x,y)
public double probabilisticMap(int x,int y,bool sensor)
{
// gets the current likelihood from the map (prior Probability)
double mapProb = get(x,y);
//decide if object is at location (x,y)
bool world = (mapProb < threshold);
//Bayes' formula to update the probability
double newProb =
(getProbabilityNum(world, sensor) * mapProb) / ((getProbabilityNum(world, sensor) * mapProb) + (getProbabilityNum(!world, sensor) * (1 - mapProb)));
// update the location on the map
set(x,y,newProb);
// return the probability as well
return newProb;
}
它确实有效,但数字似乎快速跳跃,然后当它们位于顶部时闪烁,如果数字下降得太接近零,它也会出错。任何人都知道为什么会发生这种情况?我认为它与方程编码的方式有关,但我不太确定。 (我发现this,但我不太了解它,所以我不确定它的相关性,但它似乎在谈论同样的事情
先谢谢。
答案 0 :(得分:0)
在进行涉及概率的数值计算时使用 log-likelihoods 。
考虑
P(i | x) = (p(i)p(x|i))/(sum(p(j)(p(x|j)).
由于x
是固定的,分母p(x)
是常量。因此
P(i | x) ~ p(i)p(x|i)
其中~
表示“与......成正比。”
对数似然函数就是这个的日志。也就是说,
L(i | x) = log(p(i)) + log(p(x|i)).