摘 要: 針對港口安全的需要,為了提高監視港口安全的水面機器人軟件系統的可靠性與實時性,提出了基于LCM的改進的機器人軟件系統設計。它可以實時采集水面機器人各傳感器參數,然后利用收集到的參數進行UPSV自身的運動控制,實現智能避障,監測港口安全等功能。在數據采集與通信方面,這套軟件系統是基于LCM進行設計的;在行為控制方面,對其進行了改進,主要采用的是IvP控制模型。
關鍵字: LCM; UPSV; 水面機器人; IvP; 實時系統
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2013)20?0038?03
0 引 言
一個機器人軟件系統一般分成如下三部分:數據采集,狀態估計,任務執行。為了完成特定的任務,模塊與模塊間需要進行信息交互。現行的操作系統可以很方便的實現在不同計算機上組織不同軟件模塊的通信,這樣以來,就把模塊間數據交換的研究轉變成了對不同進程間的通信的研究。
本軟件采用的是基于發布/訂閱模式的LCM(Lightweight Communications and Marshalling)進行設計的,采用的是UDP多播技術進行通信[1]。LCM是一個針對開發實時性要求較高的消息傳遞系統的開發套件。采用模塊化的設計方式,不同的模塊可以運行在同一個或不同的硬件平臺上,并且不同模塊的開啟與停止互不影響[2]。此外,LCM還提供了一系列的調試工具,方便軟件開發過程中的調試。
1 LCM的基本原理
LCM主要可以分成以下幾個模塊:類型定義模塊、數據編組模塊、通信模塊、調試工具。類型定義模塊,對復合數據類型定義的語法進行了說明,LCM中的不同數據都是通過一個或多個復合數類型進行定義與聲明的;編組模塊主要功能是實現消息的編碼/解碼,經過編碼的數據都以二進制的形式進行傳遞; 通信模塊基于發布/訂閱模式的消息傳遞系統進行設計,采用UDP多播技術作為底層的通信手段。
1.1 類型定義模塊
LCM定義了一個統一的數據類型模式來定義開發過程所用到的一些數據,每一個數據類型的聲明都是一個消息結構體,并且數據類型的定義與平臺無關。下面是一個LCM進行變量聲明的一個例子:
從面可以看出,LCM允許成員變量的嵌套定義。每一個變量都會放在自己相應的filename.lcm文件中,如struct waypoint_t會在文件waypoint_t.lcm中進行定義。LCM中的支持的基本數據類型有整型:int8_t,int16_t,int32_t,int64_t;浮點型:float,double;字符串類型:string;布爾類型: boolean。
另外,LCM還支持用戶自定義的數組類型。數組可采用固定長度和可變長度的方式進行定義。
1.2 數據編組模塊
數據編組將用戶定義的數據編碼成二進制流,這一部分是由LCM自身進行處理的,用戶可以不用關心內部是如何實現的。編組模塊還可以給特定的消息模塊添加一個“數字簽名”處理,“數字簽名”是一個占8 B的變量,它的計算是通過一個Hash函數來求得的。LCM客戶端接收到一個消息時,它首先會解析消息中的“數字簽名”,如果這個“簽名”與它所期待的不一樣,那么客戶端就會報告錯誤。
1.3 通信模塊
LCM中采用的UDP多播技術,它會把接收到的消息全都發送到所有的客戶端,然后客戶端會忽略掉那些所不關心的數據。LCM最大的消息大小為4 GB,它提供了一種最大可能的包傳遞機制,可以最大可能的降低數據傳遞過程中的丟包現象。LCM中的消息通過UDP多播技術在網絡中進行傳輸,當一個進程在一個特定的命名的信道上發送數據后,網絡中的另一個進程可以訂閱同一信道中的數據從而接收傳遞來的消息包。
2 IvP簡介及LCM系統的改進
IvP(Interval Programming)[3]的關鍵在于可以對目標函數分段定義,然后通過設計一個IvP solver,可對近似后的目標函數進行全局優化。
圖1中所示的行為目標函數定義為:
[f(x,y)=Ae-(x-x0)2+(y-y0)22σ2]
式中:A=150;σ=32.4;x0=50;y0=1 150;x,y是該行為的決策變量,取值范圍均為[-250,250]。
圖1(a)是直接把目標函數平均分成了7 056(每一塊小區域的大小是84×84)塊近似的結果;圖1(b)是把目標函數分成了289(每一塊小區域的大小是17×17)塊近似的結果;圖1(c)是直接把目標函數平均分成732塊小的區域。
IvP問題,可歸結為:對于每一個行為,都有與之相對應的目標函數,針對目標函數,利用IvP函數對它進行一系列的近似表達,然后從決策空間中尋找出一個最優決策點,使它滿足式(1),從而將決策點對應的決策變量作為行為選擇的輸出結果。
對于傳統的LCM行為控制模塊進行了改進,采用了LCM與IvP相結合的方式實現控制模塊與其他模塊的通信。LCM主要是實現數據模塊與IvP模塊間的數據通信,IvP主要實現對各個決策命令進行融合,以期達到最佳的路徑決策控制。LCM服務器與各個客戶端間的通信沒有改變,控制模塊會訂閱其他數據模塊的信息,如GPS、AHRS、陀螺儀等數據,然后利用IvP solver做出最優的決策,實現對機器人位姿航向等的控制。控制模塊同樣也會訂閱聲納、質譜儀等數據,實時的向岸基平臺傳送,從而實現對海洋環境的監測。
3 軟件系統設計
3.1 系統的總體框圖
系統的總體框圖如圖2所示。軟件設計的核心在于內部的LCM通信機制和IvP控制模塊。其中,LCM是系統各個模塊通信的橋梁,數據保存客戶端、各傳感器客戶端和IvP控制模塊在一開始的時候會建立起與LCM服務器的連接,連接成功后,當有消息到來時,服務器會向各個客戶端發送數據,每一個客戶端根據自己所訂閱的數據進行取舍。每一個傳感器都對應一個驅動,這些驅動主要負責與LCM的接口的通信,對應的驅動都是一個標準的進程,作為一個客戶端實現與LCM服務器的通信,進行數據的傳輸,每一個傳感器都有一個與之對應的數據類型,例如,GPS的數據類型定義如下:
這個數據結構中存放的是GPS的相關數據,包括時標、經/緯度、速度等,這個數據作為一個數據包在不同的模塊間進行應用。
3.2 系統流程圖
軟件開始的時候,先對各變量進行初始化,把時標timestamp賦初值為0,這個變量對于后面實現傳感器同步起到重要的作用,在數據保存客戶端會把接收到的傳感器數據加上時標timestamp然后進行保存。之后開啟LCM服務器,如果開啟成功,把mFlag賦值為1,配置串口參數,打開串口,建立連接,然后發送傳感器開啟指令進行數據的接收與處理。
在OnNewMail()中,一方面是對接收到的數據進行處理,加上同步時標然后進行保存,另一方面會把接收到的數據傳遞到IvP模塊中,供IvP solver使用;在OnIterate()中主要是完成行為決策的輸出,從而控制機器人的各個方向的運動。
對于IvP模型的行為選擇計算流程如圖4所示。
IvP問題歸結為對于每個行為所對應的目標函數,利用IvP函數[4?5]對其進行近似表達,然后從決策空間中尋找到一個決策點使其滿足上面的條件,從而將決策點對應的決策變量作為行為選擇的輸出結果。
4 結 語
本文首先對LCM的基本原理進行了簡單介紹,然后重點介紹了LCM中的數據類型的定義、數據編組模塊、通信模塊,提出了LCM的改進方法,并對改進方法中采用的行為控制方法進行了說明,著重講解了IvP行為控制的方法。
參考文獻
[1] MOORE David, OLSON Edwin, HUANG Albert. Lightweight communications and marshalling for low?latency interprocess communications [EB/OL]. [2009?09?02]. http:// www.dspace.mit.edu/handle/1721.1/46708.
[2] 楊芙清,梅宏,李克勤.軟件復用與軟件構件技術[J].電子學報,1999,27(2):68?75.
[3] 蔣大鵬.多水下機器人協調控制技術研究[J].哈爾濱:哈爾濱工程大學,2011.
[4] BENJAMIN M R, CURCIO J A, LEONARD J J, et al. Navigation of unmanned marine vehicles in accordance with the rules of the road [C]// Proceedings 2006 IEEE International Conference on Robotics and Automation. Orlando, FL: IEEE, 2006: 3581?3587.
[5] BENJAMIN M R, SCHMIDT H, NEWMAN P M, et al. Nested autonomy for unmanned marine vehicles with MOOS?IvP [J]. Journal of Field Robotics, 2010, 27(6): 834?875.
[6] 龔建偉,熊光明.Visual C++/Turbo C串口通信編程實中踐[M].2版.北京:電子工業出版社,2007.