V-rep中機械臂慣性參數的獲取方法

慣性參數的獲取方法:

① 使用V-rep中的rigid body properties中的選項進行自動計算可得(需要知道連桿的質量或者密度)(V-rep中慣性參數的解釋),vrep中輸出的慣量矩陣需要乘以質量。

URDF中inertial屬性的定義:
在這裏插入圖片描述
可以看到inertialorigin是用來描述慣量參考系與連桿座標系之間的偏差的,以下圖爲例介紹URDF中的inertial屬性和V-rep中得到的慣性屬性之間的對應關係和轉換方法:
在這裏插入圖片描述
左邊是URDF文件,右邊是導入V-rep後生成的模型,可以看到urdf中的inertial屬性是定義在連桿座標系下的屬性,連桿座標系通常定義在該連桿父關節座標系上,而inertialorigin屬性定義了慣性(質心)座標系相對連桿座標系的偏差(即從連桿座標系到連桿質心座標系的變換);在V-rep中點擊某個物體顯示的座標通常是質心或者幾何中心(大部分情況重合)的座標,而V-rep中顯示的Relative to absolute frame下的慣性矩陣(上圖中最右邊紅圈裏)纔是URDF中的inertia屬性對應的參數,不過還需要乘以質量,因爲V-rep中的這個慣性矩陣除過質量(所以單位是m^2)。因此V-rep和URDF中的inertial屬性參數之間的對應關係如下:

  • Vrep中Relative to absolute frame下的慣性矩陣乘以連桿質量就可得到URDF中inertialinertia屬性;
  • V-rep中用連桿位置座標直接減去父關節座標就可得到inertialoriginxyz屬性,而rpy屬性通常都是零。。。!!!更精確的做法:由於質心和幾何中心並不是完全重合,更精確的做法是使用Relative to absolute frame下的連桿質心座標減去父關節座標從而得到xyz參數,這樣比點擊連桿得到的幾何中心座標減去父關節座標的結果更精確。

PS:以上結論的得到參考如下博客

  • V-rep中不同慣性參數的區別:https://www.cnblogs.com/21207-iHome/p/7765508.html
  • 極其重要的概念解析–Solidworks中三種不同座標系下的慣性張量:https://blog.csdn.net/robinvista/article/details/70231205
  • V-rep中相對連桿參考系的慣性參數的解釋和編程獲取方法:http://macro.ppgee.ufmg.br/wiki/index.php?title=VRep:_How_to_get_the_dynamic_parameters_of_the_robots
  • Mathematica中機械臂模型的導入和仿真:https://blog.csdn.net/robinvista/article/details/70231205

V-rep中編程獲取慣性參數
命令:sim.getShapeMassAndInertia
這個命令獲取到的參數還沒有和URDF文件中的參數對應起來,重心位置參數正常,慣性矩陣暫且不使用。

PS:
a.urdf中inertial屬性的定義:http://wiki.ros.org/urdf/XML/link
b. 慣性矩陣、慣性張量的區別和聯繫:https://www.cnblogs.com/21207-iHome/p/7765508.html
c. 慣性矩陣的主對角線元素滿足三角不等式:ixx + iyy >= izz, ixx + izz >= iyy and iyy + izz >= ixx
d. 切記V-rep中得到的慣性矩陣是mass-less的(除以過質量),所以需要乘以質量後才能得到我們需要的慣性矩陣。

PS: 爲什麼需要相對連桿座標系的慣性參數?
可以看到有三種慣性參數:主軸慣性矩、主慣性距和慣性張量矩陣,前兩種是在慣性座標系(以質心爲座標原點)下的慣性參數,但是在進行正逆運動學解算和控制律設計時通常是以連桿座標系進行的,所以需要相對連桿座標系的慣性參數,而連桿座標系原點通常位於該連桿父關節座標原點。(參考博客

②使用Meshlab獲取慣性參數

參考文檔:http://gazebosim.org/tutorials?tut=inertia&cat=build_robot

  1. 首先使用Meshlab得到每個連桿的體積參數:Filters->Quality Measure and Computations->Compute Geometric Measures。
  2. 機械臂官方文檔可查到總質量,根據各連桿的體積可以得到各連桿的質量,然後將質量填入V-rep的動力學參數框,按照方法①進行操作,即可得到慣性矩陣參數。

PS:

  • 出現“Mesh is not ‘watertight’, no information on volume, barycenter and inertia tensor”的問題—當前使用meshlab版本是2016版本。
    解決辦法:安裝2020.03版本的meshlab(安裝新版本前一定要手動卸載舊版本,否則新版本無法正常運行),出現這個問題的原因可能是stl文件中的模型太精細,無法進行體積計算,這時候可以先將stl中的模型轉換爲凸包模型,然後計算出凸包模型的體積來近似原模型的體積。轉換凸包模型:Filters->Remeshing, Simplification and Reconstrcution->Convex Hull,然後在計算體積和慣性參數:Filters->Quality Measure and Computations->Compute Geometric Measures,然後就可以得到體積參數。
  • 此處使用Meshlab僅僅用來計算連桿的體積參數,從而根據體積分佈得到各連桿的質量,然後通過V-rep得到最終的慣性矩陣參數。。。Meshlab中得到的慣性矩陣並不是我們需要的慣性矩陣,因爲一方面Meshlab默認密度爲1,而且其慣性矩陣是相對慣性參考系得到的,並不是相對連桿座標系得到的。
  • 縮放stl模型之後的慣性參數:https://answers.ros.org/question/237421/calculating-inertial-matrix-for-gazebo/
  • 切記V-rep中得到的慣性矩陣是mass-less的(除以過質量),所以需要乘以質量後才能得到我們需要的慣性矩陣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章