杜年豐, 陳 偉, 史澤地, 楊增汪
(江蘇師范大學(xué)物理與電子工程學(xué)院,江蘇徐州221116)
國外GPS和國內(nèi)北斗導(dǎo)航已經(jīng)進(jìn)入大眾群體中,人們?cè)谌粘I钪幸苍絹碓诫x不開它。經(jīng)調(diào)查,當(dāng)下全球有很多致力于解決盲人室外行動(dòng)難題的研究團(tuán)隊(duì),他們的研究成果很多也做得很好,如盲人GPS導(dǎo)航儀、電子導(dǎo)盲杖等[1]。然而,對(duì)于室內(nèi)導(dǎo)航卻鮮有成果出現(xiàn),這是因?yàn)楝F(xiàn)在的導(dǎo)航信號(hào)(GPS、北斗等)會(huì)被較厚的墻壁阻擋,這就使得導(dǎo)航設(shè)備在大型建筑這樣的場(chǎng)景中會(huì)因?yàn)樾l(wèi)星信號(hào)斷聯(lián)而無法定位[1],該技術(shù)難題極大地限制了室內(nèi)導(dǎo)航技術(shù)的發(fā)展。而現(xiàn)實(shí)生活中,盲人活動(dòng)大多在室內(nèi)進(jìn)行,即便外出,盲人對(duì)于樓梯口、拐彎處無法感知,容易受傷,特別是盲人在一個(gè)復(fù)雜陌生的室內(nèi)環(huán)境,在沒有別人幫助的情況下,容易發(fā)生碰撞[1]。
為此,本文提出了一種盲人室內(nèi)避障系統(tǒng)。該系統(tǒng)在分析視障人士室內(nèi)行走的心理特征以及視覺缺失特點(diǎn)的基礎(chǔ)上,以樹莓派為控制核心,將激光雷達(dá)、陀螺儀、加速度計(jì)等不同的傳感器定位融合,最終依據(jù)空間單位進(jìn)制劃分,對(duì)室內(nèi)物體進(jìn)行線性建模,建立起一個(gè)適用于視障人士室內(nèi)導(dǎo)航的室內(nèi)模型。在模型通過樹莓派控制器處理后,劃分出危險(xiǎn)層次,盲人可以通過播報(bào)的語音信息在室內(nèi)避開障礙物。當(dāng)盲人走出室外,則結(jié)合GPS設(shè)備輸出的經(jīng)緯度信號(hào),樹莓派控制器可以根據(jù)場(chǎng)景需要將GPS經(jīng)緯度信息轉(zhuǎn)換為平面坐標(biāo)x、y、z,融合在激光雷達(dá)傳感器的矩陣運(yùn)算、障礙物信息實(shí)時(shí)采集中,從而很好地將此避障系統(tǒng)與室外導(dǎo)航結(jié)合。
本系統(tǒng)整體設(shè)計(jì)主要由感知層、控制層、輸出層組成。感知層包括陀螺儀、加速度計(jì)、微型激光雷達(dá)、GPS/北斗作為主要傳感器,樹莓派控制器對(duì)傳感器A/D轉(zhuǎn)換后,經(jīng)過對(duì)數(shù)據(jù)的矩陣融合運(yùn)算,生成一個(gè)狀態(tài)估計(jì)的過程模型,預(yù)估在對(duì)盲人所處環(huán)境測(cè)量中,過程模型以及卡爾曼濾波就可以完成對(duì)盲人周邊障礙物/行人的狀態(tài)進(jìn)行估計(jì)。
此外,微型激光雷達(dá)會(huì)對(duì)盲人所處室內(nèi)環(huán)境不斷掃描獲取數(shù)據(jù),將入口與可行路徑以柵格單元的形式記錄,通過掃描整個(gè)室內(nèi)環(huán)境,最終構(gòu)建室內(nèi)2D柵格地圖,樹莓派控制器根據(jù)柵格值的不同劃分障礙物危險(xiǎn)系數(shù)。本設(shè)計(jì)還會(huì)基于危險(xiǎn)度計(jì)算規(guī)則、室內(nèi)層次信息和拓?fù)湫畔?,根?jù)室內(nèi)導(dǎo)航中出現(xiàn)的障礙物危險(xiǎn)系數(shù)分層次語音提醒。整體架構(gòu)如圖1所示。
圖1 系統(tǒng)整體架構(gòu)圖
采用微型激光雷達(dá)可以為盲人實(shí)時(shí)構(gòu)建2D柵格地圖。通過微型激光雷達(dá)的精準(zhǔn)測(cè)距,可以得到較為精確的空間信息,如角度和距離。占據(jù)柵格地圖一般用來表示微型激光雷達(dá)SLAM建立的地圖,因?yàn)闁鸥窬哂写鎯?chǔ)緊湊和格柵是以概率的形式表示被占據(jù)的概率的特性,所以非常適用于檢測(cè)障礙物[5]。
SLAM:這是一種從未知環(huán)境、地點(diǎn)中出發(fā),在運(yùn)動(dòng)過程中通過反復(fù)觀察空間特性從而對(duì)自身位置和姿態(tài)進(jìn)行定位,接著會(huì)根據(jù)自身位置為中心來構(gòu)筑周圍空間的增量式地圖,通過這種方式構(gòu)建地圖和實(shí)時(shí)定位。它包括傳感器輸入、濾波處理、回環(huán)檢測(cè)、定位融合、非線性優(yōu)化、信號(hào)濾波等[6-7],如圖2所示。
圖2 SLAM系統(tǒng)模塊
SLAM構(gòu)建的示意圖黑色線條表示激光雷達(dá)探測(cè)到的障礙物邊緣,表示此格不通;灰白色區(qū)域表示可能有窗戶或門,微型激光雷達(dá)部分點(diǎn)散射了出去。通過掃描整個(gè)室內(nèi)環(huán)境,可以形成一幅2D的激光雷達(dá)柵格地圖,紅色區(qū)域表示當(dāng)前位置,如圖3所示。
圖3 微型激光雷達(dá)SLAM示意圖
一般用宏觀環(huán)境和微觀環(huán)境來表示盲人在室內(nèi)活動(dòng)時(shí)的室內(nèi)信息,室內(nèi)空間可以看作是一個(gè)個(gè)空間單元,空間單元又可細(xì)分為通道和通用單元;這樣就可以將通用單元中除了障礙物和附屬物的部分賦予可以讓盲人通行的功能,并且用入口將其與道路連接起來;為了實(shí)現(xiàn)精準(zhǔn)避障過程中為盲人提供更加詳實(shí)的信息,本設(shè)計(jì)利用一套語意拓展策略用于描述室內(nèi)的空間單元;在功能單元入口和道路的關(guān)聯(lián)下,就可以將室內(nèi)空間單元的拓?fù)湫畔⑦M(jìn)行保存,這可為生成避障指引提供基礎(chǔ)。本系統(tǒng)還會(huì)基于危險(xiǎn)度計(jì)算規(guī)則、層次信息和拓?fù)湫畔ⅲ接懯覂?nèi)導(dǎo)航中出現(xiàn)的障礙物危險(xiǎn)系數(shù),為盲人在室內(nèi)空間安全行走提供依據(jù)。
本盲人導(dǎo)航設(shè)計(jì)采用樹莓派3B+芯片,作為整個(gè)系統(tǒng)的控制器,微型激光雷達(dá)對(duì)障礙物信息進(jìn)行采集后傳送到樹莓派組成的控制電路,樹莓派控制器通過算法根據(jù)微型激光雷達(dá)SLAM建立的地圖進(jìn)行數(shù)據(jù)分析和矩陣運(yùn)算。
(1)多傳感器的定位融合原理。室內(nèi)定位是本系統(tǒng)非常重要的實(shí)驗(yàn)內(nèi)容,核心是要解決盲人“我在哪”和“要去哪”的問題。普通人在陌生的室內(nèi)環(huán)境下可以根據(jù)室內(nèi)建筑物的引導(dǎo)牌和一些熟悉的標(biāo)記點(diǎn)知道自己在哪。進(jìn)一步地講,根據(jù)人腦的神經(jīng)元來認(rèn)知,這些是在一瞬間完成的,但是對(duì)于控制器和程序則需要多傳感器的信息數(shù)據(jù)融合,才能夠精確地完成定位計(jì)算。
目前室外的定位技術(shù)比較成熟的有國外的GPS和國內(nèi)的北斗,但是在室內(nèi)復(fù)雜的建筑物和場(chǎng)景下,這種成熟的技術(shù)由于信號(hào)、場(chǎng)景復(fù)雜等問題無法適用。GPS和北斗的定位原理是基于三角定位法,3個(gè)衛(wèi)星組成三角形,通過融合幾何數(shù)據(jù),從而獲得精確的位置信息。那么是否可以將GPS/北斗的幾何數(shù)據(jù)與盲人室內(nèi)穿戴的其他傳感器獲取的數(shù)據(jù)融合呢?如果可以的話,就可以同時(shí)實(shí)現(xiàn)盲人的室內(nèi)導(dǎo)航和室外導(dǎo)航了。
通常GPS設(shè)備輸出的信號(hào)主要為經(jīng)緯度信息、時(shí)間同步等信號(hào),GPS/北斗結(jié)合盲人穿戴的多傳感器融合需要將經(jīng)緯度信號(hào)轉(zhuǎn)換為平面坐標(biāo)x、y、z。盲人室內(nèi)穿戴設(shè)備有陀螺儀、加速度計(jì)、微型傳感器等讀取出來的加速度、以及對(duì)應(yīng)的角度信息,速度信息我們用vx、vy、vz表示,位置和角度用Roll、pitch表示。現(xiàn)在就有了x、y、z、vx、vy、vz、Roll、pitch共8個(gè)狀態(tài)向量來表示盲人的姿態(tài)和位置信息。有了這些信息,可以結(jié)合慣性測(cè)量單元(Inertial Measurement Unit,IMU)的慣性參數(shù)來預(yù)防盲人摔倒[8-9]。
同理,還可以在盲人設(shè)備上加入其他傳感器設(shè)備,比如超聲波、里程計(jì)等,這些傳感器都有其優(yōu)缺點(diǎn),可以根據(jù)這些傳感器讀取的不同維度的測(cè)量數(shù)據(jù)轉(zhuǎn)換后融合,如圖4所示,得到更加精準(zhǔn)的盲人姿態(tài)數(shù)據(jù)。
圖4 多傳感器融合示意圖
(2)室內(nèi)障礙物/過道行人位置估算。各種傳感器都有其優(yōu)缺點(diǎn),如何讓盲人在陌生的室內(nèi)環(huán)境中“眼觀八方”?那就要最大程度利用各個(gè)傳感器的優(yōu)點(diǎn),匯聚后安裝在盲人穿戴設(shè)備上,讓盲人根據(jù)多傳感器來知道周邊環(huán)境的情況。那么多傳感器如何穩(wěn)定、可靠地給盲人估算位置和姿態(tài)信息呢?本實(shí)驗(yàn)是基于卡爾曼濾波的位置估算解決。
首先根據(jù)多傳感器采集的信息,例如這樣的場(chǎng)景:盲人在室內(nèi)行走時(shí),前方突然出現(xiàn)障礙物或者行人,設(shè)備就需要對(duì)前方的障礙物和行人做一個(gè)預(yù)估和判斷,從而語音指導(dǎo)盲人避開,那么如何預(yù)估和判斷呢?我們根據(jù)盲人的x、y、z、vx、vy、vz、Roll、pitch共8個(gè)狀態(tài)向量可以記錄盲人的姿態(tài),由1.1導(dǎo)盲設(shè)備的室內(nèi)SLAM構(gòu)圖闡述得知,通過配備微型激光雷達(dá),可以完成測(cè)距信息,這樣可以得到前方突然出現(xiàn)障礙物/行人的位置和運(yùn)動(dòng)速度,這里用p表示障礙物/行人的位置,用vz表示運(yùn)動(dòng)速度,用一個(gè)向量來表示某個(gè)狀態(tài):
上述方程表示了障礙物/行人x、y方向的位置分量px、py,以及速度分量vx,vy。在確定了想要估計(jì)的對(duì)象狀態(tài)后,需要一個(gè)用于生成狀態(tài)估計(jì)的過程模型,假設(shè)模型為
擴(kuò)展為
將其展開得到:
在此過程模型預(yù)測(cè)的障礙物/行人的運(yùn)動(dòng)速度有可能為0,在這個(gè)問題中就會(huì)形成過程噪聲,上述公式中過程噪聲就是v,在預(yù)估盲人周圍的障礙物/行人運(yùn)動(dòng)狀態(tài)和位置時(shí),障礙物/行人突然加減速度時(shí),過程噪聲就轉(zhuǎn)變?yōu)榱苏系K物/行人的突然加減速度。那么原來的模型表達(dá)式可以優(yōu)化為
再根據(jù)線性代數(shù)的方法(P′K=AP k-1AT)來表示預(yù)測(cè),預(yù)測(cè)后的過程應(yīng)為
式中,Q是過程噪聲的協(xié)方差矩陣。這是狀態(tài)A的更新過程,它的本質(zhì)是估計(jì)狀態(tài)概率分布的協(xié)方差矩陣。因?yàn)檎系K物/行人的突然加減速度造成的過程噪聲是隨機(jī)帶入的,所以過程噪聲v本質(zhì)是一個(gè)高斯分布:v~N(0,Q),Q是過程噪聲的協(xié)方差矩陣:是傳感器的固有性質(zhì),往往由傳感器廠商提供。綜上,可以求得
式中,C表示引入值,根據(jù)盲人所穿戴設(shè)備的傳感器性質(zhì)決定,因?yàn)橛械膫鞲衅髦荒軠y(cè)量v,位置y獲取不到;I符號(hào)代表單位矩陣;
在對(duì)盲人所處環(huán)境測(cè)量步驟中,通過過程模型以及卡爾曼濾波就可以完成對(duì)盲人周邊障礙物/行人的狀態(tài)進(jìn)行估計(jì)?;诖?,通過以上所述原理,以多傳感器數(shù)據(jù)信息為節(jié)點(diǎn),將SLAM構(gòu)圖中可以通行的通道轉(zhuǎn)化為邊,提取室內(nèi)空間單元內(nèi)部對(duì)象為柵格,將不可行走的區(qū)域在構(gòu)建的2D激光雷達(dá)柵格地圖中,用黑色界限表示,控制器通過慣性測(cè)量單元IMU等傳感器數(shù)據(jù)融合獲取的參數(shù)預(yù)估盲人及周邊障礙物和來人的運(yùn)動(dòng)姿態(tài),緊急轉(zhuǎn)化為語音進(jìn)行提醒。
本設(shè)計(jì)測(cè)試與實(shí)驗(yàn)主要由兩部分組成:①搭建仿真環(huán)境,本測(cè)試采取實(shí)驗(yàn)室為盲人仿真室內(nèi)環(huán)境,通過微型激光雷達(dá)的精準(zhǔn)測(cè)距,獲得較為精確的空間信息,進(jìn)行SLAM構(gòu)圖,并形成實(shí)際構(gòu)圖效果與實(shí)驗(yàn)室真實(shí)過道、障礙物實(shí)物對(duì)比。②多傳感器融合測(cè)試,基于卡爾曼濾波的位置估算預(yù)估盲人周邊障礙物/來往行人的狀態(tài),將預(yù)估、測(cè)量數(shù)據(jù)與真實(shí)結(jié)果進(jìn)行對(duì)比。
在導(dǎo)盲設(shè)備樹莓派上安裝微型激光雷達(dá),如圖5所示,可以獲取室內(nèi)環(huán)境深度信息,然后根據(jù)盲人所處室內(nèi)環(huán)境設(shè)定可檢測(cè)的起始角度(angle_min)和可檢測(cè)范圍的終止角度(angle_max),組成微型激光雷達(dá)的可檢測(cè)范圍,相鄰數(shù)據(jù)幀之間的角度步長以及采集一幀數(shù)據(jù)所需要的時(shí)間,最近可檢測(cè)深度的闕值(range_min),最遠(yuǎn)可檢測(cè)深度的闕值(range_max)等[10]。
圖5 微型激光雷達(dá)實(shí)物圖
完成上述根據(jù)盲人環(huán)境設(shè)定的深度信息后,再根據(jù)盲人當(dāng)前位置設(shè)置坐標(biāo),包括盲人的x、y、z三軸位置及方向參數(shù),以及用于校正誤差的協(xié)方差矩陣。
確定仿真環(huán)境。本設(shè)計(jì)測(cè)試采取實(shí)驗(yàn)室為盲人室內(nèi)仿真陌生環(huán)境,如圖6所示為實(shí)驗(yàn)室平面圖,仿真軟件為Vmvare,通過設(shè)置可以即時(shí)顯示微型激光雷達(dá)SLAM構(gòu)建的2D柵格地圖。
圖6 實(shí)驗(yàn)室平面圖
具體實(shí)驗(yàn)步驟如下:
(1)首先在Vmware虛擬機(jī)中添加基于SLAM的功能應(yīng)用包gmapping,gmapping功能包包括二維柵格地圖和Rao-Blackwellized粒子濾波算法[11],總體框架圖如圖7所示。
圖7 gmapping功能包的總體框架
(2)初始化工作空間,向樹莓派中輸入測(cè)試指令如下:
(3)根據(jù)系統(tǒng)導(dǎo)航框架中的蒙特卡羅定位方法,可以在盲人導(dǎo)盲設(shè)備構(gòu)建的SLAM室內(nèi)地圖中加入二維環(huán)境定位,使用粒子濾波跟蹤盲人的姿態(tài)。導(dǎo)盲設(shè)備中的導(dǎo)航框架,結(jié)合多傳感器融合定位:可以估算機(jī)器人在地圖坐標(biāo)系/map下的位姿信息,提供/base、/odo/map之間的TF變換,根據(jù)盲人室內(nèi)環(huán)境特征配置參數(shù)move_base節(jié)點(diǎn)。
(4)設(shè)置密鑰,設(shè)置環(huán)境在~/catkin_ws/src中創(chuàng)建柵格構(gòu)圖源文件。
(5)創(chuàng)建仿真。連接樹莓派在Vmware執(zhí)行如下指令:
(6)啟動(dòng)hector_slam演示,通過Vmware查看微型激光雷達(dá)設(shè)備對(duì)盲人周邊環(huán)境柵格構(gòu)圖,實(shí)際構(gòu)圖效果如圖8所示,通過掃描整個(gè)室內(nèi)環(huán)境,可以形成一幅2D的激光雷達(dá)柵格地圖,黑色線條表示激光雷達(dá)探測(cè)到的障礙物邊緣,表示此格不通,灰白色區(qū)域表示可能有窗戶或門。
圖8 盲人所處環(huán)境SLAM柵格構(gòu)圖
根據(jù)盲人所處環(huán)境,控制器樹莓派通過算法根據(jù)微型激光雷達(dá)SLAM建立的地圖進(jìn)行數(shù)據(jù)分析和矩陣運(yùn)算,可以形成一幅2D的激光雷達(dá)柵格地圖(見圖9)。根據(jù)柵格地圖呈現(xiàn)的柵格值劃分區(qū)域,劃分依據(jù)盲人真實(shí)實(shí)驗(yàn)數(shù)據(jù)均值。
圖9 柵格地圖區(qū)域值劃分
柵格值設(shè)置致命障礙:柵格值為254,障礙物與盲人的中心重合,此時(shí)障礙物必然與盲人發(fā)生碰撞。
內(nèi)切障礙:柵格值為253,障礙物處于盲人周邊的內(nèi)切圓內(nèi),此時(shí)盲人也必然與障礙物發(fā)生碰撞。
外切障礙:柵格值為252~127,障礙物處于盲人周邊的外切圓內(nèi),此時(shí)盲人與障礙物臨界接觸,不一定發(fā)生碰撞。
自由區(qū)域~內(nèi)切障礙:柵格值為127~2,障礙物附近區(qū)域,一旦盲人進(jìn)入該區(qū)域,將有較小概率發(fā)生碰撞,屬于安全區(qū)。
自由區(qū)域:柵格值為0~2,此處沒有障礙物,盲人可以自由通過。
未知區(qū)域:柵格值為255,此處還沒有探知是否有障礙物,盲人可以前往繼續(xù)建圖。
根據(jù)盲人穿戴的陀螺儀、加速度計(jì)、微型傳感器等讀取出來的加速度,以及對(duì)應(yīng)的角度信息,速度信息用vx、vy、vz表示,位置和角度我們用Roll、pitch表示,前方的障礙物和行人位置分量用px、py表示、速度分量用vx,vy表示。
下面在pycharm中執(zhí)行代碼,pycharm是一種Python IDE交互式編輯器,帶有一整套可以幫助用戶在使用Python語言開發(fā)時(shí)提高其效率的工具,方便Project管理。
主要步驟如下:
(1)在pycharm中載入必要的庫,如圖10所示。
圖10 pycharm載入庫界面
(2)通過傳感器讀入障礙物和來往行人的狀態(tài),包括在SLAM構(gòu)圖柵格中的位置以及速度等信息,程序中載入2.2.2中的優(yōu)化模型,代碼中用F表示,測(cè)量矩陣H如圖11所示,計(jì)算測(cè)量噪聲的協(xié)方差矩陣和過程噪聲的協(xié)方差矩陣Q[12]。
圖11 在pycharm載入狀態(tài)轉(zhuǎn)移矩陣F及觀測(cè)矩陣H
(3)在pycharm定義一個(gè)單位矩陣,產(chǎn)生一些隨機(jī)測(cè)量數(shù)據(jù)陣和一些過程值。
(4)在pycharm中執(zhí)行卡爾曼濾波。位姿估計(jì)算法的研究是解決SLAM問題的關(guān)鍵。目前,已有大量位姿估計(jì)算法,根據(jù)這些算法的基本原則大致可分為以下幾類:擴(kuò)展卡爾曼濾波(EKF)、最大似然方法、稀疏的擴(kuò)展信息濾波器(SEIFs)、平滑技術(shù)、Rao-Blackwellized粒子濾波器(RBPF)以及GraphSLAM[13-14]。其中本實(shí)驗(yàn)使用的是卡爾曼濾波法,如圖12所示??柭鼮V波過程如圖13所示。
圖12 在pycharm中載入卡爾曼濾波公式
圖13 卡爾曼濾波過程
在pycharm中執(zhí)行代碼,通過傳感器讀入障礙物和來往行人的狀態(tài),包括在SLAM構(gòu)圖柵格中的位置以及速度等信息,程序中載入處理矩陣F及測(cè)量矩陣H,計(jì)算測(cè)量噪聲的協(xié)方差矩陣和過程噪聲矩陣Q。最終在pycharm中展示預(yù)估、預(yù)測(cè)及真實(shí)結(jié)果對(duì)比[15]。在pycharm中可以讀取到傳感器檢測(cè)的vx與vy,如圖14所示。在pycharm中載入卡爾曼濾波公式后,多傳感器融合測(cè)試,基于卡爾曼濾波的位置估算預(yù)估盲人周邊障礙物/來往行人的狀態(tài)(見圖15)。
圖14 傳感器實(shí)際測(cè)量值
圖15 預(yù)估數(shù)據(jù)與過濾狀態(tài)圖
在傳統(tǒng)的GPS和北斗導(dǎo)航無法滿足室內(nèi)復(fù)雜的環(huán)境下,本文建立起一個(gè)適用于視障人士室內(nèi)導(dǎo)航的室內(nèi)模型,在模型通過樹莓派控制器處理后,設(shè)計(jì)出最優(yōu)路徑,盲人可以通過播報(bào)的語音信息在室內(nèi)行走。當(dāng)盲人走出室外,則結(jié)合GPS設(shè)備輸出的經(jīng)緯度信號(hào),樹莓派控制器可以根據(jù)場(chǎng)景需要將GPS經(jīng)緯度信息轉(zhuǎn)換為平面坐標(biāo)x、y、z,融合在激光雷達(dá)傳感器的矩陣運(yùn)算、障礙物信息實(shí)時(shí)采集中,從而很好地將室內(nèi)導(dǎo)航與室外導(dǎo)航結(jié)合。
主要有以下特點(diǎn):①采用了微型激光雷達(dá)可以為盲人實(shí)時(shí)構(gòu)建室內(nèi)導(dǎo)航地圖(SLAM),微型激光雷達(dá)部分點(diǎn)散射出去,通過掃描整個(gè)室內(nèi)環(huán)境,可以形成一幅2D的激光雷達(dá)柵格地圖,根據(jù)盲人所處環(huán)境的柵格值,提示盲人精準(zhǔn)避障。②多傳感器定位融合原理和卡爾曼濾波,當(dāng)盲人在室內(nèi)行走時(shí),前方突然出現(xiàn)障礙物或者行人,系統(tǒng)就需要對(duì)前方的障礙物和行人狀態(tài)做一個(gè)預(yù)估和判斷,通過語音提醒盲人。