motion🚧

motion

動作。讓虛擬模型產生動作,讓實體機械產生動作。

locomotion

力與姿態的改變。

比如走路姿態。無論是走路、跑步、爬行,四肢的循環時間總是一致(除非跛腳),而相位則不一致。特定的走路動作,有著特定的相位差。

behavior

行為。產生動作,達成任務,例如移動。

https://www.karlsims.com/evolved-virtual-creatures.html

motion simulation🚧

motion simulation

這個詞彙目前有許多意義:

一、根據物理公式,編寫程式,計算物體運動軌跡,繪製物體運動過程。請見本站文件「simulation」。

二、以虛假的機械設備,體驗真實的機械設備如何運動。例如賽車遊戲機台、飛行訓練設備、力回饋搖桿。

motion transmission

傳動。組裝實物,使之連動。

motion control🚧

motion control

這個詞彙目前有許多意義:

一、馬達控制。

二、機械運動軌跡控制。

inverse kinematics

forward dynamics:給力,算位置。
inverse dynamics:給位置,算力。
forward kinematics:已知零件運動方式,求得整體運動結果。
inverse kinematics:已知整體運動結果,求得零件運動方式。
full-body inverse kinematics:動畫製作術語。設定角色運動方式。
Forward And Backward Reaching Inverse Kinematics (FABRIK)
Gauss–Seidel Iteration,兩個變數受到限制,正向與反向輪流實施。
https://sean.cm/a/fabrik-algorithm-2d
http://www.andreasaristidou.com/FABRIK.html

motion planning

規劃。訂立規矩,尋找動作。

http://homes.cs.washington.edu/~todorov/
http://www.zhihu.com/question/26944678
http://www.vccoo.com/v/90589d
graph optimization
http://censi.mit.edu/pub/research/2013-mole2d-slides.pdf

motion design

設計。依照規矩,實施動作。

motion analysis🚧

motion capture

捕捉。觀測實物,擷取動作。

motion retargeting

重新定位。建立模型與實物的對應關係。

human motion🚧

human motion

人體運動。你自己全身上下動一動吧。

人體運動檔案格式非常多種,維基百科整理了一份詳細列表。此處介紹其中兩種檔案格式。

C3D:人體表面座標、人體生理訊號。流行於生物力學領域。二進位檔。知名資料庫來自學術期刊scientific data,先找到論文,再到研究資料庫figshare搜尋論文名稱即可下載檔案。知名資料庫來自大學實驗室CMUSFUOSU,但是只含人體表面座標。

BVH:人體表面座標、角色骨架。流行於計算機動畫領域。純文字檔。知名資料庫來自研究單位Bandai Namco ResearchUbisoft La Forge

human measurement(anthropometry)

身高、體重、頭圍、胸圍。

human biomechanics

骨骼、關節、肌肉、神經。

使用Python處理人體運動

C3D檔案格式的知名函式庫是ezc3dpy-c3d

BVH檔案格式的函式庫,我沒有研究。大家還在開發中。

https://github.com/20tab/bvh-python
https://github.com/Wasserwecken/bvhio
https://github.com/rltonoli/bvhsdk

ezc3d的設計理念,主要是方便計算、方便分析。

我安裝失敗。我選擇默默等待。

py-c3d的設計理念,遵循C3D檔案格式。一幀包含一個時刻人體表面座標(五個數值⨯點數)、n個時刻人體生理訊號(一個數值接連n次⨯訊號數)。人體生理訊號取樣頻率是人體表面座標取樣頻率的n倍,時間得以對齊,成為一幀。如果不是整數倍,我不知道會怎樣。

我將C3D檔案轉換成純文字檔案,而且重新排版。

為了避免陣列cache miss,離線計算array[dimension][point][frame],即時存取array[frame][point][dimension]。二者不可得兼。ezc3d選擇離線計算,py-c3d選擇即時存取。

使用HTML與JavaScript處理人體運動

JavaScript本身沒有處理人體運動的函式庫。目前也沒有現成的函式庫。必須自己造輪子。我是利用Python函式庫將C3D檔案轉換成純文字檔案,再利用JavaScript讀檔。

順帶一提,網路上可以找到將BVH檔案匯入three.js和Babylon.js的程式。

human motion capture🚧

human motion capture

運動捕捉。測量人體運動資訊:位置、方向、……。

human pose estimation / human shape estimation:測量人體表面位置。細分為許多種工具。詳情請見產業報告

一、光學動作捕捉:利用多臺攝影機估計人體表面座標。
  原理是三角測量triangulation。
  領域是攝影測量photogrammetry。
二、慣性動作捕捉:利用穿戴式裝置估計人體肢段動向。
  例如傳感器(加速規、陀螺儀、磁力計)、機械設備。
  原理是各種物理定律。
  領域是微機電系統microelectromechanical system。
三、無標記動作捕捉:拍攝影片,然後利用深度學習估計人體骨架位置。
  原理是深度神經網路deep neural network。
  領域是計算機視覺computer vision。

human force estimation:測量人體施力。細分為許多種工具。

1. force plate:使用測力板得到地面反作用力。
一、三維測力板:測量力、力矩。
  總共六個數值。
  測力板四角落有感測器,測得四道力。
  硬體自動計算測力板中心、合力、合力矩。
  原理是equivalent force couple system。
二、壓力測力板:測量壓力。
  二維陣列,每個格子各有一個數值。
  腳掌對地面施力,平面上處處有力。
一、彈性材料(應變規):施力大小決定伸縮大小決定電阻大小。
            缺點是熱脹冷縮、彈性疲乏。
二、壓電材料(壓電感測器):施力大小決定電壓大小。當前主流。

每一步都必須剛好踩在每一片測力板。因為測量儀器是公用規格,所以不能隨意修改測力板尺寸。

地面反作用力不等於腳掌施力,畢竟受到皮肉緩衝。地面反作用力分布缺乏討論意義,畢竟人人腳掌不同。

human physiological signal measurement:測量人體生理訊號。細分為許多種工具。

1. electromyography (EMG):使用肌電圖得到肌電圖?
一、侵入式:探針。
二、非侵入式:電極片。當前主流。

optical motion capture

光學動作捕捉需要兩種設備。

一、marker:人體多處貼上標記。

生物力學國際協會已經提出標準規範,告訴大家如何描述人體運動:每個標記的黏貼地點、每個肢段的座標系統、每個關節的旋轉變換(歐拉角三個轉軸)。主要源自這兩篇文章:

ISB recommendation on definitions of joint coordinate system
of various joints for the reporting of human joint motion
--part I: ankle, hip, and spine [Wu et al. 2002]
https://pubmed.ncbi.nlm.nih.gov/11934426/
https://media.isbweb.org/images/documents/standards/isb_jcs_part_i.pdf

--Part II: shoulder, elbow, wrist and hand [Wu et al. 2005]
https://pubmed.ncbi.nlm.nih.gov/15844264/
https://media.isbweb.org/images/documents/standards/isb_jcs_part_ii.pdf

下面是黏貼地點圖片、地點名稱清單。圖文截自這篇學術論文。每位研究員習慣自行增減黏貼地點、自行調整地點名稱,未必完全符合標準規範。我知道你想說什麼,這不是人體經絡穴位圖。

Labels    Description
(L/R)FHD  Left/right front head
          Left/right temple
(L/R)BHD  Left/right back head
          Left/right back of head
(L/R)MAS  Left/right mastoid process
          Behind the left/right earlobe
GLAB      Forehead middle
          On the headband
C7        7th cervical vertebra
          On the spinous process of the 7th cervical vertebra
T2        2nd thoracic vertebra
          On the spinous process of the 2nd thoracic vertebra
T10       10th thoracic vertebra
          On the spinous process of the 10th thoracic vertebra
CLAV      Clavicle
          On the jugular notch where the clavicles meet
          the sternum
STRN      Sternum
          On the xiphoid process of the sternum
RBAK      Right back
          On the middle of the right scapula
          (not symmetrical on the left)
(L/R)SHO  Left/right shoulder
          On the left/right acromio-clavicular joint
(L/R)UPA  Left/right arm
          Upper 1/3 of the lateral aspect of
          the left/right arm
(L/R)ELB  Left/right elbow
          On the left/right lateral epicondyle
(L/R)FRM  Left/right forearm
          Lower 1/3 of the lateral aspect of
          the left/right forearm
(L/R)WRA  Left/right wrist marker A
          Left/right radius styloid process
(L/R)WRB  Left/right wrist marker B
          Left/right ulnar styloid
(L/R)FIN  Left/right finger
          Middle of the back of the left/right hand
(L/R)ASI  Left/right ASIS
          Left/right anterior superior iliac spine
(L/R)PSI  Left/right PSIS
          Left/right posterior superior iliac spine
(L/R)THI  Left/right thigh
          Halfway up the lateral left/right thigh
(L/R)THAP Left/right thigh
          Proximal 1/3 of the left/right thigh (anterior)
(L/R)THAD Left/right thigh
          Distal 1/3 of the left/right thigh (anterior)
(L/R)KNE  Left/right knee
          On the flexion-extension axis of
          the left/right knee (lateral epicondyle)
(L/R)KNM  Left/right knee
          On the flexion-extension axis of
          the left/right knee (medial epicondyle)
(L/R)TIB  Left/right tibia
          Halfway up the lateral left/right leg
(L/R)TIAP Left/right tibia
          2 cm below the left/right tibial tuberosity
(L/R)TIAD Left/right tibia
          Halfway up the left/right leg (on the tibial crest)
(L/R)ANK  Left/right ankle
          Left/right lateral tibial malleolus
(L/R)MED  Left/right ankle
          Left/right medial tibial malleolus
(L/R)HEE  Left/right heel
          Most prominent part of the posterior calcaneus
(L/R)TOE  Left/right toe
          Metatarsocuneiform joint of the left/right 2nd toe
(L/R)FMH  Left/right 1st toe
          Proximal metatarsophalangeal joint of
          the left/right 1st toe
(L/R)VMH  Left/right 5th toe
          Proximal metatarsophalangeal joint of
          the left/right 5th toe
(L/R)SMH  Left/right 2nd toe
          Proximal metatarsophalangeal joint of
          the left/right 2nd toe
(L/R)FootOff  Left/right shoe
              Extremity of the left/right shoe,
              close to the hallux

marker分為兩種類型。

一、主動發光:不同顏色的LED燈。利用顏色分辨不同標記。
二、被動反光:額外提供紅外線光源。設計演算法分辨不同標記。

二、camera:使用攝影機拍攝人體運動求得影片,使用軟體讀取影片求得每個時刻每個標記的三維座標。

攝影測量領域已有一套解決方案。設備例如Vicon。演算法請見motion tracking



camera calibration需要兩種設備。

一、靜態校正:放置三角板L-frame,於測力板force plate轉角。
  以便稍後訂立世界座標系。
二、動態校正:揮動T型魔法棒wand。功效如同西洋棋盤。
  以便確認拍攝空間範圍:視情況重新調整相機位置、方向。
  (支架高度、鉛直轉角、水平轉角。)
  以便得到相機外在參數:位置、方向。
  以便得到相機內在參數:焦距、扭曲係數。
https://www.semanticscholar.org/paper/Photogrammetric-Measurements-for-Rigid-Body-in-Low-Atyam/bdff6e8b19932e35eb5a73eb0b70830fffd59744/figure/4

markerless motion capture

human motion analysis🚧

human motion analysis

https://www.stiff-project.org/fileadmin/biomechanics/HMC_Reader.pdf

joint force estimation

關節施力估計。計算人體關節的力、力矩、……。

主流演算法是inverse kinematics。

These contents are directly taken from Dr. Tung-Wu Lu. Though I attribute it without permission. I try to hide that fact by adding more contents. I am pretending that I never do anything evil. Keep in mind do not announce it, okay?

一、計算一個時刻每個肢段的座標系統(根據標準規格書):
  一個原點(視作位移向量)、三個座標軸(視作旋轉矩陣)。
      ⎡ x ⎤       ⎡ R₁₁ R₁₂ R₁₃ ⎤   ⎡ |  |  |  ⎤
  t = ⎢ y ⎥   R = ⎢ R₂₁ R₂₂ R₂₃ ⎥ = ⎢ v₁ v₂ v₃ ⎥
      ⎣ z ⎦       ⎣ R₃₁ R₃₂ R₃₃ ⎦   ⎣ |  |  |  ⎦
  順帶一提,旋轉矩陣是正規正交矩陣,導致反矩陣等於轉置矩陣。
  R⁻¹ = Rᵀ
回、順便介紹全域座標系(世界座標系)和局部座標系(肢段座標系)的轉換。
  for position vector plocal and pglobal,
  plocal = Rᵀ (pglobal - t)
  pglobal = R plocal + t
  for direction vector vlocal and vglobal,
  vlocal = Rᵀ vglobal
  vglobal = R vlocal
二、計算一個時刻的關節(相鄰肢段交點)的旋轉矩陣:
  從身體近端肢段去看身體遠端肢段的相對運動(近端不動、遠端動)。
  遠端三個座標軸,分別從遠端座標系轉換到近端座標系,形成旋轉矩陣。
  其實就是direction consine matrix的轉置。
  Rjoint = Rproximalᵀ Rdistal
三、計算一個時刻的關節的角速度、角加速度。
 甲、旋轉矩陣改寫成歐拉角/四元數:
   計算一個時刻的關節的歐拉角三個轉軸(根據標準規格書)、三個轉角。
   例如膝關節intrinsic rotations of Cardan angles z-x'-y"
   let Rjoint = R₞(ψ₞) Rₓ(ψₓ) R₝(ψ₝)
   ⎧ ψ₞ = tan⁻¹(-R₁₂/R₂₂)
   ⎨ ψₓ = sin⁻¹(R₃₂)     
   ⎩ ψ₝ = tan⁻¹(-R₃₁/R₃₃)
   例如肩關節intrinsic rotations of Euler angles y-z'-y"
   let Rjoint = R₝(α) R₞(β) R₝(γ)
   ⎧ α = tan⁻¹(-R₃₂/R₁₂)
   ⎨ β = cos⁻¹(R₂₂)
   ⎩ γ = tan⁻¹(R₂₃/R₂₁)
 乙、所有時刻的旋轉矩陣/歐拉角/四元數,實施signal reconstruction:
   內插(樣條內插)/迴歸(移動最小平方法)/頻域分析(傅立葉級數)。
 丙、計算旋轉矩陣/歐拉角/四元數函數的一次微分、二次微分。
   進而計算角速度、角加速度。
   例如膝關節intrinsic rotations of Cardan angles z-x'-y"
   ⎡ ωₓ ⎤   ⎡  cosψ₝   0 -cosψₓsinψ₝ ⎤ ⎡ ψ̇ₓ ⎤
   ⎢ ω₝ ⎥ = ⎢      0   1      -sinψₓ ⎥ ⎢ ψ̇₝ ⎥
   ⎣ ω₞ ⎦   ⎣ -sinψ₝   0  cosψₓcosψ₝ ⎦ ⎣ ψ̇₞ ⎦

   ⎡ αₓ ⎤   ⎡ -ψ̇₝sinψ₝  0  ψ̇ₓsinψₓsinψ₝-ψ̇₝cosψₓcosψ₝ ⎤ ⎡ ψ̇ₓ ⎤
   ⎢ α₝ ⎥ = ⎢        0  0                    ψ̇ₓcosψₓ ⎥ ⎢ ψ̇₝ ⎥
   ⎣ α₞ ⎦   ⎣  ψ̇₝cosψ₝  0 -ψ̇ₓsinψₓcosψ₝-ψ̇₝cosψₓsinψ₝ ⎦ ⎣ ψ̇₞ ⎦

            ⎡  cosψ₝   0 -cosψₓsinψ₝ ⎤ ⎡ ψ̈ₓ ⎤
          + ⎢      0   1      -sinψₓ ⎥ ⎢ ψ̈₝ ⎥
            ⎣ -sinψ₝   0  cosψₓcosψ₝ ⎦ ⎣ ψ̈₞ ⎦
四、估計每個肢段的質心、移動慣量、轉動慣量。
 甲、估計肢段形狀、肢段密度。三種方式。
  回、大體解剖:body segment parameter。
  回、醫學影像:computed tomography scan。
  回、數學模型:truncated cone。
 乙、估計關節中心。作為肢段端點。
   好像是自己發明的數學公式。我再問一下助教。
 丙、估計肢段質心、肢段移動慣量、肢段轉動慣量。
   此處採用Dempster's body segment parameter。
   http://holmeslab.ca/csb-scb/Software/dempster.pdf
  回、質心:肢段兩個端點的一次內插。內插比例請查表。
  回、移動慣量:體重乘上肢段重量比例。肢段重量比例請查表。
  回、轉動慣量:肢段重量乘上慣性半徑平方。慣性半徑請查表。
五、估計測力板的足底壓力中心center of pressure、力、力矩,
  正確名稱應是足底合力中心,阿就歷史共業。
 回、計算測力板中心、合力、合力矩。
   測力板四角落有感測器,測得四道力。
   硬體自動計算測力板中心、合力、合力矩。
   這裡講一下怎麼計算。
   回顧力矩公式。旋轉中心p₀、施力點p、力F、力矩M、力臂r。
   ⎰ M = r × F
   ⎱ r = p - p₀
   回顧座標系轉換公式。座標軸R₁ R₂、原點p₁ p₂。
   ⎰ C = R₁ᵀ R₂
   ⎱ r = p₂ - p₁
   一塊測力板,四筆數據一律轉換為測力板中心座標系,再加總。
   ⎧ p₀ = (p₁ + p₂ + p₃ + p₄) / 4
   ⎪ R₀ = R₁ = R₂ = R₃ = R₄
   ⎨ Cᵢ = R₀⁻¹ Rᵢ
   ⎪ rᵢ = pᵢ - p₀
   ⎪ F₀ = sum { Cᵢ Fᵢ }
   ⎩ M₀ = sum { Cᵢ Mᵢ + rᵢ × (Cᵢ Fᵢ) }
   多塊測力板,每筆數據一律轉換為第一測力板中心座標系,再加總。
   ⎰ F = F₁ + C₂ F₂ + ...
   ⎱ M = M₁ + (C₂ M₂ + r₂ × (C₂ F₂)) + ...
 乙、計算足底壓力中心(施力點)、力、力矩(等於零)。
   回顧力矩公式。測力板中心座標p₀ = 0、合力F、合力矩M、
   足底壓力中心(施力點)p、力F、力矩0、力臂r。
   ⎰ M = r × F
   ⎱ r = p - p₀
   p是未知數。p₀ M F是已知數。
   藉由力矩公式M = p × F,求得足底壓力中心。
   ⎰ pₓ = (p₞ Fₓ - M₝) / F₞
   ⎱ p₝ = (Mₓ + p₞ F₝) / F₞
   其中p₞由測力板規格書取得。p₞數值根據感測器材料彈性而定。
   p₞數值極小,甚至p₞ F₝該項可以忽略不計。
   因為pₓ p₝可能是零,所以不能當作分母。
   https://isbweb.org/software/movanal/vaughan/
六、計算一個時刻的關節的力、力矩。
  逆向運動學。
  已知測力板的受力位置(足底壓力中心)、力、力矩,
  從下往上逐步推導每個關節的力、力矩。
 甲、已知地板、肢段,求得關節。
   subscript g denotes ground (force plate)
   subscript f denotes foot segment center (camera / study)
   subscript a denotes ankle joint
   R denotes reaction force
   M denotes reaction torque
   m denotes mass
   g denotes gravity
   a denotes acceleration
   ⎧ sum Ff = 0  =>  Ra + Rg + mf g + mf af = 0
   ⎨                 Ra = ...
   ⎪ sum Mf = 0  =>  Ma + ra Ra + Mg + rg Rg + Mf = 0
   ⎩                 Ma = ...
 乙、肢段相依表
   known        | unknown  | inverse
   distal       | proximal | kinematic
   body segment | joint    | formula
   -----------------------------------
   foot f       | ankle a  | f g -> a  (ground g)
   shank s      | knee k   | s a -> k
   thigh t      | hip h    | t k -> h
  ⎡ ωₓ ⎤   ⎡ 1     0    -sinβ ⎤ ⎡ γ̇ ⎤
  ⎢ ω₝ ⎥ = ⎢ 0  cosα sinαcosβ ⎥ ⎢ α̇ ⎥
  ⎣ ω₞ ⎦   ⎣ 0 -sinα cosαcosβ ⎦ ⎣ β̇ ⎦

  ⎡ ωₓ ⎤   ⎡ 1     0    -sinθ ⎤ ⎡ ϕ̇ ⎤
  ⎢ ω₝ ⎥ = ⎢ 0  cosϕ sinϕcosθ ⎥ ⎢ θ̇ ⎥
  ⎣ ω₞ ⎦   ⎣ 0 -sinϕ cosϕcosθ ⎦ ⎣ ψ̇ ⎦

生物力學領域習慣使用歐拉角。首倡是Grood–Suntay angles,定義了膝關節歐拉角三個轉軸。原因是臨床醫療容易轉述三個轉角。

A joint coordinate system for the clinical description of
three-dimensional motions: application to the knee
https://pubmed.ncbi.nlm.nih.gov/6865355/
https://www.researchgate.net/publication/16334377

歐拉角範圍±180°-±90°-±180°。人體每個關節,都至少存在一個轉角無法抵達±90°。妥善規劃轉軸順序,即可符合轉角範圍,同時避免gimbal lock。肩關節是唯一例外,解法是運用特殊姿勢讓肩關節轉到卡住【尚待確認】。採用傳統歐拉角(一三轉軸相同),妥善規劃轉軸順序,使得第二轉角無法抵達±90°。

手工插圖

歐拉角有嚴重缺陷。一、歐拉角只適合描述旋轉變換,不適合描述旋轉軌跡。二、三個轉軸依序自旋、三個轉軸同時自旋,旋轉變換不同,旋轉軌跡也不同。歐拉角只能三個轉軸依序自旋。現實世界需要三個轉軸同時自旋。三、即便是等速旋轉,每個時刻的旋轉矩陣9數值/歐拉角3數值/四元數4數值也不會是一次函數/多項式函數,不適合一次迴歸/多項式迴歸。

幸運的是,當今設備足夠先進。取樣頻率極高、取樣時距極短,導致角速度誤差極小。無論哪種方法,計算結果都差不多。

stabilogram analysis

所有時刻的center of pressure收集起來,做個principal component analysis,可以知道身體晃動的情況。

Rambling and Trembling decomposition
https://nbviewer.org/github/BMClab/BMC/blob/master/notebooks/IEP.ipynb
https://www.researchgate.net/publication/11843491

gait analysis

測力板xyz曲線圖,M型圖之類的。

muscule force estimation

肌肉施力估計。計算人體肌肉的力。

主流演算法是constrained optimization。

人體腳部肌肉圖

Hill's muscle model

human motion control🚧

human motion control

the man who lost his body

標題應該不是觸覺touch而是本體感覺proprioception。

也許介紹一下外骨骼。