本發(fā)明屬于顯示投影技術(shù)領(lǐng)域,具體涉及一種基于3d掃描的slam方法的設(shè)計。
背景技術(shù):
在傳統(tǒng)的顯示系統(tǒng)中通常只使用一個顯示設(shè)備,這樣的顯示畫面內(nèi)容較少,覆蓋范圍也很小。采用多臺投影機分割顯示一個較大的畫面能夠較好的解決上面的問題。每個投影機各自顯示各自的畫面,投影機之間按照整體畫面的需要按照一定的規(guī)則相隔排列。根據(jù)投影機擺放的位置,可以做出3面的環(huán)幕、cave系統(tǒng)等。但是由于投影機顯示的原理,多個投影機之間經(jīng)常會出現(xiàn)重疊區(qū)域,造成顯示上的異常,如重影、亮帶。要解決重疊區(qū)域的問題,可以采用購買更加專業(yè)可調(diào)節(jié)性更強的硬件的辦法,也可以采用軟件去重疊的方式。采用硬件的方式成本太高,而且對手工操作的要求很高,而且很難做到完全無重疊。采用純軟件的方式雖然能夠?qū)⒅丿B區(qū)域的亮度調(diào)整成跟非重疊區(qū)域基本一致,但還是存在重影的問題,而且在切分畫面時會出現(xiàn)較大的畫面延遲。
近年來,智能機器人技術(shù)在世界范圍內(nèi)得到了大力發(fā)展,在大多數(shù)場合中,研究機器人會碰到一個基礎(chǔ)性的困難,那就是定位和建圖,即slam技術(shù)。與slam密切相關(guān)的就是傳感器,傳感器分為激光傳感器和視覺傳感器兩大類,后者由于價格便宜而得到廣泛的應(yīng)用。視覺slam主要分為三大類:單目、雙目(或多目)、rgbd。一個slam系統(tǒng)分為四個模塊(除去傳感器數(shù)據(jù)讀取):視覺里程計vo、后端、建圖、回環(huán)檢測。視覺里程計模塊用于估計兩個時刻機器人的相對運動,即在歐氏空間里估計一個三維空間的變換矩陣,求解這個矩陣可以分為基于特征的方法和不使用特征的直接方法?;谔卣鞯姆椒?,首先提取圖像中的特征(如harris角點、sift、surf、orb),然后根據(jù)兩幅圖的特征匹配,計算相機的變換矩陣。直接方法把圖像中的所有像素寫進一個位姿估計方程,采用迭代最近鄰icp等算法,求出幀間相對運動,如svo和lsd-slam。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是為了解決現(xiàn)有技術(shù)中采用多臺投影機分割顯示一個較大的畫面時,投影機之間經(jīng)常會出現(xiàn)重疊區(qū)域,造成顯示上的異常的問題,提出了一種基于3d掃描的slam方法。
本發(fā)明的技術(shù)方案為:一種基于3d掃描的slam方法,包括以下步驟:
s1、通過畫線程序,在顯示系統(tǒng)中每個投影機的投影畫面中畫一組均勻的橫線和豎線,使橫線和豎線填充滿整個投影機屏幕;使用tof攝像頭,對每個投影機畫面采集一幀rgb和深度信息,再將所有投影機分成若干個等分,針對每個等分的全部畫面采集一幀rgb和深度信息;
s2、以第一個投影機信息為基準(zhǔn),手動建立其他投影機與第一個投影機的關(guān)聯(lián)關(guān)系,即在顯示區(qū)域上面做一組標(biāo)記,在rgb信息圖上手動綁定不同投影機畫面中相同的點;
s3、以左上第一個投影機為全局空間,通過標(biāo)定點,將其他投影機空間轉(zhuǎn)換到第一個投影機的所在的全局空間中;
s4、在全局空間中將所有投影機通過矩陣變換或者小孔成像技術(shù),將所有投影機的投影區(qū)域轉(zhuǎn)換到一個平面空間中;
s5、設(shè)投影機個數(shù)為n,將欲顯示畫面切分成r行、c列同等大小的矩形區(qū)域ti,并且n=r×s;定義整個計算機桌面確定的區(qū)域為uv空間,矩形區(qū)域ti所代表的就是對應(yīng)投影機需要顯示的內(nèi)容區(qū)域,各個投影機顯示內(nèi)容共享同一個uv坐標(biāo)系;
s6、根據(jù)步驟s1中投影機顯示的橫線和豎線,再手工標(biāo)定一組橫線和豎線,并設(shè)置好它們在投影機中的xy坐標(biāo),同時對每條橫線和豎線的xy坐標(biāo)和uv坐標(biāo)進行綁定;
s7、手工標(biāo)定最終顯示區(qū)域的上下左右4條邊界線,并將4條邊界上所有頂點的xy坐標(biāo)和uv坐標(biāo)進行綁定;
s8、手工標(biāo)定每個投影機顯示的矩形區(qū)域的4個頂點,并將4個頂點的xy坐標(biāo)和uv坐標(biāo)關(guān)聯(lián)起來;
s9、將每個投影機顯示的矩形區(qū)域用橫線和豎線進行切割,生成一張xy坐標(biāo)和uv坐標(biāo)對應(yīng)表;
s10、將4條邊界圍住的最終顯示區(qū)域以一定的大小切分成相同的矩形,再將矩形延著對邊切分成兩個小三角形;小三角形會被各投影機的矩形區(qū)域進一步切分,形成更小的三角形,直到所有小三角形都不能被矩形區(qū)域切分為止;通過查找每個小三角形所屬的投影機,根據(jù)所屬投影機的xy坐標(biāo)和uv坐標(biāo)對應(yīng)表,找到每個三角形的三個頂點的xy坐標(biāo)。
進一步地,步驟s3具體為:
兩次拍攝的兩個投影機之間會標(biāo)定很多物理上重合的點,設(shè)第一次拍攝的點集為y,第二次拍攝的點集為x,并且存在一個矩陣m使得y=x*m,其中x和y是一個n*4的矩陣,而m是一個4*4的矩陣;為了求出m,這里使用最小二乘法得出m=(xt*x)-1*xt*y,求出m矩陣后,通過yi=m*xi可以將所有其他投影機上的點轉(zhuǎn)換到第一個投影機的空間中,其中xt表示x的轉(zhuǎn)置矩陣,(xt*x)-1表示(xt*x)的逆矩陣,i=1,2,3,…,n,n為攝影機數(shù)量。
進一步地,步驟s4中的矩陣變換方式具體為:
以r矩陣表示旋轉(zhuǎn)變換,t矩陣表示平移變換,通過zi=r*yi+t變換,將所有投影機轉(zhuǎn)換到同一個z平面空間。
進一步地,步驟s9具體為:
將每個投影機顯示的矩形區(qū)域用橫線和豎線進行切割,交出的交點中以2條橫線和3條豎線共6個點為一組,在6個交點中做兩組每組兩個對角線共交出2個交點,2個交點連線的延長線與3條豎線再交出3個交點,新交出的3個交點與原始的6個交點再以6個交點為一組與橫線和豎線相交;新交出交點的xy坐標(biāo)和uv坐標(biāo)使用橫線和豎線端點的xy坐標(biāo)和uv坐標(biāo)進行填充;如此反復(fù)切割,直到矩形區(qū)域內(nèi)的每個像素點均有xy坐標(biāo)和uv坐標(biāo),最后生成一張xy坐標(biāo)和uv坐標(biāo)對應(yīng)表。
本發(fā)明的有益效果是:本發(fā)明通過硬件本身的融合技術(shù)使分割后的各個子畫面顯示非常流暢,沒有卡頓感。首先通過矩陣的運算,可以實現(xiàn)將規(guī)則的矩形畫面顯示到不規(guī)則目標(biāo)區(qū)域;然后通過畫面的映射,可以實現(xiàn)超大屏幕的顯示;最后通過三角化欲顯示的矩形區(qū)域,可以做到小于一個像素級別的更加精細(xì)的調(diào)整,進而實現(xiàn)投影機之間無縫隙無重疊的顯示,而且畫面整體感很強,幾乎沒有色差。
附圖說明
圖1為本發(fā)明提供的一種基于3d掃描的slam方法流程圖。
圖2為本發(fā)明實施例的映射轉(zhuǎn)換示意圖。
圖3為本發(fā)明實施例的矩形區(qū)域切割示意圖。
圖4為本發(fā)明實施例的三角形被矩形區(qū)域切分示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的實施例作進一步的說明。
本發(fā)明提供了一種基于3d掃描的slam方法,如圖1所示,包括以下步驟:
s1、顯示系統(tǒng)中包含多臺投影機,通過簡單的畫線程序,在顯示系統(tǒng)中每個投影機的投影畫面中畫一組均勻的橫線和豎線(如間隔64),使橫線和豎線填充滿整個投影機屏幕。使用tof攝像頭,對顯示系統(tǒng)中每個投影機畫面采集一幀rgb和深度信息xyz,再將所有投影機分成若干個等分,針對每個等分的全部畫面采集一幀rgb和深度信息xyz。幀與幀畫面之間有許多物理上重合的點。每個投影機和每個等分都有自己的獨立的坐標(biāo)空間。
s2、以第一個投影機信息為基準(zhǔn),手動建立其他投影機與第一個投影機的關(guān)聯(lián)關(guān)系,即事先在顯示區(qū)域上面做一組標(biāo)記,在rgb信息圖上手動綁定不同投影機畫面中相同的點。這樣通過人工干預(yù),減少數(shù)據(jù)誤差,提高可調(diào)節(jié)性。
s3、在步驟s1中取到的是每個投影機和等分的獨立的局部空間,需要將它們轉(zhuǎn)換到一個統(tǒng)一的空間中。以左上第一個投影機為全局空間,相應(yīng)的坐標(biāo)系為xyz坐標(biāo)系,通過標(biāo)定點,采用如下算法,將其他投影機空間轉(zhuǎn)換到第一個投影機的所在的全局空間中:
兩次拍攝的兩個投影機之間會標(biāo)定很多物理上重合的點,設(shè)第一次拍攝的點集為y,第二次拍攝的點集為x,并且存在一個矩陣m使得y=x*m,其中x和y是一個n*4的矩陣,而m是一個4*4的矩陣;為了求出m,這里使用最小二乘法得出m=(xt*x)-1*xt*y,求出m矩陣后,通過yi=m*xi可以將所有其他投影機上的點轉(zhuǎn)換到第一個投影機的所在的全局空間中,其中xt表示x的轉(zhuǎn)置矩陣,(xt*x)-1表示(xt*x)的逆矩陣,i=1,2,3,…,n,n為攝影機數(shù)量。
s4、在步驟s3獲得的全局空間中將所有投影機通過矩陣變換或者小孔成像技術(shù),將所有投影機的投影區(qū)域轉(zhuǎn)換到一個平面空間中,這個平面空間稱為pxy空間。其中矩陣變換方式具體為:通過zi=r*yi+t變換,將所有投影機通過旋轉(zhuǎn)(r矩陣表示)或者平移(t矩陣表示)轉(zhuǎn)換到同一個z平面空間。在一般的投影系統(tǒng)中,投影面之間不會有平移的情況,即t=0,zi=r*yi,故只需要確定r矩陣的4*4=16個參數(shù)即可。r矩陣可以通過求取m矩陣的方法,或者通過手動標(biāo)定3個坐標(biāo)軸來計算得到。通過上面的轉(zhuǎn)換,我們可以將欲投影的矩形區(qū)域投射到矩形顯示區(qū)域,也可以投射到環(huán)幕上,如圖2所示。
s5、設(shè)投影機個數(shù)為n,將欲投影顯示的畫面(如計算機桌面)切分成r行、c列同等大小的矩形區(qū)域ti,并且n=r×s。定義整個計算機桌面確定的區(qū)域為uv空間,矩形區(qū)域ti所代表的就是對應(yīng)投影機需要顯示的內(nèi)容區(qū)域,各個投影機顯示內(nèi)容共享同一個uv坐標(biāo)系。與uv坐標(biāo)系對應(yīng)的確定顯示位置的空間稱為xy空間,每個投影機的xy坐標(biāo)系相互獨立?,F(xiàn)在每個投影機的uv坐標(biāo)系已經(jīng)確定,需要將對應(yīng)的xy坐標(biāo)系找出來。
s6、根據(jù)步驟s1中投影機顯示的橫線和豎線,再手工標(biāo)定一組橫線和豎線,并設(shè)置好它們在投影機中的xy坐標(biāo)(由于橫豎線均勻的鋪滿整個投影機畫面,投影機的尺寸是固定的,故可以得出每條線的xy坐標(biāo))。每條橫線和豎線的兩個端點包含有xy坐標(biāo),通過s3、s4兩個步驟的變換可以完成xy坐標(biāo)-uv坐標(biāo)的轉(zhuǎn)換,到此每條橫線和豎線(端點)的xy坐標(biāo)和uv坐標(biāo)實現(xiàn)了綁定。這里每個投影機屏幕通過橫線和豎線進行劃分,橫線和豎線的xy坐標(biāo)可以手動調(diào)節(jié),通過人工干預(yù)可以減少數(shù)據(jù)誤差,提高可調(diào)節(jié)性。
s7、同樣的方式手工標(biāo)定最終顯示區(qū)域的上下左右4條邊界線,將4條邊界上所有頂點的xy坐標(biāo)和uv坐標(biāo)進行綁定。4條邊界線確定了最終顯示的區(qū)域大小,這個區(qū)域大小(設(shè)為r1)≤所有投影機一起覆蓋的區(qū)域(設(shè)為r2)≤欲投影顯示畫面的矩形區(qū)域(設(shè)為r3)。這樣可以切除掉r2中由于投影機硬件特性導(dǎo)致的邊界處不規(guī)則部分,只留下一個規(guī)整的矩形區(qū)域?,F(xiàn)在需要將r3映射到r1中,則最終顯示區(qū)域內(nèi)任意一點p的顯示內(nèi)容以uv坐標(biāo)表示,其中u=點p到左邊界的距離*欲顯示畫面的寬度/邊界的寬度,v=點p到上邊界的距離*欲顯示畫面的高度/邊界的高度?,F(xiàn)在需要確定的是點p在每個投影機中的xy坐標(biāo)。
s8、同樣的方式手工標(biāo)定每個投影機顯示的矩形區(qū)域的4個頂點,將4個頂點的xy坐標(biāo)和uv坐標(biāo)關(guān)聯(lián)起來(可以通過將整個屏幕的像素點全部顯示出來,然后數(shù)點的方式確定每個頂點的xy坐標(biāo))。這個矩形區(qū)域大小≤投影機的顯示屏幕大小。相鄰?fù)队皺C的4個手工標(biāo)定頂點在物理上重疊,并且每個投影機矩形區(qū)域的4個頂點可調(diào)節(jié)xy坐標(biāo),就意味著投影機可以只顯示部分的區(qū)域,實現(xiàn)去除重疊部分的需求,同時xy坐標(biāo)的精度小于1,這樣去除重疊部分的同時投影機之間幾乎沒有縫隙。
s9、將每個投影機顯示的矩形區(qū)域用橫線和豎線進行切割,如圖3所示,交出的交點中以2條橫線(h1,h2)和3條豎線(v1,v2,v3)共6個點(需要構(gòu)成一個矩形,如0,1,2,3,4,5)為一組,在6個交點中做兩組每組兩個對角線共交出2個交點,2個交點連線的延長線與3條豎線(v1,v2,v3)再交出3個交點(如6,7,8),新交出的3個交點與原始的6個交點再以6個交點(0,6,3,1,7,4)為一組與橫線和豎線相交。新交出的點的xy坐標(biāo)和uv坐標(biāo)使用橫線和豎線端點的xy坐標(biāo)和uv坐標(biāo)進行填充。如此反復(fù)切割,直到矩形區(qū)域內(nèi)的每個像素點均有xy坐標(biāo)和uv坐標(biāo),最后能生成一張xy坐標(biāo)和uv坐標(biāo)對應(yīng)表。這樣每個投影機都有一張局部的xy坐標(biāo)和全局的uv坐標(biāo)的對應(yīng)表。
s10、將4條邊界圍住的矩形畫面r以一定的大小(如64*64)切分成相同的矩形,將矩形延著對邊切分成兩個小三角形。每個小三角形的三個頂點都有自己的uv坐標(biāo)(r的大小是確定的,小三角形是均勻切分的且大小固定,經(jīng)過簡單的除法運算即可求出uv坐標(biāo))。小三角形會被投影機的矩形區(qū)域進一步切分,形成更小的三角形。切分過程中形成的新小三角形的uv坐標(biāo)需要根據(jù)前一步小三角形的uv坐標(biāo)和投影機矩形區(qū)域的4個頂點共同確定。然后通過查找每個小三角形所屬的投影機,根據(jù)所屬投影機的xy坐標(biāo)和uv坐標(biāo)對應(yīng)表,即可以找到每個三角形的三個頂點的xy坐標(biāo)。如圖4所示,小三角形被矩形區(qū)域切分的原理為:兩個小三角形t1、t2被切分成t1、t2、t3、t4、t5、t6共6個新的小三角形,切分能夠一直進行到所有小三角都不能被矩形區(qū)域切分為止。
通過步驟s10,可以得到最終畫面被分割為若干個小三角形的頂點xy坐標(biāo),將其生成一張三角形列表,利用支持融合技術(shù)的顯卡接口將其送入到相關(guān)顯卡進行后續(xù)處理,即可得到3d畫面。
本領(lǐng)域的普通技術(shù)人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的原理,應(yīng)被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內(nèi)。