Location直方圖濾波算法實(shí)現(xiàn)與概率分布可視化

Hello 大家好,今天給大家?guī)硪环蓐P(guān)于定位的概述入門性質(zhì)的文章辣垒,看完這篇文章,你將了解Location的意義印蔬,以及一個(gè)最基本1D直方圖濾波的Demo勋桶,如果你只是需要源代碼,請(qǐng)直接往下翻侥猬!

一例驹、Location的意義

在機(jī)器人導(dǎo)航任務(wù)中,location 可以告訴機(jī)器人目前位置退唠,以方便閉環(huán)控制或者軌跡規(guī)劃鹃锈。一般情況下,Location 可以通過
GPS瞧预,WIFI 等方式完成屎债。GPS的定位精度在3.5米左右仅政,WIFI則大于10米。對(duì)于機(jī)器人盆驹、無人汽車而言圆丹,這樣的精度顯然是不可接受的。激光雷達(dá)在10m的距離可以達(dá)到cm的精度召娜,雙目視覺在4m可以達(dá)到10cm的精度运褪,與GPS相比有一定優(yōu)勢(shì),此外玖瘸,這種非在線的定位方式可以在室內(nèi)使用秸讹。

Location 最大的難度來自于測(cè)量誤差。里程計(jì)的計(jì)數(shù)誤差雅倒,測(cè)量與里程計(jì)的不統(tǒng)一等璃诀。所以我們需要一種算法,能夠較高精度的確定機(jī)器人的位姿蔑匣。

image

如上圖所示劣欢,那些環(huán)境的網(wǎng)格是一個(gè)個(gè)離散的單元,將連續(xù)的環(huán)境離散化裁良,面對(duì)的是一個(gè)離散的概率分布凿将,這樣子就意味著機(jī)器人可能處于的位置總數(shù)是有限的。下面我們將實(shí)例講解一個(gè)最基本的基于一維空間的網(wǎng)格Location的直方圖濾波算法价脾,以初步定性的理解機(jī)器人Location算法牧抵。

下面的列子Udacity上的課程 https://cn.udacity.com/course/artificial-intelligence-for-robotics–cs373/

二、直方圖濾波

定義一個(gè)一維的網(wǎng)格空間

首先我們定義一個(gè)一維的網(wǎng)格空間侨把,如下圖所示, 機(jī)器人就在這里糾結(jié)自己處于哪一個(gè)格子;

image

初始化概率分布

接著我們需要初始化相應(yīng)的概率分布:

初始概率


p=[0.2, 0.2, 0.2, 0.2, 0.2]
world=['green', 'red', 'red', 'green', 'green']

我們首先初始化沒一個(gè)網(wǎng)格的概率都占 0.2的均勻分布犀变,定義每一個(gè)網(wǎng)格的顏色,這樣子這個(gè)一維的網(wǎng)格地圖就初始化完畢了秋柄。

接著我們需要加入傳感器的信息获枝,以及機(jī)器人運(yùn)動(dòng)概率信息。

加入傳感器與運(yùn)動(dòng)


measurements = ['red', 'red'] 
motions = [1,1]
pHit    = 0.6
pMiss   = 0.2
pExact      = 0.8
pOvershoot  = 0.1
pUndershoot = 0.1

在機(jī)器人運(yùn)動(dòng)過程中骇笔,我們首先定義機(jī)器人的運(yùn)動(dòng)模式 motions 分別是 -1 和 1,即移動(dòng)方向左(-)右(+)省店,假定格子是循環(huán)的(首尾聯(lián)通);

image

接著我們定義pHitpMiss,他們分別代表的是實(shí)際值與測(cè)量值相同的概率和不同的概率笨触,這個(gè)怎么理解喃懦傍,我們來看一下下面這張圖:

image

如圖所示旭旭,機(jī)器人測(cè)量到的信息是red葱跋, 真實(shí)的顏色分別是 ['green', 'red', 'red', 'green', 'green']源梭,那么機(jī)器人處于各個(gè)位置的概率就應(yīng)該這樣計(jì)算,首先如果處于第一個(gè)網(wǎng)格稍味,那么表示機(jī)器人檢測(cè)錯(cuò)了废麻,則處于一個(gè)網(wǎng)格的值應(yīng)該為:0.2 * 0.2 = 0.04,那么同理可得烛愧,若處于第二個(gè)網(wǎng)格掂碱,就表明檢測(cè)對(duì)了怜姿,則相應(yīng)的網(wǎng)格值為:0.6 * 0.2 = 0.12
最終得到下面的數(shù)值分布:
['0.04', '0.12', '0.12', '0.04', '0.04', '0.04'];

注意,這里還不是概率分布疼燥,因?yàn)楹筒坏扔?,我們需要進(jìn)行歸一化處理沧卢,需要知道具體的代碼實(shí)現(xiàn)請(qǐng)繼續(xù)往下看。

然后但狭,我們定義了機(jī)器人自己運(yùn)動(dòng)正確到達(dá)每個(gè)位置的概率, 即使我們已經(jīng)可以預(yù)測(cè)他到達(dá)的位置撬即,但是實(shí)際運(yùn)動(dòng)總是存在誤差,可能是輪子打滑剥槐,遇到障礙物,中途沒電才沧,等等,因此我們有不足/超調(diào)的三種情況:

image
  • pExact = 0.8
  • pOvershoot = 0.1
  • pUndershoot = 0.1

就這樣我們定義了所有的概率分布挨摸,接著讓我們實(shí)現(xiàn)具體的算法吧岁歉。

算法主體包含兩個(gè)部分,測(cè)量值的更新和運(yùn)動(dòng)更新锅移,最終得到各個(gè)網(wǎng)格的概率分布。

測(cè)量值更新

#  update measurement
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)
    # Normalized Sense
    for i in range(len(q)):
        q[i] = q[i] / s
    return q

我們首先需要獲取所有的測(cè)量值: for i in range(len(p)):置逻,之后分別與實(shí)際的world[i]比較备绽,之后乘上相應(yīng)的pHit / pMiss鬓催。
之后通過sum函數(shù)獲取總和用于皈依化處理恨锚,得到測(cè)量的概率分布。

運(yùn)動(dòng)更新

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

我們通過len(p)獲取運(yùn)動(dòng)的次數(shù)猴伶,之后分別計(jì)算正確/超調(diào)/不足的概率,并且求和以得到運(yùn)動(dòng)之后的概率分布筝尾。

可視化:

然后我們需要可視化我們的得到的分布:

def display_map(grid, bar_width=1):

    if(len(grid) > 0):
        x_labels = range(len(grid))
        plt.bar(x_labels, height=grid, width=bar_width, color='b')
        plt.xlabel('Grid Cell')
        plt.ylabel('Probability')
        plt.ylim(0, 1) # range of 0-1 for probability values 
        plt.title('Probability of the robot being at each cell in the grid')
        plt.xticks(np.arange(min(x_labels), max(x_labels)+1, 1))
        plt.show()
    else:
        print('Grid is empty')
image

通過python的matplotlib庫(kù)可以輕松的實(shí)現(xiàn)可視化办桨,我們可以通過定義如下的main函數(shù),整合上述的工作:

def main():
    global p
    for k in range(len(measurements)):
        p = sense(p, measurements[k])
        
        p = move(p, motions[k])
    
    print (p)   
    display_map(p)   

if __name__ == '__main__':
    main()

我們甚至可以開啟matplotlib實(shí)時(shí)顯示功能贸街,觀察如果我們運(yùn)動(dòng)1000次會(huì)有什么結(jié)果:

def main():
    global p
    plt.ion()
    for k in range(len(measurements)):
        p = sense(p, measurements[k])
        for i in range(1000):
            p = move(p, motions[k])
            plt.pause(0.05)
            display_map(p, 0.9)
    print (p)    
Peek 2018-10-09 04-10.gif

三狸相、總結(jié)一下

通過今天的這篇文章,我們介紹了一個(gè)最基本用于機(jī)器人定位的算法模型脓鹃,并且使用結(jié)合了Python概率論的只是具體實(shí)現(xiàn)了它,別小看這個(gè)算法娇跟,他可是自動(dòng)駕駛汽車定位的核心思想!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苞俘,一起剝皮案震驚了整個(gè)濱河市龄章,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岗憋,老刑警劉巖锚贱,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悍缠,警方通過查閱死者的電腦和手機(jī)耐量,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門滤港,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人山叮,你說我怎么就攤上這事添履∑ň螅” “怎么了暮胧?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵往衷,是天一觀的道長(zhǎng)钞翔。 經(jīng)常有香客問我席舍,道長(zhǎng),這世上最難降的妖魔是什么汰扭? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任福铅,我火速辦了婚禮,結(jié)果婚禮上滑黔,老公的妹妹穿的比我還像新娘。我一直安慰自己色查,他們只是感情好撞芍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著序无,像睡著了一般衡创。 火紅的嫁衣襯著肌膚如雪晶通。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天一也,我揣著相機(jī)與錄音喉脖,去河邊找鬼。 笑死树叽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的题诵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼京痢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼篷店!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疲陕,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤蹄殃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诅岩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸳谜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年式廷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袜爪,死狀恐怖薛闪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豁延,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站胰苏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏硕并。R本人自食惡果不足惜秧荆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乙濒。 院中可真熱鬧,春花似錦颁股、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至滤愕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間间影,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工蔓搞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喂分。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓蒲祈,卻偏偏與公主長(zhǎng)得像甘萧,于是被迫代替她去往敵國(guó)和親梆掸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345