劉方全 林澤磊 劉偉堯 李景濤


摘 要:選取已完成的上肢康復機器人本體為研究對象,使用SolidWork軟件對上肢康復機器人進行三維建模,使用3DsMax對模型附加材質調整坐標軸等。將調整好的三維模型導入Unity3D軟件當中,并且用MFC建立康復機器人的控制面板。控制面板上各電動機的轉動參數一方面同過串口下發給康復機器人本體,控制其運動。另一方面通過Socket通信傳遞給Unity3D,控制康復機器人模型的運動。通過康復機器人模型的運動實時展現機器人本體的運動狀態。
關鍵詞:上肢康復機器人;Unity3D;Socket通信
1 三維模型的建立
1.1 上肢康復機器人模型的建立
上肢康復機器人是比較復雜的機械系統,為了保證仿真結果與真實接近,所有的零件都按照電子版圖提供的數據進行1:1建模,使用SolidWork軟件建立各個零件的實體模型,并將生成的零件裝配成總體,生成stl文件格式,導入到3DsMax中,在對各個零件添加材質和貼圖。
1.2 人物模型的建立
為使上肢康復機器人的模擬動畫能真實的體現上肢康復機器人本體的運動狀況,人物模型的尺寸應充分考慮到康復機器人模型的尺寸,應使人物模型的腕關節、肘關節、肩關節與康復機器人的各關節相對應,盡量保證人物模型與康復機器人的各關節同軸,這樣能使展示效果更加逼真。
人物模型分為對頭部和身體的建模,在3DsMax中采用多邊形建模方法,建立人物的初步模型,然后對人物模型添加平滑組,這樣可以增加模型的光滑度,然后為人物模型添加材質和貼圖形成最終的效果圖。
1.3 骨骼和綁定的添加與調整
人物模型必須綁定骨骼才能實現模型的運動,首先用biped建立一個骨骼系統,在運動命令面板,點擊biped卷展覽的figure mode。在各視圖中,使用旋轉縮放位移的方式,調整骨骼的位置與模型的位置,讓二者對齊,調整好其中的一部分之后,復制到另一半上。
骨骼建立完成之后必須與模型進行綁定,常用的綁定方式有skin和physique兩種綁定方式,一般來說兩者沒有本質的區別,在進行動畫制作時都可以使用。但是如果使用physique將骨骼與模型進行綁定,將生成的新模型導入到Unity3D時,會產生一些列問題。而使用skin不會存在這樣的問題,所以此次綁定使用skin進行綁定。
1.4 模型的導出及注意的問題
在3DsMax中的運動控制命令中,將人物模型和康復機器人模型進行調整,最終效果圖如圖1所示,并將生成的模型生成Fbx格式導入到Unity3D當中,導出的模型應主要考慮3方面:坐標軸、比例和貼圖。
2 康復機器人控制面板與Unity 3D之間的Socket通信
2.1 Socket簡介
Socket通常也叫作“套接字”,是一種建立在傳輸層協議上的通信機制。最初是由美國加州Berklry大學提出,為UNIX操作系統開發的網絡通信接口,它定義了兩臺計算機間的通信規范(也就是一種編程規范)[2]。Socket通信屏蔽了網絡傳輸傳輸中低層通信協議的復雜性和差異性,使任意兩臺安裝TCP軟件的計算機之間通信成為了可能,而且因為Socket通信具有易于理解,便于掌握等特點,目前已經成為TCP/IP網絡最為通用的API,也是在Internet上進行應用開發最為通用的API[3]。
2.2 Socket基本類型
Socket通信主要有三種類型:流式套接字、數據報套接字和原始套接字。流式套接字是一種面向連接的套接字,能夠實現無差錯無重復的順序數據傳輸,內設流量控制,避免數據流超限。數據被看成字節流,無長度限制。數據報套接字是一種面向無連接的套接字,數據通過相互獨立的報文進行傳輸,是無序的,并且不能保證數據傳輸的可靠性,數據的最大傳輸最大長度為64KB。原始套接字允許對底層協議IP活ICMP直接訪問,主要用于網絡協議的測試,一般不會提供給普通用戶[4]。為了保證數據傳輸的準確性,此次通信用到的是面向連接的流式套接字。
2.3 Socket編程主要流程
Socket通信才用來目前網絡編程流行的ClientSocket/SeverSocket模式,客戶/服務器模式通常是采用監聽/連接的方式實現。首先,服務器端啟動等待客戶端的請求,客戶端啟動后請求一個連接,向服務器提出請求,服務器接到請求并驗證后開啟連接,啟動一個特殊的服務器端套接字,并與客戶端套接字相互連接。建立連接的過程是客戶機主動申請,服務器被動等待。連接建立之后,雙方都可以自由發出數據的傳輸請求,也可以都發送數據[5]。
服務器端:(1)服務器首先啟動,用Socket類建立一個Socket套接字;(2)調用bind函數將該套接字與本地IP地址和端口綁定;(3)調用listen監聽連接情況(4)調用accept接受連接,并產生一個新的套接字。若無連接請求,服務器處于無限循環狀態;(5)產生的新套接字與客戶端套接字建立連接,調用read、write函數與客戶端進行通信,先前的套接字繼續用于監聽客戶端的請求;(6)服務進程調用close函數關閉監聽套接字,中斷連接,終止服務。
客戶端:(1)調用Socket建立一個Socket客戶端;(2)調用connect函數向服務器進程發送連接請求;(3)調用read、write函數與服務器新線程進行雙向通信;(4)完成通信后,客戶進程調用close函數,中斷連接。
2.4 服務器與客戶端運行結果
將unity3D作為服務器端進行編程,設置本地的IP地址為219.231.156.82,端口號設置為8000,設置后服務器的參數之后點擊運行,然后將控制面板客戶端進行編程,同樣設置本地的IP地址,并將需要發送的數據填寫完成之后,點擊“連接”按鈕,客戶端會提示連接成功,并將控制面板上的各參數發送給服務器,如圖2所示,并且服務器根據發送來的參數來控制康復機器人模型的運動,來間接反映康復機器人本體的運動情況。
4 結束語
本文虛擬上肢康復機器人實時動態顯示主要是由上肢康復機器人的建模和Socket通信兩部分實現的。通過Solidwork軟件在基礎建模方面方便快捷的特性建立上肢康復機器人的基礎模型,以及利用3DsMax軟件在模型渲染上的強大功能對模型進行后續的加工處理,是模型更加真實。Socket可以提供C++和C#兩種語言的API函數,剛好滿足了MFC和Unity3D這兩款軟件的編程要求,同時目前大多數進程間的通信都是Socket編寫的,通過Socket編程可以方便快捷的實現進程間的通信。
參考文獻:
[1] 趙航. 基于下肢康復機器人虛擬現實技術的研究與實現[D]. 河北工業大學, 2014.
[2] 劉駿, 顏鋼鋒. 基于Socket的網絡編程技術及其實現[J]. 江南大學學報(自然科學版), 2004, 3(3):249-251.
[3] 周炎濤, 李立明. TCP/IP協議下網絡編程技術及其實現[J]. 航空計算技術, 2002, 32(3):122-124.
[4] 李存斌, 汪兵. Delphi深度編程及其項目應用開發[M]. 中國水利水電出版社, 2002.
[5] 阮戈. 最新Unix程序設計與編程技巧[M]. 清華大學出版社, 2001.