ステータス:ドラフト(2026-10-18)、実測。 数値はノートPC(Apple M1 Max、macOS 26.5)のPython 3.9.6・numpy 2.0.2で直接計算したシミュレーション値です。 元データとコード:作業ディレクトリ
measure/robot-arm-basics/のcommon.py,m06_flight.py,m06b_constants.py,out/m06_flight.json,out/m06b_constants.json。「真の軌跡」も同じモデルで作成したものであるため、モデルと実際のボールの差はこの記事の数値には含まれていません(実際のボールの軌跡との比較は未実測)。 ボールの初期状態はDeepMindデータセット(CC-BY 4.0)です。参考文献は2026-10-18に閲覧しました。 作成ルール:実測データを基本とし、測定できなかったものは「未実測」、確認できなかったものは「未確認」と表記します。
目次
- 1. 直感:軽くてよく回転するボール
- 2. 運動方程式
- 3. オイラー法とRK4
- 4. 回転とバウンドがもたらす変化
- 5. 定数の不確実性は予測にどの程度影響するか
- 6. カルマンフィルタ:ノイズまじりの観測から状態を抽出する
- 7. 限界
- 8. まとめ
- 参考文献
1. 直感:軽くてよく回転するボール
卓球のボールは2.7 gで、直径は40 mmです(ITTF Statutes 2026, 2.3.1・2.3.2)。同サイズの鉄球よりもはるかに軽いため、空気抵抗が重量に対して大きくなります。 5 m/sで飛行する場合の抗力はボールの重量の約3分の1であり、10 m/sの場合は重量を超えます。さらに、選手の打つボールは毎秒数十回転もしています。回転するボールは片側の空気をより多く引き込み、横方向に曲げる力を受けます。これがマグナス効果であり、トップスピンのボールが急降下し、バックスピンのボールが浮き上がる理由です。
そのため、卓球ロボットの予測器において、真空中の放物線では不十分です。しかし、モデルを複雑にするほど、把握すべき定数(抗力係数、マグナス係数、反発係数、摩擦係数)と観測すべき状態(回転)が増加します。この記事では、そのトレードオフを数値で検証します。
2. 運動方程式
m · dv/dt = m g − ½ ρ C_D A |v| v + ½ ρ A r C_M (ω × v)
dp/dt = v
m = 2.7 g, r = 0.02 m, A = π r², ρ = 1.225 kg/m³
- 第2項が抗力(drag)です。速度の二乗に比例し、速度とは逆向きに働きます。
- 第3項がマグナス力です。回転軸 ω と速度 v の外積の方向に向かうため、ボールを横に曲げます。ロボット側(−y方向)に向かってくるボールにおいて、ω_x > 0 がトップスピンであり、ω × v が下向きに働いてボールを引き下げます。
- 飛行中の回転は減衰しないものと仮定します(第1部共通の仮定)。
卓球台でのバウンドは瞬間力積モデルとして扱います。法線方向の速度は反発係数 e によって反転させ、接触点の滑り速度はクーロン摩擦 μ によって減衰させますが、転がり状態(接触点速度が0)に達した時点で停止します。薄い殻の球(I = ⅔ m r²)の場合、滑り速度の5分の2をなくすと転がり状態になります。
def bounce(v, w, e=0.876, mu=0.25):
ux, uy = v[0] - R*w[1], v[1] + R*w[0] # 접점(공 아래쪽)의 미끄럼 속도
us = hypot(ux, uy)
jn = (1 + e) * abs(v[2]) # 질량당 법선 충격량
dv = min(mu * jn, 0.4 * us) # 마찰은 굴림에 닿으면 멈춤
jx, jy = -dv*ux/us, -dv*uy/us
k = M / I_BALL # = 1.5 / R²
return (v[0]+jx, v[1]+jy, -e*v[2]), (w[0] + k*R*jy, w[1] - k*R*jx, w[2])
2.1 定数はどこから来るのか
| 定数 | 本シリーズ | 文献で確認した値と条件 |
|---|---|---|
| 抗力係数 C_D | 0.47 | Sony AI 2026 表I:2.5 m/sで0.55、17.5 m/sで回転比に応じて0.37〜0.51。Google 2023のPyBullet設定では0.47。Koç他 2018 表A.3の束ねられた定数0.141 1/mを空気密度1.2に換算すると約0.50(本計算値) |
| マグナス係数(質量あたり) | 3.4×10⁻³ | Koç他 2018 表A.3の揚力定数 1.0×10⁻³ 1/rad。同プロジェクトのMuJoCoシミュレータ(DeepMind係数)で測定された実効値 7.6×10⁻³。3つの値の間で7倍以上の開きがある |
| 卓球台の反発係数 e | 0.876 | ITTF 2.1.3(30 cm → 約23 cm)を空気抵抗なしで換算。Nakashima他 2010の実測値 0.93、Koç他 2018の推定値 0.883 |
| 卓球台の摩擦係数 μ | 0.25 | Nakashima他 2010の動摩擦測定値 0.25(Sony AI 2026も同値)。Koç他 2018の推定値 0.102 |
文献によってマグナス係数に大きな違いがある理由は、定義(何をまとめて定数と呼ぶか)や測定条件(速度、回転比)が異なるためです。Sony AI 2026では、回転比に応じて線形・2次で変化する C_M を適合させています。この記事では、第5節でこの不確実性が予測にどの程度影響を与えるかを直接測定します。
3. オイラー法とRK4
微分方程式をコンピュータで解くためには、時間を細かく分割して一歩ずつ進めます。最も単純なオイラー法では、現在の傾きに沿って dt だけ直進します。RK4(4次ルンゲ=クッタ法)では、1ステップ内で傾きを4回測定して加重平均を取ります。
오일러: v ← v + a(v)·dt, p ← p + v·dt (걸음당 기울기 1번, 오차 ∝ dt)
RK4: k1 = f(x), k2 = f(x + k1·dt/2), k3 = f(x + k2·dt/2), k4 = f(x + k3·dt)
x ← x + (k1 + 2k2 + 2k3 + k4)·dt/6 (걸음당 4번, 오차 ∝ dt⁴)
3.1 実測:0.4秒後の位置誤差
初期位置 (0, 1.2, 0.25) m、速度 (0.3, −7.0, 1.2) m/s(速さ 7.1 m/s)、トップスピン 80 rad/s のボールを、バウンドなしで0.4秒間飛行させました。基準は RK4 dt = 0.01 ms です。
| 手法 | dt | 0.4秒後の誤差 | 1軌跡あたりの計算時間 |
|---|---|---|---|
| オイラー法 | 0.5 ms | 0.96 mm | 808 µs |
| オイラー法 | 1 ms | 1.92 mm | 406 µs |
| オイラー法 | 10 ms | 19.3 mm | 42 µs |
| 半陰解法オイラー法 | 1 ms | 2.81 mm | 430 µs |
| RK4 | 1 ms | 9.4×10⁻¹¹ mm | 3,296 µs |
| RK4 | 5 ms | 5.7×10⁻⁸ mm | 658 µs |
| RK4 | 10 ms | 9.1×10⁻⁷ mm | 339 µs |
- オイラー法は dt を半分にすると誤差も半分になり(1次)、RK4 は 16分の1 になります(4次)。
- RK4 の 10 ms はオイラー法の 0.5 ms より速く、100万倍正確でした。 卓球ボールの飛行は滑らかな微分方程式であるため、高次手法が圧倒的に有利です。
- 準暗黙的オイラー法(速度を先に修正し、新しい速度で位置を移動させる)はこの問題ではむしろ少し悪くなりました。エネルギーを保存する振動問題で使用される手法であるため、空気抵抗があるボールにはメリットがありません。
- ただし、バウンスやラケットの衝突のような 不連続性のある事象は、大きな dt ではタイミングを逃してしまいます。本シリーズでは、衝突判定のある飛行は 1 ms で積分し、衝突のない区間のみ 5 ms に短縮しました(第7回)。
4. 回転とバウンスが変えるもの
4.1 回転がバウンス位置を移動させる
相手側 (0, 1.2, 0.25) m から速度 (0, −6, 1) m/s で発射されたボールが、ロボット側の卓球台に最初に接触する位置を、回転のみを変更して比較しました。
| 回転 | 50 rad/s | 100 rad/s | 150 rad/s |
|---|---|---|---|
| トップスピン:バウンスがネット側に | +10.3 cm | +19.4 cm | +27.3 cm |
| バックスピン:バウンスがエンドライン側に | −11.8 cm | −25.7 cm | −41.7 cm |
回転がない場合、y = −0.62 m の地点に 0.344秒で落下します。第1回のデータセットで打った直後の回転の中央値が 49 rad/s、95パーセンタイルが 100 rad/s であったため、通常のアマチュアのボールでも回転によってバウンス位置が 10〜25 cm 変わります。
4.2 バウンスの検証:ITTF落下試験
ボールの底面を 30 cm の高さから落下させ、跳ね上がった高さを測定しました。e = 0.876 であれば空気抵抗なしで 23 cm になるはずですが、空気抵抗を考慮した私たちのモデルでは 21.5 cm でした。落下および上昇の間に空気抵抗がエネルギーを奪うためです。空気抵抗も含めて 23 cm に合わせるには e = 0.907 が必要でした(二分法)。この値は Nakashima ら(2010)の実測値 0.93 と Koç ら(2018)の 0.883 の間にあります。反発係数一つをとっても、「何を無視して合わせたか」によって 3% 変動します。
4.3 摩擦係数と回転
同じボールをエンドラインの 23 cm 後方の面(y = −1.6 m)で受けると仮定したとき、卓球台の摩擦 μ を変更すると、その面を通過する高さ(卓球台からの高さ)は次のように変化しました。
| 回転 | μ = 0.10 | μ = 0.25 | μ = 0.40 |
|---|---|---|---|
| バックスピン 100 rad/s | 0.19 m | 0.18 m | 0.15 m |
| 回転なし | 0.17 m | 0.12 m | 0.02 m |
| トップスピン 100 rad/s | 0.10 m | 0.005 m | 0.005 m |
トップスピンのボールは μ が 0.25 と 0.40 の場合で同じになります。バウンス中に接触点が転がり状態に達し、摩擦がもはや作用しなくなるためです。回転のないボールが摩擦に最も敏感でした。 回転と摩擦は個別に調整することはできず、同時に調整する必要があります。
5. 定数の不確実性は予測にどれほどの揺らぎをもたらすか
データセットのボール 1,000個をデフォルトの定数で飛ばした結果と、定数を1つだけ変更して飛ばした結果における、打撃面(y = −1.6 m)の通過位置・時刻の差を測定しました(m06b_constants.py).
| 変更した定数 | 位置の差の中央値 / 90% | 時刻の差の中央値 | 打撃面に届かなかったボール |
|---|---|---|---|
| C_D 0.47 → 0.40 | 3.1 / 12.4 cm | 30 ms | 21 |
| C_D 0.47 → 0.55 | 3.9 / 14.8 cm | 35 ms | 35 |
| Magnus → Koçの値(1.0×10⁻³) | 5.4 / 11.5 cm | 6.7 ms | 43 |
| Magnus → MuJoCo有効値(7.6×10⁻³) | 10.4 / 22.3 cm | 11.3 ms | 53 |
| Magnusなし | 7.4 / 15.5 cm | 9.6 ms | 72 |
抗力係数は位置よりも 時刻を大きく変化させます。0.07 の差が 30 ms を生み出し、これは第1回のタイムバジェットにおけるカメラの4フレーム分に相当します。マグナス係数は位置を大きく変化させます。文献値の間を行き来するだけで、打撃面での位置が 5〜10 cm 変化しました。これらの定数は、ロボットを製作した後に 自分たちのボールと卓球台で 再調整しなければ なりません。Sony AI 2026 は、9台のカメラで収集した約5万8千個の軌跡を用いて係数を再調整し、着地位置の中央値の誤差を 0.37 m から 0.15 m に減少させたと報告しています。
6. カルマンフィルタ:ノイズ混じりの観測から状態を抽出する
カメラは位置情報のみを提供し、その位置にもノイズが含まれています。速度は位置を微分して求める必要がありますが、微分はノイズを増幅させます。カルマンフィルタ(Kalman filter)は、「モデルが予測した状態」と「新しい観測値」をそれぞれの不確実性に応じてブレンドし、位置と速度を同時に推定します。モデルが非線形(空気抵抗)である場合、ステップごとにモデルを線形化して使用する拡張カルマンフィルタ(EKF)となります。
sp = f_state(s, dt) # 예측: RK4 로 한 프레임 앞으로
F = finite_difference_jacobian(f_state, s, dt) # 선형화
P = F @ P @ F.T + Q # 불확실성도 함께 전파
K = P @ H.T @ inv(H @ P @ H.T + R) # 칼만 이득: 모델과 관측의 신뢰 비율
s = sp + K @ (z - H @ sp) # 갱신: 관측 z(위치 3개)로 고침
P = (I - K @ H) @ P
6.1 実測:何が予測精度を向上させるか
データセットから打球面まで来る実際の打球200個を選んで真の軌跡を作成しました(抗力 + 実際の回転 + バウンド)。カメラ観測はfps 60・120・240、各軸ガウス雑音 σ 3・10 mm で模倣し、打った直後から0.1・0.2・0.3秒間観測した後、フィルター状態で打球面 y = −1.6 m の通過位置を予測しました。フィルターモデルは3つです。
- A 重力のみ: 線形カルマンフィルター。予測も真空放物線 + バウンド。
- B 重力 + 抗力: EKF。回転は 0 と仮定。
- C 重力 + 抗力 + 真の回転: 回転を正確に知っていると仮定したEKF。回転推定が完璧な場合の下限値です。
120 fps、σ = 3 mm の結果(ボール200個の中央値)です。
| 観測時間 | A 位置誤差 | B 位置誤差 | C 位置誤差 | B 時刻誤差 | C 時刻誤差 |
|---|---|---|---|---|---|
| 0.1 s | 15.3 cm | 7.0 cm | 1.3 cm | 14 ms | 2.9 ms |
| 0.2 s | 13.3 cm | 5.6 cm | 0.5 cm | 13 ms | 1.3 ms |
| 0.3 s | 10.5 cm | 4.8 cm | 0.5 cm | 10 ms | 1.2 ms |
フレームレートと雑音を変更した結果(観測0.2秒、位置誤差の中央値)です。
| 条件 | B(回転不明) | C(回転既知) |
|---|---|---|
| 60 fps, σ 3 mm | 5.9 cm | 0.77 cm |
| 120 fps, σ 3 mm | 5.6 cm | 0.51 cm |
| 240 fps, σ 3 mm | 5.9 cm | 0.39 cm |
| 60 fps, σ 10 mm | 6.2 cm | 2.0 cm |
| 240 fps, σ 10 mm | 6.0 cm | 1.2 cm |
- 回転を知らないモデル(B)は、どれほど長く、どれほど頻繁に見ても 5 cm を下回ることはありませんでした。 誤差の大部分が雑音ではなくモデル誤差であるためです。
- 回転を知っていれば(C)、誤差が 10分の1 に減少し、その時点からフレームレートと雑音が意味を持ちます。雑音が大きい場合は、240 fps が 60 fps よりも誤差を 40% 削減しました。
- 真空モデル(A)は、ボール200個のうち 28〜62個で打球面通過を全く予測できませんでした(バウンド位置を誤認)。
- 処理時間は、PythonのEKFがフレームあたり 126 µs、打球面までの予測1回あたり 11 ms でした。
Mülling 他 2013 は60 Hzのカメラ4台とEKFを使用し、回転の観測が困難という理由でEKFモデルから回転を除外しました(3.1節)。Koç 他 2018 も60 Hzのカメラ4台とEKFを使用し、飛行モデルに揚力項を設けましたが、フィルターが回転をどのように処理するかは確認していません(未確認)。この実測は、その選択の代償が数 cm であることを示しています。ラケット面の半径が 7〜8 cm 前後であるため許容できる大きさですが、第7部で見るとおり、着地地点の精度にはそのまま波及します。
7. 限界
- 真の軌跡とフィルターが同じ方程式(定数のみ異なる)を使用しています。実際のボールには、回転減衰、ボールごとの異なる重心、風などのモデル外の効果があるため、誤差はさらに大きくなると予想されます(未実測)。
- 観測雑音を各軸独立のガウス分布として入力しました。実際の三角測量の雑音はカメラの視線方向に長く伸びており、ボール検出の失敗や遅延も存在します(未実測)。
- 回転を「知っている」場合(C)は下限値に過ぎません。回転を軌跡の曲がり具合から推定したり、ボール表面の模様から測定する方法については扱っていません。
- 卓球ボール専用の風洞実験の原文を開くことはできませんでした(未確認)。C_D の範囲は Sony AI 2026 の飛行軌跡フィッティング結果です。
8. まとめ
- 卓球ボールの飛行は、重力・抗力・マグナス力の3つの力と反発・摩擦バウンドによってかなり正確に説明されます。積分はRK4を使用すれば 5〜10 ms 間隔でも十分です。
- 回転 100 rad/s はバウンド位置を 20 cm 以上移動させ、抗力係数 0.07 の違いは到着時刻を 30 ms 変化させます。
- 予測誤差を減らすためには、 フレームレートよりもモデル(特に回転)が先決です。回転を知らない場合は 5 cm、知っている場合は 0.5 cm でした。
- そのため、ハードウェアを選ぶ際の「何 fps のカメラか」の次の質問は「回転をどのように把握するのか」になります。
Tittyの一言。 カメラを4倍速いものに変えても、回転が分からなければボールは 5 cm ほど違うところに来ますよ。ボールがどのように回転しているかを突き止めるのが先決です!
参考
すべての資料は 2026-10-18 に閲覧しました。
- ITTF, Statutes 2026, 2.1.3·2.3.1·2.3.2.
- Conti 他(Sony AI), Physics Models for Sim-to-Real Transfer in Professional-Level Robot Table Tennis, arXiv:2606.28805, III-B·III-C節、表 I.
- Koç, Maeda, Peters, Online optimal trajectory generation for robot table tennis, RAS 105 (2018), 著者公開版, 式 9–16、表 A.3、付録 B.
- Nakashima 他, Modeling of Rebound Phenomenon of a Rigid Ball with Friction and Elastic Effects, ACC 2010, 機関リポジトリ, IV節.
- Mülling, Kober, Kroemer, Peters, Learning to select and generalize striking movements in robot table tennis, IJRR 32(3) (2013), 著者公開版, 3.1節.
- D'Ambrosio 他, arXiv:2309.03315, 付録 D(シミュレーター設定)。
- Google DeepMind, competitive_robot_table_tennis, CC-BY 4.0.