状態:ドラフト(2026-10-18)、実測。ボール物理の第1段階(A~E)完了。 このモデル上で動かした古典制御のベースラインは 第5篇に、強化学習については以降の篇に記載します。 測定は2026-10-18にホームラボのKubernetesの一時ポッド内で行いました。ノードはミニPC1台(Intel Core Ultra 9 185H)で、ポッドの上限はCPU 3コア・メモリ3 GiB、 GPUなし、オフスクリーンレンダリングオフ(
MUJOCO_GL=disable)です。イメージはpython:3.12にpipでmujoco 3.16.0、numpy 2.5.4、scipy 1.18.1を追加しました(インストール11.6 s)。 ポッドメモリのピークは725 MBでした。MuJoCoは同じ入力に対して同じ結果を返すため、表の値は1回実行した値であり、ばらつきは接触位相(A4、50種類)と ボールのサンプル(D、500個)で個別に算出しました。元データは作業ディレクトリのtt-robot/out/(表と図)およびtt-robot/logs/(実行ログ)にあります。
目次
- 1. 直感:2.7 gのボールは設定に敏感である
- 2. モデル:DeepMind公開MJCFの値をそのまま使用
- 3. 30 cm落下:ボールが跳ねすぎる
- 4. 空気:マグナス力が文献の4.2倍強い
- 5. 斜めのバウンド:卓台が滑りやすい
- 6. 公開初期状態500個:何が最も大きく揺さぶるか
- 7. ラケット:ボールが板を突き抜ける
- 8. 計算コストは低い
- 9. 制限事項
- 10. 次回へ
- 参考文献
1. 直感:2.7 gのボールは設定に敏感である
卓球ボールは直径40 mm、重量2.7 gです。7 m/sで飛ぶボールに受ける空気力は重量と同程度の大きさであり、回転が大きい場合は重量を超えます。 卓台に接触する時間は1 ms強です。そのため、シミュレータの時間ステップ、接触の硬さ、流体係数などのいくつかの設定がボールの軌道を大きく変えます。
ロボットに卓球を教えるには、まず「シミュレータ内のボールが本物のボールのように飛ぶか」を知る必要があります。この記事では、本物のボールの軌道がまだない状態で できること、すなわち 公開された設定をそのまま入力し、文献の値と並べ、どの設定が結果を最も大きく揺さぶるかを測定することを行います。
2. モデル:DeepMind公開MJCFの値をそのまま使用
DeepMindはICRA 2025の卓球論文と共に、ボールの初期状態15,792個(ラリー13,088個、サーブ2,704個)とMuJoCoノートブックを公開しました。 ノートブックの値をそのまま移行しました。
| 項目 | 値 |
|---|---|
| 時間ステップ、積分器 | 1 ms, implicitfast |
| ボール | 質量2.7 g、半径0.02 m、薄い殻の球 |
| 流体係数(fluidcoef) | 0.235 0.25 0.0 1.0 1.0 |
| ボールと卓台の接触 | solref -1000000 -17(剛性1e6、減衰17)、摩擦0.1 |
| 座標 | 原点は卓台上面の中央、x幅1.525 m、y長さ2.74 m、z上向き。ロボット側はy < 0 |
流体力はMuJoCoが qfrc_fluid に別で格納してくれます。重力をオフにし、速度と回転のみを与えた後にこの値を読み取ることで、抗力とマグナス力を直接測定できます。
s = Sim(base.with_(gravity=False))
for v in [2, 5, 10, 15, 20, 25, 30]:
s.reset([0, 0, 1], [0, v, 0], [0, 0, 0])
fd = -s.d.qfrc_fluid[1] # 진행 방향 반대 힘 = 항력
cd = fd / (Q * v * v) # Q = ½ρA
for S in [0.0, 0.1, 0.2, 0.4, 0.6, 1.0]: # 회전비 S = rω / v
w = S * v / BALL_R
s.reset([0, 0, 1], [0, v, 0], [-w, 0, 0]) # 탑스핀
fm = -s.d.qfrc_fluid[2] # 아래로 누르는 힘 = 마그누스
km = fm / (w * v) if w > 0 else float("nan")
(TT Lab実験コード exp_b_magnus.py から抜粋。 Sim はMJCFを作成し、 mj_forward まで呼び出す小さなラッパーです。)
3. 30 cm落下:ボールが跳ねすぎる
ITTFの規定では、30 cmから落としたボールは約23 cm跳ねなければならないと定められています。空気抵抗を無視すると、反発係数e ≈ √(23/30) = 0.876となります。
| モデル | 入射速度 | 反発速度 | e | 頂点 | 規定23 cmとの比較 |
|---|---|---|---|---|---|
| MuJoCo, dt 0.25 ms | −2.375 m/s | 2.299 m/s | 0.968 | 26.0 cm | +3.0 cm |
| MuJoCo, dt 0.5 ms | −2.373 m/s | 2.308 m/s | 0.973 | 26.2 cm | +3.2 cm |
| MuJoCo, dt 1 ms | −2.368 m/s | 2.317 m/s | 0.978 | 26.4 cm | +3.4 cm |
| MuJoCo, dt 2 ms | −2.368 m/s | 7.114 m/s | 3.004 | 196.4 cm | 発散 |
| TT3Dのe 0.85(同等の入射速度・同等の抵抗で計算) | 0.850 | 20.2 cm | −2.8 cm | ||
| Sony AI 2026のe式(同等の方法で計算) | 0.932 | 24.2 cm | +1.2 cm |
(図の動きは表の反発速度を基に、実測と同じ空気抵抗C_D 0.471を適用して再描画しました。再描画された頂点は26.4 cmと195.9 cmであり、表と一致しています。)
- DeepMindの値における卓台は規定よりも弾力的です。 dtを0.25–1 msに変更しても、eは0.968–0.978です。
- dt 2 msでは数値が破綻します。 接触剛性1e6は固有振動数ω₀ = √k = 1,000 rad/sに相当し、ω₀·dtが2になると接触積分がエネルギーを生み出します。 第7節のラケット接触測定でも、ω₀·dt ≤ 1付近が安定境界として現れました。
- 減衰ひとつで合わせることができます。 剛性1e6を維持したまま減衰bのみを二分法で変更すると、b = 83.8でe = 0.876(規定)、b = 38.5で0.946(+8%)、b = 128.1で0.806(−8%)になります。 DeepMindのデフォルト値0.978の+8%は1を超えるため、減衰では作成できません。
- 接触位相によるばらつき。 同じ落下であっても、接触が時間ステップの間のどこで始まるかによってeが変化します。50種類の位相で測定すると、標準偏差はdt 0.25 msで0.005、 0.5 msで0.012、1 msで0.005–0.008であり、dt 1 msでは最大1.002と1を超えるケースもありました。強化学習にはこのばらつきが小さな観測ノイズのように組み込まれます。
衝突速度を1–8 m/sに変更すると、違いがより明確になります。MuJoCoのeは0.96–0.99とほぼ平坦ですが、Sony AI 2026の式(e = 0.98 − 0.02·入射速度)は速度が速いほどeが低下します。
4. 空気:マグナス力が文献の4.2倍強い
| 出典 | C_D | マグナス係数 k_M (N·s²/rad/m) | MuJoCo比 |
|---|---|---|---|
| MuJoCo、DeepMindの値(実測) | 0.471 | 2.053e-5 | 1.00 |
| TT3D 2025 | 0.494 | 4.860e-6 | 0.237 |
| Tebbe他 2020(C_D 0.4, C_M 0.6, 力の形は推定) | 0.400 | 9.236e-6 | 0.450 |
| Sony AI 2026 | 低速0.55、17.5 m/sで0.37–0.51 | 回転比の関数(この記事では数値を使用しない) |
- 実効C_Dは2–30 m/sにおいて0.470–0.474とほぼ一定でした。fluidcoefの最初の値0.235がC_D/2に相当します。
- マグナス力は速度と回転に正比例する定数 k_M = 2.053e-5 として得られました。揚力係数に換算すると C_L = 1.33·S となり、TT3Dでは 0.316·S です。
- 7 m/sで飛ぶボールに300 rad/sのバックスピンを与えると、MuJoCoのマグナス力は約43 mNとなり、重量の26 mNを超えます。ボールが上方に浮き上がります。 実際のボールではこのような現象は起きないと見なされますが、我々の手で確認はしていません(推定)。
- 回転比0.5付近で揚力が急変する現象(lift crisis)を報告した研究がありますが、係数が定数のモデルでは、MuJoCoであれ文献の式であれこれを表現できません。
同一の打球(ロボット側のエンドラインの背後 y = −1.6 m、高さ 0.2 m で速度 (0, 7, 1.6) m/s)において回転のみを変更すると、その差が着地点として現れます。
| 回転 | MuJoCo着地y | TT3D式着地y | 備考 |
|---|---|---|---|
| トップスピン 300 rad/s | −0.315 m(打った側のコート) | 0.355 m | TT3Dはネットの高さより1.2 cm低く通過しネットと判定 |
| 無回転 | 0.812 m | 0.789 m | 両モデルが2.3 cm以内で一致 |
| バックスピン 150 rad/s | 3.684 m(場外)、頂点51.3 cm | 1.093 m | |
| バックスピン 300 rad/s | 5.378 m(場外)、頂点139.6 cm | 1.482 m(場外) |
無回転ボールでは両モデルがほぼ一致しますが、回転が加わるとMuJoCo側が大きく曲がります。問題は、公開データの回転値がまさにこのMJCFと一緒に使用されることを想定して作成された可能性がある点です(推定)。 その場合、回転値とマグナス係数はペアで使用すべきであり、一方だけを文献の値に変更してはなりません。第6節の感度がその根拠となります。
5. 斜めのバウンド:卓台が滑りやすい
卓台の直上で水平速度3、6、9 m/s、垂直速度2、4 m/s、回転−300、0、+300 rad/sを組み合わせ、バウンド直前と直後の状態を比較しました。
- DeepMindの値における実効摩擦係数は約0.10です。 設定された摩擦0.1と同等であり、文献の0.25–0.3より小さくなっています。 例えば、水平6 m/s、垂直4 m/s、無回転で入ってきたボールは、バウンド後に水平5.19 m/sで飛び出しました。TT3D式は3.78 m/s、Sony式は4.10 m/sです。
- バウンド後も接触点が滑り続けました。文献の式では、同じ入力で転がり状態に移行するケースが多く見られます。
- eを規定値に、摩擦を0.3に合わせたMuJoCoでも滑り区間ではμ 0.30がそのまま現れましたが、転がり区間では実効μが0.07–0.17として残りました。 摩擦方向の接触設定(solreffriction)に減衰のみが存在し、滑りを最後まで完全に停止させることができないためだと推測されます(推定)。
- 垂直2 m/sにバックスピンを与えた一部のケースでは、eが1.08–1.16と1を超えました。摩擦と垂直方向の接触が絡み合って発生したものと推測されます(推定)。次回の調整時に合わせて調整すべき項目です。
6. 公開初期状態500個:何が最も大きく揺さぶるか
ラリー13,088個のうちロボット側に向かって飛んでくるボール11,999個から500個をランダムに(seed 0)抽出し、DeepMind値のMuJoCo(dt 1 ms)で飛ばしました。 公開データには軌跡がなく、初期状態のみがあります。 そのため、以下は実際のボールとの比較ではなく、「同じ初期状態からシミュレータが出力する値」とその感度です。
| 指標 | 5% / 50% / 95% |
|---|---|
| 初期速度 | 3.80 / 5.49 / 7.89 m/s |
| 初期回転 | 12.21 / 57.55 / 101.60 rad/s |
| ロボット側テーブル着地 | 100.0%(ネット接触 0.6%) |
| 最初のバウンドまで | 0.30 / 0.42 / 0.60 s |
| バウンド直後の速度 | 3.82 / 4.50 / 5.61 m/s |
| 打撃面(y = −1.6 m)到達 | 0.51 / 0.71 / 1.06 s |
| 打撃面の高さ | 0.01 / 0.31 / 0.47 m |
同じ500個の設定だけを変えて再び飛ばし、ペアにして打撃面での位置の差を確認しました。ラケット面の半幅は約7.5 cmなので、差が数cmを超えるとポリシーが空振りします。
| 変更点 | 打撃面の位置の差の中央値 / 95% | ロボット側着地率の変化 |
|---|---|---|
| dt 0.5 ms / 0.25 ms | 1.0 / 3.8 cm, 0.7 / 3.2 cm | 0 |
| C_D 0.40 / 0.55 | 2.5 / 12.5 cm, 2.7 / 13.2 cm | −1.4 / 0 %p |
| テーブル μ 0.25 / 0.3 | 0.6 / 5.1 cm, 0.7 / 6.0 cm | 0 |
| テーブルのeを規定値の0.876に | 6.9 / 15.2 cm | 0 |
| 規定のeから±8% | 4.7 / 10.1 cm, 4.6 / 9.8 cm | 0 |
| マグヌス ×0.5 | 12.4 / 37.6 cm | −11.0 %p |
| マグヌス ×0.24(TT3Dの強さ) | 17.7 / 57.3 cm | −23.0 %p |
| マグヌス 0 | 23.2 / 78.9 cm | −32.2 %p |
| 文献値の組み合わせ(C_D 0.49、マグヌス ×0.24、規定e、μ 0.3) | 17.4 / 57.3 cm | −21.2 %p |
- 最も大きいのはマグヌスです。 文献の強さに下げると、テーブルに落ちるボールが500個中385個(77%)に減少します。データの回転値と係数がセットになっているというシグナルです。
- テーブルの反発±8%により、ボールの5%が約10 cm(95%の地点で9.8–10.1 cm)逸れます。 ラケットの半幅よりも大きいです。DeepMindのRSS 2023論文が報告している「テーブルの反発が8%ずれると報酬が大きく低下する」という観察(調査ドキュメント基準)と同じ方向性です。
- 時間間隔は1 msで十分です(ボールを見るだけの場合)。 0.5 msや0.25 msに縮めても、打撃面の差の中央値は1 cm以内でした。ラケットが加わると話が変わりますが、これについてはセクション7で見ます。
7. ラケット:ボールが板を突き抜ける
ラケットの板(15×16 cm、厚さ6 mm・14 mm)を固定し、ボールを正面から発射しました。接触が時間間隔のどこで始まるか(位相)を30〜50通りに変化させ、跳ね返るか突き抜けるかをカウントしました。
- DeepMindのテーブルの剛性(1e6)をそのままラケットに使用すると、高速なボールが板を突き抜けます。 6 mmの板は25 m/sから、14 mmの板は30 m/sから50回すべて貫通し、dtを0.25 msに縮めても同様でした。 ボールが板に食い込む深さ(線形近似で速度/√k、40 m/sの場合は40 mm)が「ボールの半径 + 板の厚さの半分」を超えると、ボールの中心が板の中央を通過して法線が反転するためです。 「1ステップで進みすぎて接触を逃す」という最初の仮説は、dt 2 msのときのみ当てはまりました。
- MuJoCoのデフォルトの接触(solref 0.02 1)はボールに対して柔らかすぎます。 10 m/sでもすべての条件で貫通しました。
- 剛性を上げると、今度は大きなdtで数値が発散します。 以下のグリッドにおいて、√k・dtが1を超えるマスではe > 1.05となり発散するケースが生じ、1以下のマスでは剛性4e6以上において貫通も不安定性もありませんでした。
決定。 物理の時間間隔は0.5 ms、ラケットの接触はsolref(−4e6、−34)(減衰比はDeepMindの値と同じ)です。14 mmの板、40 m/sにおいて貫通0/30、不安定0/30でした。 この設定で測定したラケットの反発係数は、4 m/sで0.931、8 m/sで0.893であり、Sony AI 2026の式(0.80、0.72)よりも大きいです。実際のラバーが食い込む深さや接触時間に合わせた値ではありません(未確認)。 テーブルはDeepMindの剛性のままにしました。テーブルに当たる垂直速度は8 m/sを超えないと見なしており(推定)、8 m/sまではセクション3で安定していました。
8. 計算コストは低い
ボールとテーブルのみのモデルは、1コアあたり毎秒23万〜36万ステップで動作しました。同じ測定を2回行いましたが、ノードの異なる負荷によってこれだけの差が出ました(後の測定:dt 0.25〜1 msで229,806〜239,229ステップ/s)。 dt 0.5 msの場合、実時間の120〜180倍です。3つのスレッドで512個のボールを同時にシミュレーションした場合、毎秒58万〜122万ステップでした。 ガントリー2軸と手首2軸のロボットを入れたモデルは、dt 0.5 msにおいて1スレッドで毎秒152,611ステップ(実時間の76倍)でした。この段階ではGPUは必要ありません。 実験時間も短かったです。落下バンドル(A)は11.3 s、空気力学バンドル(B)は3.6 s、バウンド(C)は0.5 s、500個の感度(D)は28.7 sでした。
9. 制限事項
- 実際のボールの軌跡と比較していません。 比較対象は文献の値であり、文献の値も我々は再測定していません。次のステップは、我々のカメラで撮影した軌跡に合わせて係数を調整することです。 現在の30 fpsのスコアボードカメラではバウンドの瞬間や回転がほとんど見えないため、ハイスピードカメラが必要です。
- 公開された回転値がどのようなモデルで推定されたのかは確認できていません(未確認)。「このMJCFとペアである」という解釈は推測です。
- Tebbeの式の力の形状とSonyの式のマグヌス係数(回転比関数)は、本文では数値として使用していないか、あるいは推測として扱っています。
- 図の落下の動きは、実測の反発速度で再描画したものです。回転別の着地の図は、表の着地位置のみをプロットしたものであり、MuJoCoの軌跡自体は描画していません。
10. 次回予告
このボールモデルの上にロボットを配置し、「見て、予測して、打ち返す」という古典制御のベースラインを実行した結果は、 第5回にあります。強化学習がそのベースラインを超えるかどうかで評価します。 ロボットの身体をどのように構築するかについては、直後の 第3回で見ます。
ティティの一言: 同じボールなのにシミュレータの設定を1行変えただけで、26 cm跳ねていたボールが2 m近くまで跳ね上がりました。卓球ボールが軽いからといって侮ってはいけません。係数はデータとセットで扱ってください!
参考
すべてのリンクは2026-10-18時点でのアクセスを確認しています。
- DeepMind, Achieving Human Level Competitive Robot Table Tennis(ICRA 2025): https://arxiv.org/abs/2408.03906
- 公開データとMuJoCoノートブック: https://github.com/google-deepmind/competitive_robot_table_tennis(初期ボール状態、© 2025 Google LLC, CC BY 4.0。本記事ではデータを再配布せず、500個を抽出してシミュレータで飛ばした結果のみを掲載しています。)
- DeepMind, Robotic Table Tennis: A Case Study into a High Speed Learning System(RSS 2023): https://arxiv.org/abs/2309.03315
- Sony AI, Physics Models for Sim-to-Real Transfer in Professional-Level Robot Table Tennis(2026): https://arxiv.org/abs/2606.28805
- TT3D: Table Tennis 3D Reconstruction(2025): https://arxiv.org/abs/2504.10035
- MuJoCo流体モデルドキュメント: https://mujoco.readthedocs.io/en/stable/computation/fluid.html、MuJoCoリポジトリ: https://github.com/google-deepmind/mujoco
- Tebbe他(2020)の係数と回転比0.5付近でのリフトクライシス報告(Miyazaki, 2017)は、調査段階で原典を確認した値であり、今回はリンクを再確認していません。
- 引用コードはTT Labの実験コードです。