本發(fā)明涉及計算機技術(shù)領(lǐng)域,具體涉及路徑規(guī)劃方法及裝置。
背景技術(shù):
在很多場景下均需要進行路徑規(guī)劃,例如對機器人運動控制中,其操作臂或其他被控部件的運動軌跡規(guī)劃,再例如,游戲中非玩家角色(比如塔防游戲中的怪物)的移動路徑規(guī)劃。
以游戲中非玩家角色的移動路徑規(guī)劃為例,非玩家角色可能需要在如圖1a所示的背景中沿道路移動(當然,機器人可能也需要沿固定的道路移動)。
現(xiàn)有的一種路徑規(guī)劃方式為點陣表示法,其原理為:將背景以給定分辨率網(wǎng)格化,再將移動路徑以像素點陣的形式表示(見圖1b)。
點陣表示法一般采用以下兩種方式保存路徑:一是矩陣形式(請參見圖2a),二是點集形式(請參見圖2b)。上述兩種方式至少對路徑上的每一個點都進行保存,這造成路徑數(shù)據(jù)存儲量很大。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供路徑規(guī)劃方法及裝置,以減少路徑數(shù)據(jù)的存儲量。
為實現(xiàn)上述目的,本發(fā)明實施例提供如下技術(shù)方案:
一種路徑規(guī)劃方法,基于路徑文件,所述路徑文件包括路徑標識,以及,用于擬合所述路徑標識對應的移動路徑的N條樣條曲線的控制點的坐標;所述N段樣條曲線中的第i段樣條曲線的終點與第i+1段樣條曲線的起點重合,所述第i段樣條曲線與第i+1段樣條曲線在重合點處的切線夾角為零;每一所述樣條曲線的形狀由控制點決定;1≤i<N,N為正整數(shù);
所述方法包括:
獲取物體所在移動路徑的路徑標識符及移動速率,所述物體所在移動路徑的路徑標識符為目標路徑標識符;
獲取指定時刻;
基于所述目標路徑標識符、移動速率、指定時刻和路徑文件,確定所述物體在所述指定時刻的位置。
一種路徑規(guī)劃裝置,基于路徑文件,所述路徑文件包括路徑標識,以及,用于擬合所述路徑標識對應的移動路徑的N條樣條曲線的控制點的坐標;所述N段樣條曲線中的第i段樣條曲線的終點與第i+1段樣條曲線的起點重合,所述第i段樣條曲線與第i+1段樣條曲線在重合點處的切線夾角為零;每一所述樣條曲線的形狀由控制點決定;1≤i<N,N為正整數(shù);
所述裝置包括:
第一獲取單元,用于獲取物體所在移動路徑的路徑標識符及移動速率,所述物體所在移動路徑的路徑標識符為目標路徑標識符;
第二獲取單元,用于獲取指定時刻;
確定單元,用于基于所述目標路徑標識符、移動速率、指定時刻和路徑文件,確定所述物體在所述指定時刻的位置。
一種路徑規(guī)劃系統(tǒng),包括第一路徑規(guī)劃裝置和第二路徑規(guī)劃裝置,其中:
所述第一路徑規(guī)劃裝置包括:
擬合單元,用于使用N段樣條曲線擬合出移動路徑;其中所述N段樣條曲線中的第i段樣條曲線的終點與第i+1段樣條曲線的起點重合,所述第i段樣條曲線與第i+1段樣條曲線在重合點處的切線夾角為零;每一所述樣條曲線的形狀由控制點決定;1≤i<N,N為正整數(shù);
存儲單元,用于將所述移動路徑的路徑標識符,以及用于擬合所述移動路徑的樣條曲線對應的控制點的坐標,存儲至路徑文件;
所述第二路徑規(guī)劃裝置包括:
第一獲取單元,用于獲取物體所在移動路徑的路徑標識符及移動速率,所述物體所在移動路徑的路徑標識符為目標路徑標識符;
第二獲取單元,用于獲取指定時刻;
確定單元,用于基于所述目標路徑標識符、移動速率、指定時刻和路徑文件,確定所述物體在所述指定時刻的位置。
在本發(fā)明實施例中,移動路徑由N段樣條曲線擬合而成,在進行存儲時,存儲的是樣條曲線的控制點坐標,由于樣條曲線的形狀由其控制點決定,因此存儲了樣條曲線控制點坐標,就可以決定樣條曲線的形狀,進而決定整條移動路徑的形狀。
由于控制點的個數(shù)要遠小于樣條曲線所包含的點,因此本發(fā)明實施例所提供的技術(shù)方案可大大減少路徑數(shù)據(jù)的存儲量。此外,上述N段樣條曲線中的第i段樣條曲線的終點與第i+1段樣條曲線的起點重合,并且,第i段樣條曲線與第i+1段樣條曲線在重合點處的法線相同且切線夾角為零。這樣可實現(xiàn)相鄰的樣條曲線之間平滑對接,從而保證整條移動路徑光滑。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1a為背景示意圖;
圖1b點陣表示法示意圖;
圖2a和圖2b為點陣表示法保存方式示意圖;
圖3為本發(fā)明實施例提供的路徑規(guī)劃裝置或電子設(shè)備的計算機架構(gòu)示例圖;
圖4a、圖4e、圖5a、5b、圖6a、圖9為本發(fā)明實施例提供的路徑規(guī)劃方法示例性流程圖;
圖4b為本發(fā)明實施例提供的由3段樣條曲線擬合出的移動路徑的示例圖;
圖4c和圖4d為本發(fā)明實施例提供的路徑數(shù)據(jù)結(jié)構(gòu)示意圖;
圖6b為本發(fā)明實施例提供的圖片示意圖;
圖6c為本發(fā)明實施例提供的圖片的坐標系示意圖;
圖7a為本發(fā)明實施例提供三次Beizer曲線示意圖;
圖7b和圖7c為本發(fā)明實施例提供的采用三次Bezier曲線擬合移動路徑的示意圖;
圖8a為本發(fā)明實施例提供的由6組控制點組擬合的移動路徑的示例圖;
圖8b和圖8c為本發(fā)明實施例提供的采用三次Bezier曲線擬合移動路徑的另一示意圖;
圖10a、圖10b、圖10c、圖10d為本發(fā)明實施例提供的路徑規(guī)劃裝置的示例性結(jié)構(gòu)圖。
具體實施方式
本發(fā)明可能使用的技術(shù)名詞、簡寫或縮寫如下:
樣條曲線:給定一組控制點而得到一條曲線,即樣條曲線的形狀由控制點決定;
G1幾何連續(xù):滿足一條曲線的端點與另一條曲線的端點重合,并在該重合點處法線(切線的垂直線)相同、切線夾角為零度,則稱這兩條曲線在連接點處滿足G1幾何連續(xù)。
本發(fā)明提供路徑規(guī)劃方法及路徑規(guī)劃裝置。
在不同場景下,上述路徑規(guī)劃裝置可以軟件的形式應用于機器人、服務(wù)器、電子設(shè)備設(shè)備/終端(諸如臺式機、移動終端、ipad等)中,或以硬件(例如具體可為機器人中的控制器/處理器)的形式作為上述設(shè)備的組成部分。
當以軟件形式存在時,路徑規(guī)劃裝置具體可為一應用程序,例如手機APP、終端應用程序等,也可作為某應用程序或操作系統(tǒng)的組件。
圖3示出了路徑規(guī)劃裝置或包含上述路徑規(guī)劃裝置的設(shè)備一種通用計算機系統(tǒng)結(jié)構(gòu)。
上述計算機系統(tǒng)可包括總線、處理器1、存儲器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5。處理器1、存儲器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5通過總線相互連接。其中:
總線可包括一通路,在計算機系統(tǒng)各個部件之間傳送信息。
處理器1可以是通用處理器,例如通用中央處理器(CPU)、網(wǎng)絡(luò)處理器(Network Processor,簡稱NP)、微處理器等,也可以是特定應用集成電路(application-specific integrated circuit,ASIC),或一個或多個用于控制本發(fā)明方案程序執(zhí)行的集成電路。還可以是數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。
處理器1可包括主處理器,還可包括基帶芯片、調(diào)制解調(diào)器等。
存儲器2中保存有執(zhí)行本發(fā)明技術(shù)方案的程序,還可以保存有操作系統(tǒng)和其他關(guān)鍵業(yè)務(wù)。具體地,程序可以包括程序代碼,程序代碼包括計算機操作指令。更具體的,存儲器2可以包括只讀存儲器(read-only memory,ROM)、可存儲靜態(tài)信息和指令的其他類型的靜態(tài)存儲設(shè)備、隨機存取存儲器(random access memory,RAM)、可存儲信息和指令的其他類型的動態(tài)存儲設(shè)備、磁盤存儲器、flash等等。
輸入設(shè)備4可包括接收用戶輸入的數(shù)據(jù)和信息的裝置,例如鍵盤、鼠標、攝像頭、掃描儀、光筆、語音輸入裝置、觸摸屏、計步器或重力感應器等。
輸出設(shè)備5可包括允許輸出信息給用戶的裝置,例如顯示屏、打印機、揚聲器等。
通信接口3可包括使用任何收發(fā)器一類的裝置,以便與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(WLAN)等。
處理器1執(zhí)行存儲器2中所存放的程序,以及調(diào)用其他設(shè)備,可用于實現(xiàn)本發(fā)明實施例所提供的路徑規(guī)劃方法中的各個步驟。
下面將基于上面的本發(fā)明涉及的共性方面,對本發(fā)明實施例進一步詳細說明。
圖4a示出了上述路徑規(guī)劃裝置所執(zhí)行的路徑規(guī)劃方法的一種示例性流程,其可包括:
401部分:使用N段樣條曲線擬合出移動路徑,N為正整數(shù)。
其中,上述N段樣條曲線中的第i段樣條曲線的終點與第i+1段樣條曲線的起點重合。
上述第i段樣條曲線與第i+1段樣條曲線在重合點處的切線夾角為零,這樣可實現(xiàn)相鄰的樣條曲線之間平滑對接(或稱為G1幾何連續(xù)),從而保證整條移動路徑光滑。1≤i<N。
以圖4b所示的由3段樣條曲線擬合出的移動路徑為例,第1段樣條曲線的終點與第2段樣條曲線的起點均為點A。
可以看出,第1段樣條曲線在點A處的切線,與第2段樣條曲線在點A處的切線夾角為零(也可稱為切線重合)。
每一上述樣條曲線的形狀由控制點決定。在一個示例中,上述樣條曲線可為B樣條曲線。更具體的,可為貝塞爾曲線。本文還將進行更為詳細的介紹。
402部分:將上述移動路徑的路徑標識符,以及用于擬合上述移動路徑的樣條曲線對應的控制點的坐標,存儲至路徑文件。
由于移動路徑可能不止一條,所以需要使用路徑標識符對各路徑進行標識。
在一個示例中,可采用文本形式存儲路徑數(shù)據(jù),請參見圖4c路徑數(shù)據(jù)結(jié)構(gòu)包含兩部分,一是路徑標識符,二是擬合上述移動路徑的樣條曲線對應的控制點的坐標。
假定由5段樣條曲線擬合出的移動路徑對應的路徑標識符(id)是0,第1-5段樣條曲線的控制點坐標分別為:
(0.850004,29.568),(5.85,29.568),(37.05,29.568),(35,35.9424),(42.13,35.9424),(45.51,35.9424),(48.98,33.5328),(48.98,29.904),(48.98,24.9504),(42.44,25.296),(42.44,21.12),(42.44,18.048),(49.2,17.664),(54.2,17.664),(63.7,17.664),(70.31,21.408),(74.11,21.408),(79.11,21.408)。
則由5段樣條曲線擬合出的移動路徑對應的移動數(shù)據(jù)如圖4d所示(id字段記錄的是路徑標識符,anchors字段記錄的是控制點坐標,分號為控制點與控制點之間的分隔符,逗號是橫坐標和縱坐標的分隔符)。
可見,在本發(fā)明實施例中,移動路徑由N段樣條曲線擬合而成,在進行存儲時,存儲的是樣條曲線的控制點坐標,由于樣條曲線的形狀由其控制點決定,因此存儲了樣條曲線控制點坐標,就可以決定樣條曲線的形狀,進而決定整條移動路徑的形狀。
而由于控制點的個數(shù)要遠小于樣條曲線所包含的點,因此本發(fā)明實施例所提供的技術(shù)方案可大大減少路徑數(shù)據(jù)的存儲量。從而可用盡可能少的數(shù)據(jù)表示大量復雜的路徑。
在本發(fā)明其他實施例中,請參見圖4e,在步驟402之后,還可包括:
403部分:獲取物體所在移動路徑的路徑標識符及移動速率。
在一個示例中,上述移動速率可為固定值或變值??蓪⒁苿铀俾适褂靡苿铀俾屎瘮?shù)表示。
需要說明的是,在不同場景下,物體具有不同的含義。例如,在機器人運動控制中,物體可指操作臂或其他被控部件,操作臂或其他被控部件的移動速率(移動速率函數(shù))可采用任意速率規(guī)劃方式來確定。
再例如,在游戲場景下,上述物體可指非玩家角色(例如塔防游戲中的怪物),游戲中已經(jīng)設(shè)計好了每一只非玩家角色對應的移動路徑以及移動速率(移動速率函數(shù)),因此可以直接確定物體所在移動路徑的路徑標識符及移動速率。
為方便區(qū)分,可將物體所在移動路徑的路徑標識符稱為目標路徑標識符。
404部分:獲取指定時刻。
指定時刻可為物體在移動過程中的任一時刻。在一個示例中,指定時刻可為當前時刻。
405部分:基于上述目標路徑標識符、移動速率、指定時刻和路徑文件,確定上述物體在上述指定時刻的位置。
本文后續(xù)將對如何基于上述目標路徑標識符、移動速率、指定時刻和路徑文件,確定上述物體在上述指定時刻的位置進行詳細介紹。
在本實施例中,可使用路徑文件確定物體在指定時刻的位置,這樣可對物體進行精確的運動控制。
在不同場景下,在獲取物體在指定時刻的位置后,可有不同的控制方式。
例如,在機器人運動控制中,在獲取被控部件在指定時刻的位置,可向被控部件發(fā)送位置控制指令,以控制被控部分在指定時刻運行到該位置。
而在游戲場景下,在確定出非玩家角色在當前的位置后,可在該位置顯示該非玩家角色,從而實現(xiàn)非玩家角色的位置更新。而從玩家的角度看,就是非玩家角色在移動。
401-402部分可統(tǒng)一稱為路徑文件生成部分。
需要說明的是,401-402部分與403-405部分,可由同一路徑規(guī)劃裝置執(zhí)行,也可由不同的路徑規(guī)劃裝置執(zhí)行。
例如,在機器人運動控制場景下,401-405部分可由機器人的處理器執(zhí)行。
而在游戲場景下,401-402部分可發(fā)生在游戲設(shè)計開發(fā)過程中,所生成的控制文件可作為游戲的一部分。而403-405部分可由玩家所使用的終端執(zhí)行。則請參見圖5a,路徑規(guī)劃裝置(例如由玩家所使用的終端)所執(zhí)行的路徑規(guī)劃方法的另一種示例性流程可包括:
501部分:獲取物體所在移動路徑的路徑標識符及移動速率。
502部分:獲取指定時刻。
503部分:基于上述目標路徑標識符、移動速率、指定時刻和路徑文件,確定上述物體在上述指定時刻的位置(為方便起見,可將其稱為目標位置)。
501-503部分與403-405部分相類似,在此不作贅述。
在本發(fā)明其他實施例中,請參見圖5b,在503部分之后,還可包括504部分:在目標路徑的目標位置上顯示上述物體。
舉例來講,假定在503部分,確定出游戲中的某一怪物在當前時刻在目標路路徑的點A位置。則在504部分,會在點A位置顯示該怪物。
此外,仍請參見圖5a或5b,在501部分之前,還可包括500部分:調(diào)取路徑文件。在一個示例中,可將路徑文件加載至內(nèi)存中。
圖6a示出了上述路徑規(guī)劃裝置所執(zhí)行的路徑規(guī)劃方法的又一種示例性流程(在本實施例重點在于路徑文件的生成),其可包括:
600部分:獲取圖片。
上述圖片中的圖像上具有道路。
圖6b示出了圖片的一種示意圖。圖片可作為游戲背景,具體的,可為地圖。
需要說明的是,圖片與圖像是不同的。圖片一般是矩形的,例如像素為4*4的圖片,而圖片中的圖像則沒有固定的形狀和尺寸。
或者,在機器人運動控制中,機器人需沿著圖片上的道路移動。
601部分:使用N段樣條曲線擬合出形狀與上述圖片上的道路的形狀相貼合的移動路徑。
602部分:將上述移動路徑的路徑標識符,以及用于擬合上述移動路徑的樣條曲線對應的控制點在圖片上的坐標,存儲至路徑文件。
需要注意的是,在本實施例中,控制點的坐標具體為控制點坐標在圖片上的坐標。
假定某圖片像素為16*16,該圖片的坐標系如圖6c所示,以左上角為原點(0,0),x軸和y軸的最大取值為15。假定,移動路徑由1段樣條曲線擬合而成,該樣條曲線有4個控制點P0、P1、P2和P3,則邊緣頂點坐標集合中儲存的是P0、P1、P2、P3相對于原點(0,0)的坐標。
關(guān)于路徑標識符和路徑文件的介紹請參見前述的402部分,在此不作贅述。
在本發(fā)明其他實施例中,仍請參見圖6a,在602部分之后,還可包括:
603部分:加載路徑文件。
可將路徑文件加載至內(nèi)存。
需要說明的是,在游戲中,可能會有多張背景或地圖,因此,在一個示例中,當需要生成多個圖片對應的路徑文件時,可對每一張圖片執(zhí)行601-603部分的操作。
在一些場景下,兩幅或更多幅圖片可共用同一道路,因此,在一個示例中,還可存儲圖片標識與路徑標識符之間的對應關(guān)系。
604部分:獲取物體所在移動路徑的路徑標識符及移動速率。
605部分:獲取指定時刻。
604部分與605部分,與前述的403-404部分或501-502相類似,在此不作贅述。
606部分:基于上述目標路徑標識符、移動速率、指定時刻和路徑文件,確定上述物體在上述指定時刻的位置。
需要說明的是,該位置是在上述圖片的坐標系下的位置坐標。
607部分:將物體在上述指定時刻的位置轉(zhuǎn)化為游戲世界坐標系下的位置坐標。
需要說明的是,在利用現(xiàn)有的點陣表示法來表示移動路徑時,而在游戲運行階段,會將點陣坐標線性變換到游戲世界坐標,物體移動時通過計算目標位置前后相鄰兩點的線性插值獲得位置坐標。
這樣,在設(shè)計階段若點陣的分辨率較低,而游戲運行階段游戲分辨率較高的話,則在游戲運行時能夠看出移動路徑存在大量尖角,即曲線不夠光滑。這會使得游戲運行時,物體的移動顯示生硬。
而在本實施例中,存儲的是控制點在圖片上的坐標,與分辨率無關(guān)。在606部分確定的位置,也是在圖片的坐標系下的位置坐標,亦與分辨率無關(guān),從而移動路徑不會因分辨率變化而發(fā)生變形。也即,本實施例可在任意游戲分辨率下,保持物體的移動路徑光滑。
608部分:在游戲世界坐標系下的位置坐標上,顯示物體。
前已述及,樣條曲線可為B樣條曲線,更具體的,可為B樣條曲線中的貝塞爾(Beizer)曲線。下面將以三次貝塞爾曲線為例,具體介紹如何使用樣條曲線擬合出移動路徑。
為了生成一段三次貝塞爾曲線,需要四個特征點。請參見圖7a,四個特征點按順序分別記為P0、P1、P2、P3,則三次Beizer曲線的參數(shù)方程為:
B(u)=P0(1-u)3+3P1u(1-u)2+3P2u2(1-u)+P3u3,u∈[0,1]。
其中,u=0對應三次Beizer曲線的起始點,u=1對應三次Beizer曲線的終止點。
P0-P3這4個特征點在平面或在三維空間定義了三次Bezier曲線,其組成的多邊形稱為特征多邊形或控制多邊形。其中,P0為起始點,P3為終止點,P2、P3為中間點。需要說明的是,一般三次Bezier曲線不經(jīng)過P1、P2,這兩個點只提供方向。
為實現(xiàn)擬合出移動路徑,路徑規(guī)劃裝置可提供路徑規(guī)劃界面。
請參見圖7b,在路徑規(guī)劃界面上可提供三次Bezier曲線的控件,此外,還可有直線控件、矩形控件等。
路徑規(guī)劃裝置監(jiān)聽輸入設(shè)備(輸入設(shè)備一般為觸摸屏、鼠標、鍵盤等),:當監(jiān)聽到輸入設(shè)備的操作事件時,路徑規(guī)劃裝置執(zhí)行與所述操作事件相對應的動作。
舉例來講,以鼠標輸入為例,在路徑規(guī)劃裝置監(jiān)聽到鼠標點擊三次Bezier曲線的控件的事件,并保持不松開時,路徑規(guī)劃裝置所執(zhí)行的與操行事件相對應的動作包括:在使用者拖動鼠標的過程中,令三次Bezier曲線追隨鼠標的移動而移動,在監(jiān)聽到鼠標被松開時,三次Bezier曲線被放置在一個新位置上。
例如,請參見圖7b,一段三次Bezier曲線被放置在編輯區(qū)中。
使用者可繼續(xù)拖動新的三次Bezier曲線至編輯區(qū)。例如,在圖7c中,使用者將兩段三次Bezier曲線拖進編輯區(qū)。
路徑規(guī)劃裝置可自動令編輯區(qū)中相鄰的兩段三次Bezier曲線的終點與起點重合,并令重合點處的切線夾角為零。一般可保持前一段三次Bezier曲線形狀不變,自動調(diào)整后一段三次Bezier曲線的形狀,以令兩段三次Bezier曲線在重合點處的切線夾角為零。
若用戶點擊保存按鈕,路徑規(guī)劃裝置監(jiān)聽到保存事件,會將路徑標識符以及三次Bezier曲線的特征點在圖片坐標系下的坐標保存至路徑文件。
此外,使用者還可移動編輯區(qū)任一段三次Bezier曲線的特征點的位置,以改變該段三次Bezier曲線的形狀。
以圖7c為例,若用戶點擊保存按鈕,路徑規(guī)劃裝置會將路徑標識符以及A至G點的坐標保存至路徑文件。
在本發(fā)明其他實施例中,使用樣條曲線擬合出移動路徑還可采用其他方式。
仍以三次Bezier曲線為例,除了前述圖7b、7c所示的方式,還可采用控制點組的方式來使用三次Bezier曲線擬合出移動路徑。
控制點組包括錨點、前方向點和后方向點。假定共有N+1組控制點組,其可表征N段三次Bezier曲線。其中:
第j組控制點組中的錨點表征,第j+1段三次Bezier曲線的起點,也即第j段三次Bezier曲線的終點(0≤j≤N);
第j組控制點組中的前方向點表征,第j段三次Bezier曲線終點處的方向;
第j組控制點組中的后方向點表征,第j+1段三次Bezier曲線的起點處的方向。
例如,請參見圖8a,圖8a中的移動路徑由五段三次Bezier曲線組成,這五段三次Bezier曲線由六組控制點組決定。
在圖8a,虛線框中的三個點即為一組控制點,表示前方向點、表示錨點、表示后方向點。
記順序上相鄰兩組控制頂點組分別為Qj-1和Qj,其中j∈[1,N+1],N+1為控制頂點組數(shù)量,則Qj-1中的錨點、Qj-1中的后方向點、Qj前方向點和Qj錨點生成一段三次貝塞爾曲線。
由于Qj錨點既是前一段曲線的終點,又是后一段曲線的起點,且在設(shè)計過程中保持Qj中的前方向點、錨點和后方向點三點共線且按序排列,則可令兩段三次Bezier曲線在拼接點處滿足G1連續(xù)。
以圖8a中的第一段三次Beizer曲線為例,通過比對圖7a中所示的三次貝塞爾曲線,可知,第一段三次Beizer曲線中的P0點,為第0組控制點組的錨點;第一段三次Beizer曲線中的P3點,為第1組控制點組的錨點;第一段三次Beizer曲線中的P1點,為第0組控制點組的后方向點;第一段三次Beizer曲線中的P2點,為第1組控制點組的前方向點。
以此類推,可知:
N段三次Bezier曲線中的第i段三次Beizer曲線中的P0點,為第i-1組控制點組的錨點;
第i段三次Beizer曲線中的P3點,為第i組控制點組的錨點;
第i段三次Beizer曲線中的P1點,為第i-1組控制點組的后方向點;
第i段三次Beizer曲線中的P2點,為第i組控制點組的前方向點。
為實現(xiàn)擬合出移動路徑,路徑規(guī)劃裝置可提供路徑規(guī)劃界面。
請參見圖8b,在路徑規(guī)劃界面上可提供控制點組控件,此外,還可有直線控件、矩形控件等。
路徑規(guī)劃裝置監(jiān)聽輸入設(shè)備(輸入設(shè)備一般為觸摸屏、鼠標、鍵盤等),:當監(jiān)聽到輸入設(shè)備的操作事件時,路徑規(guī)劃裝置執(zhí)行與所述操作事件相對應的動作。
舉例來講,以鼠標輸入為例,在路徑規(guī)劃裝置監(jiān)聽到鼠標點擊控制點組控件的事件,并保持不松開時,路徑規(guī)劃裝置所執(zhí)行的與操行事件相對應的動作包括:在使用者拖動鼠標的過程中,令控制點組控件追隨鼠標的移動而移動,在監(jiān)聽到鼠標被松開時,控制點組控件被放置在一個新位置上。
例如,請參見圖8b,一組控制點組被放置在編輯區(qū)中。
使用者可繼續(xù)拖動新的控制點組至編輯區(qū)。例如,在圖8c中,使用者共將兩組控制點組拖進編輯區(qū)。路徑規(guī)劃裝置可自動根據(jù)兩組控制點組形成一段三次Beizer曲線。
使用者還可移動編輯區(qū)任一控制點的位置,以改變?nèi)蜝ezier曲線的形狀。
若用戶點擊保存按鈕,路徑規(guī)劃裝置監(jiān)聽到保存事件,會將路徑標識符以及每一控制點組中各控制點在圖片坐標系下的坐標保存至路徑文件。
因此,在設(shè)計階段,使用者與路徑規(guī)劃裝置的具體交互流程如下:
使用者通過輸入裝置放置控制點組生成多段三次貝塞爾曲線;
使用者通過輸入裝置調(diào)整控制點位置來分段調(diào)整三次貝塞爾曲線的形狀,以貼合所需的移動路徑形狀;
將路徑數(shù)據(jù)輸出至路徑文件。
需要說明的是,現(xiàn)有點陣表示法在需要對移動路徑中某段進行修改時,需要將該區(qū)域內(nèi)的全部點陣重新設(shè)計。
而在本實施例中,可通過移動控制點的位置來調(diào)整對應曲線段的形狀,保證了設(shè)計過程的簡單、高效。
下面將介紹如何基于目標路徑標識符、移動速率、指定時刻和路徑文件,確定物體在上述指定時刻的位置。
請參見圖9,“基于目標路徑標識符、移動速率、指定時刻和路徑文件,確定物體在上述指定時刻的位置”可包括如下步驟:
901部分:根據(jù)移動速率和指定時刻,計算上述物體的移動距離。
假定,移動速率函數(shù)表示為v(τ),τ表示時間自變量,指定時刻為T,初始時刻為T0,物體的移動距離表示s,則可通過如下公式計算物體的移動距離s:
902部分:在上述路徑文件中,查找上述目標路徑標識對應的每一樣條曲線的控制點的坐標;
903部分:根據(jù)查找出的控制點的坐標,得到上述目標路徑標識對應的每一樣條曲線的長度。
在一個示例中,可讀取路徑文件中目標路徑標識符對應的樣條曲線的控制點的坐標,結(jié)合控制點坐標,還原目標路徑標識對應的每一樣條曲線的曲線方程,再根據(jù)曲線方程得到每一樣條曲線的長度。
以三次Bezier曲線為例,前已述及,三次Bezier曲線的通用表達式為B(u)=P0(1-u)3+3P1u(1-u)2+3P2u2(1-u)+P3u3,u∈[0,1]。
并且,前已闡述了P0-P3與控制點之間的關(guān)系,則在查找出控制點的坐標后,就可以確定用于擬合目標路徑標識對應的移動路徑的N段三次Bezier曲線的各特征點坐標,將各特征點坐標代入通用表達式,則可得到每一段三次Bezier曲線對應的多項式。
而在確定了每一段三次Bezier曲線對應的多項式后,就可進一步確定每一段三次Bezier曲線的長度。
904部分:基于上述移動距離和每一樣條曲線的長度,確定在上述指定時刻上述物體所在的樣條曲線,作為目標樣條曲線。
假定某移動路徑由三段樣條曲線擬合而成,這三段樣條曲線長度分別為5cm、3cm和4cm。
同時假定,物體在T0時刻出發(fā),以每秒5cm的速率前進,則在指定時刻T(T-T0=2秒),物體的移動距離s為10cm。
由于10-5-3=2,而10-5-3-4=-2,從而可確定物體在第三條樣條曲線上。
905部分:確定上述移動距離在目標樣條曲線上對應的弧長,作為目標弧長。
仍沿用前例,由于10-5-3=2,而10-5-3-4=-2,從而可確定物體在第三條樣條曲線上,并且,根據(jù)10-5-3=2,可確定在第三條樣條曲線上對應的目標弧長l為2cm。
906部分:根據(jù)目標樣條曲線的表達式以及上述目標弧長,確定物體在上述指定時刻的位置。
任一樣條曲線(包含目標樣條曲線)的表達式是由控制點的坐標決定。
更具體的,前已述及,三次Bezier曲線的通用表達式為B(u)=P0(1-u)3+3P1u(1-u)2+3P2u2(1-u)+P3u3,u∈[0,1],可將u看作取值為0-1秒之間的時間變量,則三次Bezier曲線的通用表達式可視為與時間u有關(guān)的函數(shù)。
在一個示例中,根據(jù)目標樣條曲線的表達式以及上述目標弧長,確定物體在上述指定時刻的位置可具體包括:
步驟A:確定目標弧長l對應的曲線參數(shù)的具體取值u~;
步驟B:將u~代入目標樣條曲線的表達式,得到的結(jié)果即為物體在上述指定時刻T的位置。
已知l,若可求得l對應的u的具體取值u~,再將u~代入B(u),得到B(u~),B(u~)即為物體在指定時刻的位置。
在另一個示例中,確定目標弧長l對應的曲線參數(shù)的具體取值u~可通過如下方式獲取:
假定弧長變量S與時間自變量u之間的函數(shù)關(guān)系為:S=g(u),其中u表示時間自變量,其中u∈[0,1],S∈[0,L],L為目標樣條曲線的長度。
在數(shù)據(jù)中,所有參數(shù)曲線(包括貝塞爾曲線)上的點都可以表示為(x(u),y(u)),在貝塞爾曲線的定義中,u∈[0,1],當x(u),y(u)有一階導數(shù)時,弧長微元
對于貝塞爾曲線,x(u),y(u)是關(guān)于u的多項式函數(shù),所以一定是一階可導的。因此可得:其中A表示u的一個具體取值。當然,A現(xiàn)在是未知的。
而可用|B'(u)|表示。則可推導出
其中,|*|表示向量取模,B'(u)表示三次Bezier曲線的一階導數(shù)。
由于已知S=l,需要求得對應的u~,因此上述問題轉(zhuǎn)化為求解逆函數(shù):u~=g-1(l)。
而該方程絕大多數(shù)情況下無解析解,因此可采用牛頓法求解該方程的數(shù)值解。
記F(u)=g(u)–l。上述問題轉(zhuǎn)化為求解u~,使得F(u~)=0。
令u0∈[0,1]為u~的初始猜測,在一個示例中,可選?。簎0=l/L。
則應用牛頓法可以產(chǎn)生如下迭代序列:
其中,
B'(uk)表示目標樣條曲線的一階導數(shù)在曲線參數(shù)等于uk+1時的取值。
而
重復產(chǎn)生迭代序列,直到滿足下列約束條件之一時停止:
上述約束條件實現(xiàn)的是:當某一次迭代計算出的值小于預定誤差值∈,或者迭代次數(shù)超過預定迭代次數(shù)上限M就停止。
上述迭代過程也可表述為:
產(chǎn)生迭代序列直至滿足約束條件。
將迭代停止時得到的uk+1作為u~。
需要說明的是,設(shè)立M是出于性能考慮,并不是必須的。
在實際求解過程中,只要M合理,只有少數(shù)迭代過程的迭代次數(shù)會超過M,且獲得的解足夠近似正確位置。M值由機器性能和應用程序所需的求解快慢決定。
當然,還可采用其他方式確定物體在上述指定時刻的位置,在此不作贅述。
相比于現(xiàn)有方式,本發(fā)明所提供的方案具有以下優(yōu)點:
在任意分辨率下,能使移動路徑保持光滑;
能夠少量數(shù)據(jù)表示大量復雜曲線路徑。
圖10a示出了上述實施例中所涉及的路徑規(guī)劃裝置的一種可能的結(jié)構(gòu)示意圖,包括:
擬合單元101,用于使用N段樣條曲線擬合出移動路徑;其中N段樣條曲線中的第i段樣條曲線的終點與第i+1段樣條曲線的起點重合,第i段樣條曲線與第i+1段樣條曲線在重合點處的切線夾角為零;每一樣條曲線的形狀由控制點決定;1≤i<N,N為正整數(shù);
存儲單元102,用于將移動路徑的路徑標識符,以及用于擬合移動路徑的樣條曲線對應的控制點的坐標,存儲至路徑文件。
在本發(fā)明其他實施例中,請參見圖10b,上述路徑規(guī)劃裝置還可包括:
第一獲取單元103,用于獲取物體所在移動路徑的路徑標識符及移動速率,物體所在移動路徑的路徑標識符為目標路徑標識符;
第二獲取單元104,用于獲取指定時刻;
確定單元105,用于基于目標路徑標識符、移動速率、指定時刻和路徑文件,確定物體在指定時刻的位置。
在機器人運動控制場景下,擬合單元101至確定單元105可應用于同一機器人中。
而在其他場景下,例如游戲場景下,擬合單元101和存儲單元102可應于某一服務(wù)器中,而第一獲取單元103至確定單元105可應于另一服務(wù)器或電子設(shè)備(例如智能終端、客戶端、ipad等)中。
因此,請參見圖10c,路徑規(guī)劃裝置(電子設(shè)備)的另一種可能的結(jié)構(gòu)可包括:
第一獲取單元103,用于獲取物體所在移動路徑的路徑標識符及移動速率,物體所在移動路徑的路徑標識符為目標路徑標識符;
第二獲取單元104,用于獲取指定時刻;
確定單元105,用于基于目標路徑標識符、移動速率、指定時刻和路徑文件,確定物體在指定時刻的位置。
此外,請參見圖10d,在其他實施例中,路徑規(guī)劃裝置(電子設(shè)備)還可包括顯示單元106,用于在目標路徑的目標位置上顯示上述物體;其中,上述目標位置為確定出的物體在上述指定時刻的位置。
其中,擬合單元101可用于執(zhí)行圖4a和圖4e所示的401部分,圖6a所示的600-601部分。
存儲單元102可用于執(zhí)行圖4a和圖4e所示的402部分,圖6a所示的602部分。
第一獲取單元103可用于執(zhí)行圖4e所示的403部分,圖5a和5b所示的500-501部分,圖6a所示的603-604部分。
第二獲取單元104可用于執(zhí)行圖4e所示的404部分,圖5a和5b所示的502部分,圖6a所示的605部分。
確定單元105可用于執(zhí)行圖4e所示的405部分,圖5a和5b所示的503部分,圖6a所示的606-607部分,圖9所示的901-906部分。
顯示單元106可用于執(zhí)行圖5b所示的504部分,圖6a所示的608部分,
此外,本發(fā)明實施例還要求保護一種路徑規(guī)劃系統(tǒng),其可包括第一路徑規(guī)劃裝置和第二路徑規(guī)劃裝置,第一路徑規(guī)劃裝置的一種可能的結(jié)構(gòu)示意圖可參見圖10a,第二路徑規(guī)劃裝置的一種可能的結(jié)構(gòu)示意圖可參見圖10c或圖10d。
上述所有實施例所涉及的路徑規(guī)劃裝置/電子設(shè)備/服務(wù)器/終端的另一種可能的結(jié)構(gòu)示意圖可參見圖3,包括:
總線、處理器1、存儲器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5。處理器1、存儲器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5通過總線相互連接。其中:
總線可包括一通路,在計算機系統(tǒng)各個部件之間傳送信息。
處理器1可以是通用處理器,例如通用中央處理器(CPU)、網(wǎng)絡(luò)處理器(Network Processor,簡稱NP)、微處理器等,也可以是特定應用集成電路(application-specific integrated circuit,ASIC),或一個或多個用于控制本發(fā)明方案程序執(zhí)行的集成電路。還可以是數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。
處理器1可包括主處理器,還可包括基帶芯片、調(diào)制解調(diào)器等。
存儲器2中保存有執(zhí)行本發(fā)明技術(shù)方案的程序或腳本,還可以保存有操作系統(tǒng)和其他關(guān)鍵業(yè)務(wù)。具體地,程序可以包括程序代碼,程序代碼包括計算機操作指令。腳本則通常以文本(如ASCII)保存,只在被調(diào)用時進行解釋或編譯。
更具體的,存儲器2可以包括只讀存儲器(read-only memory,ROM)、可存儲靜態(tài)信息和指令的其他類型的靜態(tài)存儲設(shè)備、隨機存取存儲器(random access memory,RAM)、可存儲信息和指令的其他類型的動態(tài)存儲設(shè)備、磁盤存儲器、flash等等。
輸入設(shè)備4可包括接收用戶輸入的數(shù)據(jù)和信息的裝置,例如鍵盤、鼠標、攝像頭、掃描儀、光筆、語音輸入裝置、觸摸屏、計步器或重力感應器等。
輸出設(shè)備5可包括允許輸出信息給用戶的裝置,例如顯示屏、打印機、揚聲器等。
通信接口3可包括使用任何收發(fā)器一類的裝置,以便與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(WLAN)等。
控制器/處理器可用于執(zhí)行圖4a、圖4e、圖5a、圖5b、圖6a、圖9涉及路徑規(guī)劃裝置/電子設(shè)備/服務(wù)器/終端的處理過程和/或用于本申請所描述的技術(shù)的其他過程。
控制器/處理器也可用于實現(xiàn)前述擬合單元101至確定單元105的功能。
通信接口則用于支持路徑規(guī)劃裝置/電子設(shè)備/服務(wù)器/終端與其他裝置進行通信。
可以理解的是,圖2僅僅示出了路徑規(guī)劃裝置/電子設(shè)備/服務(wù)器/終端的簡化設(shè)計。在實際應用中,路徑規(guī)劃裝置/電子設(shè)備/服務(wù)器/終端可以包含任意數(shù)量的發(fā)射器,接收器,處理器,控制器,存儲器,通信接口等,而所有可以實現(xiàn)本發(fā)明的路徑規(guī)劃裝置/電子設(shè)備/服務(wù)器/終端都在本發(fā)明的保護范圍之內(nèi)。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,之處參見方法部分說明即可。
專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應用和設(shè)計約束段件。專業(yè)技術(shù)人員可以對每個特定的應用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應認為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、WD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。