?

圖形化PDDL語言編譯系統的設計與應用

2024-02-22 07:45張忠坤林泓宇譚智元邢明杰武延軍1
計算機工程與設計 2024年2期
關鍵詞:圖形化導圖機器人

張忠坤,林泓宇,譚智元,邢明杰,武延軍1,+

(1.南京中醫藥大學 人工智能與信息技術學院,江蘇 南京 210023;2.中科南京軟件技術研究院智能軟件研究中心,江蘇 南京 210000;3.中國科學院軟件研究所 智能軟件研究中心,北京 100190;4.中國科學院大學 計算機科學與技術學院,北京 100190)

0 引 言

智能規劃[1]是人工智能系統實現智能決策和行動的必要組成部分之一。其中規劃領域定義語言(planning domain definition language,PDDL)[2]是智能規劃社區中廣泛使用的一種領域描述語言,具有形式化、標準化等特點。PDDL語義的實現與特定的功能設計和語法支持密切相關,開發者需要針對功能需求來設計專用編譯系統以實現并優化相關系統運行的性能。比如Fast Downward[3]的編譯系統是針對其規劃任務的優化而設計,流程包括PDDL的詞法分析、語法分析、格式轉換和問題建模等。而PDDL.jl[4]的編譯系統是將PDDL解析為Julia數據結構,以便用戶可以通過Julia語言來操作和處理PDDL數據。此前我們對PDDL的集成開發環境如MyPDDL[5]和PDDLStudio[6]等存在的版本特性支持不完善、文本編輯困難和缺少應用指導等問題,設計了一個圖形化PDDL在線編輯網站來幫助開發者提高PDDL的編寫效率(https://graphplan ner.isrc.ac.cn)。網站通過jsMind[7]思維導圖作為圖形化PDDL代替文本PDDL來提高開發的效率,并能夠解析用戶上傳的思維導圖和PDDL文件,還為用戶提供了在機器人操作系統(robot operating system,ROS)[8]環境下的應用指導。為此本文設計了專用編譯系統Graph Compiler,其不僅支持編譯jsMind思維導圖,也支持對多版本PDDL文件的編譯,還可以將規劃結果轉換為ROS機器人具體行動的動作序列信息。對多屆國際規劃競賽(international planning competition,IPC)[9]的PDDL用例的實驗結果表明,Graph Compiler能夠正確編譯測試集上的所有用例。此外,我們對圖形化PDDL語言指導機器人任務規劃做了實驗,將Graph Compiler應用到ROS工程中,拓展了它的應用空間。

1 PDDL語言結構

PDDL語言結構一般如圖1所示,分為域模型(domain)和問題模型(problem)。

圖1 常見PDDL文件結構關系

域模型包括Types、Fluents和Action Schemata等結構。

Types指定了在域模型和問題模型中定義變量時可以使用的所有類型。Fluents包括謂詞和函數,它有n個對象參數,Fluents描述這些參數之間的某種屬性和關系。Action Schemata是一個動作列表,其中每個Action都是一個元組,包含Parameters、Precondition和Effect。Parameters充當具體操作時所操作對象的占位符。Precondition是一組邏輯公式,指定了動作發生需要滿足的屬性條件或邏輯關系。Effect也是一組邏輯公式,指定了動作發生后,改變了哪些屬性條件或邏輯關系。

問題模型包括Domain(域模型)、Init State和Goal State。Init State定義了問題模型中的所有對象及其對應的初始狀態,而Goal State則是當問題解決時模型中的對象應處于的狀態。初始狀態和目標狀態都被指定為一組邏輯公式。

2 編譯系統架構

編譯系統的運行架構如圖2所示,用戶在前端中產生的PDDL數據、jsMind數據和規劃結果數據,在前端經過簡單的語法檢查后,被傳到后端的編譯系統中。編譯系統將輸入數據傳到對應的編譯模塊,包括PDDL編譯模塊、jsMind編譯模塊和ROS應用模塊。如果PDDL或jsMind編譯成功,系統會將生成的目標代碼存儲到臨時文件中并返回到前端展示,否則返回給前端錯誤原因;規劃結果則通過ROS交互模塊被轉為ROS話題消息,通過話題發送節點持續發布,可以被動作節點訂閱,進而用于指導機器人的任務規劃。

圖2 編譯系統運行架構

輸出到臨時文件中保存的PDDL問題模型文件可以被系統集成的規劃器求解。系統提供兩種規劃求解方案,一種是planutils[10]項目的本地規劃器接口,可以選擇使用包括OPTIC[11]、POPF[12]和TFD[13]等規劃器,另一種是Planning Editor[14]項目的在線規劃器接口。兩種方案可以求解多個版本的PDDL文件,為開發者獲得圖形化PDDL問題模型的求解結果提供了支持。

3 前端數據輸入

前端界面包括功能教學頁面、問題模型編輯頁面、域模型編輯頁面和ROS交互頁面等。前端與編譯系統關聯的功能如圖3所示,包括:編輯思維導圖生成PDDL域模型和問題模型;轉換思維導圖為文本形式的PDDL;解析用戶上傳的PDDL文件為思維導圖;解析ChatGPT[15]返回的PDDL數據為思維導圖;將規劃結果解析為話題消息發送到ROS系統等。

圖3 前端ROS USE頁面

為了減少用戶的編輯時間,系統設計結合了ChatGPT模型,用戶可以通過自然語言描述PDDL模型關鍵內容,編譯系統會將ChatGPT的返回內容轉為思維導圖表示的PDDL,功能展示如圖4所示。

圖4 ChatGPT使用頁面

根據上述功能需求,編譯系統的數據輸入可以分為3類,包括思維導圖表示的圖形化PDDL數據、ChatGPT模型生成或用戶直接上傳的PDDL文本數據以及通過規劃求解器得到的規劃結果。編譯系統針對這3類數據,分別設計了相應的編譯模塊,其中思維導圖數據對應的jsMind編譯模塊和PDDL數據對應的PDDL編譯模塊將在4章節講述,規劃結果話題消息對應的ROS應用模塊將在5章節講述。

4 編譯系統設計

4.1 語法結構對比

編譯系統使用的jsMind數據格式是node_tree,數據格式如下所示:

node:{

可以看到,node_tree中的數據采用樹形結構進行組織,其中topic值代表節點顯示在思維導圖中的內容,children值代表子節點列表,可以嵌套任意深度。node_tree通過這兩對鍵值,可以準確地描述思維導圖中節點的內容與親屬關系。而PDDL的語言文法是基于LISP的S表達式語法[16],其特點是可以使用括號來表示嵌套結構。通過括號的嵌套使用,形成不斷延申的樹狀結構,從而可以表示復雜的數據關系。從圖3左下方的PDDL域模型文件示例中,可以看到通過括號嵌套的方式,PDDL表現出明顯的層級關系。

通過觀察兩者的數據格式可以得出結論,PDDL和jsMind在數據內容上具有相同的嵌套結構,PDDL的括號對應于jsMind的children,括號中的內容則對應于jsMind的topic值。兩種語法格式的語義對應關系表明,jsMind與PDDL可以實現語義上的等價轉換。

4.2 編譯模塊介紹

系統的編譯流程主要包括兩個模塊。分別是jsMind編譯模塊和PDDL編譯模塊。jsMind編譯模塊的功能是將用戶在前端編輯的思維導圖編譯為PDDL文本;PDDL編譯模塊的功能是將ChatGPT生成或用戶上傳的PDDL文本編譯為jsMind數據。

4.2.1 jsMind編譯模塊

jsMind數據的編譯流程如圖5(左)所示。

圖5 編譯流程

首先進行詞法分析,任務是解析jsMind的node_tree格式數據,將每個節點的層級結構信息提取出來。根據topic鍵值和children鍵值劃分token,去掉其它無用字符,生成token流。

之后進行語法分析,首先根據PDDL的語言文法設計相應的PDDL數據存儲結構。如針對謂詞、初始狀態和動作等結構,根據其語法規則來定制對應的數據結構。下面是對動作結構進行定義的示例:

之后對詞法分析器生成的token流進行分析,并將token流按照數據類別補充到相應的數據結構中,從而生成AST。

之后生成中間表示,其結構是節點屬性為鍵值對的屬性樹。該步驟將優化后的AST按照PDDL的不同屬性提取數據到定義的屬性樹中。

最后生成PDDL文件,系統根據生成的中間表示,將數據按照PDDL文法組合在一起,生成PDDL數據存儲到臨時文件中。之后系統取出臨時文件內容并嵌入HTML標簽,使數據返回到前端后可以高亮顯示。

4.2.2 PDDL數據編譯模塊

PDDL數據的編譯流程如圖5(右)所示。

首先使用正則表達式構造詞法分析器。過濾掉空格、注釋和其它無用的字符。生成token流。

接著進行語法分析,主要是將詞法分析器輸出的token流,轉化為特定的語法結構。系統使用遞歸下降分析法構建語法分析器。語法分析器會對多個PDDL版本中的多個語法結構進行識別和處理。

之后進行語義分析,主要任務是對程序進行合法性檢查。確定輸入數據符合語言規范和語義約束,并進行相應的語義處理。我們根據PDDL不同特性文法,做了語義分析處理。同時在處理過程中對PDDL的每個語法結構都進行了大量的錯誤判斷處理,設計了共計28種錯誤反饋。

在語法語義分析之后是AST擴展階段,系統需要對產生的AST進行擴展,根據requirement導入的PDDL模塊,在生成的AST中添加對應鍵值。例如requirement 可以導入PDDL3版本特性:preference,其表示在問題模型中,可以使用軟目標定義。使用preference需要在模型文件中使用同名關鍵詞。根據這些特殊requirement是否存在于域模型的requirements列表中,來判斷是否在AST中添加相應的鍵值,最終生成一個包含所有關鍵信息的AST。

最后是生成jsMind,系統將擴展的AST在后端針對jsMind語法做了補充、優化和簡化,組合其中的數據,并最終生成jsMind返回到前端以思維導圖的形式展示。

5 ROS應用

在機器人的任務規劃中,開發者可以將機器人的已知信息包括機器人獲取的傳感器信息和可使用的動作信息等通過PDDL的域模型進行描述,之后在問題模型中定義機器人的任務目標,再通過規劃求解獲得機器人執行任務的最佳動作序列,以滿足目標條件并最小化某些指標(如時間、資源消耗等)。

然而,當前機器人開發調度與PDDL的編輯規劃通常是獨立進行的,這導致兩者之間的信息交流依賴于開發人員的觀察與操作。開發人員在獲得規劃結果后,在ROS系統中構建行為樹[17]或狀態機來執行任務,開發效率較低。

為更好的將圖形化PDDL應用在機器人開發領域中,系統設計了ROS應用模塊,旨在與當前流行的ROS系統結合。節點是ROS的基本執行單元,節點之間通過發布和訂閱話題進行通信。ROS應用模塊的功能是創建節點,將規劃結果轉為話題并持續發布出去,供動作節點訂閱以使機器人能夠按照規劃結果進行運動。

開發者可以在ROS交互頁面中使用自然語言描述機器人的任務場景和目標,系統通過ChatGPT生成PDDL并轉為思維導圖形式,開發者在調整PDDL內容后可以進行規劃求解,在規劃成功后,返回的規劃結果會被轉為相應格式的話題消息,實驗中機器人運動的話題格式如下所示:

time start_time

string action_name

string[] action_params //動作參數

duration duration_time //持續時間

ROS應用模塊的具體流程可分為以下3步:

(1)是根據規劃結果的輸出樣式構建正則表達式,獲取規劃結果中包含有效內容的部分,去除包括調用IP、耗費時間和運行狀態等無用字符,得到相應的token流,獲得的內容見表1,主要包括動作開始時間、動作序列(動作名和參數)和動作持續時間。

表1 OPTIC規劃器求解結果

(2)是對token 流進行語法分析,將解析出的規劃結果按照特定結構轉為話題的中間數據,下面是針對實驗話題格式設定的中間數據結構:

(3)則是將數據轉為話題。這是一個簡單的映射過程,將生成的中間表示數據,根據語義對應關系轉化為話題數據,并且進行合法性檢驗,包括參數類型和格式等。確保輸出匹配的話題數據。

最后將話題以多線程的方式發布到ROS網絡中,確保ROS話題的發布不會影響到編譯系統其它功能的使用。

6 實 驗

實驗分為兩部分:第一部分測試Graph Compiler對于多版本PDDL數據和jsMind數據的編譯能力;第二部分是驗證Graph Compiler應用在ROS項目中的實際效果。

6.1 編譯功能測試

IPC比賽為智能規劃領域提供了廣泛使用的基準。我們使用Assembly、Gripper和Blocks等IPC比賽中的經典測試用例,來測試Graph Compiler在編譯多版本PDDL數據方面的表現(PDDL+的版本用例來自于PDDL wiki[18])。此外在Graph Compiler測試中,我們針對每一個測試用例都隨機挑選一個PDDL模型文件并使用jsMind思維導圖來表示,測試該模型文件是否能夠如圖3所示被順利的編譯為PDDL數據,測試結果見表2。

表2 PDDL用例編譯測試(√表示成功編譯,×表示無法編譯)

測試結果表明,Graph Compiler相較于Fase Downward和PDDL.jl而言,支持編譯更多的PDDL版本,且編譯成功率達到100%;也可以將用戶編輯的jsMind思維導圖正確編譯為PDDL格式數據。滿足了在線編輯工具的功能需求。

6.2 ROS系統交互實驗

我們使用中科院軟件所博物館導覽項目[19]作為ROS應用實驗的場景,測試從自然語言輸入到機器人調度的半自動流程。

首先開發者在ROS USE界面中使用圖4所示的自然語言建模,得到域模型和問題模型。域模型建模輸入的prompt如下:”我需要一個domain.pddl,內容如下:包括兩個類型:waypoint和robot,3個謂詞:at代表機器人在路徑點上、worked代表機器人在這個路徑點巡視過和not_worked代表機器人并沒有在這個路徑點巡視,以及兩個動作:move和work?!?。系統會調用ChatGPT接口并根據prompt生成對應的域模型數據,并以思維導圖的形式在聊天框下方顯示。問題模型同樣由自然語言輸入生成,內容包括定義5個路徑點,按照目標順序依次移動到5個路徑點并在路徑點上巡視一段時間等,生成內容如下所示:

(define (problem navigation_waypoint_demo)

wa wb wc wd we-waypoint //定義5個路徑點

init-waypoint

robot-robot)

(robot_on robot init)

(not_worked wa) //5個點都還未巡視

(not_worked wb)

(not_worked wc)

(not_worked wd)

(not_worked we))

(and

(worked we)

(worked wd)

(worked wc)

(worked wb)

(worked wa)))) //5個路徑點都已完成巡視

通過ROS交互模塊,將規劃結果轉換為ROS話題,并發布到ROS話題網絡中,之后在機器人的運動節點中訂閱該話題,并根據規劃結果設計并發布相應的動作指令,使導覽機器人按照表1中的規劃結果移動和工作。機器人實驗的部分畫面如圖6~圖7所示,可以看到機器人正在按照規劃結果給出的移動和巡視順序在完成任務。

圖6 小車在PDDL指導下完成巡航任務(1)

圖7 小車在PDDL指導下完成巡航任務(2)

實驗結果表明,我們成功將Graph Compiler應用在ROS項目中,完成了通過圖形化PDDL指導機器人任務規劃的目標。

7 結束語

為滿足圖形化PDDL編輯的功能需求,本文基于領域專用編譯技術設計了一個圖形化PDDL編譯系統。通過詞法分析、語法分析、語義分析和AST優化擴展等方法,設計了對文本PDDL和思維導圖表示的圖形化PDDL的編譯模塊,具有優秀的版本兼容性和編譯正確性。并基于ROS節點之間的通信機制設計了ROS應用模塊,可以將規劃結果以話題的消息格式發布出去,用于指導機器人的任務規劃。

在后續工作中,將繼續探索Graph Compiler的規劃應用,完善從自然語言輸入到PDDL生成再到ROS機器人運動的自動化流程,并通過實現一個圖形化PDDL專用規劃器來進一步提高系統的運行效率。

猜你喜歡
圖形化導圖機器人
烴思維導圖
借思維導圖算24點
角的再認識思維導圖
LKJ自動化測試系統圖形化技術研究
第6章 一次函數
運用圖形化聽寫式復習,構建高效地理課堂
機器人來幫你
認識機器人
機器人來啦
圖形化地區電網無功優化軟件開發與應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合