陳宇帆,段中興,2
(1.西安建筑科技大學(xué) 信息與控制工程學(xué)院,西安 710055;2.西部綠色建筑國家重點(diǎn)實(shí)驗(yàn)室,西安 710055)
隨著城市化發(fā)展的進(jìn)程,出現(xiàn)了越來越多的高樓大廈與大型公共建筑,實(shí)現(xiàn)智能與自動化成為當(dāng)今社會進(jìn)一步發(fā)展的新契機(jī)。隨著各類機(jī)器人的出現(xiàn),使得人們的生產(chǎn)生活方式發(fā)生了變革,解放了很多人力勞動,同時(shí)也存在著一些棘手的問題。
由于建筑室內(nèi)環(huán)境的復(fù)雜與多變,移動機(jī)器人需要在技術(shù)性能上要求更高。當(dāng)前地圖構(gòu)建方式大多采用SLAM (simultaneous localization and mapping) 技術(shù)[1],讓機(jī)器人通過傳感器在未知的環(huán)境中得到識別信息,并逐步獲取相關(guān)地圖。當(dāng)環(huán)境發(fā)生較大變化時(shí),SLAM構(gòu)建的地圖將無法使用。并且面對面積較大的場景時(shí),使用SLAM技術(shù)也會使得構(gòu)建地圖的過程變得更加復(fù)雜和繁瑣。由于建筑信息模型BIM (building information modeling)技術(shù)的快速推進(jìn),因此在工程建設(shè)中越來越廣泛使用BIM模型,獲取建筑的信息也更加的準(zhǔn)確及時(shí)[2]。使用BIM模型能夠快速創(chuàng)建室內(nèi)地圖,因此將BIM模型與移動機(jī)器人室內(nèi)導(dǎo)航相結(jié)合,能夠提高機(jī)器人工作的效率。對于路徑規(guī)劃,目前比較常用的有人工勢場法[3]、A*算法[4]、迪杰斯特拉算法(Dijlstra)[5]、遺傳算法[6]、蟻群算法[7]等。動態(tài)窗口法(DWA)是目前局部路徑避障的主要算法,應(yīng)用于實(shí)時(shí)碰撞避免策略[8]。文獻(xiàn)[9]對A*算法進(jìn)行了改進(jìn),使得規(guī)劃的路徑更加平滑,但是對于有隨機(jī)障礙物出現(xiàn)的情況不適用;文獻(xiàn)[10]將Dijkstra算法與DWA算法相融合,在全局路徑中規(guī)劃出最短路徑,并在局部路徑規(guī)劃中實(shí)現(xiàn)避障效果,但是沒有考慮動態(tài)障礙物與機(jī)器人之間的距離,容易使得機(jī)器人在狹窄空間內(nèi)無法通過;文獻(xiàn)[11]中將傳統(tǒng)A*算法的8鄰域搜索改為5鄰域搜索,使用DWA算法進(jìn)行局部避障,使得路徑距離變短且平滑度提高,但是沒有考慮到其5個鄰域方向同時(shí)存在障礙的情況,容易使得全局路徑無法規(guī)劃。
針對上述問題,本文在地圖建立過程中采用BIM模型,提取建筑物的空間信息,從而使地圖構(gòu)建效率得到提高,讓移動機(jī)器人能夠快速獲取和熟知室內(nèi)環(huán)境。在室內(nèi)路徑規(guī)劃中,采用全局路徑與局部路徑相結(jié)合,對A*算法進(jìn)行改進(jìn),擴(kuò)大其搜索鄰域,考慮機(jī)器人通過的安全性,當(dāng)有動態(tài)障礙時(shí),采用DWA算法進(jìn)行避障,保障運(yùn)動的連續(xù)性。
建筑信息模型BIM(building information modeling)是一個生產(chǎn)建筑數(shù)據(jù)和使用建筑數(shù)據(jù)的過程[12],基于模型的智能化流程,包含與物理特性和功能特性相關(guān)的數(shù)據(jù),BIM技術(shù)能更好的還原從概念到施工的建筑模型,使得建筑建造和運(yùn)營建筑基礎(chǔ)設(shè)施變得更加高效、更加精細(xì)化和透明化。
使用Autodesk Revit軟件進(jìn)行BIM建模,可以對現(xiàn)實(shí)三維事物進(jìn)行準(zhǔn)確的模擬,并且能夠呈現(xiàn)出準(zhǔn)確的信息。
IFC(industry foundation class)是針對BIM數(shù)據(jù)交換的唯一的開放式標(biāo)準(zhǔn)格式。文件IFC是一種交換格式,用于不同軟件系統(tǒng)之間交換建筑設(shè)計(jì)和建造中使用的建筑數(shù)據(jù)模型,從而達(dá)到數(shù)據(jù)共享。IFC標(biāo)準(zhǔn)分為4個結(jié)構(gòu)層次,分別為資源層、核心層、交互層和領(lǐng)域?qū)覽13],4個層次共同來完成信息資源的穩(wěn)定。IFC 中運(yùn)用 EXPRESS 語言描述建筑產(chǎn)品數(shù)據(jù)[14]。EXPRESS 是一種標(biāo)準(zhǔn)化數(shù)據(jù)建模語言,其定義在 STEP 國際標(biāo)準(zhǔn)中[15]。EXPRESS語言與其他編程語言不同,更看重對計(jì)算機(jī)大規(guī)模數(shù)據(jù)的可讀性,從而實(shí)現(xiàn)對數(shù)據(jù)信息的描述。
通過BIM建模,導(dǎo)出IFC文件,并對IFC文件進(jìn)行解析,提取出所需要的室內(nèi)幾何信息[16-17]。IFC文件的基礎(chǔ)結(jié)構(gòu)包括項(xiàng)目的基本內(nèi)容、基本空間結(jié)構(gòu)以及幾何表示。項(xiàng)目的基本內(nèi)容主要由IfcProject提供,項(xiàng)目的基本空間結(jié)構(gòu)主要由IfcBuilding提供,幾何表示主要由IfcBuildingElement提供。在IFC文件中,實(shí)體的屬性具有繼承關(guān)系,屬性分為:直接屬性、導(dǎo)出屬性和反屬性。其中直接屬性很直觀的表達(dá)了構(gòu)件信息,導(dǎo)出屬性是通過不同構(gòu)件實(shí)體的屬性來構(gòu)成表達(dá),而反屬性是構(gòu)件可以通過關(guān)聯(lián)實(shí)體從而獲得相關(guān)信息。IFC文件的數(shù)據(jù)部分包含了構(gòu)建模型的坐標(biāo)位置、屬性值、長寬高、空間隸屬關(guān)系等相關(guān)信息。IFC數(shù)據(jù)段中的部分坐標(biāo)信息如下:
#138=IFCCARTESIANPOINT((0.,0.,10800.));
#140=IFCAXIS2PLACEMENT3D(#138,$,$);
#141=IFCLOCALPLACEMENT(#32,#140)
其中#141是對象位置信息(ObjectPlacement),IFCLOCALPLACEMENT(#32,#140)描述了該構(gòu)件的相對位置幾何坐標(biāo),這里幾何坐標(biāo)引用了#32父坐標(biāo)體系。
#140=IFCAXIS2PLACEMENT3D(#138,,);指定了局部坐標(biāo)系的原點(diǎn)位置,符號代替語句中次要信息。#138= IFCCARTESIANPOINT是位置信息,表示((0.,0.,10800.)位置處。
使用IFC解析工具對IFC文件進(jìn)行解析,對所需的室內(nèi)模型構(gòu)件的幾何信息進(jìn)行提取。如圖1為其中一個柱IfcColumn的屬性和地點(diǎn)信息。
圖1 IfcColumn的屬性和地點(diǎn)信息
從屬性中可以看出構(gòu)件的實(shí)體名、類型、標(biāo)簽以及輪廓等。從地點(diǎn)中可以看到構(gòu)件的位置坐標(biāo)、長寬高以及所處的樓層信息等。圖中這個柱子長度為600 mm,寬度為600 mm,高度為3 400 mm。位置坐標(biāo)為(9 082.337 744,-1 837.497 743,10 800)。
獲取建筑環(huán)境的邊界頂點(diǎn)坐標(biāo),柵格平面的長為L=Xmax-Xmin,寬為W=Ymax-Ymin。則柵格平面行數(shù)為i=[L/S],列數(shù)為j=[W/S],S為每個柵格所代表的實(shí)際長寬。將幾何信息映射到柵格平面時(shí),使用構(gòu)件在二維平面圖的起終點(diǎn)坐標(biāo)進(jìn)行映射,對應(yīng)網(wǎng)格屬性為1。(屬性為1代表不可通行,為0代表可通行)。當(dāng)構(gòu)件映射不滿一個柵格時(shí),則補(bǔ)齊這個柵格作為不可行區(qū)域。地圖構(gòu)建過程如圖2所示。
圖2 地圖構(gòu)建過程
A*(A-Star)算法是一種啟發(fā)式搜索,利用啟發(fā)函數(shù)對搜索過程進(jìn)行指導(dǎo),在靜態(tài)環(huán)境下的路徑規(guī)劃, A*算法不但能獲得較短路徑,并且其搜索效率比較高,廣泛應(yīng)用于室內(nèi)機(jī)器人路徑搜索、游戲動畫路徑搜索。A*算法的估價(jià)函數(shù)可以表示為:
f(n)=g(n)+h(n)
(1)
f(n)是從初始狀態(tài)經(jīng)由狀態(tài)n到目標(biāo)狀態(tài)的代價(jià)估計(jì),g(n)是狀態(tài)空間中從初始到狀態(tài)n的實(shí)際代價(jià),h(n)是從狀態(tài)n到目標(biāo)狀態(tài)的最佳路徑的估計(jì)代價(jià)。
傳統(tǒng)A*算法為8鄰域搜索,也就是在該點(diǎn)周圍的8個相鄰柵格方向搜索,使得機(jī)器人的轉(zhuǎn)向方向也被限制于π/4的整數(shù)倍,這樣規(guī)劃出來的路徑轉(zhuǎn)折角度較大。如果轉(zhuǎn)折角度過大,不利于機(jī)器人在室內(nèi)狹窄空間移動,也會使得移動時(shí)間變長,降低了工作效率。因此,將原先的搜索范圍擴(kuò)展至48鄰域搜索如圖3所示,對8個方向上每2個方向(如D、E之間)之間再增加3個方向搜索,由原來的8個方向變?yōu)?2個方向,這樣會使機(jī)器人在方向上有更多選擇,減少轉(zhuǎn)向次數(shù),更加流暢的進(jìn)行作業(yè)。圖4為使用48鄰域搜索的路徑規(guī)劃結(jié)果圖。S為起點(diǎn)位置,D為終點(diǎn)位置,直線所連接的方塊為規(guī)劃的路徑,周圍區(qū)域?yàn)?8鄰域搜索空間。
圖3 A*算法的鄰域搜索空間
圖4 48鄰域搜索結(jié)果圖
傳統(tǒng)A*算法在規(guī)劃路徑時(shí)沒有考慮到機(jī)器人本身的輪廓大小,規(guī)劃出來的路徑容易緊貼墻壁或者障礙物。由于室內(nèi)環(huán)境會有很多門或者相鄰柱體,且隨機(jī)障礙物較多,若按照傳統(tǒng)A*算法規(guī)劃出來的路徑移動,會使得機(jī)器人與障礙物相撞,更有可能損傷機(jī)器人機(jī)身。因此,除了對傳統(tǒng)A*算法在搜索方向上進(jìn)行擴(kuò)展,還需要考慮機(jī)器人安全性,將規(guī)劃出來的路徑進(jìn)行改進(jìn)。
機(jī)器人在移動過程中,將規(guī)劃出來的路徑與障礙物的距離記為s(m),機(jī)器人機(jī)身半徑記d(m),規(guī)定安全距離為0.2 m,當(dāng)s≥d+0.2,則表示規(guī)劃的該路徑可通過,反之,不可通過。
動態(tài)窗口法DWA(dynamic window approach) 作為局部路徑規(guī)劃避障的主要算法[18],能夠接受全局路徑規(guī)劃生成的路徑以及里程計(jì)的信息、地圖的信息,輸出為底盤運(yùn)動的速度信息。算法流程為:根據(jù)機(jī)器人當(dāng)前的速度,計(jì)算出當(dāng)前可采樣的速度范圍,然后對采樣的每一組速度都依據(jù)運(yùn)動模型,模擬一段時(shí)間內(nèi)的路徑。把所有采樣速度生成的路徑都模擬出來后,接著根據(jù)評價(jià)函數(shù)對每一條路徑都打分,然后選取得分最高的一條路徑,那么這條路徑就對應(yīng)了一組采樣速度,就把這一組速度作為機(jī)器人下一時(shí)刻的速度,那機(jī)器人就會以新的速度繼續(xù)移動,這時(shí)候算法就會進(jìn)入新的循環(huán),以新的速度計(jì)算新的采樣速度范圍,然后模擬路徑,再次根據(jù)得分選取路徑和速度,把選取到的速度用于下一個時(shí)刻,以這種流程不斷循環(huán)下去。所以這些模擬路徑是不斷的在變化,因?yàn)樵诓粩嗟倪M(jìn)行采樣、模擬、評價(jià)再采樣,一直刷新模擬的路徑,那機(jī)器人就會不斷的調(diào)整自身的速度和方向,往目標(biāo)點(diǎn)移動,從而實(shí)現(xiàn)導(dǎo)航的功能。
3.1.1 機(jī)器人運(yùn)動學(xué)模型
設(shè)機(jī)器人在全向運(yùn)動過程中,在X方向的速度為Vx,在Y方向的速度為Vy,角速度為w。若將機(jī)器人在相鄰時(shí)刻兩點(diǎn)之間的軌跡看成直線,那么在△t的時(shí)間里,運(yùn)動模型可表示為:
由X方向速度產(chǎn)生的機(jī)器人的坐標(biāo)變化為:
△xx=vx△tcosθt
(2)
△yx=vx△tsinθt
(3)
由Y方向速度產(chǎn)生的機(jī)器人的坐標(biāo)變化為:
△xy=-vy△tsinθt
(4)
△yx=vy△tcosθt
(5)
機(jī)器人下個狀態(tài)的位置:
x=x+vx△tcosθt-vy△tsinθt
(6)
y=y+vx△tsinθt+vy△tcosθt
(7)
θt=θt+w△t
(8)
3.1.2 速度采樣
依據(jù)機(jī)器人的運(yùn)動模型,通過采樣多組速度,模擬出一段時(shí)間內(nèi)的路徑。
1)機(jī)器人最大速度與最小速度限制。
vm={(v,w)|v∈[vmin,vmax]∧w∈[wmin,wmax]}
(9)
式中,Vm為機(jī)器人速度;v為線速度;w為角速度。
2)機(jī)器人加速度限制。電機(jī)的力矩是有限的,電機(jī)性能也會有所影響,使得機(jī)器人移動時(shí)的加速度不能在短時(shí)間內(nèi)無限大。所以加速度是限制了采樣速度范圍的一個因素。因此,加速度限制范圍為:
Vd={(v,w)|v∈[vc-vb△t,vc+va△t]∧w∈
[wc-wb△t,wc+wa△t]}
(10)
式中,Vd為機(jī)器人受加速度限制后的速度;Vc為當(dāng)前線速度;Va為最大線加速度;Vb為最大線減速度;Wc為當(dāng)前角速度;Wa為最大角加速度;Wb為最大角減速度。
3)預(yù)留安全距離。當(dāng)有障礙物時(shí),機(jī)器人不是立馬能夠停下來,因此需要預(yù)留安全距離范圍為:
Va={(v,w)|v≤(2dist(v,w)vb)1/2,w≤
(2dist(v,w)wb)1/2}
(11)
式中,dist(v,w)為機(jī)器人與障礙物之間的距離。
3.1.3 評價(jià)函數(shù)
在利用采樣速度模擬了很多路徑以后,對速度的選擇需要使用評價(jià)函數(shù)來評估軌跡的好壞[19-20]。評價(jià)函數(shù)用以下表示:
G(v,w)=σ(α·heading(v,w)+β·dist(v,w)+
γ·velocity(v,w))
(12)
式中,heading(v,w)為方位角評價(jià)函數(shù),指的是機(jī)器人與目標(biāo)之間的角度差,角度差越小,得分越高;dist(v,w)為機(jī)器人與最近障礙物之間的距離,距離越遠(yuǎn),得分越高;velocity(v,w)為軌跡對應(yīng)的速度大小,速度越大,得分越高。
為了避免這三項(xiàng)不同類別的得分基數(shù)相差太大,影響結(jié)果。比如方位角的角度差得分在0~180之間,而障礙物距離得分可能都在5以內(nèi),這樣就容易掩蓋了障礙物距離的影響。因此,需要對這3個方面的得分進(jìn)行歸一化處理,把每一項(xiàng)的得分占比算出來再相加。歸一化如下:
(13)
(14)
(15)
在歸一化處理后,對每一部分賦權(quán)重,不同的權(quán)重值會影響機(jī)器人選取的路徑。將這3方面綜合起來的物理意義就是使得機(jī)器人避開障礙物,朝著目標(biāo)點(diǎn)以較快的速度移動。
將全局路徑規(guī)劃與局部路徑規(guī)劃相結(jié)合,先由全局路徑規(guī)劃器規(guī)劃出一條大致的路徑,接著局部路徑規(guī)劃器又會將它劃分為許多小區(qū)段,再完成整個局部路徑規(guī)劃。相當(dāng)于是把一個總目標(biāo)分成很多個小目標(biāo)然后依次達(dá)成。這樣做的好處是在全局路徑規(guī)劃的時(shí)候,對地圖保存過的障礙物進(jìn)行避障,而在局部路徑規(guī)劃的時(shí)候,會對新增的障礙物信息也進(jìn)行避障。并且它支持對動態(tài)的障礙物進(jìn)行避障。本文算法的流程如圖5所示。
圖5 算法流程圖
在獲取到的樓層地圖上進(jìn)行短距離和長距離兩組路徑規(guī)劃,每一組實(shí)驗(yàn)中都采用傳統(tǒng)A*算法、改進(jìn)A*算法、改進(jìn)A*與DWA的融合算法(無障礙物)、改進(jìn)A*與DWA的融合算法(有障礙物)來進(jìn)行路徑規(guī)劃。第一組實(shí)驗(yàn)的起點(diǎn)坐標(biāo)為(10,28),終點(diǎn)坐標(biāo)為(27,14),動態(tài)障礙物設(shè)置為2個,坐標(biāo)為(14,27)、(23,20),結(jié)果如圖6和圖7所示;第二組實(shí)驗(yàn)的起點(diǎn)坐標(biāo)為(15,16),終點(diǎn)坐標(biāo)為(89,27),動態(tài)障礙物設(shè)置為3個,坐標(biāo)為(32,22)、(83,22)、(84,22),結(jié)果如圖8和圖9所示。同時(shí),記錄了每組實(shí)驗(yàn)中各算法路徑規(guī)劃的運(yùn)行時(shí)間和路徑長度,對傳統(tǒng)A*算法與改進(jìn)A*算法的累計(jì)轉(zhuǎn)折角度進(jìn)行了計(jì)算,結(jié)果如表1~4所示。
圖6 第一組路徑傳統(tǒng)與改進(jìn)算法軌跡圖
圖7 第一組路徑融合算法軌跡圖
圖9 第二組路徑融合算法軌跡圖
表1 第一組路徑傳統(tǒng)與改進(jìn)算法的性能比較
由圖6和圖8可以看出:傳統(tǒng)的A*算法在規(guī)劃路徑時(shí),路徑與墻或門的距離較近,安全性比較低。而使用改進(jìn)的A*算法考慮了機(jī)器人安全性的問題,增加了路徑與障礙物的安全距離,使得機(jī)器人不再靠著墻壁移動,確保了機(jī)器人能夠順利通過。由表1表2 可知,改進(jìn)的A*算法比傳統(tǒng)A*算法在運(yùn)行時(shí)間上快了2倍以上,由于節(jié)點(diǎn)轉(zhuǎn)折角度差的減小,改進(jìn)后的兩組路徑長度也都相對的優(yōu)化。其次,第一組仿真實(shí)驗(yàn)傳統(tǒng)算法累計(jì)轉(zhuǎn)折角度為225°,改進(jìn)算法為162°,第二組仿真實(shí)驗(yàn)原始算法累計(jì)轉(zhuǎn)折角度為225°,改進(jìn)算法為128°,改進(jìn)的A*算法優(yōu)化了搜索角度,比傳統(tǒng)A*算法的累計(jì)轉(zhuǎn)折角度減少了28%以上。綜合來看,改進(jìn)后的算法在路徑規(guī)劃在性能上都有進(jìn)一步的改善,且搜索效率有所提升。
表2 第二組路徑傳統(tǒng)與改進(jìn)算法的性能比較
圖8 第一組路徑傳統(tǒng)與改進(jìn)算法軌跡圖
采用改進(jìn)A*與DWA的融合算法規(guī)劃的路徑如圖7、9所示,分別為無障礙物和有障礙物兩種情況。動態(tài)窗口法的參數(shù)設(shè)置如下:機(jī)器人運(yùn)動學(xué)模型間隔時(shí)間為0.1 s,最大速度為1 m/s,最大角加速度為20°/s,速度分辨率為0.01 m/s,角加速度分辨率為1°/s,加速度為0.2 m/s2,角加速度為50°/s2。評價(jià)函數(shù)參數(shù)為:α=0.2,β=0.2,γ=0.1,預(yù)測時(shí)間周期為3.0 s。改進(jìn)A*與DWA的融合算法的配合過程就是改進(jìn)的A*算法出一條大致的路徑,然后DWA算法會把改進(jìn)的A*算法規(guī)劃的路徑分割成很多段,大目標(biāo)分割成很多小目標(biāo),然后用DWA算法依次導(dǎo)航到每一個小目標(biāo)點(diǎn)。當(dāng)沒有障礙物時(shí),融合算法比改進(jìn)的A*算法的路徑更加連續(xù),平滑度更高;當(dāng)有動態(tài)障礙物出現(xiàn)后,融合算法能夠及時(shí)實(shí)現(xiàn)避障,由表3所知,無障礙物時(shí),使用融合算法第一組路徑規(guī)劃整個算法用時(shí)30.99 s,路徑長度為13.053 6 m;當(dāng)出現(xiàn)兩個障礙物時(shí),整個算法用時(shí)31.89 s,路徑長度變?yōu)?4.402 6 m。由表4所知,無障礙物時(shí),使用融合算法第二組路徑規(guī)劃整個算法用時(shí)87.35 s,路徑度為48.241 8 m;當(dāng)出現(xiàn)3個障礙物時(shí),整個算法用時(shí)89.13 s,路徑長度變?yōu)?9.872 5 m。因此隨著障礙物的出現(xiàn),運(yùn)行時(shí)間和路徑長度也理應(yīng)有所增加。綜合來說,融合算法規(guī)劃的路徑平滑度更好,并且能及時(shí)避開出現(xiàn)的隨機(jī)障礙物,使得機(jī)器人在室內(nèi)場所的移動更加安全。
表3 第一組路徑融合算法的性能比較
表4 第二組路徑融合算法的性能比較
圖10為選取了第一組短路徑下傳統(tǒng)A*算法和融合算法的控制參數(shù)對比,機(jī)器人在傳統(tǒng)A*算法下的線速度和角速度變化范圍較大,變化不連續(xù),這樣會不利于機(jī)器人的移動,長時(shí)間會損傷機(jī)器人機(jī)身。而在融合算法下的線速度變化波動較小,比較平穩(wěn),并且角速度的曲率變化比較平滑連續(xù),更符合機(jī)器人的動力學(xué)控制,也會使得機(jī)器人整個行駛過程變得流暢。
圖10 第一組路徑控制參數(shù)對比
通過BIM技術(shù)提取建筑空間信息,節(jié)省了機(jī)器人獲取室內(nèi)環(huán)境的時(shí)間,同時(shí)也提高了地圖構(gòu)建的效率。針對移動機(jī)器人路徑規(guī)劃問題,對傳統(tǒng)A*算法進(jìn)行了改進(jìn),通過仿真結(jié)果得知累計(jì)轉(zhuǎn)折角度減少了28%以上,運(yùn)行時(shí)間也快了2倍。同時(shí),設(shè)置了路徑與障礙物的安全距離,保證了機(jī)器人的安全性。此外,為了解決移動機(jī)器人行駛過程中遇到動態(tài)障礙物的問題,將改進(jìn)A*的算法和動態(tài)窗口法相結(jié)合,并對融合算法也進(jìn)行了實(shí)驗(yàn)仿真和性能對比,驗(yàn)證了本文的融合算法路徑連續(xù)性更高,達(dá)到了避障能力,更具有環(huán)境適用性。