1. 程式人生 > >【機器人學】機器人開源專案KDL原始碼學習:(8)KDL的精髓

【機器人學】機器人開源專案KDL原始碼學習:(8)KDL的精髓

  首先說一下我的心得:
1. 我認為KDL的精髓是Spatial Vector,結合C++等面向物件的語言可以寫出較好的軟體。
2. 直接閱讀KDL程式碼不適合初學者學習機械臂動力學。
3. 要學習機械臂動力學的話應首先閱讀使用3維向量推導公式的文獻,也就是線速度和角速度獨立分析。
4. 掌握機械臂動力學的原理之後再考慮如何將其寫成程式碼,順序不能錯,否則會很吃力。
5. 機械臂動力學涉及到剛體運動學、剛體動力學、矩陣分析、李群和螺旋理論等。

一、3維向量和6維向量

  KDL中的演算法大多是參考的《Rigid Body Dynamics Algorithms》這本書中的方法,它提出了Spatial Vector—是將3維的線性運動(力)和3維的旋轉運動(力)組合起來的6維向量。這種組合可以極大地減小代數運算量,並且可以使程式碼更短、更清晰、更方便閱讀和除錯,所以這種程式適合用C++這種面向物件的語言來寫。
  Spatial Vector的種類:
Spatial Velocity:

v^O=[wxwywzvoxvoyvoz]T=[wvO]


spatial velocity

Spatial Acceleration:

a^O=ddt[wvO]=[w˙v˙O]


這裡寫圖片描述

Spatial Force:

f^O=[noxnoynozfxfyf]T=[nof
]


這裡寫圖片描述

Spatial Momentum:

h^O=[hOh]=[I¯Cw+r×mvCmvC]


這裡寫圖片描述

Spatial Inertia tensor:

IO=[I¯C+Mr×r×Tmc×Tmc×m1]

二、牛頓尤拉法的數學基礎

  剛體的運動方程,將牛頓方程和尤拉方程結合:

f=ddt(Iv)=Ia+(v×IIv×)v=Ia+v×Iv
  其中定義的一些運算子:
xyz×=0zyz0xyx0 v×=[w×0v×w×] , v×=[wv]×=[w×v×0w×]
IOa=[I¯C+mc×c×Tmc×Tmc×m1][w˙Ov˙O]
[