トピックハブ

動力学

力とトルクがロボットの運動をどう生み出すかを扱います。マニピュレータの運動方程式、ニュートン・オイラー法とラグランジュ法による定式化、実機アームでの慣性パラメータ同定、シミュレータが使う摩擦・接触モデルを解説します。

更新 2026年11月14日 · 剛体動力学、ニュートン・オイラー法、ラグランジュ法、逆動力学、順動力学、慣性パラメータ同定、摩擦、接触モデル

概要

運動学はロボットがどこにあるかを示します。動力学は、そこへ到達させるのに何が必要かを示します。質量、慣性、重力、摩擦、そしてロボットが触れているあらゆるものを踏まえたうえで、どの関節トルクがどの加速度を生むかを扱います。動力学は、モータと減速機の選定に必要です。コントローラが積分項で重力と戦わずに済むよう、フィードフォワードトルクを計算するのにも必要です。トルク制御のアームや脚式ロボットを動かすにも、それらをシミュレーションするにも欠かせません。

このハブは、位置制御ロボットからトルク制御、シミュレーション、モデルベース制御へ移るエンジニア向けです。位置制御ロボットではベンダーが動力学をドライブの内部に隠しています。移行先では、モデルとその誤差を自分で管理することになります。

重要な考え方

マニピュレータの運動方程式

剛体の直列ロボットでは、どの動力学の手法を使っても同じ方程式に行き着きます。質量行列 M(q) と関節加速度の積、コリオリ力・遠心力の項 C(q, q̇) と関節速度の積、重力項 g(q) の和が、関節トルクと、外力がヤコビ行列の転置を通して生むトルクの和に等しくなります。摩擦はさらに別の項として加わります。

この方程式は二つの向きで使います。逆動力学は、位置、速度、目標加速度から必要なトルクを求めます。コントローラはこれをフィードフォワードや計算トルク法に使います。順動力学は、トルクから加速度を求めます。シミュレータはこれを積分して世界の時間を進めます。

ニュートン・オイラー法とラグランジュ法

ラグランジュ法では、ロボット全体の運動エネルギーとポテンシャルエネルギーを書き下して微分します。M、C、g の構造が明示的に得られるため、コントローラの性質を証明するときや、小さな機構の方程式を手計算やSymPyで導くときに役立ちます。ただし、記号計算で行うと長い連鎖には向きません。

再帰ニュートン・オイラー法は、Luh、Walker、Paulが1980年に発表した手法で、ニュートンとオイラーの法則をリンクごとに適用します。順方向パスでは、速度と加速度をベースからツールへ伝えます。逆方向パスでは、力とトルクをベースへ戻し、その途中で各関節トルクが求まります。計算量は関節数に比例して増えるだけなので、高速な制御ループでも使える程度に軽量です。Featherstoneの空間ベクトルによる定式化は、同じ再帰の考え方を順動力学と、ヒューマノイドのような分岐をもつロボットへ拡張します。PinocchioやRBDLなどのライブラリがこれを実装しています。

順方向パス: 速度と加速度、ベースから先端へベース重力を入力リンク 1質量・慣性リンク 2質量・慣性…リンク n質量・慣性ツール接触力τ1τ2τn逆方向パス: 力とトルク、先端からベースへ、関節トルクを読み取る入力: 全関節の q、q̇、q̈、重力、ツールにかかる外部レンチ
直列リンクに対する再帰ニュートン・オイラー法。順方向パスで速度と加速度をベースからツールへ伝え、逆方向パスで力とトルクをツールからベースへ戻し、その途中で各関節トルクを読み取る。計算量は関節数に比例して増える。

慣性パラメータの同定

CADモデルは出発点にはなりますが、ケーブル、グリス、減速機を通して反映されるモータのロータ慣性、フランジに取り付けたものなどが含まれていません。有用な事実として、Atkeson、An、Hollerbachが1986年に示したように、動力学は慣性パラメータについて線形です。慣性パラメータはリンクあたり10個あります(質量、3つの一次モーメント、慣性テンソルの6つの独立成分)。トルクは、計測した運動のみに依存するリグレッサ行列と、パラメータベクトルの積として書けます。軌道に沿って関節位置とトルクを記録し、リグレッサを積み重ねて最小二乗問題を解きます。

これがうまくいくかどうかは、二つの点で決まります。まず、軌道はすべてのパラメータを励起する必要があるため、場当たり的に作るのではなく設計します。Sweversらはその最適化の方法を示しました。次に、パラメータの組み合わせの中には、関節トルクからはまったく分離できないものがあります。そのため、縮約した基底パラメータの組を同定し、結果が物理的に整合するよう制約をかけます(質量が正、慣性が正定値)。

摩擦と接触

関節摩擦は通常、クーロン摩擦(運動を妨げる一定の力)と粘性摩擦(速度に比例)の和としてモデル化します。低速域でのストライベック効果による落ち込みを加えることもあります。減速機付きの関節では、低速時に摩擦がトルクの大きな割合を占めることがあり、温度や負荷によっても変化します。慣性パラメータと合わせて同定してください。

環境との接触はさらに難しい問題です。クーロン摩擦を伴う剛体接触は非平滑であり、シミュレータによって解き方が異なります。たとえばMuJoCoはソフトコンタクトを使います。その計算に関するドキュメントでは、接触力を凸最適化問題の解として求め、摩擦円錐には角錐型または楕円型を使うと説明しています。こうした選択と、それに伴うタイムステップや接触剛性によって、シミュレーション上で把持がどう滑るか、足がどう着地するかが変わります。これらは、/topics/simulation-and-digital-twins/で扱うsim-to-realギャップの主な原因の一つです。

どこから始めるか

/learn/beginner/09-simulate-an-arm-in-mujoco/では、動力学モデルを実際に扱います。/learn/beginner/05-pid-control/では、モデルなしでコントローラが重力と戦うと何が起きるかを示します。プロジェクト/projects/pybullet-pick-and-place/では、接触と摩擦が加わります。

ツールとプラットフォーム

ツール 用途 ライセンス プラットフォーム
MuJoCo 接触を含む順動力学、逆動力学、高速なステップ計算 Apache-2.0 /platforms/mujoco/
Pinocchio 解析的微分付きの再帰アルゴリズム(RNEA、ABA) BSD-2-Clause /platforms/opensource/
Drake モデルベース設計のためのマルチボディ動力学・接触・最適化 BSD-3-Clause /platforms/opensource/
RBDL Featherstoneのアルゴリズムを実装した小型のC++ライブラリ zlib /platforms/opensource/
PyBullet Pythonから使える接触付きシミュレーション zlib /platforms/opensource/

よくある間違い

  • 慣性テンソルの基準点や座標系を間違える。URDFでは、テンソルは<inertial>の原点で定まる座標系で与えます。MJCFでは、bodyにinertial要素がない場合、既定の密度を使ってgeomから質量と慣性を計算します。そのため、要素が欠けていてもモデルはそのまま動いてしまいます。
  • モータのロータ慣性を入れ忘れる。減速比100:1の減速機を通すと10,000倍になり、リンク自体の慣性を上回ることがあります。
  • パラメータを励起しない軌道で同定する。その軌道ではよく合っているように見えても、次の軌道では外れます。
  • シミュレーションの接触を真値として扱う。タイムステップやソルバの設定を変えて、結果が変わらないか確認してください。
  • 重力補償で摩擦を無視する。アームが低速時にドリフトしたり、固着したりします。

さらに深く