Find out inertial parameters

4563 ワード

このモデルの物理的に合理的な挙動については,慣性行列,質量中心,およびすべてのリンクlinksの重量を正確に設定する必要がある.彼ら(3 Dモデルのリンク)がなければ、このチュートリアルでは情報を取得して記入することで案内します.
このチュートリアルでは、MeshLab(君子体を仮定)によって慣性データを取得する方法を示します.ビジネスソフトウェアsolidworksで情報を計算することもできます.soildworksの使用方法については、this question on answersを参照してください.ros.org
Preparation
Installing MeshLab
公式サイトからMeshLabソフトウェアをダウンロードして、あなたのパソコンにインストールして、インストールは簡単だと思います.
インストール後、MeshLab(DAEとSTL形式がサポートされており、Gazebo/ROSもサポートされている)を表示できます.
Computing the inertial parameters
First try in MeshLab慣性パラメータを計算するには、まず表示する必要があります. View->ShowLayer Dialog、ウィンドウの右側にグループが開かれていて、私たちはその下の部分に興味を持っています.
次に慣性パラメータを計算します.Filters->QualityMeasure andComputations->ComputeGeometric Measuresを選択します.グラフィックダイアログボックスの下部から慣性測定に関するいくつかのデータが表示されます.
Mesh Bounding Box Size 0.044000 0.221000 0.388410
Mesh Bounding Box Diag 0.449043 
Mesh Volume is 0.001576
Mesh Surface is 0.136169
Thin shell barycenter -0.021954 0.008976 0.012835
Center of Mass is -0.021993 0.001259 0.001489
Inertia Tensor is :
| 0.000008 -0.000000 -0.000000 |
| -0.000000 0.000001 -0.000000 |
| -0.000000 -0.000000 0.000007 |
Principal axes are :
| 0.999999 0.000166 0.001241 |
| -0.000113 0.999104 -0.042310 |
| -0.001247 0.042310 0.999104 |
axis momenta are :
| 0.000008 0.000001 0.000007 |
私たちは欲しいものを手に入れたようです.しかし、よく見ると、間違ったものが見えます.出力は最大6桁の小数です.その結果,慣性テンソルの価値ある情報を失った.
ここで,MeshLab出力の意味を説明する.MeshLabでは、モデルの品質を教えることができません.そのため、MeshLabは他の場所の品質で代替しなければなりません.この場合,モデルの体積サイズ(材料の単位密度を仮定する)は非常に有意義である.Mesh Volumeはtext outputに存在する.
Getting the Center of Mass MeshLabは同じ長さのユニットではありません.ただし、Mesh Bounding Box Size、MeshLabに必要なMeshLab分解を簡単に教えてください.境界枠のサイズを自分のセルで計算し、MeshLabと比較することができます.
Getting the Inertia Tensorはtext outputにおいて,慣性テンソル精度の低い問題をどのように解決するか.モデルを拡張して、カットされずに十分な数値を増加させることができます.このモデルはFilters->Normals,Curvatures and Orientation->Transform:Scaleで標定できます.
Filling in the tags in URDF/SDF次は、あなたのロボットを含むURDF/SDFファイルの計算値を記録します.
各リンクには<inertial>タグがあるはずです.SDFは次のようになります.
<link name='antenna'>
  <inertial>
    <pose>-0.022 0.0203 0.02917 0 -0 0</pose>
    <mass>0.56</mass>
    <inertia>
      <ixx>0.004878</ixx>
      <ixy>-6.2341e-07</ixy>
      <ixz>-7.4538e-07</ixz>
      <iyy>0.00090164</iyy>
      <iyz>-0.00014394</iyz>
      <izz>0.0042946</izz>
    </inertia>
  </inertial>
  <collision name='antenna_collision'>
    ...
  </collision>
  <visual name='antenna_visual'>
    ...
  </visual>
  ...
</link> 

またはURDFで:
<link name="antenna">
  <inertial>
    <origin rpy="0 0 0" xyz="-0.022 0.0203 0.02917"/>
    <mass value="0.56"/>
    <inertia ixx="0.004878" ixy="-6.2341e-07" ixz="-7.4538e-07" iyy="0.00090164" iyz="-0.00014394" izz="0.0042946"/>
  </inertial>
  <visual>
    ...
  </visual>
  <collision>
    ...
  </collision>
</link>

キログラム単位.
またはは、品質中心位置に使用されます.回転ユニットは無視されます.もしあなたがすでに質心を見つけたら、値を記入します.そうでなければ、MeshLabが計算した正しい値を記入します.
タグには、あなたが計算した慣性テンソルが含まれています.行列は対称なので、6つの数字で表されます.MeshLabから得られた出力マッピングは以下の通りである.
| ixx ixy ixz |
| ixy iyy iyz |
| ixz iyz izz |

Checking in Gazebo
正しいかどうかを確認するには、gazeboのインタフェースを使用します.デルの運用:
roslaunch gazebo_ros empty_world.launch