TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

軌跡生成:3次・5次多項式、台形、最小ジャック、制限内の最小時間、経由点

状態:草案(2026-10-18)、実測。 数値はノートPC(Apple M1 Max、macOS 26.5)の Python 3.9.6・numpy 2.0.2 で直接計算しました。 原データとコード:作業ディレクトリ measure/robot-arm-basics/の m08_traj.py, out/m08_traj.json。関節の速度・加速度制限と慣性は仮定値であり、実際のモーターで測定した値ではありません(ハードウェア未測定)。参考文献は 2026-10-18 に閲覧しました。 作成規則:実測データが基本であり、測定できなかったものは「未測定」、確認できなかったものは「未確認」と表示します。

目次

1. 直感:運転と同じ

信号機から次の信号機まで行く方法は複数あります。アクセルペダルを最後まで踏み込んで最後に急ブレーキをかけると最も早く到着しますが、乗客が前に傾きます。 ゆっくり踏んでゆっくり離すと快適ですが、少し遅れます。ロボットの関節も同じです。同じ距離を同じ時間で移動する場合でも、速度の形状によってモーターが出さなければならない最高速度とトルク、そしてアームが受ける衝撃が異なります。

卓球ロボットの軌跡には、もう一つの特別な要求があります。 停止した位置に到着するのではなく、決められた時刻に決められた速度で通過しなければならない 点です。第7部で定めたラケット速度を打撃の瞬間に発揮しなければならないためです。

2. グラフ:速度の形状

정지→정지 이동의 속도 모양(Δ와 T 로 정규화) 0 0.25 0.5 0.75 1 0 0.5 1 1.5 2 시간 t/T 속도 ÷ (Δ/T) 5차(최소 저크) 최고 1.875 3차 최고 1.5 사다리꼴 1.5 S-곡선 3차는 출발 순간 가속도가 0 이 아니다(6Δ/T²로 튐). 5차와 S-곡선은 0 에서 시작한다. 같은 시간이면 매끄러울수록 최고 속도가 높아진다.
グラフ:3次、5次、台形、S字カーブ軌跡の正規化された速度曲線

3. 計算

3.1 多項式の時間スケーリング

一つの関節が q0 から q1 まで時間 T で移動するとき、τ = t/T を用いて q(t) = q0 + (q1 − q0)·s(τ) と表します。s は 0 から 1 へ向かう関数です。

3차:  s = 3τ² − 2τ³                 끝점 조건: 위치·속도 (4개)
5차:  s = 10τ³ − 15τ⁴ + 6τ⁵          끝점 조건: 위치·속도·가속도 (6개)

Modern Robotics のセクション 9.2.2.1 では、3次の最高速度が (3/2)·Δ/T(中央で)、最高加速度が 6·Δ/T²(両端で)であると記載しています。3次は出発瞬間の加速度が 0 から 6Δ/T² へ急激に変化するため、ジャック(jerk、加速度の変化率)がその瞬間に無限大になり、同じセクションではこれが振動を引き起こす可能性があると説明しています。5次は終端加速度まで 0 に合わせることでこの問題を解消します。5次の最高速度 15/8·Δ/T と最高加速度 10/√3·Δ/T² は本文ではなく練習問題として残されているため直接計算し、第4節で数値として確認します。

3.2 最小ジャックと最小加速度

5次多項式には別名があります。静止状態から静止状態へ向かうすべての滑らかな軌跡の中で、 ジャックの2乗の積分を最小にする軌跡です。変分法で見ると ∫(q⃛)² を最小化する関数は q⁽⁶⁾ = 0 を満たすため5次多項式になり、6つの終端条件が係数を一意に決定します(独自の導出)。Flash と Hogan(1985)は、人間の手の動きが手のジャックの2乗の金を最小化するモデルでうまく説明できると報告しました(抄録で確認、本文は未確認)。

同様の論理で 加速度の2乗の積分を最小化すると q⁽⁴⁾ = 0 となり、3次多項式が得られます。Koç ら(2018)の卓球ロボットはこの基準に基づいて関節ごとに3次多項式軌跡を最適化しました。加速度の2乗はトルクの2乗、すなわちモーターの銅損(発熱)に比例するため、エネルギー観点からの選択となります。

3.3 台形とS字カーブ、そして時間最適

速度制限 v_max と加速度制限 a_max のみが与えられている場合、最も速い運動は「最大加速 → 最高速度維持 → 最大減速」となります。速度曲線が台形になるため台形プロファイルと呼び、距離が短くて最高速度に達しない場合は三角形(バング・バング)になります。

Δ ≤ v_max²/a_max:   T_opt = 2·√(Δ / a_max)                 (삼각형)
그 밖:              T_opt = Δ / v_max + v_max / a_max        (사다리꼴)

台形も加速度が階段状に変化するためジャックが無限大です。加速度の変化まで制限すると、加速区間がさらに3つに分かれた7区間のS字カーブになります(Modern Robotics セクション 9.2.2.3)。

3.4 打撃軌跡:終端速度が 0 ではない

卓球ロボットの関節軌跡は2つの区間に分かれます。

  1. スイング: 現在の状態(静止)から打撃時刻 T に (q_h, q̇_h, q̈ = 0) へ。打撃瞬間の加速度を 0 に設定すると、接触する短い時間の間、ラケット速度がほぼ一定になります。
  2. 停止(フォロースルー): その状態から再び静止へ。

5次多項式は6つの終端条件に任意の値を与えることができるため、これら2つの区間をすべて同じ関数で構成できます。6×6の線形連立方程式を1回解くだけで係数が求まり、この計算は 7.2 µs でした。Mülling ら(2013)が動的運動プリミティブ(DMP)の目標移動を5次多項式に変更し、終端の速度や加速度まで一致させたのも同じ理由です(セクション 3.2、式 8)。

def quintic_coeffs(q0, v0, a0, q1, v1, a1, T):
    A = [[1, 0, 0,    0,      0,       0      ],
         [0, 1, 0,    0,      0,       0      ],
         [0, 0, 2,    0,      0,       0      ],
         [1, T, T**2, T**3,   T**4,    T**5   ],
         [0, 1, 2*T,  3*T**2, 4*T**3,  5*T**4 ],
         [0, 0, 2,    6*T,    12*T**2, 20*T**3]]
    return np.linalg.solve(A, [q0, v0, a0, q1, v1, a1])     # q(t) = Σ c_k t^k

ボールの予測が修正された場合、現在の状態(位置・速度・加速度)を新たな出発点として残りの時間に対して再計算を行えばよいのです。出発点の加速度まで滑らかにつながるため、修正時にも加速度が跳ね上がりません。

타격 궤적: 0.12초 만에 10 rad/s 로 지나고, 0.1초에 멈춘다 0 0.1 0.2 0.3 0 4 8 12 시간(초) 속도(rad/s) 0 0.4 0.8 1.2 각(rad) 타격 속도 각 구간 1: (0, 0, 0) → (0.6 rad, 10 rad/s, 0) 5차. 구간 2: 같은 상태 → 정지 5차. 타격 순간 가속도를 0 으로 두어 라켓 속도가 접촉 동안 거의 일정하다.
グラフ:打撃軌跡の関節角度と速度:0.12秒で 10 rad/s で通過し、0.1秒間で停止

4. 実測

4.1 同じ距離、同じ時間、異なる形状

Δ = 1 rad を T = 0.3 s で移動させる4つの軌跡を 100,001 個の点でサンプリングして数値微分しました。

軌跡 最高速度 最高加速度 出発瞬間の加速度 最高ジャック(内部) ∫加速度² dt
3次 5.00 rad/s 66.7 rad/s² 66.7 457 rad/s³ 444
5次(最小ジャック) 6.25 64.2 0.01 2,262 635
台形(各1/3) 5.00 50.0 50.0 (階段状) 500
S字カーブ(ジャック区間 10%) 5.00 71.4 0.03 2,385 612

公式の値は、3次が 5.0 および 66.7、5次が 6.25、64.15、2,222(ジャック)、台形が 5.0 および 50.0 です。数値微分の結果は公式と一致しました(5次のジャックは差分誤差により 2% 大きい)。

4.2 制限内でどれくらい速く移動できるか

関節の制限(v_max、a_max)が与えられたときの、各軌跡の最小時間を比較しました。

制限 Δ 時間最適 5次 3次 5次 ÷ 最適
20 rad/s, 300 rad/s² 0.2 rad 0.052 s 0.062 s 0.063 s 1.20
20 rad/s, 300 rad/s² 1.0 rad 0.115 s 0.139 s 0.141 s 1.20
20 rad/s, 300 rad/s² 2.0 rad 0.167 s 0.196 s 0.200 s 1.18
10 rad/s, 100 rad/s² 1.0 rad 0.200 s 0.240 s 0.245 s 1.20
10 rad/s, 100 rad/s² 2.0 rad 0.300 s 0.375 s 0.346 s 1.25

5次多項式は、時間最適に比べておおむね 20% 遅くなります。加速度制限がボトルネックになる短い移動では、その比率は √(10/√3 ÷ 4) = 1.20 で一定になります(独自の計算)。第1部で時間的余裕がない高速なボールに対しては、この 20% の遅れが惜しまれます。そのため、時間最適に近い軌跡(台形・S字カーブ、あるいは制限を制約条件とした最適化)を用い、滑らかさはS字カーブのジャック制限によって確保します。

4.3 打撃軌跡の最小時間

静止状態から出発し、Δ を通過する瞬間に q̇_h に到達する軌跡を、速度制限 20 rad/s および加速度制限 300・600 rad/s² の下で最短となるように作成しました。5次は二分法を用いて最短の T を探し、時間最適は「最大加速 → (必要に応じて)最大減速で q̇_h へ」という形式から求めました。

Δ q̇_h a_max 5次 T 時間最適 T 停止のために余分に進む角度・時間
0.3 rad 10 rad/s 300 0.054 s 0.046 s 0.17 rad, 33 ms
0.6 rad 10 rad/s 300 0.082 s 0.068 s 0.17 rad, 33 ms
0.6 rad 10 rad/s 600 0.062 s 0.051 s 0.08 rad, 17 ms
0.6 rad 15 rad/s 300 0.076 s 0.064 s 0.38 rad, 50 ms
1.0 rad 15 rad/s 300 0.102 s 0.085 s 0.38 rad, 50 ms

4.4 経由点:停止するか、続けるか

関節が複数の経由点を通過しなければならない場合について、2つの方法を比較しました。(a) 経由点ごとに停止する5次区間、(b) 経由点で停止しない3次スプライン(両端の速度は 0)です。スプラインは、区間時間を均等に分割する方法と、移動距離の平方根に比例して分割する方法の両方を用い、制限(20 rad/s、300 rad/s²)の範囲内での最小総時間を二分法により求めました。

経由点(rad) 停止する5次 スプライン(等間隔) スプライン(√距離に比例)
0 → 0.3 → 0.7 → 1.0(同一方向) 0.240 s 0.170 s 0.184 s
0 → 0.6 → 0.2 → 1.0(折り返し) 0.319 s 0.357 s 0.325 s

一方向に進む経路では止めない方が 29% 速かったですが、方向が変わる経路ではどうせその場で速度が 0 にならなければならないため、止まる 5次の方がむしろ速くなりました。スプラインは常に速いという直感は間違っている可能性があり、 区間の時間をどう配分するかが形状と同じくらい重要です(Modern Robotics 9.3節が経由点多項式を扱っています)。

5. 限界

6. まとめ

ティティの一言。 ラケットは止まるところではなく、通過するところに向かって振るんだよ。そして打った後に止まる場所も必ず残しておかないとダメ。そうしないと腕が壁にぶつかっちゃうよ!

参考文献

すべての資料は 2026-10-18 に閲覧しました。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます