TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

打撃を方程式に:望む着地地点から逆算してラケット速度と法線を求める

ステータス:下書き(2026-10-18)、実測。 数値はノートPC(Apple M1 Max、macOS 26.5)のPython 3.9.6・numpy 2.0.2で直接計算したシミュレーション値です。 元データとコード:作業ディレクトリ measure/robot-arm-basics/の m07_hit.py, out/m07_hit.json。ラケットの反発は単純モデルであり、実際のラケット・ラバーで測定した値ではありません(ハードウェア未実測)。ボールの初期状態はDeepMindデータセット(CC-BY 4.0)です。参考資料は2026-10-18に閲覧しました。 作成ルール:実測データが基本であり、測定できなかったものは「未実測」、確認できなかったものは「未確認」と表示します。

目次

1. 直観:逆向きに考える

バスケットボールのシュートを考えてみます。ボールがゴールに入るには、手を離れる時にどのような速度でなければならないかがまず決まり、手首と腕はその速度を作り出すように動きます。 卓球も同じです。ただし、ボールがすでに飛んできているため、ラケットはボールを「投げる」のではなく「弾き返す」のです。

そのため、打撃の決定は2段階の逆問題になります。

  1. 着地地点 → 射出するボール速度 v_out。 相手の卓球台の目標点に指定された時間内に落とすには、ボールがラケットを離れるときの速度がいくらでなければならないか。飛行モデル(第6部)を 逆向きに解く問題です。
  2. 射出速度 → ラケット。 入ってくるボールの速度 v_in を v_out に変えるには、ラケット面の法線 n とラケット速度 v_r はいくらでなければならないか。衝突モデルを逆向きに解く 問題です。

第1部の時間予算において、この2段階が占める割り当ては数十msです。そして、この段階の出力(ラケットの位置・方向・速度・時刻)が第4部の逆運動学と第8部の軌道 生成へと渡されます。

2. 図:ラケット反発の幾何学

라켓 법선은 나갈 속도와 들어온 속도의 차이 방향 들어온 공 v_in 나갈 공 v_out 법선 n 라켓 면 n = (v_out − v_in) / |v_out − v_in| (마찰 무시: 접선 성분 보존) v_r·n = (v_out·n + e_r · v_in·n) / (1 + e_r) e_r: 라켓 반발 계수(문헌 0.79–0.88). 라켓은 n 방향으로만 움직인다고 둔다.
図:入ってきたボールの速度と射出するボールの速度、そしてその差の方向のラケット法線

3. 計算

3.1 射出速度:シューティング法とニュートン法

未知数は v_out の3つの成分です。目標点 (x_t, y_t) に卓球台の高さ(z = ボール半径)で到着しなければならないため、式が3つになるにはもう1つ定める必要があります。 この記事では 飛行時間 T を定めます。そうすると「T秒後の位置 = 目標」という3つの方程式になります。

F(v_out) = 공을 v_out 으로 T 초 날린 위치 − (x_t, y_t, r) = 0

F は第6部の飛行モデルを積分して計算される関数であるため、数式で解くことはできません。そのため「撃ってみて修正する」シューティング法(shooting method)を用います。ヤコビアンは v_out の各成分を少しずつ変えて撃ってみる有限差分で求め、ニュートン法で修正します。初期値は空気抵抗のない放物線の解です。

def solve_vout(p, T, goal):
    v = (goal - p) / T
    v[2] += 0.5 * 9.81 * T                   # 진공 포물선에서 출발
    for it in range(20):
        r = flight_to(p, v, T) - goal        # 6편의 RK4 적분
        if norm(r) < 1e-4:                   # 0.1 mm
            return v
        J = np.column_stack([(flight_to(p, v + h*e_i, T) - flight_to(p, v, T)) / h for e_i in I3])
        v = v - np.linalg.solve(J, r)

射出するボールの回転は0としました(3.3節の制限事項)。

3.2 ラケット:反発モデルの解析解

ボールとラケットが衝突する瞬間をラケット面基準の2つの方向に分けます。

법선 방향:   (v_out − v_r)·n = −e_r · (v_in − v_r)·n          반발 계수 e_r
접선 방향:   v_out,t = v_in,t                                   마찰 무시(접선 성분 보존)

接線成分が保存されれば、v_out − v_in には法線成分のみが残ります。したがって、 ラケット法線は v_out − v_in の方向であり、法線方向の方程式を v_r·n について解くと ラケット速度が求められます。

def racket_for(v_in, v_out, e_r=0.8):
    n = (v_out - v_in) / norm(v_out - v_in)
    vrn = (v_out @ n + e_r * (v_in @ n)) / (1 + e_r)     # 라켓 속도의 법선 성분
    return n, vrn                                         # 접선 성분은 자유(0 으로 둠)

ラケット速度の接線成分はこのモデルではボールに影響を与えないため、どのような値でも構いません。実際には、この自由度を腕が出しやすい方向を選ぶのに使ったり、 摩擦のあるモデルで回転をかけるのに使ったりします。計算時間は4.3 µsでした。

ラケットの反発係数 e_r は文献において 0.78〜0.88 の範囲であることを確認しました。Koçら(2018)は人間のデモデータから 0.788 を推定し、Nakashimaら(2010)はラバーの反発を 0.81 と測定しており、Google(2023)は実測値 0.78 を記録しています。Sony AI(2026)は定数 0.878 に速度依存項とニューラルネットワークの残差を加えたモデルを使用しています。この記事では 0.8 を使用します。

3.3 なぜ摩擦を無視してもよいのか、そしていつ無視できないのか

実際のラバーは粘着性や弾性があり、ボールの接線速度を変化させて回転をかけます。Nakashimaら(2010)は、ラバーが接線方向の運動エネルギーを弾性エネルギーとして蓄え、 接触点の接線速度が逆に反転するとモデル化しました。この記事のモデルではその効果を省き、 打ち返しのみを扱います。トップスピンをかけて強く打つ攻撃は、この モデルでは計画できません。第10部では、このモデルの誤っている部分をデータでどれだけ早く修正できるかを測定します。

4. 実測

4.1 実際の打球200件を打ち返す

第1部のデータセットにおいて、ロボット側に向かってくるボールを第6部のモデルでエンドライン裏23 cmの打撃面(y = −1.6 m)まで飛ばし、卓球台の上5 cm以上の高さでその面を通過するボール 200個を選びました。打撃面でのボールの速さは中央値 2.8 m/s(5%点 2.2、95%点 3.9)でした。目標点は相手側の (0.3, 0.9) m です。

飛行時間 T ニュートン反復 計算時間 射出速度 ラケット法線速度 5% / 中央値 / 95% ラケット法線と +y の間の角度 ネット上の余裕 5%
0.35 s 2 39 ms 8.7 m/s 3.1 / 3.6 / 4.0 m/s 12° 3.2 cm
0.45 s 2 50 ms 6.9 m/s 2.1 / 2.6 / 2.9 m/s 17° 12.6 cm
0.60 s 2 67 ms 5.7 m/s 1.5 / 2.0 / 2.2 m/s 24° 31 cm
0.80 s 2 90 ms 5.5 m/s 1.4 / 1.9 / 2.1 m/s 35° 64 cm

4.2 ラケットが少しずれた場合

T = 0.6 s での返球100件において、計算したラケットに誤差を1つずつ加え、第6部のモデルで実際の着地地点を再計算しました。

라켓이 조금 틀리면 공은 얼마나 빗나가나 법선 0.5° 기울어짐 3.0 법선 1° 6.1 법선 2° 11.4 법선 5° 30.7 속도 +0.05 m/s 5.4 속도 +0.1 m/s 10.6 속도 +0.3 m/s 31.6 실제 e_r 0.75(모델 0.8) 13.4 실제 e_r 0.7 26.9 5 ms 늦음(공 속도만) 1.0 10 ms 늦음(공 속도만) 2.3 0 10 20 30 착지점 오차 중앙값(cm). 공 100개, 비행 시간 0.6 s 반환.
図:ラケット法線角度、速度、反発係数、タイミングの誤差が着地地点の誤差に及ぼす影響の大きさ
誤差 着地地点の誤差 中央値 / 90%
ラケット法線が 0.5° 傾く(ランダムな方向) 3.0 / 3.8 cm
ラケット法線 1° 6.1 / 7.5 cm
ラケット法線 2° 11.4 / 15.1 cm
ラケット法線 5° 30.7 / 37.2 cm
ラケット速度 +0.05 m/s 5.4 / 6.1 cm
ラケット速度 +0.1 m/s 10.6 / 11.8 cm
ラケット速度 +0.3 m/s 31.6 / 35.1 cm
実際の e_r が 0.75(モデルは 0.8) 13.4 / 15.5 cm
実際の e_r が 0.85 13.9 / 16.1 cm
実際の e_r が 0.70 26.9 / 31.0 cm
ラケットが 10 ms 遅れる(ボール速度の変化のみ) 2.3 / 4.0 cm

5. 制限事項

6. まとめ

卓球のひと言。 ボールを打ち返す際、ラケットは思ったよりもゆっくり動かして大丈夫です。その代わり、ラケット面が1°だけでも傾くとボールは手のひら1つ分近く外れてしまうので、速さよりも正確さが先です!

参考

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

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

コメント

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

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