專利名稱:一種協同實物編程方法
技術領域:
本發明屬于人機交互領域,具體涉及到一種通過實物進行多人協同編程的方法。
背景技術:
伴隨著計算技術的迅速發展,計算思維得到了越來越多的研究人員的重視。卡內基梅隆大學的教授周以真提出,計算思維是21世紀每個人都應該具備的基本技能,同時指出計算思維將成為和讀,寫,算一樣重要的每個兒童都應該具備的能力。計算思維有助于兒童發展分析能力,對他們在STEM (科學,技術,工程和數學)學科和其他領域,甚至是日常生活都有很大的好處。編程允許兒童去探討創造性的議題,并使其學習問題求解的技能。雖然計算思維并不只是計算機編程,但計算機科學與技術學科要求的編程能力中卻處處需要計算思維能力,兩者是相互促進的。目前大部分的編程語言是基于文本和符號的方式。這種編程方式對兒童來講,理 解和使用起來很不方便,其主要原因是傳統編程語言中的語法、復雜指令以及大量輸入工作。對兒童和初學編程者來講,學習這種編程語言、理解程序的運行方式是比較困難的一件事。同時,兒童很難理解和記住程序語言的語法、邏輯關系和程序架構等非常專業的知識。此外,對文字掌握得還不純熟的兒童來說,程序的文本編輯方式缺乏直觀性,兒童無法采用傳統的編程方式來創作自己的程序。因此,進行兒童編程研究的目的在于提供一種對兒童來說容易學習使用的編程軟件系統。正如我們之前申請的專利一種實物編程方法和系統(公開號CN 102136208)中所描述的,實物編程將實物交互方式與編程有效的結合起來,為兒童編程提供了一種有效的途徑。通過實物編程系統,兒童可以對程序語言的邏輯有更加直觀的理解。兒童通過對實物的拼接組合,就可以完成普通程序語言通過鍵盤輸入代碼完成的工作。協同工作為人們提供了一種新的工作模式,尤其對于兒童而言,有多方面的優勢。有研究表明兒童對于多人共同參與一項任務有著濃厚的興趣,該方式充分利用面對面交流的優點,幫助兒童綜合利用來自其他用戶的信息。面對面的合作所帶來的社交方面的益處也是人們共享計算機的主要原因之一。在多人共享計算機的情況下,計算機只能由一個人操作時,旁觀者由于沒有計算機的控制權,很容易失去興趣和注意力。而一些基于實物交互界面的系統,可以有效避免這一問題。同時,通過協同的合作,也可以有效的提高解決問題的效率和加快學習的速度。正是基于協同的上述優勢,我們提出了一種協同的實物編程方法。通過這種方法,用戶有更多的機會進行合作以及相互幫助,每一個人都有機會參與到任務中。協同編程不僅能增強用戶的參與意識,也能促進用戶之間的交流與合作,增強了編程的趣味性和娛樂性。當前已有的協同編程的方法和系統,都是允許用戶通過角色的分工合作來共同編寫一個程序。沒有能夠支持多個用戶同時進行編程,并且通過程序來進行相互協作
發明內容
針對現有技術中存在的技術問題,本發明的目的在于提供一種協同實物編程的方法。通過這種方法,多個用戶可以同時通過實物編程的方式來編寫程序,同時通過所編寫的程序來進行協作完成特定的任務。本發明通過讓兒童及新手使用實物編程塊來進行協作編程。一方面,解決了兒童及新手學習編程的難題。使得兒童和新手可以擺脫編程語言繁冗的語法,專注于程序設計本身。另一方面,在協作過程中,通過相互的交流溝通,加速了兒童及新手學習和解決編程問題的過程。同時,通過程序間的協作,幫助兒童和新手接觸和理解更加復雜的編程概念,比如并行處理和同步等。本發明的技術方案為一種協同實物編程的方法,其步驟為I)選取或建立一個雙人或多人協同實物編程顯示環境,并給出相應雙人或多人協 同實物編程的任務和協同任務執行規則,存儲到協同實物編程處理模塊中。下面通過雙人協作為例進行說明。2)協同任務是指參與協作的用戶需要分別通過實物編程塊來編寫的程序,控制游戲中對應的人物進行協作并完成指定的任務。3)用戶I和用戶2分別根據I)中的相應的協同任務要求,分別在自己的編程空間中,擺放實物編程塊序列完成任務;其中,每個實物編程塊的表面都貼有一個計算機視覺識別碼和易于兒童理解的語義圖形。4)設置有兩個攝像頭,分別用于獲取用戶I和用戶2單獨擺放的編程塊序列。兩個攝像頭會定時的拍攝用戶擺放的實物編程塊序列,上傳至計算機上的協同實物編程處理模塊。5)協同實物編程處理模塊接收到攝像頭拍攝的圖像后,會利用計算機視覺相關技術分別對于兩個攝像頭拍攝的圖像進行分析,找出每個用戶所擺放的實物編程塊序列的相
關信息。6)步驟5)中得到了每個用戶實物編程塊序列的相關信息后,協同實物編程處理模塊會分別對于兩個用戶通過實物編程塊所編寫的程序進行語法和語義的分析和理解,根據每一用戶的實物編程塊序列信息將其轉換為相應的功能語義序列。首先,需要對于當前位置的資源進行沖突檢測,如果檢測到資源沖突,就進行沖突解決。然后,結合兩個用戶當前進行中的任務信息以及雙方所擺放的編程塊序列中是否包含協同操作塊,來判斷是否是協同操作,如果不是就按照專利一種實物編程方法和系統(公開號CN102136208)所述的方法對每個用戶的程序進行分析處理;如果是協同操作,則進行相應的協同處理。7)步驟6)中的如有錯誤,則本方法將對于兩個用戶分別給出明確實時的圖形反饋,提示兩個用戶出錯原因,直到用戶正確修改程序。重復步驟I到5直到程序完成。如果兩個用戶的程序全部編譯正確,本方法會給出正確的圖形反饋。8)如果在步驟6)中,兩個用戶通過實物編程塊編寫的程序正確,并且完成了相應的任務后,用戶可以選擇運行程序。每個程序在運行的過程中,每一步執行都會進行沖突檢測,判斷程序對應的人物是否和其他用戶的程序對應人物在地圖中發生沖突并處理。根據兩個用戶所編寫的程序不同,本方法會分別針對每個用戶給出單獨的多媒體反饋。每個用戶的程序對應著一個人物,而每個用戶程序的執行效果通過這個人物的相應動作和行為進行顯示。9)在步驟8)中,在執行協同部分的程序時,兩個用戶所編寫的程序會進行通信以確保狀態的同步,只有兩個程序的狀態都達到一致狀態后,協同部分的程序才會繼續執行。比如,當一個用戶程序所控制的人物1,已經走到了協同任務要執行的起始位置,但是與其協同的程序控制點另一個人物2,還未走到協同任務起始執行位置,此時,人物I的程序會暫停執行,直到人物2的程序執行到對應可協同的位置并發送信號,將人物I的程序恢復執行,并同時開始協同部分任務的執行。如果兩個程序在執行到協同部分時的狀態不同步,則執行較快的一方程序需要進行暫停等待,直到同步完成,才可以繼續執行。步驟I)進一步包括在提供的協同實物編程環境下,定義相應的協同編程任務,供多用戶使用,在本發明中,以兩個用戶為例進行說明,分別為用戶I和用戶2。用戶I和用戶2的程序將通過分別對應著兩個不同的人物的行為和動作進行反饋。 (I)根據給出的協同編程任務來制定相應的任務規則。以家具布置為例,在這里,需要每個用戶確定從當前位置移動到待移動家具的可行路線。同時,還需要確定移動每個家具所使用的操作和移動的位置方向和步數。在遇到需要協作才能移動的家具時,還需要考慮使用協同控制操作來完成任務。(2)協同實物編程軟件處理模塊會依據當前協同編程任務內容、當前的協同任務規則,和當前每個用戶所擺放的實物編程塊序列來確定游戲的當前狀態。然后,由協同實物編程顯示環境實時顯示整個環境的當前狀態。包括,每個用戶當前的任務進度和每個用戶程序的編譯結果反饋等。步驟3)進一步包括每個用戶所編寫的程序需要首先滿足單人實物編程語法分析的要求,并單獨進行語法分析。當所控制的人物遇到協同編程任務或者用戶編程塊中擺放了協同控制編程塊后,需要將參與協同任務的用戶編寫的程序結合協同任務的要求,進行協同編程的語法分析,判斷是否滿足協同任務要求。步驟3)進一步包括(I)在選擇相應任務關卡后,兩個用戶分別閱讀相應協同任務的目標和規則。用戶需要在這一步理解整個協同任務的目標,然后通過思考和交流來確定解決步驟。(2)根據⑴中的協同任務目標,用戶I和用戶2分別在共有的實物編程塊中,選取相應的實物編程塊,并且將實物編程塊以一定的順序放在屬于自己的編程空間中。每個實物編程塊上都貼有計算機視覺識別碼供系統識別和圖形語義圖標幫助用戶理解每個編程塊的功能。步驟4)進一步包括(I)每個編程空間都配有一個攝像頭來捕捉用戶的程序序列。每個攝像頭獨立的對于用戶的編程空間內的實物編程塊序列進行拍照。所拍攝的每個用戶擺放的編程塊序列照片,都會單獨傳送到實物編程模塊進行識別分析,完成程序的編譯分析。步驟5)進一步包括(I)對于每個攝像頭所捕捉到的圖片,分別使用計算機視覺技術,對圖像進行處理,找出每張圖像中所包含的計算機視覺識別碼的相關信息,包括所識別出的每個計算機視覺識別碼在圖像中的位置信息和每個識別碼本身所代表的識別編號等。(2)通過識別出的位置信息,分析每張圖片中,實物編程塊相互之間的邏輯拓撲關系,還原兩個用戶的實物編程塊序列的順序,并對于識別出每個用戶的計算機視覺識別碼序列建立相應的數據結構進行存儲。步驟6)進一步包括(I)建立計算機視覺識別碼與相應實物編程塊語義之間的映射關系表。本協同實物編程塊分為六大類,分別是開始結束編程塊、方向編程塊、循環控制編程塊、循環數字編程塊、動作編程塊和協同控制編程塊。每種實物編程塊都有與其對應的唯一計算機視覺識
別碼一一對應。(2)將步驟5中,針對每個用戶建立的計算機視覺識別碼編程塊序列,通過⑴中建立的映射表并結合位置信息轉換為實物編程語言中的相應功能語義序列。(3)依據當前任務地圖,對于當前編譯狀態下,操作位置的資源進行沖突檢測。如果此資源發生沖突即有多個程序需要占有此資源,則需要進行沖突消解。如果此時已有一方先占有資源,其余沖突方程序的相應對于搶占資源的操作會失敗,并進行等待,直到先占有一方釋放資源。如果沖突方,同時提出資源占有請求,則隨機進行搶占優先權分配。(4)依據當前任務,本方法會給出對應的語法語義判定規則。如果是單人任務,則單獨對該用戶編寫程序所對于的功能語義序列結合相應的任務信息,地圖背景等進行語法語義分析。具體可參考專利一種實物編程方法和系統(公開號CN 102136208)。如果是多人協同的任務,協同游戲的語法語義規則是依據家庭地圖的可行路徑,以及相應協同任務相關情況制定。即用戶的協同程序除了要滿足基本編程語法外,程序的語義還需要滿足協同任務的要求。本方法會依據上述協同游戲的語法語義規則,對于(2)中所轉換好的每個用戶的實物編程語言的功能語義序列來進行相應的語法語義分析。(5)如果⑷中的協同任務編程中,用戶的編程序列包含協同操作的內容,則首先需要對于協同部分的代碼單獨進行協同語法檢測,首先對于協同部分代碼中,協同控制編程塊的語法正確性進行檢測,然后對于中間的協同操作序列的語法依據單人任務的編程語法進行檢測判斷。而后結合每個協同參與用戶的當前程序指令,對于協同部分的操作進行語義分析,判斷是否滿足協同部分的語義要求。具體的是通過對于協同任務的具體操作和任務要求,以及參與協同用戶的協同操作序列進行分析,判斷每個用戶的協同操作序列是否能夠達到協同任務的目標。步驟7)進一步包括(I)如果步驟6中,讀取的當前用戶指令不滿足該協同實物編程顯示環境的語法語義判定規則,則實時通過文字、圖像等多媒體呈現方式分別實時反饋給每個用戶,并在每個用戶的提示區域給出相應的錯誤提示,幫助并鼓勵用戶進行思考,找到并解決相應錯誤。比如,如果用戶I的程序編譯出現錯誤,一方面,在用戶I所對應的提示反饋區域,會出現卡通的哭臉來提示有程序有錯誤發生。另一方面,在地圖上,本方法會繼續給出當前用戶代碼序列中所有正確編譯過的代碼的反饋,幫助用戶來找到錯誤代碼發生的位置。(2)如果步驟6滿足該協同實物編程顯示環境的語法語義判定規則,則分別給用戶編程正確的反饋提示。正確的反饋包括給每個用戶在對應的提示區域分別給出笑臉的反饋;對當前每個用戶當前讀取并成功編譯的指令執行進行提示。例如,對于方向編程塊通過在地圖單元格上繪制箭頭來提示位置,其中不同顏色的箭頭對應不同的用戶。同時,如果讀取的是協同部分的指令,則兩個用戶的相應反饋顏色均為紅色,以提示用戶這一部分是共同需要完成的任務。如果兩個用戶都已經正確完成了程序的編寫,則提示用戶可以進入程序執行階段。步驟8)進一步包括(I)當兩個用戶所分別編寫的程序全部正確,并且滿足相應的任務需求后,用戶可以選擇開始運行程序。(2)在執行過程中,每個程序在所對應的人物每行進一步時,都會對于該位置進行沖突檢測判斷是否存在資源搶占問題。如果該位置沒有其他程序對應人物搶占沖突,則繼續執行。如果發生和其他程序對應人物對于同一位置的資源沖突,則需要進行沖突消解。如果已有一方提前占有了沖突資源,則后來程序需要等待,直到已占有程序放棄資源。否則, 在進行沖突消解時,首先會判斷沖突位置和雙方程序對應人物起始位置之間的距離以及到達沖突位置的時間,位置短以及先到達者對應的程序將會繼續執行。而距離遠以及后到達者的程序,需要進行暫停,直到先通過沖突位置的程序,發出釋放信號,等待的程序及對應的人物才可以繼續執行。如果在沖突消解時,沖突雙方程序對應人物的起始位置與沖突位置之間的距離相同或者到達時間相同時,則隨機決定由哪一方程序優先通過,其余沖突方進行等待。(3)兩個程序的運行結果,會分別生成多媒體的反饋效果,主要是屏幕上生成動畫等。每個用戶所編寫程序在地圖中路徑的反饋顏色也不同,可以很容易分辨每個程序所對應的路徑和行為。每個用戶的程序對應著一個不同的人物,而每個用戶的程序的執行的效果通過這個人物的相應動作和行為進行顯示,包括,行走,推,拉,打掃等等。同時,當每個迷宮中的任務,執行了特定的動作后,本方法也會針對每個動作給出單獨的反饋。比如,當用戶打掃完一處的垃圾,此處的垃圾會消失,并且地板的顏色會發生改變,以提示該部分已經清掃。步驟9)進一步包括(I)協同部分指令的執行結果,以動畫反饋的形式輸出,以雙人協同為例,只有當兩個用戶所控制的迷宮中的人物,均滿足協同程序開始的條件,比如到達了協同程序開始協作的位置時,協同部分才能夠開始執行。具體的也就是說,如果用戶I的程序在步驟6中執行到了協同編程指令,需要與用戶2的程序進行同步通信,只有當雙方的程序狀態一致滿足協同操作的要求后,程序才能夠開始執行協同操作部分的代碼。判定雙方程序狀態是否協同一致是依據雙方程序所控制的人物,是否都進入到了協同操作開始執行的位置,當雙方都滿足協同要求后,每個程序會開始單獨的讀取協同操作部分的命令并進行執行。如果在步驟9中,雙方程序執行到協同編程指令時的狀態,不滿足同步的需求,則已經完成協同操作準備的程序需要暫停等待,直到系統另一方的程序也滿足執行協同部分程序的要求。實現本方法的具體模塊結構如圖I所示,包含輸入模塊、識別理解模塊、邏輯處理模塊和結果顯示模塊。這四個模塊之間的關系是輸入模塊作為整個信息輸入端,以雙人協作為例,主要包含,兩個攝像頭和筆或鼠標等輸入設備。兩個攝像頭是用來分別捕捉每個用戶單獨擺放的實物編程塊序列。而鼠標和筆是讓用戶控制完成程序的一些基本功能。識別理解模塊包含了圖像捕捉、計算機視覺識別、指點操作理解三個部分。圖像捕捉是通過調用相應的攝像頭控制模塊來控制攝像頭實時拍攝圖片。計算機視覺識別則對于拍攝到的圖片進行識別處理,找出每個實物編程塊在每個圖片中的位置。指點操作理解,用來對于用戶通過筆和鼠標來完成的一些操作進行判斷并執行。邏輯處理模塊包括語法分析、語義分析,協同理解,同步控制,實時反饋、游戲控制等六個部分。語法分析就是要對于用戶所擺放的實物編程塊序列,結合相應的協同編程語法規則,來判斷用戶編程的語法是否正確。語義分析,在語法分析的基礎上,結合協同游戲的規則,背景地圖和任務信息,對于相應的操作的語義正確性進行理解和分析。實時反饋,將語法語義分析結果實時的提供給用戶。而游戲控制是依據每個用戶所編寫的程序,分別執行相應的游戲指令。協同理解,是指對于用戶代碼中協同部分代碼,單獨進行協同語法分析,同時結合另一個用戶的程序進行語義的判斷。具體是將每個參與協同的用戶的協同操作部分的代碼進行分析,然后對于雙方的操作結合協同任務要求進行分析,判斷是否操作是否能夠滿足協同任務的要求。同步控制是指,當兩個用戶所編寫的程序執行到協同程序部分時,需要進行彼此間同步通信,只有每個程序均滿足協同部分的要求后,才能開始執行協同程序代碼。最后,結果顯示模塊,是作為輸出來與用戶進行交互反饋的。這個模塊主要由兩部分組成圖像輸出和動畫輸出。在整個游戲的編程階段,所有的反饋,包括程序總體界面和編譯圖像提示等,都是以圖像輸出的形式進 行呈現。而動畫輸出是指在程序完成編程階段后,本方法會根據用戶所編寫的程序內容,自動生成動畫以對于程序的執行進行可視化的反饋。本方法的實現架構圖如圖2所示,主要分為界面交互層,內部處理層和數據資源三部分。界面交互層主要用來處理主程序和用戶進行交互的輸入輸出,包含用戶程序輸入,用戶通過鼠標和筆的輸入,以及最后的圖像以及動畫的反饋呈現等。內部處理層,對于界面交互層的輸入進行了數據采集,然后通過邏輯控制調用數據資源層的相關資源內容,最后經過信息反饋渲染提供給界面交互層進行反饋。本方法在我們現有的專利一種實物編程的方法和系統(公開號CN 102136208)的基礎上,通過計算機視覺等技術,提出了一個支持多人同時協作編程的協作實物編程方法。這種方法通過允許多個用戶同時通過實物編程塊進行編程,并且所編寫的程序進行實時的協同完成任務,實現了實物編程語言的一個突破。這種協同編程的方式,一方面可以通過用戶之間的協作和溝通加速用戶學習編程的過程和樂趣;另一方面,通過程序的協同,可以幫助用戶接觸并體驗并行處理和同步等高級的編程語言概念。由于本方法容易實現且成本低廉,所以具有很好的推廣潛力。在兒童教育、家庭娛樂、兒童編程學習等環境下,多個用戶都可以通過協同編程來完成游戲任務,同時學習接觸到相關的編程知識。與現有技術相比,本發明具有如下的優點和技術效果I.給出了一種適合兒童的協同實物編程方法。本發明給出的協同實物編程方法,降低了編程對于兒童的難度,同時允許兒童通過我們的方法進行協作編程.2.給出了一種支持多個兒童同時進行編程的實物交互方法本發明通過采用多個攝像頭,支持多個兒童在獨立的編程空間內同時進行編程.攝像頭會單獨對于每個兒童的編程序列進行捕捉和識別。3.支持多個兒童通過多種方式來進行協同
本協同編程方法,不僅支持兒童在開發的空間內通過互相幫助,語言溝通來進行協同,還支持兩個兒童通過編寫自己所編寫的程序來進行協同完成特定協同任務。4.通過實時的圖形編譯反饋,降低調試程序的難度本發明給出的協同編程方法會對于每個用戶所編寫的程序,以實時的多媒體圖像方式分別給每個用戶進行直觀反饋,幫助多用戶進行程序的調試,降低調試難度。5.成本低廉,易于推廣。相比于其他的一些實物編程系統,本方法價格低廉,容易進行推廣。
圖I本方法的基本處理流程圖;
圖2本方法的系統架構圖;圖3本原型連接結構圖;圖4本方法的實現流程圖。
具體實施例方式為了使本技術領域的技術人員更好的理解,下面結合附圖和實施方式對本協同編程方法作進一步的詳細說明本發明方法的雙人協作示例的連接結構圖如圖3所示,主要由一臺計算機主機,一臺顯示器,兩個攝像頭和兩套實物編程塊組成。主機用來存儲程序以及進行運算,顯示器進行結果的反饋,而兩個攝像頭來對于兩個用戶所擺放的實物編程塊序列進行拍照。本發明的實現流程如圖4所示。主要分為狀態控制、編程調試和程序執行三個階段。首先是狀態控制部分。如圖4所示,此階段主要分為用戶輸入監聽和用戶行為分析兩個模塊。用戶輸入監聽模塊用來監聽來自用戶可操作的筆或鼠標的輸入數據,伴隨著整個原型的啟動而開始。監聽到數據后,將相應的輸入數據傳送給用戶輸入分析模塊來進行處理分析。下面詳細說明在狀態控制階段的各個模塊的詳細功能(I)用戶輸入監聽用戶輸入監聽是整個系統中獲取用戶輸入與用戶進行交互的重要部分,主要是用來對于用戶的鼠標或筆的操作數據進行監聽,并將結果傳給(2)進行分析,決定程序的下
一步動作。I.對于鼠標或筆的輸入監聽。這一部分伴隨著整個系統的啟動而開始,系統主要記錄筆或者鼠標在界面上即時位置的變化,以及是否被點擊或者雙擊等操作的發生。一旦檢測到相應的事件,便將數據記錄發送給(2)進行用戶行為的分析,執行每個操作所對應的功能。(2)用戶行為分析在(I)中獲取了鼠標或筆的輸入數據后,用戶行為分析模塊將會對于輸入數據進行相應的處理和理解,分析相應用戶的行為和意圖,然后執行。I.對于筆或鼠標的輸入的理解分析。這一部分的分析主要分為3個階段。第一階段,程序啟動時,用戶需要通過筆或鼠標這樣的輸入設備來點擊用戶界面上的響應按鈕來選擇相應的游戲內容類型或者退出系統。第二階段,當第一階段用戶選擇了相應的游戲類型后,會進入相應的游戲關卡選擇界面,用戶行為分析此時需要判斷用戶通過筆或鼠標選擇了哪一個關卡內容,而后轉入響應相應關卡的游戲地圖界面。第三階段,在第二階段用戶選擇進入了游戲地圖界面后,用戶可以通過筆或鼠標這樣的輸入設備來點擊游戲界面上的編程控制按鈕,來開始編程或者開始執行程序。在完成了狀態控制階段后,程序將進入協同編程調試階段或者進入協同程序執行階段。下面先對協同編譯調試階段進行說明。協同編譯調試階段是整個協同編程方法最重要部分。在這個部分,每個用戶需要通過擺放實物編程塊來分別編寫程序分別控制游戲中的所對應的格子人物,獨自或者協作的完成相應的指定任務。在此過程中,本方法會定時的捕捉每個用戶的編程序列,并且進行編譯,實時的給出反饋幫助用戶進行編程。以雙人協作為例,主要的操作步驟如下首先,通過相應的視頻圖像捕捉模塊,來控制兩個攝像頭定時的拍攝兩個用戶的實物編程序列的照片。而后,將拍攝的照片通過計算機視覺技術來進行分析識別。將識別出的計算機視覺識別碼序列映射為此協同編程語言的指令,為每個用戶得到一個編程指令序列。最后,對于每個用戶的編程指令序列進行編譯并給出實時的反饋。下面將詳細介紹這一部分的各個功能 模塊和步驟(I)圖像捕捉處理I.打開攝像頭。當用戶在游戲主界面通過鼠標或筆點擊相應編程控制按鈕,開始進行編程后,系統第一步,會通過調用相應的攝像頭控制模塊打開兩個攝像頭,為下一步的圖像捕捉處理做準備。2.啟動定時器。在完成弟I步打開攝像頭后,本方法會為每個攝像頭分別啟動一個定時器,直到編程調試階段結束。兩個定時器分別控制著兩個攝像頭,每隔I秒左右對用戶擺放的實物編程塊序列進行拍照。所拍攝照片供系統分析識別使用。3.圖像捕捉。在第2步定時器啟動后,通過調用系統軟件中的圖像捕捉模塊,來分別控制兩個攝像頭拍攝用戶所擺放的實物編程塊序列。并且將所捕捉到的每個用戶的編程序列圖片分別保存到unsigned char數組當中,供下一步計算機視覺識別使用。4.計算機視覺識別。在圖像捕捉部分,系統將拍攝有兩個用戶所保存的實物編程塊序列的圖片數據分別保存在兩個unsigned char數組當中。而在計算機視覺識別部分,就是要對于兩個保存的圖像數據進行處理,分析出每幅圖像中編程塊的信息和位置。在本系統中,在每個實物編程塊的表面都貼有計算機視覺識別碼。系統通過圖像捕捉模塊將每個用戶擺放的實物編程塊序列拍攝下來,圖像中包含了每個實物編程塊表面的計算機視覺識別碼。在計算機視覺識別階段,系統通過調用相應的計算機視覺識別庫中的響應識別函數,對于圖像捕捉階段保存的每個用戶所對應的圖像數據unsigned char數組進行處理識另IJ,獲取了圖像中每個計算機視覺識別碼的具體信息和他們在圖像中的位置。(2)語法分析和語義理解I.本方法通過(I)后,獲取了每幅圖像中的所有計算機視覺識別碼的信息和位置。在語法分析和語義理解的兩個階段,就是要將這些信息進行分析得到每個用戶程序的語法語義正確性。而對于每一幅圖片中的信息的分析過程,主要可以分為兩步。a.第一步,分析所有計算機視覺識別碼相互之間的邏輯和拓撲關系。由于攝像頭的拍攝視野有限,因此,當用戶擺放的實物編程序列中某一行的長度超出攝像頭拍攝視野的寬度時,用戶可以在原有實物編程塊序列的下方重新開始新的一行進行擺放,本方法會自動識別為一個連續程序序列。系統通過這樣的方式來支持在程序中使用更多的實物編程塊的數量。下一步,系統會通過對于識別出來的每個計算機視覺識別碼在圖像中的位置信息進行相應的排序,來確定所有編程塊的拓撲順序。整個編程塊序列在圖像中的識別順序是,先上后下,先左后右。因此,依據此規則,在第(I)步的基礎上,先根據所有識別出的計算機視覺碼的在圖像中的y坐標進行一次排序,將所有的識別碼按照從上到下的順序排好。然后在此基礎上,再對于所有的識別碼進行行切分。最后,對于切分好的每一行,對于其X坐標進行排序。經過這樣過程后,就可以得出沒用用戶擺放的實物編程塊序列的所有的計算機視覺識別碼的拓撲順序。b.第二步,在a中確定了所有的計算機視覺識別碼的拓撲邏輯關系基礎上,要將這些計算機視覺識別碼與對應的程序功能語義映射,而后再將這些語義轉換為具體的程序指令。協同實物編程塊分為六大類,分別是開始結束編程塊、方向編程塊、循環控制編程塊、循環數字編程塊、動作編程塊和協同控制編程塊。每種實物編程塊都有與其對應的唯一計算機視覺識別碼一一對應。在當前的協同實物編程系統中一共使用了 21種不同的計算機·視覺識別碼,他們與程序中的語義的對應關系。所對應的功能語義為程序開始、程序結束、協同開始、協同結束、向上下左右四個方向行走、循環開始、循環結束,從I到9等九個數字,用來表示循環操作的重復次數,以及拿起、放下、推、拉,掃地,拖地等動作。系統根據對應關系,將識別好的計算機視覺識別碼按照原有的拓撲順序轉換為相應的功能語義代碼,并保存在相應的數據容器中。2.在I中,經過相應的轉換得到的功能語義序列中,若檢測到包含有協同控制相關語義代碼,則需要單獨對于協同部分的代碼進行語法分析和語義理解。首先,需要檢測協同部分的編程塊是否符合協同控制等語法。在當前的實物編程方法中,協同部分的語法規則應該為首先擺放協同開始編程塊,最后擺放協同結束編程塊標示著整個協同部分的完成,然后在協同開始和協同結束編程塊中間擺放所需要協同的動作編程塊序列。在每一步語法分析完成后,本方法會同時結合相關的游戲地圖(主要包含當前地圖中的所有家具和物體的位置以及可行路徑的信息)和任務信息對于語義正確性進行檢測.比如,在當前位置是否有需要協同的任務,根據用戶的程序序列,結合協同任務的信息和游戲地圖的位置信息,來判斷當前的協同操作是否正確等,并給出相應的反饋信息.具體內容在(3)中進行描述。(3)游戲狀態理解和反饋I.游戲狀態理解。在游戲狀態理解階段,在經過了(2)中對于程序的語法分析和語義理解之后,本方法會結合游戲的相關地圖和任務信息對于當前每個用戶的功能語義代碼序列進行分析,從而對協同游戲狀態進行理解和判斷,并且給出相應的反饋。當前游戲狀態包括當前游戲任務的地圖和任務的相關信息、當前兩個用戶所走到的位置、當前兩個用戶已經完成的任務和未完成的任務以及每個用戶所擺放的實物編程塊序列等。具體的過程是,依次從第(2)步保存的兩個用戶程序所對應的功能語義序列中取出相應的命令,每取到一個命令后,根據該命令的種類結合游戲的規則,游戲的地圖和任務信息,以及當前的任務狀態來進行判斷是否符合當前協同游戲的狀態,并需要進行沖突檢測。如果不符合,則在當前用戶的反饋提示區域內,進行單獨的結果反饋,同時停止讀取該用戶剩下的語義命令。如果正確,則繼續從該用戶的功能語義序列中取出命令,并對于當前命令進行語義理解,結合相應的游戲規則,游戲地圖以及人物信息來判斷語義正確性。直到取出所有命令或某個命令不符合當前游戲狀態返回。具體的,在每一步判斷某個命令是否符合當前游戲狀態時,不同命令的判斷依據和過程也不同。其中開始結束指令,方向命令的判斷過程可以參考專利一種實物編程方法和系統(公開號CN 102136208)所述。其他指令的判斷過程如下所示a.動作相關指令。當前的協同游戲中所包含的動作相關指令為拿起動作指令,放下動作指令,掃地動作指令,拖地動作指令,推動作指令,拉動作指令。當取出的指令為拿起動作指令時,本方法會檢測當前人物所在位置的四周是否有可拿起的物體,比如掃箸和拖把。如果取出的是放下動作指令,本方法會檢測當前位置是否為空,能否放下人物所持物體以及當前用戶是否有可放下的物體。如果是掃地或者拖地動作指令,則檢測當前用戶的手里是否已經拿起了相應的工具,比如掃帚和拖把等。如果讀取到的是推或者拉動作指令, 需要讀取當前人物所站方向的正前方或正后方是否為可行的單元格。下一步,會對于每個動作指令所針對的位置和資源進行沖突檢測。如果該資源已經被其他程序所搶占,則發生了資源沖突。需要進行沖突消解。這時會根據沖突雙方的起始位置和沖突資源位置之間的距離進行判斷,距離短者獲得資源使用權,其他用戶的相關動作操作則失敗,并給出反饋。如果沖突相關方的距離相同,則隨機分配資源優先使用權。如果相關的動作指令符合當前游戲的狀態,則繼續讀取下一個指令。如果不符合相應的游戲狀態,則本方法給出相應的錯誤反饋提示。b.循環相關指令。循環相關指令主要包含循環控制指令和循環數字指令兩種。循環控制指令在本協同編程方法中的使用順序為,循環開始指令,方向指令,循環操作指令,循環次數指令和循環結束指令。循環開始和結束指令標示著一個循環的開始和結束。方向指令,表示游戲中的人物所需要循環移動的方向。循環操作指令,表示人物伴隨著移動所需要同時進行的循環動作。循環次數指令用來標明循環應該重復執行的次數。除了使用循環控制指令來進行循環外,還可以通過循環數字指令,進行簡易循環操作。使用方法為,用戶先放下所需要循環重復的編程動作塊,而后直接放下循環數字塊表示循環重復的次數。在這里,這種簡易循環操作支持的循環編程指令為,方向編程指令、推編程指令和拉編程指令。如果在這一步,順利的取出所有的循環指令,下一步會依據a, b, c的相關指令判定規貝U,結合游戲場景地圖和游戲規則來判斷,相應的循環操作能否正確執行,如果不能正確執行,則按照a,b,c中的規則給出相應的錯誤反饋。c.協同控制相關指令。協同控制的相關指令是用來控制一個協同操作的開始和結束。主要包括,協同開始指令和協同結束指令。協同控制指令的使用次序應該為協同開始指令,協同內容指令序列,協同結束指令。其中協同內容指令序列可以為一個或者多個為了完成特定的協同任務的編程指令。比如,當兩個用戶需要合作將一個沙發向前推動5個單元格時,協同內容的指令序列就應該為,推編程指令加上循環次數為5的循環次數指令。而本方法的處理流程是,當讀取到協同開始指令后,會檢測當前的人物是否已經進入了協同開始的狀態。如果不是,則給出錯誤反饋。如果是,則通過游戲狀態信息判定當前是否有需要進行協同的任務。如果沒有,則給出錯誤反饋。如果有則繼續進行指令讀取。在讀取后面協同內容的指令序列時,語法和語義的分析過程與a,b,c部分的一致。最后,本方法會針對每個用戶的協同指令給出單獨的圖形反饋。2.反饋本方法會實時的給出每個用戶相應的反饋信息。根據內容不同可以分為三種不同的反饋編譯結果的圖像反饋、編程提示的圖像反饋、協同任務反饋和程序運行的動畫輸出反饋。a.編譯結果圖像反饋。主要是通過卡通臉表情的變化來給用戶以直觀的提示。微笑的卡通臉表示游戲狀態理解正確。沮喪卡通臉表示游戲狀態理解有錯誤。此編譯圖像反饋結果將會動態的顯示在每個用戶的特定反饋結果區域內。即用戶所控制人物當前的路徑狀態上。
b.編程提示圖像反饋。在編程階段,本方法會對于用戶編程的結果動態的顯示在游戲地圖上。具體的提示方式如下當用戶擺放的方向編程塊符合當前游戲的狀態時,本方法會在相應的單元格上繪制對應的方向圖標,而為了區分兩個用戶的編程進度,二者的方向圖標顏色不同。而當用戶通過拿起編程塊成功拿起掃帚或者拖把等工具時,在地圖中的相應工具圖標會從彩色變為灰色。當用戶通過掃地塊或者拖地塊成功開始進行掃地時,本方法會將當前打掃的塊以及他四周8個單元格的顏色變為某一顏色如紫色,表示當游戲中人物走過一個單元格時,系統會設置為它四周的8塊單元格也都被打掃干凈。而當用戶通過推或者拉的動作塊來移動家具時,本方法會繪制相應家具的黑色邊框在當前已經移動的目標上,來提示用戶已經移動的位置。C.協同反饋提示。本方法對于協同的反饋提示有所不同。如果用戶進入了協同編程的狀態,兩個用戶在單元格上繪制的方向圖標變為一致的顏色,用來提示用戶已經進入了雙人合作狀態中。比如,當兩個用戶所控制的人物需要共同來推沙發到指定位置時,當他們開始協同部分的推的操作后,兩人的操作反饋在地圖單元格上都會以紅色的箭頭來進行提示,當完成協同部分的操作后,兩人的操作反饋會恢復原有不同的反饋箭頭顏色。d.程序運行的動畫反饋。當所有編程任務都已經被完成后,可以進行程序的執行。每個用戶的程序執行,在系統中對應著一個不同的人物,而每個程序的執行的效果通過這個人物的相應動作和行為進行顯示,包括,行走,推,拉,打掃等等。同時,當每個迷宮中的任務,執行了特定的動作后,本方法也會針對每個動作給出單獨的動畫反饋。反饋是本方法實時調試的一個重要組成部分。用戶可以根據圖像提示來綜合判斷所編寫程序的出錯位置。很大程度上方便了程序調試的整個過程。如圖4所示,在編譯調試階段的最后部分,本方法會判斷兩個用戶是否繼續進行編程。如果繼續編程,就返回到上面的圖像捕捉,繼續重復上述行為。如果選擇不繼續進行編程,則返回操作理解階段,判斷用戶的意圖。通常有兩種情況一種是,用戶在編程過程中,點擊退出按鈕,退出程序的執行;另一種是,兩個用戶通過本方法的實物編程塊,都成功完成了各自的任務和全部協同編程任務,點擊開始執行按鈕,從編程調試階段進入到了程序運行階段。在進入程序運行階段時,本方法將針對每個用戶的程序啟動一個線程來進行程序的同步及執行。以雙人協作為例,會啟動兩個線程,來同時讀取并執行兩個用戶在編程階段所完成的編程指令序列。在遇到協同部分指令時,還需要兩個線程之間進行同步,來完成相應的指令執行。(I)指令獲取在這一階段,本方法會分別依次讀取在編譯調試階段編譯通過后保存的每個用戶所編寫指令序列供(2)使用。(2)指令語義分析和執行
在這一階段,將會對于在(I)中讀取的指令進行執行。在此階段中,并沒有對于指令正確與否的判斷和反饋,因為所執行的指令應該均是經過編程調試階段的可執行指令。在這一階段,需要進行相關信息判斷I.當前人物是否已經完成了所有的指令執行和任務,如果是,則結束程序執行,如果不是,則繼續取指令執行。2.進行沖突檢測和沖突消解。每讀取一條指令進行執行前,都需要對于操作執行的位置及資源進行沖突檢測。如果和其他人物發生了資源搶占沖突,則需要進行沖突消解。沖突消解的主要依據時,參與沖突人物到達沖突位置的先后順序以及起始位置距離沖突位置的距離。先到達沖突位置或者距離沖突位置更近的人物,將優先讀取并執行指令通過,其余人物則暫停指令執行,等待通過人物發出資源釋放信號。如果參與沖突的人物,同時到達沖突位置并且起始位置和沖突位置距離相同,則隨機確定優先執行指令通過的任務。2.當前讀取的指令,是否為協同操作指令。如果不是,則直接進行指令執行。如果是協同操作指令,則首先需要讀取協同的操作內容指令。然后分析另一個協作用戶是否達到了一致的任務協作狀態。如果所有用戶的程序都已達到同步的協作狀態,則可以執行協作部分指令。如果未達到同步協作狀態的要求,則先到達同步狀態的程序需要被暫時掛起等待,直到其他用戶的程序滿足同步狀態需求。在此過程中,用戶間的程序會進行通信和同步。比如,在布置家具任務中,需要兩個用戶程序所控制的人物協作將大件的家具,比如沙發移動到指定位置。如果當用戶I的人物已經走到沙發前,需要開始執行協作操作,進行推沙發時,用戶2的人物還沒有到達指定的協作位置。這時,用戶I的人物會暫停動作即程序掛起等待,直到用戶2的人物也移動到沙發前的指定協作位置上后,激活用戶I的程序執行,兩個人物一起執行協作部分的操作,將沙發推到指定位置。(3)游戲狀態更新在協作編程方法中,兩個用戶的程序每執行一個指令,都會動態的繪制相應的動畫來進行反饋。當兩個用戶的所有指令都執行完畢后,本方法會結束程序執行階段。綜上所述,本發明給出了一種通過實物編程塊來進行協同編程的方法。有效的簡化了編程語言的語法,使得兒童可以集中精力在解決問題本身的邏輯上。通過此方法,用戶有更多的機會進行合作以及相互幫助,每一個人都有機會參與到任務中增強了編程的趣味性和娛樂性。同時,在這套協同實物編程方法中,多個用戶可以同時通過實物編程的方式來編寫程序,同時通過所編寫的程序來進行協作完成特定的任務。
權利要求
1.一種協同實物編程方法,其步驟為 1)選取或建立一個雙人或多人協同實物編程顯示環境,并將雙人或多人協同任務以及協同任務執行規則存儲到協同實物編程處理模塊中; 2)用戶根據協同任務要求分別在自己的編程空間中擺放實物編程塊序列;其中,每個實物編程塊的表面都設有一個計算機視覺識別碼和一語義圖形; 3)實時獲取每一用戶當前所擺放的實物編程塊序列,并將其分別發送給所述協同實物編程處理模塊; 4)協同實物編程處理模塊根據每一用戶的實物編程塊序列信息將其轉換為相應的功能語義序列; 5)協同實物編程處理模塊從當前功能語義序列中順序取出操作指令,并判斷是否滿足協同任務執行規則;當指令為協同操作開始指令時,用戶開始同步通信,當用戶都滿足協同要求后,從當前功能語義序列中讀取并執行協同操作部分的命令,然后根據協同任務執行規則和同步通信的反饋信息判斷當前的協同操作是否正確;如果某用戶協同操作不正確,則反饋提示信息給該用戶,如果所有用戶協同操作均正確,則每一用戶執行下一指令并判斷協同操作是否正確,直到出現協同操作結束指令,結束協同判斷和同步通信。
2.如權利要求I所述的方法,其特征在于用戶開始同步通信后,執行每一協同操作部分的命令前,進行資源沖突檢測,其方法為首先檢查當前命令所針對的位置和/或資源是否已被占用,如果已被占用,則根據沖突雙方的起始位置和沖突資源位置之間的距離進行判斷,距離短者獲得資源使用權,其他用戶的相關命令操作則失敗,并給出反饋;如果沖突相關方的距離相同,則隨機分配資源優先使用權。
3.如權利要求I或2所述的方法,其特征在于當讀取的指令是協同操作部分的指令,則采用設定的相同反饋方法對每一用戶進行提示,以提示用戶這一部分是共同需要完成的任務;該反饋方法與每個用戶單獨編程時的反饋方法不同。
4.如權利要求3所述的方法,其特征在于采用紅色反饋指示圖標提示用戶當前操作為協同操作任務部分。
5.如權利要求I所述的方法,其特征在于所述協同操作指令包括拿起動作指令,放下動作指令,掃地動作指令,拖地動作指令,推動作指令,拉動作指令;當指令為拿起動作指令時,首先檢測當前用戶控制的人物所在位置四周是否有可拿起的物體;當指令為放下動作指令時,首先檢測當前位置能否放下用戶控制的人物所持物體以及是否有可放下的物體;當指令為掃地或者拖地動作指令時,則檢測當前用戶控制的人物手里是否已經拿起了相應的工具;當指令為推動或者拉動作指令時,首先讀取當前用戶控制的人物所站方向的正前方或正后方是否為可行的單元格;其中,每一指令對應一實物編程塊。
6.如權利要求I所述的方法,其特征在于所述指令還包括循環控制指令和循環數字指令;所述循環控制指令順次包含循環開始指令,方向指令,循環操作指令,循環次數指令和循環結束指令;所述循環數字指令順次包含所需要循環重復的動作指令,循環重復次數指令;其中,每一指令對應一實物編程塊。
全文摘要
本發明公開了一種協同實物編程方法,屬于人機交互領域。本方法為1)選取或建立一協同實物編程顯示環境;2)用戶根據協同任務要求分別擺放實物編程塊序列;3)實時獲取每一用戶當前所擺放的實物編程塊序列,并將其發送給協同實物編程處理模塊,將其轉換為相應的功能語義序列;從當前功能語義序列中順序取出操作指令,當指令為協同操作開始指令時,用戶開始同步通信,從當前功能語義序列中讀取并執行協同操作部分的命令,如果某用戶協同操作不正確,則反饋提示信息給該用戶,如果均正確,則執行下一指令并判斷協同操作是否正確,直到協同操作結束指令,結束協同判斷和同步通信。本方法允許了多個兒童可以同時編寫程序,并且進行程序的同步。
文檔編號G06F9/52GK102800223SQ20121025196
公開日2012年11月28日 申請日期2012年7月19日 優先權日2012年7月19日
發明者王丹力, 張鋮, 王宏安, 戴國忠 申請人:中國科學院軟件研究所