ロータ慣性の設定

概要

減速機付きのモータで駆動される関節では、モータのロータ(回転子)自体の慣性が、減速機を介して関節側から見ると大きく増幅されて作用します。具体的には、ロータ単体の慣性モーメントを Ir 、減速比を G とすると、関節軸まわりに換算した「等価ロータ慣性」 Jeq は

Jeq = G × G × Ir

となります。減速比の2乗で効いてくるため、減速比の大きなロボットでは、この等価ロータ慣性がリンク自体の慣性と同等かそれ以上の大きさになることも珍しくありません。従って、実機に近い動特性のシミュレーションを行うためには、この等価ロータ慣性を考慮することが重要となります。

Choreonoidのボディモデルでは、関節ごとにこの等価ロータ慣性を設定することができます。なお、この関節軸まわりの付加慣性は、MuJoCoでは "armature" と呼ばれているものに相当します。

シミュレーションでの効果

等価ロータ慣性を設定すると、シミュレーションにおいて関節軸まわりの見かけの慣性が増加します。これにより主に以下の効果が得られます。

  • 実機に近い動特性の再現

等価ロータ慣性を考慮しない場合、特に減速比の大きなロボットでは、関節が実機よりも軽く動きすぎる挙動となります。等価ロータ慣性を設定することで、関節の応答が実機に近いものとなり、トルク制御やPD制御による制御挙動の評価をより正確に行えるようになります。

  • シミュレーションの安定化

関節軸まわりの慣性が増すことで、制御や接触に起因する関節の高周波振動が抑制され、シミュレーションが安定しやすくなります。MuJoCoにおいてarmatureがシミュレーション安定化のためのパラメータとしてよく用いられるのも、この効果によるものです。

モデルでの記述

等価ロータ慣性は、Body形式のモデルファイルにおいて、リンク(関節)ごとに以下のいずれかの方法で設定します。

  • rotor_inertia キーでロータ単体の慣性モーメント Ir を、 gear_ratio キーで減速比 G を指定する。等価ロータ慣性は G × G × Ir として設定されます。

  • rotor_inertia キーのみを指定する。この場合は指定した値がそのまま等価ロータ慣性として設定されます。

  • joint_axis_inertia キーで等価ロータ慣性の値を直接指定する。

記述例を以下に示します。

links:
  -
    name: J1
    joint_type: revolute
    ...
    rotor_inertia: 1.0e-6
    gear_ratio: 100.0

モデルファイルの記述の詳細については Linkノード も参照してください。

注釈

ギア比とロータ慣性への分解の指定が挙動に影響するのは、後述の仮想ロータ方式をとるBulletシミュレータのみです。その他のシミュレータでは等価ロータ慣性の値のみが使用されるため、どの記述方法でも挙動は同じになります。

シミュレータアイテムごとの対応状況

等価ロータ慣性の扱いはシミュレータアイテムによって異なります。大きく分けて、以下の2つの方式があります。

  • 等価ロータ慣性のみを用いる方式(armature方式)

関節軸まわりの慣性に等価ロータ慣性 Jeq の値を加算する方式です。Bullet以外のシミュレータアイテムはこの方式をとっており、使用されるのは Jeq の値のみです。従って、Jeq が同じであれば、それをどのようなギア比 G とロータ慣性 Ir に分解して指定しても挙動は変わりません。

なお、この方式は物理的には、Jeq を一定に保ったままギア比を無限大とした極限に相当します。実際の有限のギア比では、ロータが関節速度のG倍で高速回転することによる角運動量(Jeq/G に比例)が残り、これが機体の回転運動と干渉してジャイロ効果等を生じますが、armature方式ではこれらの効果は表現されません。ギア比が大きいほどこれらの効果は小さくなるため、減速比の大きな一般的なロボットでは、この方式で十分よい近似となります。

  • 仮想ロータを用いる方式

ロータに相当する仮想的な剛体を実際にギア比倍の速度で回転させることで、等価ロータ慣性を再現する方式です。Bulletシミュレータがこの方式をとっています。この方式では有限のギア比によるロータの角運動量やそのジャイロ効果も物理として再現されるため、同じ Jeq であってもギア比の値によって挙動が変わりえます。ギア比の値が実際に挙動に影響するのはこの方式のみです。

各シミュレータアイテムの対応状況は以下のとおりです。

シミュレータ

対応

扱い

AIST

動力学計算に等価ロータ慣性が直接組み込まれており、関節軸まわりの付加慣性として厳密に考慮されます。

PhysX

PhysXのarmature機能を用いて、関節ごとに設定されます。

MuJoCo

MuJoCoのarmatureパラメータとして、関節ごとに設定されます。

Bullet

仮想的なギア付きロータリンクを追加し、実際にギア比倍の速度で回転させることで等価ロータ慣性を再現します(仮想ロータ方式)。有限ギア比の効果も再現されるため、モデルの gear_ratio の値が挙動に反映されます。ギア比が指定されていないモデルでは「デフォルトロータギア比」プロパティの値(既定100)が使用されます。この機能は「ロータ慣性」プロパティで有効/無効を切り替えられます(デフォルトで有効)。詳細は Bulletプラグイン を参照してください。

ODE

直接は対応していません。ODEシミュレータの「軸慣性をリンク慣性に加算」プロパティを有効にすると、等価ロータ慣性を関節軸まわりの成分としてリンクの慣性テンソルに加算する近似が適用されます(デフォルトでは無効で、該当モデルの読み込み時に警告が表示されます)。詳細は ODEプラグイン を参照してください。

AGX

関節拘束に対する仮想慣性として設定されます。

設定されているモデルの例

Choreonoid付属のモデルでは、例えば以下のものでロータ慣性が設定されています。

  • マニピュレータ

  • PA10(share/model/PA10/PA10.body)

  • Universal Robots UR3・UR5・UR10(share/model/UniversalRobots/UR3.body 等)

  • JACO2(share/model/JACO2/JACO2.body)

  • ヒューマノイド

  • HRP4C(share/model/HRP4C/HRP4C.body)

  • RIC30(share/model/RIC30/RIC30.body)

  • ハンド・グリッパ

  • Robotiq 2F-85(share/model/Robotiq/2F-85.body)

  • その他

  • 双腕建機ロボット DoubleArmV7(share/model/DoubleArmV7/DoubleArmV7-Upper.body)

  • 振子モデル(share/model/misc/pendulum.body)

これらのモデルの記述も設定の参考になります。