專利名稱:基于delmia環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法
技術領域:
本發(fā)明是基于DELMIA環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法,具體的說,是一種利用DELMIA軟件提供的沉浸式虛擬仿真系統(tǒng),進行人體動作和行為的仿真, 使用戶像在實際產品上一樣對虛擬產品進行實時操作,從而可在物理樣機產生之前及時地發(fā)現設計中存在的維修問題,它屬于虛擬現實技術輔助系統(tǒng)維修的技術領域。
背景技術:
沉浸式虛擬仿真是指設計人員在沉浸式虛擬維修環(huán)境下對產品進行“虛擬地”維修,可在物理樣機生產之前及時地發(fā)現設計中存在的維修問題,進行維修性設計的分析,維修規(guī)程的確認和輔助維修訓練。利用動作捕捉系統(tǒng)與虛擬維修仿真軟件構建沉浸式虛擬維修仿真系統(tǒng),不僅可以利用虛擬維修仿真軟件中的產品數據,而且能夠讓用戶像在實際產品上一樣對虛擬產品進行實時操作。目前動作捕捉系統(tǒng)與虛擬維修仿真軟件融合技術的研究進展較慢,二者還相對獨立。一方面,虛擬維修軟件具有很強的仿真分析功能,但其中的人體運動建模工作較為繁瑣且編輯的動作不夠真實有效;另一方面動作捕捉系統(tǒng)還只在動畫制作等特殊領域應用較多,其配套的軟件一般只能利用三維動畫復現真人運動軌跡,而不具有其他分析處理功能, 也不能載入CAD產品數據。因此,二者集成能有效的實現真人對虛擬維修仿真軟件中虛擬人的控制,為仿真分析提供更加真實有效的維修動作數據,實現真正意義上的沉浸式虛擬維修。
發(fā)明內容
(1)本發(fā)明的目的是基于DELMIA環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法,通過將動作捕捉設備所捕捉到的人體動作實時地導入到專業(yè)軟件提供的虛擬維修平臺當中的虛擬人上,從而可以進行沉浸式的虛擬維修活動。(2)本發(fā)明的技術方案以DELMIA虛擬仿真軟件和SmpeWarp無線光纖動作捕捉系統(tǒng)構建沉浸式虛擬維修仿真系統(tǒng),并利用DELMIA提供的Automation 二次開發(fā)技術,對二者的接口設計算法做了相應研究,實現動作捕捉系統(tǒng)采集的真實的維修數據對DELMIA中虛擬人動作控制,提出了 DELMIA環(huán)境下虛擬人控制的新方案,實現用戶與虛擬環(huán)境的融合。以SiapeWarp無線光纖動作捕捉系統(tǒng)和目前航空部門普遍采用的DELMIA虛擬仿真軟件構建沉浸式虛擬維修仿真系統(tǒng),并對二者間的接口設計進行了深入研究,實現了動作捕捉系統(tǒng)對DELMIA軟件中虛擬人的控制。本發(fā)明基于DELMIA環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法,通過如下步驟實現步驟一、對動作捕捉軟件的數據輸出進行設置
選擇a^peRecorder作為動作捕捉軟件,對其數據的輸出進行必要的設置。主要的輸出設置分為實時輸出和以文件方式輸出。步驟二、進行動作捕捉,通過動作捕捉設備自帶的軟件實時發(fā)送數據有兩種方式,一種是人員穿上動作捕捉設備,進行動作捕捉;另一種是之前進行動作捕捉時,用設備自帶的軟件對動作數據進行錄制,而發(fā)送數據時則通過設備自帶軟件打開已錄制好的動作數據文件,向外發(fā)送數據。步驟三、接收并臨時保存動作捕捉軟件輸出的動作數據以UDPSocket的方式接收數據,以數組的形式臨時保存當前接收到的一幀數據。 為說明方便,該數組命名為gpo數組。該數組包含從1到235共235個數據,分別以gpo (1)、 gpo (2)......gpo (235)表示。步驟四、對動作數據進行計算根據臨時保存的當前幀數據——即gpo數組——進行計算,可以將該數據的格式轉換為DELMIA可以使用的動作數據格式,臨時保存在ορν數組和iAxisComponentsArray 數組當中。該步驟可以進一步細分為a)計算人體的方向和位置;b)計算人體每一個肢節(jié)的姿勢(不包括手指);c)計算人體手指每一個肢節(jié)的姿勢步驟五、將轉換完成的動作數據以Automation API的方式賦給DELMIA步驟六、重復步驟二到步驟五將動作數據轉換完成并輸入到DELMIA中的虛擬人使其動作后,此即標志著一幀動作的完成。然后開始下一幀動作,重復步驟二到步驟五,直到不再進行動作捕捉或動作捕捉設備自帶軟件不再發(fā)送捕捉到的動作數據為止。本發(fā)明要求的設備條件兩臺電腦,其中動作捕捉系統(tǒng)(SiapeRecorder)需要一臺,虛擬環(huán)境軟件平臺(delmia)需要一臺,兩臺電腦之間要有網絡連接,或者是一臺電腦,動作捕捉系統(tǒng)和虛擬環(huán)境平臺都在同一臺電腦上運行,此時電腦要有網卡。軟件條件 Windows操作系統(tǒng),且配置要能夠正常運行兩款軟件。(3)本發(fā)明的優(yōu)點本發(fā)明所采用的動作捕捉設備為Measurand公司的光纖式動作捕捉設備,采用的虛擬維修軟件平臺為Dassault公司的DELMIA軟件。Measurand公司開發(fā)了一些數據轉換插件軟件,可以將其動作捕捉設備所捕捉到的人體動作實時導入到MotionBuilder軟件或 Virtools軟件中去。本發(fā)明通過采用DELMIA軟件本身提供的接口進行開發(fā),更為重要的是,本發(fā)明采用模塊化設計思想,具備可擴展性,即對于不同的動作捕捉設備,通過選擇相應的數據轉換模塊,可以得到同樣格式的動作數據,以操縱DELMIA中的虛擬人。因此,用戶可以選擇多種動作捕捉設備,甚至可以同時采用不同的動作捕捉設備捕捉多人的動作,實時地導入到 DELMIA中的多個虛擬人上。
圖1為基于DELMIA環(huán)境下的沉浸式虛擬仿真流程圖;圖2為Shaperecorder中的全局坐標系圖;圖3為Delmia中的全局坐標系具體實施例方式下面結合附圖和實施例對本發(fā)明進行詳細說明。本發(fā)明首先利用Measurand公司的光纖式動作捕捉設備實時地捕捉人體的動作, 并由該設備自帶的SiapeRecorder軟件通過UDPSocket的方式實時向外發(fā)送數據。然后本發(fā)明利用UDPSocket的方式接收該數據,接著進行數據的轉換等計算,將包含人體動作的數據信息轉換成DELMIA可以使用的數據格式。具體實施流程圖如圖1所示,不過該數據 DELMIA軟件本身并不能直接使用,需要通過DELMIA提供的Automation API接口,使用一系列的API函數,對DELMIA軟件進行操作。本發(fā)明是基于DELMIA環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法,具體實施步驟如下步驟一、對動作捕捉軟件的數據輸出進行設置選擇a^peRecorder作為動作捕捉軟件,對其數據的輸出進行必要的設置。 ShapeRecorder軟件有2種數據輸出方式,一種為實時輸出,一種輸出為文件,選擇實時輸出;該軟件有4種數據輸出格式,分別為Global Position and Orientation格式、C3D格式、BVH 格式和 MotionBuilder/Quest3D/Virtools Quaternion) format 格式,選擇 Global Position and Orientation格式。對實時輸出的UDPSocket的屬性進行設置,如IP地址、 端口號等,具體以實施例為例。步驟二、進行動作捕捉,通過動作捕捉設備自帶的軟件實時發(fā)送數據有兩種方式,一種是人員穿上動作捕捉設備,進行動作捕捉,同時該設備自帶的軟件實時地發(fā)送數據;另一種是之前進行動作捕捉時,用設備自帶的軟件對動作數據進行錄制,而發(fā)送數據時則通過設備自帶軟件打開已錄制好的動作數據文件,向外發(fā)送數據。這兩種方式都是可行的。均通過UDPSocket的方式發(fā)送數據。步驟三、接收并臨時保存動作捕捉軟件輸出的動作數據以UDPSocket的方式接收數據。以數組的形式臨時保存當前接收到的一幀數據。 為說明方便,該數組命名為gpo數組。該數組包含從1到235共235個數據,分別以gpo (1)、 gpo (2)......gpo (235)表示。同時,再建立2個數組,這2個數組將臨時保存數據轉換的計算結果,為說明方便, 將這2個數組命名為ορν數組和iAxisComponentsArray數組。ορν數組保存人體的姿態(tài)數據,iAxisComponentsArray數組保存人體的方向和位置數據。ορν數組包含從O到136共
137 個數據,分別以 opv (0)、ορν (1)......ορν (136)表示。iAxisComponentsArray 數組包含從
O 至Ij 11 共 12 個數據,分另Ij 以 iAxisComponentsArray (0) >iAxisComponentsArray (1)、......
iAxisComponentsArray(11)表不。步驟四、對動作數據進行計算根據臨時保存的當前幀數據——即gpo數組——進行計算,可以將該數據的格式轉換為DELMIA可以使用的動作數據格式,臨時保存在ορν數組和iAxisComponentsArray 數組當中,轉換的關系圖如圖2所示該步驟可以進一步細分為1)計算人體的方向和位置令
Yaw = gpo (6) X 3. 1415926 + 180Pitch = gpo (5) X 3. 1415926 + 180Roll = gpo (4) X 3. 1415926 + 180Xp = gpo(l)Yp = gpo (2)Zp = gpo (3)然后,令cy = cos (Yaw)sY = Sin(Yaw)cP = cos (Pitch)sP = Sin(Pitch)cR = cos (Roll)sR = Sin(Roll)再令iAxisComponentsArray (0) = cy X cPiAxisComponentsArray (1) = sYX cPiAxisComponentsArray (2) = sPiAxisComponentsArray (3) = -sYX cR-cy X sPX sRiAxisComponentsArray (4) = cy X cR-sYX sPX sRiAxisComponentsArray (5) = cPX sRiAxisComponentsArray (6) = sYX sR-cy X sPX cRiAxisComponentsArray (7) = -cy X sR-sYX sPX cRiAxisComponentsArray (8) = cPXcRiAxisComponentsArray (9) =XpiAxisComponentsArray(10) = -ZpiAxisComponentsArray (11) =Yp則iAxisComponentsArray數組將臨時保存人體的方向和位置數據。2)計算人體每一個肢節(jié)的姿勢(不包括手指)假設人體的某部分有兩個相鄰的肢節(jié),則這兩個肢節(jié)間存在著類似于“樹干—— 樹枝”的關系,而人體的總“樹干”肢節(jié)則為人體的臀部。例如,人的左前臂和左上臂這兩個肢節(jié),左上臂為“樹干”,左前臂為“樹枝”;人的臀部、腰部和胸部間,腰部既是臀部的“樹枝”,又是胸部的“樹干”。假設有某兩個相鄰的肢節(jié),令“樹干”肢節(jié)為a肢節(jié),“樹枝”肢節(jié)為b肢節(jié)。則gpo 數組中a肢節(jié)的翻滾角、俯仰角、偏航角數據分別為gpo (iar)、gpo (iap)、gpo (iay),b肢節(jié)的翻滾角、俯仰角、偏航角數據分別為gpo (ibr)、gpo (ibp)、gpo (iby)。令aR = gpo (iar) X 3. 1415926 + 180aP = gpo (iap) X 3. 1415926 + 180aY = gpo (iay) X 3. 1415926 + 180bR = gpo (ibr) X 3. 1415926 + 1800074]bP = gpo(ibp) X3. 1415926+1800075]by = gpo(iby) X 3. 1415926 + 1800076]然后令0077]cYa =cos(aY)0078]sYa =Sin(aY)0079]cPa =cos(aP)0080]sPa =Sin(aP)0081]c Ra =cos (aR)0082]sRa =Sin(aR)0083]c Yb =cos (by)0084]s Yb =Sin (by)0085]cPb =cos (bP)0086]sPb =Sin(bP)0087]cRb =cos (bR)0088]sRb =Sin(bR)0089]再令0090]MaT (0=c Ya XcPa0091]MaT (1=-sYa X cRa-cYa X sPa X sRa0092]MaT (2=sYa X sRa-cYa X sPa X cRa0093]MaT (3=s Ya XcPa0094]MaT (4=cYa X cRa-sYa X sPa X sRa0095]MaT (5=-cYa X sRa-sYa X sPa X cRa0096]MaT (6=sPa0097]MaT (7=cPaX sRa0098]MaT (8=cPaX cRa0099]Mb(O)=cYb XcPb0100]Mb(I)=sYbXcPb0101]Mb (2)=sPb0102]Mb (3)=-sYbXcRb-cYbXsPbXsRb0103]Mb (4)=cYb XcRb-sYbXsPbXsRb0104]Mb (5)=cPbXsRb0105]Mb (6)=sYb XsRb-cYbXsPbXcRb0106]Mb (7)=-cYbXsRb-sYbXsPbXcRb0107]Mb (8)=cPbXcRb0108]然后令0109]MatrixA (0) = Mb(O) XMaT (0)+Mb(I) XMaT (3)+Mb (2) XMaT (6)0110]MatrixA(I) = Mb(O) XMaT (1)+Mb (1) XMaT (4)+Mb (2) XMaT (7)0111]MatrixA (2) = Mb(O) XMaT (2)+Mb (1) XMaT (5)+Mb (2) XMaT (8)0112]MatrixA (3) = Mb (3) X MaT (0) +Mb (4) X MaT (3) +Mb (5) X MaT (6)
MatrixA (4) = Mb (3) XMaT (1) +Mb (4) XMaT (4) +Mb (5) XMaT (7)MatrixA (5) = Mb (3) X MaT (2) +Mb (4) X MaT (5) +Mb (5) X MaT (8)MatrixA (6) = Mb (6) X MaT (0) +Mb (7) X MaT (3) +Mb (8) X MaT (6)MatrixA (7) = Mb (6) XMaT (1) +Mb (7) XMaT (4) +Mb (8) XMaT (7)MatrixA (8) = Mb (6) X MaT (2) +Mb (7) X MaT (5) +Mb (8) X MaT (8)其中,MatrixA是一個代表3X3矩陣的數組。這個矩陣的值代表了 b肢節(jié)相對于 a肢節(jié)的方向變換,即在肢節(jié)物體坐標系3個坐標軸(也即自由度)方向上的轉動的變換的疊加。令3個自由度的轉動角順序為先α,再β,最后Y,則α = arctan (-MatrixA (6) +MatrixA (8))β = arcsin (-MatrixA (7))y = arctan (MatrixA(l) +MatrixA (4))最后,如果具體肢節(jié)的轉動方向和坐標軸正軸的方向相同,則將α、β、Y臨時保存在OpV(bl)、OpV032)、OpV(b3)中,其中bl和α相對應,是b肢節(jié)相對于a肢節(jié)最先轉動的自由度,同理和β相對應、b3和γ相對應;如果相反,則將-α、-β、-γ臨時保存在 opv (bl)、opv (b2)、opv (b3)中。3)計算人體手指每一個肢節(jié)的姿勢手指和其它肢節(jié)的計算有一些不同,一是因為進行動作捕捉時未必會捕捉兩只手的數據,二是因為動作捕捉設備自帶軟件輸出的手指數據只包括手指關節(jié)的位置數據,不包括歐拉角形式的、手指肢節(jié)的方向數據。所以,如果在動作捕捉時不捕捉手部的動作,則可以省略此步驟;如果在捕捉時只捕捉一只手的動作,則只計算一只手的數據,另一只不進行計算;如果捕捉了兩只手的動作,則計算兩只手的數據。具體的計算方法以右手為例進行說明,左手參照右手。令gpo (r)、gpo (p)、gpo (y)分別為右手的翻滾角、俯仰角和偏航角,則Yaw = gpo (y) X 3. 1415926 + 180Pitch = gpo (ρ) X 3. 1415926 + 180Roll = gpo (r) X 3. 1415926 + 180再令cy = cos(Yaw)sY = Sin(Yaw)cP = cos (Pitch)sP = Sin(Pitch)cR = cos (Roll)sR = Sin(Roll)再令Matrix00_Hand(0)Matrix00_Hand(l)MatrixOO_Hand(2)MatrixOO_Hand(3)Matrix00_Hand(4)
=cyXcP =sYXcP =sP
=-sYXcR-cyXsPXsR =cyXcR-sYXsPXsR
MatrixOO_Hand(5) = cPXsRMatrixOO_Hand(6) = sYX sR-cy X sPX cRMatrix00_Hand(7) = -cyX sR-sYXsPXcRMatrixOO_Hand(8) = cPXcR^gpo(ax),gpo(ay),gpo(az)分別表示手指根部關節(jié) a 的 x、y、ζ 坐標,gpo(bx)、 gpo (by)、gpo (bz)分別表示手指除根部關節(jié)外離手掌較近的關節(jié)b的χ、y、ζ坐標,則dx = gpo (bx)-gpo (ax)dy = gpo (az) _gpo (bz)dz = gpo (by)-gpo (ay)再令v(0) = dx X Matrix00_Hand(0)+dy X Matrix00_Hand(1)+dz X Matrix00_Hand(2)v(l) = dx X Matrix00_Hand(3)+dy X Matrix00_Hand(4)+dz X Matrix00_Hand(5)ν (2) = dxX Matrix00_Hand (6) +dy X Matrix00_Hand (7) +dz X Matrix00_Hand (8)再令opv(y) = arcsin(v(1) + (sqr(v(0) Xv(0)+v(l) Xv(I))))opv(p) = -arcsin(v(2) + (sqr(v(0) Xν(0) +ν(2) Xv(2))))同時令oneoverModule = 1 + (sqr (dx X dx+dy X dy+dz X dz))再令VectorVO (0) = dxXoneoverModuleVectorVO(I) = dyXoneoverModuleVectorVO(2) = dzXoneoverModule其中,0pV(y)、0pV(p)分別表示手指根部關節(jié)相對于手掌的偏航角、俯仰角。需注意左手時opv(y) = -arcsin(ν(1) + (sqr(ν(0) Χν(0)+ν(1) Xv(I))))計算手指除根部外的其它關節(jié)的角度的方法是令gpo (ax)、gpo (ay)、gpo (az)分別表示手指離手掌較近的關節(jié)a的χ、y、ζ坐標,gpo (bx)、gpo (by)、gpo (bz)分別表示手指離手掌較遠的關節(jié)b的χ、y、ζ坐標,令dx = gpo (bx) -gpo (ax)dy = gpo (az) _gpo (bz)dz = gpo (by) -gpo (ay)再令oneoverModule = 1 + (sqr (dx X dx+dy X dy+dz X dz))再令VectorVl (0) = dxXoneoverModuleVectorVl(1) = dyXoneoverModuleVectorVl(2) = dzXoneoverModule最后令opv (p) = arccos(VectorVO(0)XVectorVl(0)+VectorVO(1)XVectorVl (1)+VectorVO(2)XVectorVl(2))opv(p)即為a關節(jié)的彎曲角度。同時,再令VectorVO (0) = VectorVl (0)VectorVO(I) =VectorVl(I)VectorVO (2) = VectorVl (2)將其進行迭代運算,可直至求出手指最末端關節(jié)的角度。步驟五、將轉換完成的動作數據以Automation API的方式賦給DELMIADELMIA提供了兩種主要的方式可對其進行二次開發(fā),一種是出售CAA開發(fā)包,但價格非常昂貴,甚至比DELMIA軟件還要貴;另一種是DELMIA本身免費提供的Automation API方式,本發(fā)明即采用此方式。通過該方式,DELMIA提供了一系列函數,可以對其進行調用、操作。其中,可以操作DELMIA里虛擬人的姿態(tài)的函數為ktPostureValues函數,其參數即為ορν數組;可以操作虛擬人方向和位置的函數為ktPosition函數,其參數即為 iAxisComponentsArray 數組。賦值后,DELMIA中的虛擬人的動作即和動作捕捉設備自帶軟件輸出的人體動作相一致。由于動作捕捉設備所捕捉的人體動作和其自帶軟件記錄、輸出的人體動作之間有可能存在一定的誤差,當這種誤差小到肉眼可以忽略不計的時候,DELMIA中的虛擬人的動作即和穿著動作捕捉設備的人員的實際動作相一致。步驟六、重復步驟二到步驟五將動作數據轉換完成并輸入到DELMIA中的虛擬人使其動作后,此即標志著一幀動作的完成。然后開始下一幀動作,重復步驟二到步驟五,直到不再進行動作捕捉或動作捕捉設備自帶軟件不再發(fā)送捕捉到的動作數據為止。實施例本實施例以Measurand公司的光纖式動作捕捉設備所捕捉到的一幀動作數據為例進行說明。其自帶軟件SiapeRecorder所捕捉到的人體動作如錯誤!未找到引用源。所
7J\ ο該設備包含了兩只手套,所以可以捕捉到兩只手的動作。接收到的動作數據臨時保存在gpo數組中,共有從1到2;35共2;35個數據,如表1所示。表Igpo數據列表
權利要求
1.基于DELMIA環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法,其特征在于該方法具體步驟如下步驟一、對動作捕捉軟件的數據輸出進行設置選擇ampeRecorder作為動作捕捉軟件,對其數據的輸出進行設置;輸出設置分為實時輸出和以文件方式輸出;步驟二、進行動作捕捉,通過動作捕捉設備自帶的軟件實時發(fā)送數據有兩種方式,一種是人員穿上動作捕捉設備,進行動作捕捉;另一種是之前進行動作捕捉時,用設備自帶的軟件對動作數據進行錄制,而發(fā)送數據時則通過設備自帶軟件打開已錄制好的動作數據文件,向外發(fā)送數據;步驟三、接收并臨時保存動作捕捉軟件輸出的動作數據以UDPSocket的方式接收數據,以數組的形式臨時保存當前接收到的一幀數據;為說明方便,該數組命名為gpo數組,該數組包含從1到235共235個數據,分別以gpo (1)、gpo (2)......gpo (235)表示;步驟四、對動作數據進行計算根據臨時保存的當前幀數據——即gpo數組——進行計算,將該數據的格式轉換為 DELMIA使用的動作數據格式,臨時保存在ορν數組和iAxisComponentsArray數組當中;該步驟進一步細分為a)計算人體的方向和位置;b)計算人體不包括手指的每一個肢節(jié)的姿勢;c)計算人體手指每一個肢節(jié)的姿勢;步驟五、將轉換完成的動作數據以Automation API的方式賦給DELMIA ; 步驟六、重復步驟二到步驟五將動作數據轉換完成并輸入到DELMIA中的虛擬人使其動作后,此即標志著一幀動作的完成;然后開始下一幀動作,重復步驟二到步驟五,直到不再進行動作捕捉或動作捕捉設備自帶軟件不再發(fā)送捕捉到的動作數據為止。
全文摘要
本發(fā)明基于DELMIA環(huán)境下的沉浸式虛擬維修仿真系統(tǒng)虛擬人控制方法,它有六大步驟如一、對動作捕捉軟件的數據輸出進行設置;二、進行動作捕捉,通過動作捕捉設備自帶的軟件實時發(fā)送數據;三、接收并臨時保存動作捕捉軟件輸出的動作數據;四、對動作數據進行計算;五、將轉換完成的動作數據以Automation API的方式賦給DELMIA;六、重復二到五的步驟。本發(fā)明以DELMIA虛擬仿真軟件和ShapeWarp無線光纖動作捕捉系統(tǒng)構建沉浸式虛擬維修仿真系統(tǒng),并利用DELMIA提供的Automation二次開發(fā)技術,對二者的接口設計算法做了相應研究,實現動作捕捉系統(tǒng)采集的真實的維修數據對DELMIA中虛擬人動作控制,提出了DELMIA環(huán)境下虛擬人控制的新方案,實現用戶與虛擬環(huán)境的融合。
文檔編號G06F17/50GK102521464SQ20111044241
公開日2012年6月27日 申請日期2011年12月26日 優(yōu)先權日2011年12月26日
發(fā)明者呂川, 周棟, 張乃棟, 李永祥, 郭志奇, 陳桂玲 申請人:北京航空航天大學