楊 華 蘇勢林 閆雨奇 李寶川 潘琢金
(沈陽航空航天大學計算機學院 沈陽 110136)
人體運動建模與仿真是一門涉及圖像處理,模式識別,人工智能等領域的交叉學科,且運動捕捉技術已廣泛地應用于影視動畫,體育訓練,機器人驅動和虛擬現實等實際場景中[1]。為生成滿足物理運動規律的虛擬角色運動,利用開源軟件研制仿真平臺則是一個熱點。如日本AIST 與東京大學聯合研發的開放式仿人機器人平臺OpenHRP,但OpenHRP 軟件開發規模大,對機器人生產環境要求高,因此難以大規模地應用與借鑒[2]。ODE(Open Dynamic Engine,開源動力引擎)是常用的開源動力引擎之一,很多仿人機器人平臺在此基礎上搭建,如GazeBo,Webots,V-REP,Mujoco等[3]。
近年來,基于物理角色運動是計算機動畫研究領域中最活躍的領域之一[4]。例如:文獻[4]通過Kinect 設備獲取人體運動的原始坐標數據,計算人體關節旋轉角度將其保存在BVH 文件中,用于動畫生成[5]。除了直接利用光學設備捕獲人體運動數據外,一些研究人員也在已有運動庫中引入機器學習等理論合成人體運動。Daniel Holden 等基于深度學習框架實現了人體運動合成和編輯,在大量動捕數據集上進行訓練,由卷積自編碼器學習運動流形來生成復雜動作[6],Jack M.Wang 等提出了一種非線性的高斯隱變量模型,使用時間序列預測方法從模型中合成新的運動序列[7]。Peng 等則采用強化學習策略實現了物理角色的穩定控制,結合動捕數據和任務目標來完成用戶指定的輸入[8]。而基于機器學習或深度學習等理論生成的人體運動往往訓練周期過長,參數變量多,難以在真實環境中測試和應用。
本文利用Kinect 深度視覺傳感器采集人體運動位姿數據,計算轉換成關節Z-Y-X 軸向上的歐拉角存儲于BVH 中,為數據驅動提供支撐。在ODE 上搭建一個全尺寸并具有真實物理環境的虛擬機器人,參考動捕數據,使用路徑跟蹤的方法來增強物理模擬結果的真實感,結合PD 控制算法計算虛擬機器人的關節扭矩,從而驅動虛擬機器人模擬捕獲動作。
為給數據驅動和數據分析提供支撐,構建從Kinect 位姿數據向運動數據轉化,記錄人體運動序列,并在虛擬仿人機器人上再現和驗證相關人體運動。將Kinect 捕獲到的骨骼四元數數據轉化成歐拉角存儲于BVH 文件中,目的是建立人體運動模型,驅動物理角色,并生成自然逼真的虛擬仿人機器人運動。
Kinect 是微軟Xbox 360 外接3D 體感攝影機,具備即時動態捕捉,影像識別,麥克風輸入,語音識別等功能。Kinect for Windows SDK v1.6 平臺為用戶提供應用程序接口來采集人體運動序列,為研究者提供實驗環境和技術支持。近年來,已有大量的人體運動數據集基于Kinect采集,如NUCLA Multi?view Action3D,UTD-MHAD 等運動庫[9~10]。人體模型主要描述為幾何拓撲結構及其物理屬性,這些模型往往根據實際場景抽象出來。其中骨骼追蹤技術是Kinect核心技術之一,它可準確地標定人體20個關鍵點數據,并實時跟蹤。Kinect 利用景深視覺獲取人體關節點信息,并以Hip 為根節點組成一棵樹形層次結構,如圖1所示。

圖1 Kinect骨架層次結構
BVH 最初由Biovision 公司設計的動捕文件格式,以此提供運動數據分析和處理服務[11]。BVH文件包含兩部分,骨架信息和運動數據,骨架信息描述了以人體髖關節為根節點的骨架層次結構,包括旋轉、關節偏置以及通道數等信息。運動數據則記錄了按骨架層次結構實時捕獲到的關節歐拉角數據,便于人體運動建模和運動生成,如圖2 所示。其中骨架信息以關鍵字“HIERARCHY”為開始;“ROOT”確定髖關節(Hip)為根節點;“JOINT”為父節點下的所屬關節;“OFFSET”則為子節點相對于父節點的偏置;“CHANNELS”為通道數。ROOT 總是擁有6 個CHANNELS,而JOINT 只有3個CHANNELS,相對于ROOT 而言,缺少了坐標系的X-pos,Y-pos,Z-pos 信息。在構成人體骨骼模型的所有關節中,除根節點可以同時進行平移和旋轉外,其他關節一般被設定為旋轉關節,因此骨架模型的其他節點的位置是通過相對于其父節點的偏移和旋轉信息而得。則子節點對于父節點的變換矩陣為M=T×R,T表示平移矩陣,R表示旋轉矩陣。如計算右足(R_FOOT)在世界坐標系下位置:

其中PR_FOOT是需要計算的世界坐標,POFFESET_R_FOOT則為R_FOOT 相對于R_ANKLE 的偏置。同理,其他節點根據相應的平移和旋轉變換即可求出。

圖2 BVH文件結構
Kinect采用四元數描述骨架位姿信息,而BVH文件記錄的是人體關節歐拉角信息。因此,本文將Kinect數據轉化為BVH記錄格式,從而實現采集數據對人體運動模型的實時驅動。首先,依據Kinect人體骨架信息結構,創建BVH 骨架層次信息,如圖2(a)所示。其次,建立Kinect 四元數向BVH 中Z-Y-X 軸向上的歐拉角的轉化算法,根據需要,既可以存儲于BVH 數據文件中,也可以直接對人體運動模型進行仿真驅動。轉化算法推導過程如下:
骨架四元數定義為

其 中ε0,ε1,ε2,ε3為 實 數,滿 足=ijk=-1。將式(2)改寫為q=[ε0,ε1,ε2,ε3]=[w,→,其中w為標量,=(ε1,ε2,ε3)為矢量部分。四元數繞旋轉軸旋轉一個角度的旋轉矩陣為

并將其改寫成:

而BVH 運動信息中繞Z-Y-X 軸旋轉的歐拉矩陣如式(4)所示:

其中,cα、sα分別表示sin(α)、cos(α),令式(3)和式(4)式中的旋轉矩陣相等,計算r11和r21的平方和的平方根求得cβ。然后用-r31除以cβ再反正切求得β角。只要cβ≠0,用r21cβ除以r11cβ再反正切求得α角,同理求得γ角,其中Atan 2(y,x)是反正切函數,綜上,完成Kinect 四元數向BVH 歐拉角的轉化計算。

ODE能對剛體進行仿真計算,完成剛體關節間扭矩輸入,并在約束條件下實現碰撞檢測。ODE包含:作用力發生器計算剛體對象所受作用力并處理剛體運動行為;碰撞檢測器確定剛體對象間以及剛體與靜態場景間的接觸行為,進而描述碰撞效果。為實現人體動作的仿真再現及運動控制算法的研究,本文基于ODE建立了一個虛擬仿人機器人。
與Kinect骨架模型相對應,該虛擬仿人機器人由16 個剛體對象(頭,軀干、髖、上臂、下臂、手、大腿、脛、和腳)和15 個球窩關節(連接剛體結構)構成,其外形如圖3所示,質量和尺寸如表1所示。將作用力生成器附加在關節處,實現剛體對象間的線性相對運動來模擬人體運動行為。

表1 虛擬機器人物理參數

圖3 機器人
本文借助ODE 完成虛擬仿人機器人動力學運算,預設控制算法實時計算并調整各關節扭矩,實現對虛擬仿人機器人進行連續的姿態跟蹤及控制,并在約束條件下對虛擬機器人實現碰撞檢測[12]。采用的剛體控制系統的實現方法如下:
剛體動力學狀態方程[13~14]:

式中τ是n×1 的剛體轉矩矩陣,M(θ) 是剛體的n×n質量矩陣,V(θ,θ?)是n×1 的離心力和哥式力矢量,G(θ)是n×1 重力矢量。θ,θ?,θ?分別代表剛體關節角度、角速度、角加速度。M(θ),G(θ)的元素是關于剛體θ的復雜函數,而V(θ,θ?)中的元素是關于θ和θ?復雜函數。引入摩擦模型(或者其他非剛性效應),假設這個摩擦模型是關節角度和角速度的函數,則在式(6)上加上一項F(θ,θ?),得到:

對于式(7)中復雜系統的控制問題可分解控制器方法求解,令:

式中E表示剛體期望軌跡與實際軌跡之差,E和分別為n×1 維角度誤差矢量和角速度誤差矢量,求得的控制系統如圖4所示。

圖4 剛體控制系統的實現方法
綜上,很容易求得剛體系統閉環特性的誤差方程:

虛擬機器人的控制非常復雜,涉及的參數眾多,因此常用動捕數據路徑跟蹤和傳統控制方法結合來優化控制[15~16]。本文用位姿數據計算關節扭矩,驅動虛擬仿人機器人對Kinect采集人體運動數據的仿真再現。通過記錄真實的動捕數據來驅動虛擬仿人機器人,具有真實逼真、高效率等優點,提高了動捕數據的利用率。本文采用PD控制算法來實現虛擬機器人動作的生成與控制,PD 控制通過計算動捕數據與虛擬機器人姿態間差異來施加關節內部扭矩,從而實現運動捕獲數據對虛擬機器人的驅動控制,如圖5所示。

圖5 人體數據驅動
根據動捕數據與虛擬機器人之間的姿態差異獲取關節角度差值,并使用比例微分(PD)控制器對關節施加扭矩來維持虛擬機器人的運動姿態[17]。通過動力學給關節施加扭矩,并反饋控制驅動虛擬機器人跟蹤運動捕獲數據來保持姿態平衡。根據式(11)可得輸入關節的扭矩為

τ為關節內部扭矩,θd,θ?d為關節的期望姿態與期望角速度,θ,θ?為關節的當前角度和角速度,Kp和Kd分別比例系數與微分系數。
本文實驗在一臺2.4GHz CPU 和4GB 內存的PC 機上運行,基于Visual C++和ODE 引擎編程建立仿真實驗環境,由兩部分組成:1)Kinect 捕獲人體運動數據轉化計算為BVH 格式數據;2)基于ODE建立全尺寸虛擬仿人機器人,為人體運動仿真再現及控制算法提供運動分析和驗證平臺。該平臺包含了物理引擎提供用戶對虛擬仿人機器人行為的高層控制,實現了基于姿態差、PD 控制算法等計算關節力矩驅動角色模型跟蹤動捕數據,對外界擾動和環境變化做出實時反饋。不僅可以提供在線人體運動仿真,在已有的運動庫中提取動捕數據離線編輯新的運動序列來驅動虛擬機器人,生成自然逼真的人體運動,實驗過程如圖6 所示。由于動捕數據含有豐富的細節信息(關節角度、角速度、角加速度等),結合物理動畫引擎能生成自然逼真的人體運動,并能對虛擬場景中的各種事件進行感知,做出相應的反饋行為。數據驅動方法繼承了動捕數據的自然逼真性和關節約束性因素,通過實時仿真計算完成虛擬人的運動生成,很大程度上避免了姿態奇異因素。
在搭建的仿真平臺上進行虛擬機器人仿真模擬,實驗選取行走、抬腿、揮手等動捕數據來驅動虛擬機器人模擬出對應的運動姿態,如圖7所示。

圖6 虛擬機器人驅動控制過程圖

圖7 虛擬機器人運動模擬
上述系列方法可用于仿人機器人的研制過程。在項目組研制的輕型仿人機械手臂上,用BVH 數據文件進行驅動控制,實現對人體手臂動作的真實再現。如圖8 所示,該機械手臂包含8 個自由度(末端夾具1 個),能夠比較準確地完成上舉、平伸、側抬等動作,誤差范圍在厘米級,分析原因是因為機械手臂的部件加工精度及舵機尺差等因素造成。

圖8 上肢運動姿態樣機測試
本文構建了Kinect 從關節點位置數據向肢體位姿數據轉化,存儲于BVH中,基于ODE建立虛擬仿人機器人實現了人體運動的仿真再現,以及為控制算法提供驗證平臺。完成了Kinect數據采集、離線BVH 轉換、仿人機器人姿態計算、關節扭矩計算、仿真驅動等系列實驗,并在項目組研制的輕型仿人機械手臂上,實現BVH 數據文件對機械手的驅動控制和真實再現。實驗表明該系列方法可用于仿人機器人研制、虛擬現實等相關研究。