摘? 要:家用掃地機(jī)器人能夠憑借一定的人工智能實(shí)現(xiàn)路徑規(guī)劃,自主地完成房間所有區(qū)域的地面清掃工作。清潔效率是家用掃地機(jī)器人性能的重要指標(biāo),盡量用最少的時(shí)間完成全屋地面的清潔工作。為了提高清潔效率,對(duì)路徑規(guī)劃有一定性能要求。文章實(shí)現(xiàn)了一種有效提升清潔效率的方法,其由三種方法共同組成,分別為虛擬分區(qū)遞歸弓字型方法、小區(qū)域困住檢測及脫困方法、導(dǎo)航快速沿邊繞障方法。
關(guān)鍵詞:掃地機(jī)器人;路徑規(guī)劃;清潔效率
中圖分類號(hào):TP242? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):2096-4706(2023)24-0157-05
Research on Methods for Improving Cleaning Efficiency of Household Sweeping Robot
LI Ming
(Amicro Semiconductor Co., Ltd., Zhuhai? 519075, China)
Abstract: Household sweeping robots can use certain artificial intelligence to achieve path planning and independently complete floor cleaning work in all areas of the room. Cleaning efficiency is an important indicator of the performance of household sweeping robots, and it is recommended to complete the cleaning work of the entire house floor in the shortest possible time. In order to improve cleaning efficiency, there are certain performance requirements for path planning. This paper implements an effective method to improve cleaning efficiency, which consists of three methods: virtual partition recursive bow shaped method, small area trapping detection and escape method, and navigation fast edge avoidance method.
Keywords: sweeping robot; path planning; cleaning efficiency
0? 引? 言
清掃機(jī)器人能夠自主地完成地面的清掃工作,目前已經(jīng)得到非常廣泛的應(yīng)用[1]。我國家用掃地機(jī)市場正處于快速增長階段,2016—2020年,中國掃地機(jī)器人零售量由274萬臺(tái)增長至654萬臺(tái),掃地機(jī)器人的市場規(guī)模由38億元增長至94億元。我國掃地機(jī)器人產(chǎn)業(yè)發(fā)展較晚,但在產(chǎn)品需求上呈現(xiàn)快速增長態(tài)勢[2]。
清潔效率是家用掃地機(jī)器人性能的重要指標(biāo),當(dāng)前主流掃地機(jī)器人清潔效率為0.7平方米/分鐘左右[3]。這對(duì)掃地機(jī)器人的路徑規(guī)劃有一定的挑戰(zhàn),路徑規(guī)劃由三個(gè)行為組成,分別為:弓字型清掃行走,用于清掃空曠區(qū)域;沿邊清掃行為,用于清掃房間的邊邊角角;導(dǎo)航行為,從地圖的一個(gè)坐標(biāo)點(diǎn)走到另一個(gè)坐標(biāo)點(diǎn)的方法。
為了提高清潔效率,對(duì)路徑規(guī)劃的三種行為都有一定的性能要求:
1)弓字型清掃行為,不能重復(fù)清掃,不能過多穿插[4]。而這主要取決于清掃順序的策略,實(shí)際家庭戶型千差萬別,先清掃那里后清掃那里的清掃順序?qū)η鍧嵭视绊懞艽?。清掃順序策略選擇不好,導(dǎo)致掃地機(jī)器人,穿插,重復(fù)掃,嚴(yán)重降低清潔效率。
2)沿邊清掃行為,用于清掃房間的邊邊角角。家庭環(huán)境路況復(fù)雜,如窄道,一桌六椅下面復(fù)雜的凳子腿,掃地機(jī)器人沿邊進(jìn)去后,被困在小區(qū)域里無法脫離的概率極高。而這種情況,會(huì)導(dǎo)致掃地機(jī)器人清潔效率低下,且容易報(bào)錯(cuò)提前結(jié)束清掃,出現(xiàn)漏掃。
3)導(dǎo)航行為要流暢,碰到障礙物時(shí),能夠快速繞障,節(jié)省時(shí)間提高清潔效率。
針對(duì)上述三種行為的性能要求,本文分別提出了一種有效優(yōu)化方法,分別為虛擬區(qū)域遞歸選擇未清掃區(qū)域的弓字型方法;沿邊被困檢測與脫困方法;導(dǎo)航高效繞障方法。能夠有效提高掃地機(jī)器人的清潔效率。
1? 虛擬分區(qū)遞歸的弓字型清掃
清掃規(guī)劃弓字型流程:啟動(dòng)弓字型,弓字型結(jié)束,搜索未清掃區(qū)域,選擇未清掃區(qū)域,導(dǎo)航到目標(biāo)未清掃區(qū)域,再次啟動(dòng)弓字型,循環(huán)往復(fù),直到整個(gè)地圖搜索不到未清掃區(qū)域。
1.1? 新區(qū)域選擇時(shí)遇到的困境
一次搜索未清掃區(qū)域,搜索出多個(gè)結(jié)果,該選擇那個(gè)未清掃區(qū)域作為最優(yōu),一直是業(yè)界的一個(gè)難題。通用的做法是選擇最近的,有直線距離最近和導(dǎo)航距離最近兩種策略。但無論采用哪種策略都存在一定的問題。如直線最近策略沒有考慮中間是否有障礙物的情況,可能導(dǎo)航距離很遠(yuǎn)。導(dǎo)航距離最近,但沒有考慮清掃穿插的問題,每次工字型結(jié)束,選擇導(dǎo)航距離最近會(huì)使清掃規(guī)劃無規(guī)律,同一個(gè)環(huán)境相同地方啟動(dòng)清掃,每次清掃,清掃路徑都不相同,清掃穿插多,清掃規(guī)劃無規(guī)律。
1.2? 解決方法
1.2.1? 虛擬分區(qū)的建立
每次工字型清掃過程中,記錄坐標(biāo)的最大、最小值。用此最大、最小值設(shè)置為一個(gè)對(duì)應(yīng)于此次工字型清掃的虛擬分區(qū)virtual_partition。
搜索到的未清掃區(qū)域起始點(diǎn),位于那個(gè)虛擬分區(qū)內(nèi),就存儲(chǔ)到那個(gè)虛擬區(qū)域中。將所有搜索到未清掃區(qū)域,都存儲(chǔ)到對(duì)應(yīng)的虛擬墻區(qū)域中。
虛擬分區(qū)數(shù)據(jù)結(jié)構(gòu)max_x, max_y,min_x,min_y, index和一個(gè)未清掃區(qū)域鏈表noclean_list七個(gè)數(shù)據(jù)組成,max_x, max_y,min_x,min_y表示此區(qū)域在柵格地圖的邊界,index代表id號(hào)(id號(hào)越大代表虛擬分區(qū)virtual_partition生成的時(shí)間越靠后)。
用隊(duì)列virtual_partition_queue來存儲(chǔ)虛擬分區(qū),只在隊(duì)列頭增加、刪除虛擬區(qū)域。
1.2.2? 實(shí)現(xiàn)邏輯
一次弓字型結(jié)束,搜索出未清掃區(qū)域時(shí),進(jìn)行注冊(cè)新的虛擬區(qū)域。如圖1所示。
所有搜索到未清掃區(qū)域存儲(chǔ)在noclean_area_list中。
遍歷noclean_area_list中的未清掃區(qū)域noclean_area:
如果其已經(jīng)在虛擬分區(qū)隊(duì)列virtual_partition_queue某個(gè)virtual_partition的noclean_list中,則跳過。
如果其在此次弓字型產(chǎn)生的虛分區(qū)virtual_partition內(nèi),則將此virtual_partition插入virtual_partition_queue隊(duì)列頭中,并將此未掃區(qū)域noclean_area插入到此虛擬分區(qū)virtual_partition的noclean_list中。
否則遍歷virtual_partition_queue中所有virtual_partition,從前往后,判斷此noclean_area是否位于一個(gè)virtual_partition區(qū)域內(nèi),將此noclean_area注冊(cè)到這個(gè)virtual_partition的中noclean_list。只注冊(cè)到第一個(gè)找到的virtual_partition中。
1.2.3? 未清掃區(qū)域的選擇
虛擬區(qū)域隊(duì)列virtual_partition_queue從前往后遍歷,查看virtual_partition其noclean_list是否有noclean_area_list中的未清掃區(qū)域noclean_area。如果有,則第一個(gè)找的virtual_partition為最優(yōu)分區(qū)。
最優(yōu)分區(qū)的noclean_list里,如果只有一個(gè)noclean_area在noclean_area_list中,則此noclean_area為此次選擇的未清掃區(qū)域;如果有多個(gè)noclean_area在noclean_area_list中,則看那個(gè)noclean_area離當(dāng)前點(diǎn)的導(dǎo)航路徑最近,選導(dǎo)航路徑最近的noclean_area為此次選擇的未清掃區(qū)域。
當(dāng)一個(gè)虛擬分區(qū)virtual_partition,沒有搜索到新的未清掃區(qū)域noclean_area時(shí),則此虛擬分區(qū)從隊(duì)列中virtual_partition_queue刪除。
2? 沿邊被困檢測與脫困
在沿邊清掃行為行走過程中,掃地機(jī)器人容易被困在一些復(fù)雜區(qū)域,如椅子桌子下面。
一個(gè)好的沿邊行走必須具備以下兩個(gè)特點(diǎn):
1)機(jī)器人一直貼著障礙物行走,也就是保證貼邊。
2)無論障礙物是規(guī)則的一面墻,還是不規(guī)則的復(fù)雜障礙物,都能快速地走過。
關(guān)于特點(diǎn)2),掃地機(jī)器人遇到障礙物時(shí),要根據(jù)障礙物的方位,選擇一個(gè)比較大的角度旋轉(zhuǎn)以避開這個(gè)障礙物,使掃地機(jī)器人的邊挨著這個(gè)障礙物。
但在一些復(fù)雜環(huán)境,如四周都是障礙物,只有一個(gè)比掃地機(jī)器人機(jī)身略寬的出口時(shí),沿邊采用特點(diǎn)2)的轉(zhuǎn)角方式,則很難走出來,導(dǎo)致一直被困住這個(gè)小區(qū)域。典型的場景,如家里的桌子、椅子下面。
一種沿邊脫困方法,其檢測出掃地機(jī)器人沿邊被困住時(shí),則強(qiáng)制沿邊遇到障礙物時(shí)一直都旋轉(zhuǎn)比較小的角度,直到掃地機(jī)器人脫離這個(gè)區(qū)域。
沿邊加此脫困方法后,既可以快速地貼著障礙物行走,又不會(huì)被困在小的復(fù)雜區(qū)域里。
2.1? 沿邊困住檢測
建立一個(gè)先進(jìn)先出的buffer,用來記錄沿邊經(jīng)過的柵格地圖坐標(biāo)。并每隔一段時(shí)間,檢測buffer中有多少個(gè)新的柵格點(diǎn)加入。如果新加入的柵格坐標(biāo)點(diǎn),比較少,則認(rèn)為掃地機(jī)器人被困在一個(gè)小區(qū)域。如果新加入的柵格坐標(biāo)點(diǎn),比較多,則認(rèn)為掃第機(jī)器人已經(jīng)脫困。
2.1.1? buffer更新
buffer中實(shí)時(shí)記錄了沿邊最新經(jīng)過的柵格坐標(biāo)點(diǎn),如果buffer大小設(shè)為80,則記錄的是最新的80個(gè)沿邊坐標(biāo)點(diǎn)。buffer越大能夠判斷被困的區(qū)域越大。
用point_num變量,記錄了buffer中記錄過的坐標(biāo)點(diǎn)的個(gè)數(shù)。實(shí)時(shí)獲取機(jī)器當(dāng)前柵格坐標(biāo)(x,y),判斷其是否已經(jīng)在buffer中,如果不在,則將其放在buffer首位置,其他數(shù)據(jù)順序后移,末尾數(shù)據(jù)被移除,point_num變量加1。
2.1.2? 沿邊角度計(jì)算
啟動(dòng)沿邊后,掃地機(jī)器人每個(gè)tick周期(如10 ms)累加一次陀螺儀在這個(gè)tick周期內(nèi)旋轉(zhuǎn)的角度。則這個(gè)累加值記錄了掃地機(jī)器人沿邊轉(zhuǎn)過的總角度。
2.1.3? 困住判斷
每隔一段時(shí)間,根據(jù)buffer中新加入坐標(biāo)點(diǎn)的個(gè)數(shù)及沿邊轉(zhuǎn)過的總角度,來判斷樣機(jī)是否被困住。
每隔一個(gè)時(shí)間間隔,檢測一次,我們?cè)O(shè)置20 s檢測一次。
20 s內(nèi),新加入的坐標(biāo)點(diǎn)小于5則認(rèn)為被困住,否則為沒有被困。
20 s內(nèi),掃地機(jī)器人轉(zhuǎn)過的角度大于360°或小于-360°,且新加入的坐標(biāo)點(diǎn)小于8時(shí),認(rèn)為被困住,否則為沒有被困。
2.2? 脫困設(shè)計(jì)
當(dāng)機(jī)器人被困住時(shí),沿邊無論障礙物位于掃地機(jī)器人的什么方向,每次碰撞都必須以小角度避開障礙物。直到機(jī)器人脫困。
3? 導(dǎo)航繞障
機(jī)器人導(dǎo)航,是指機(jī)器人從地圖的一個(gè)坐標(biāo)點(diǎn)走到另一個(gè)坐標(biāo)點(diǎn)的方法,一般是先從地圖上搜索一條路徑,然后根據(jù)這條路徑行走,直到到達(dá)目標(biāo)點(diǎn)。然而由于地圖精度不夠高,地圖障礙物標(biāo)記不夠準(zhǔn)確,以及導(dǎo)航機(jī)器人跟隨路徑不夠準(zhǔn)確等因素影響。機(jī)器人導(dǎo)航過程中經(jīng)常會(huì)碰撞到障礙物。如何快速越過這些障礙物一直都是機(jī)器人導(dǎo)航過程中的一個(gè)難點(diǎn)。本方法利用沿邊清掃行為實(shí)現(xiàn)導(dǎo)航快速越障。
沿邊清掃行為即器人沿著障礙物的邊行走。分為左沿邊和右沿邊,左沿邊機(jī)器人沿著障礙物的邊做順時(shí)針運(yùn)動(dòng),右沿邊機(jī)器人沿著障礙物的邊做逆時(shí)針運(yùn)動(dòng)。
3.1? 沿邊方向計(jì)算
選擇沿邊方向?qū)τ趯?dǎo)航越障很重要。選對(duì)了方向,導(dǎo)航可以快速越障;選錯(cuò)了方向機(jī)器人反而與正確的路徑反向運(yùn)動(dòng),越走離目標(biāo)點(diǎn)越遠(yuǎn)。
3.1.1? 選取碰撞點(diǎn)
世界坐標(biāo)系為(XOY),機(jī)器人坐標(biāo)系為(X'O'Y')。機(jī)器人的中心點(diǎn)為機(jī)器人坐標(biāo)系的原點(diǎn)。
假如機(jī)器人左碰撞坐標(biāo),在機(jī)器人坐標(biāo)系中坐標(biāo)為(-2,2)。假如機(jī)器人右碰撞坐標(biāo),在機(jī)器人坐標(biāo)系中坐標(biāo)為(2,2)。假如機(jī)器人前碰撞坐標(biāo),在機(jī)器人坐標(biāo)系中坐標(biāo)為(0,2)。假設(shè)機(jī)器人在世界坐標(biāo)系的坐標(biāo)為(a,b),角度為θ。
機(jī)器坐標(biāo)轉(zhuǎn)換為世界坐標(biāo)的公式為:
x = x' · cos(-θ) + y' · sin(-θ) + a
y = y' · cos(-θ) - x' · sin(-θ) + b
3.1.2? 預(yù)測沿邊路徑
根據(jù)地圖障礙物的形狀,預(yù)測出沿邊所走出的路徑。如圖2所示。
3.1.3? 選取沿邊方向
根據(jù)預(yù)測的左右沿邊路徑,與導(dǎo)航路徑作對(duì)比,來選取沿邊方向:
1)選取機(jī)器人前面三個(gè)拐點(diǎn):柵格地圖的導(dǎo)航路徑用拐點(diǎn)來描述。路徑在柵格地圖里是多條線條連接而成的,機(jī)器人導(dǎo)航過程中只需要朝路徑中的下個(gè)拐點(diǎn)前進(jìn)即可。對(duì)所有拐點(diǎn)進(jìn)行編號(hào),起始點(diǎn)編號(hào)為0,后面的拐點(diǎn)編號(hào)依次累加,則終點(diǎn)始終編號(hào)最大。
設(shè)置一個(gè)距離門限值dist。以機(jī)器人當(dāng)前坐標(biāo)為中心,距離小于dist的所有拐點(diǎn)中選擇編號(hào)最大的拐點(diǎn)為機(jī)器人前面的目標(biāo)拐點(diǎn)。機(jī)器人將朝著這個(gè)拐點(diǎn)前進(jìn)。上一個(gè)目標(biāo)拐點(diǎn)設(shè)為已經(jīng)走過的拐點(diǎn)。如果dist內(nèi)只有一個(gè)目標(biāo)拐點(diǎn),則此目標(biāo)拐點(diǎn)設(shè)為走過的拐點(diǎn),它的下一個(gè)拐點(diǎn)設(shè)為目標(biāo)拐點(diǎn)。如果dist內(nèi)一個(gè)拐點(diǎn)也沒有,則選取已經(jīng)走過拐點(diǎn)的下一個(gè)拐點(diǎn)作為目標(biāo)拐點(diǎn)。以目標(biāo)拐點(diǎn)作為第一個(gè)點(diǎn),選取它及其他后面的兩個(gè)拐點(diǎn),作為機(jī)器人前面的三個(gè)拐點(diǎn)。如果其已經(jīng)是目標(biāo)點(diǎn),或后面兩個(gè)存在目標(biāo)點(diǎn),則到目標(biāo)點(diǎn)為止,能選幾個(gè)選幾個(gè)。
2)沿邊方向選?。河?jì)算沿邊預(yù)測路徑上的每個(gè)點(diǎn)到導(dǎo)航路徑機(jī)器人前面三個(gè)拐點(diǎn)的距離。然后再計(jì)算出這三個(gè)距離的和。然后再將沿邊預(yù)測路徑上的每個(gè)點(diǎn)計(jì)算出的距離和相加得到總的距離。這個(gè)總的距離表示沿邊路徑與導(dǎo)航路徑的差別。值越小表示差別越小。因此沿邊方向選擇這個(gè)值小的預(yù)測沿邊路徑方向。
3.2? 越障結(jié)束判斷
前面已經(jīng)講述了機(jī)器人前面三個(gè)拐點(diǎn)的選取方法。我們基于這三個(gè)拐點(diǎn)來判斷越障是否結(jié)束。
從三個(gè)拐點(diǎn)中選取最佳目標(biāo)點(diǎn)。設(shè)置一個(gè)距離門限值dist,例如設(shè)置6個(gè)柵格距離。計(jì)算每個(gè)拐點(diǎn)到當(dāng)前點(diǎn)的距離,從中找出距離最接近門限值dist的拐點(diǎn)作為最佳拐點(diǎn)。
計(jì)算當(dāng)前點(diǎn)到最佳拐點(diǎn)之間是否有障礙物。計(jì)算機(jī)器人當(dāng)前點(diǎn)到最佳拐點(diǎn)的直接距離上是否地圖上有標(biāo)記障礙物。如果地圖沒有標(biāo)記障礙物則認(rèn)為越障成功,退出沿邊,切回導(dǎo)航。如果地圖有標(biāo)記障礙物,則繼續(xù)沿邊。
4? 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)機(jī)器采用公司量產(chǎn)的視覺SLAM掃地機(jī)器人。
測試環(huán)境采用IEC標(biāo)準(zhǔn)測試房。測試區(qū)域主要由房體內(nèi)尺寸4米× 5米× 2.5米的房體拼裝而成。房體測試地板由松木板拼接組成。房體頂部由方塊型天花板裝飾面成。房體計(jì)量部分:房體整機(jī)尺寸、(長×寬×高)房體內(nèi)部燈光照度、色溫部分。內(nèi)部模擬家具分布擺放食品柜、桌子、椅子、沙發(fā)、開隔柜、落地?zé)?、電源線、障礙、加熱器基板地、地毯、網(wǎng)格、壓線條等實(shí)際測試場地模擬物品[5]。
4.1? 優(yōu)化前
位置一啟動(dòng)清掃,清掃完回座。測試一次,覆蓋率89.4,清掃時(shí)間32.23分鐘,如圖3所示。位置二,啟動(dòng)清掃,清掃完回原點(diǎn)。測試一次,覆蓋率87.76,清掃時(shí)間35分鐘,如圖4所示。位置三,啟動(dòng)清掃,清掃完回座。測試一次,覆蓋率87.95,清掃時(shí)間31.16分鐘,如圖5所示。
三次測試,覆蓋率87到89,清掃時(shí)間在31到35分。平均清潔效率:20平方米/ 33.21 = 0.60平方米/分鐘。如表1所示。
4.2? 優(yōu)化后
位置一,啟動(dòng)清掃,清掃完回座。測試一次,覆蓋率96,清掃時(shí)間26.52分鐘,如圖6所示。位置二,啟動(dòng)清掃,清掃完回原點(diǎn)。測試一次,覆蓋率82.65,清掃時(shí)間24.46分鐘,如圖7所示。位置三,啟動(dòng)清掃,清掃完回座。測試二次。覆蓋率85.59,清掃時(shí)間26.53分鐘,如圖8所示。
三次測試,覆蓋率82到96之間,清掃時(shí)間24到26分。平均清潔效率:20平方米/ 25.84 = 0.77平方米/分鐘。如表2所示。
4.3? 結(jié)果分析
優(yōu)化前,平均清潔效率為0.60平方米/分鐘,平均覆蓋率為88.37%。優(yōu)化后,平均清潔效率為0.77平方米/分鐘,平均覆蓋率為88.08%。因此,在覆蓋率基本不變的情況下,清潔效率有顯著提升。
5? 結(jié)? 論
本文針對(duì)家用掃地機(jī)器人路徑規(guī)劃三個(gè)行為的性能要求,分別提出了各自的優(yōu)化方法,以提高清潔效率。通過IEC覆蓋率標(biāo)準(zhǔn)測試房對(duì)比測試,證明當(dāng)前的優(yōu)化方法在基本不犧牲覆蓋率的情況下,對(duì)清潔效率有顯著提升。
參考文獻(xiàn):
[1] 張超.智能清掃機(jī)器人設(shè)計(jì)及其路徑規(guī)劃的研究 [D].哈爾濱:哈爾濱工業(yè)大學(xué),2012.
[2] 2022年中國掃地機(jī)器人行業(yè)全景圖譜 [R].北京:前瞻產(chǎn)業(yè)研究院,2021.
[3] 賀承宇.清掃機(jī)器人的路徑規(guī)劃與避障算法研究 [D].黑龍江省:哈爾濱理工大學(xué),2021.
[4] 王磊磊.自動(dòng)清掃車視覺SLAM與路徑規(guī)格 [D].貴陽:貴州大學(xué),2023.
[5] INTERNATIONAL STANDARD:IEC/ASTM 62885-7 [EB/OL].[2023-04-11].https://www.doc88.com/p-18273699628563.html.
作者簡介:李明(1983—),男,漢族,山西大同人,中級(jí)職稱,碩士,研究方向:掃地機(jī)器人、清掃規(guī)劃及SLAM定位與建圖。