状態:ドラフト(2026-10-18)、実測。 本記事の数値は1台のノートPC(Apple M1 Max、macOS 26.5)でPython 3.9.6・numpy 2.0.2により 直接計算した値です。時間は7回繰り返した際の中央値であり、初回の試行はウォームアップとして除外しました。元データとコードは作業ディレクトリ
measure/robot-arm-basics/(m01_budget.py,m01b_fast.py,out/m01_budget.json)にあります。 実際のロボットハードウェアで測定した値はありません(ハードウェア未実測)。ボールの初期状態はDeepMindの公開データセット(CC-BY 4.0)を使用し、 卓球の規格はITTF Statutes 2026の原文で確認しました。根拠資料はいずれも2026-10-18に閲覧しました。 作成ルール:実測データを基本とし、測定できなかったものは「未実測」、確認できなかったものは「未確認」と表記します。
目次
- 1. 直感:0.6秒以内に完了すべき7つのこと
- 2. 図:7段階と自作コードの計算時間
- 3. 計算:ボールはどれくらいの時間で飛んでくるのか
- 4.時間を段階別に分解すると
- 5. 本シリーズの共通モデルと定数
- 6. 制限事項
- 7. まとめ
- 参考
1. 直感:0.6秒以内に完了すべき7つのこと
人間は相手のラケットからボールが離れた瞬間、すでに体を回転させています。目でボールを追いかけ、どこに弾むかを推測し、腕を後ろに引いてから振ります。 これらすべてのことが1秒未満の時間の中で起こり、そのほとんどは意識されないまま過ぎ去ります。
ロボットはこのプロセスを1つずつ計算によって解き明かす必要があります。本シリーズではその計算を7つの段階に分けます。
| 段階 | 作業内容 | 扱う回 |
|---|---|---|
| 1 認知(perception) | カメラ映像からボールを見つけ出して3次元位置を取得する | 第2回(座標変換) |
| 2 状態推定(state estimation) | ノイズの混ざった位置の時系列から位置・速度を推定する | 第6回(カルマンフィルター) |
| 3 飛行予測 | 重力・抗力・マグナス力とバウンドによりボールの将来の軌道を計算する | 第6回 |
| 4 打撃決定 | いつ・どこで打つか、ラケットの速度と面の向きを決める | 第7回 |
| 5 逆運動学(inverse kinematics) | ラケットの姿勢を関節角度に変換する | 第3・4・5回 |
| 6 関節軌跡(trajectory) | 現在の姿勢から打撃の姿勢・速度に至る時間関数を作成する | 第8回 |
| 7 低水準制御(low-level control) | モーター電流によってその軌跡に実際に追従させる | 第9回 |
第10回では、これらの段階の中で何を方程式で解き、何を学習に委ねるのかを卓球ロボットの論文とともに比較します。
本シリーズは卓球ロボットを オープンハードウェアとして作るための準備段階です。そのため、数値の一つひとつが「どの部品を買うべきか」につながるように 書いています。関節速度の限界がいくつかによってラケットが何 m/s を出せるか(第5回)、ラケットの角度が1°狂うとボールが何 cm 外れるか(第7回)、制御周期が 200 Hzだと何が崩れるか(第9回)といった事柄です。
2. 図:7段階と自作コードの計算時間
- 右側の数値は本シリーズの各回で測定した計算時間です。純粋なPythonとnumpyで組んだ教育用コードであるため実際のロボットでは大幅に 短縮できますが、C++に書き換えた場合に何倍高速化されるかは測定していません(未実測)。
- オレンジ色の2つの枠(飛行予測、打撃決定)が最も負荷がかかります。どちらもボールの軌道を数千ステップにわたって積分するためです。残りの段階はマイクロ秒 単位です。
- 最後の段階における2つの数値は計算時間ではなく繰り返し周期です。位置ループ1 kHzはこのシリーズのシミュレーション設定であり、電流ループ 30 kHzはオープンソースのモーターコントローラーmoteusのドキュメントに記載されている基本スイッチング周波数です(moteus theory.md).
3. 計算:ボールはどれくらいの時間で飛んでくるのか
タイムバジェットの出発点はボールの飛行時間です。直接測定するために2つのものを準備しました。
ボールの初期状態。 Google DeepMindが公開した competitive_robot_table_tennis データセットには、人間またはロボットが打った 直後のボールの位置・速度・角速度が15,792件含まれています(ラリー13,088件、サーブ2,704件)。このデータは D'Ambrosioら 2024の論文(arXiv:2408.03906)の学習に使用され、CC-BY 4.0で配布されています。座標系は卓球台上面の中心が原点で、xが幅、yが長さ、zが上方向です。本シリーズ全体で同じ座標系を使用します。ロボットはy < 0側に立ちます。
飛行モデル。 第6回で詳しく扱う運動方程式をRK4により1 ms間隔で積分します。
m · dv/dt = m·g − ½ ρ C_D A |v| v + ½ ρ A r C_M (ω × v)
중력 항력(drag) Magnus 힘
탁구대에 닿으면: 법선 속도에 반발 계수 e, 접선 방향은 쿨롱 마찰 μ
コードは短いです。データセットからロボット側に向かってくるボールのみを抽出して飛ばし、ロボット側の卓球台で一度バウンドした後に複数の「打撃面」を通過する時刻を記録します。
incoming = [s for s in rallies + serves if s["vel_y"] < 0] # 로봇(y<0) 쪽으로 오는 공 14,703개
for s in incoming:
rec = fly(p, v, w, dt=1e-3, stop=lambda t, p, v, nb: p[1] < -2.2 or nb >= 2)
# 첫 바운스가 로봇 쪽 탁구대 안이면 유효. 이후 y = -1.37, -1.6, -1.9 를 지나는 시각·높이·속력을 기록
結果は以下の通りです。14,703件のうちロボット側の卓球台に正確に落下したボールは11,590件であり(残りはネット・アウト)、そのうち エンドライン(y = −1.37 m)まで飛んできたボールは10,618件でした。
| イベント | 第5パーセンタイル | 中央値 | 第95パーセンタイル |
|---|---|---|---|
| 打球直後のボールの速さ(m/s) | 3.89 | 5.46 | 7.62 |
| 打球直後の回転(rad/s) | 9 | 49 | 100 |
| ロボット側のバウンドまで(秒) | 0.317 | 0.449 | 0.621 |
| バウンド後の頂点まで(秒) | 0.511 | 0.678 | 0.904 |
| 頂点の高さ(卓球台上、m) | 0.20 | 0.30 | 0.45 |
| エンドライン y = −1.37 通過(秒) | 0.474 | 0.654 | 0.951 |
| エンドライン後 23 cm、y = −1.6 通過(秒) | 0.538 | 0.745 | 1.082 |
| エンドライン通過時のボールの速さ(m/s) | 2.07 | 2.88 | 4.15 |
| エンドライン通過時の高さ(卓球台上、m) | 0.06 | 0.24 | 0.38 |
計算時間は14,703個のボールをすべて飛ばすのに130秒、ボール1個あたり約9 msでした。
より速いボールの場合
このデータセットのボールは速くありません。同論文の付録では7 m/sを超えるボールを「速い」と分類していますが、上記表の第95パーセンタイルは7.6 m/sです。
競技レベルが上がるとボールが速くなるため別途計算しました。相手のエンドライン上45 cmから−y方向に速さvで打ち、トップスピン50 rad/sを与えた後、
ロボット側のy = −0.7 mに落ちるように上下の速度を二分法で調整しました(m01b_fast.py)。5つのケースすべてでネットを越えます。
| 打球速度(m/s) | バウンドまで(秒) | エンドライン通過(秒) |
|---|---|---|
| 6 | 0.452 | 0.682 |
| 8 | 0.338 | 0.496 |
| 12 | 0.226 | 0.321 |
| 16 | 0.170 | 0.238 |
| 20 | 0.136 | 0.190 |
Büchlerら(2022)の空気圧人工筋肉ロボットは、スマッシュの課題において平均約12 m/sのボールを打ったと報告しています(arXiv:2006.05935 v1)。 その速度のボールを受け取るには、バジェットは0.32秒となります。データセットの中央値の半分です。
4.時間を段階別に分解すると
0.65秒を各段階に分けてみます。順番に起こるのではなく、並行して起こるものである点が重要です。ボールを見ている間に腕はすでに 準備姿勢へ向けて動き、予測は新しいフレームが入ってくるたびに修正されます。
| 区間 | 所要時間 | 根拠 |
|---|---|---|
| ボールを見る時間 | 0.1〜0.3秒 | 第6回実測:最初の0.1秒だけ見て予測した場合の打撃面位置誤差の中央値7.0 cm(抗力モデル)、0.3秒見た場合は4.8 cm |
| カメラの1フレーム | 8 ms(125 fps) | D'Ambrosioら 2023のカメラ設定(arXiv:2309.03315) |
| システム遅延 | ボール観測 40 ms、アーム動作 71 ms | 同論文の表I(平均)。2024年の論文では「システム遅延約100 ms」と要約 |
| 自作の計算(予測 + 打撃決定 + IK + 軌跡) | 約25 ms | 各回の実測値の合計:11 + 14 + 0.06 + 0.007 ms |
| 腕が打撃姿勢に至るまでの時間 | 0.05〜0.10秒 | 第8回実測:0.6 radを通過し10 rad/sに達する5次軌道、加速度限界300〜600 rad/s²において0.062〜0.082秒 |
| 残りの余裕 | その他 | データセットの中央値0.65秒基準で約0.2秒、12 m/sのボール(0.32秒)の場合はほぼなし |
表から2つのことがわかります。
- 計算時間はボトルネックではありません。 教育用のPythonであっても25 msです。ボトルネックとなるのは、予測の精度を上げるためにボールを十分に長く見る必要があるという点と、 カメラ・通信・コントローラーに蓄積する遅延です。Googleのシステムでは観測遅延だけで40 msありました。
- 見る時間と動く時間はトレードオフの関係にあります。 長く見るほど予測は良くなりますが、腕を動かす時間が減ります。そのため実際のシステムでは、 予測が粗い段階から腕を大まかな準備姿勢へ向かわせ、予測が洗練されるにつれて目標を修正します(第8回の軌跡再計画)。
5. 本シリーズの共通モデルと定数
すべての回で同じ定数を使用します。原文を開いて確認した値と仮定を区別して記載します。
| 量 | 値 | 出典と条件 |
|---|---|---|
| ボールの質量・直径 | 2.7 g、40 mm | ITTF Statutes 2026, 2.3.1・2.3.2 |
| 卓球台 | 2.74 × 1.525 m、高さ 76 cm | 同文書 2.1.1 |
| ネットの高さ | 15.25 cm | 同文書 2.2.3 |
| 卓球台の反発係数 | e = 0.876 | 2.1.3の「30 cmから落とすと約23 cm」を空気抵抗なしで換算した値。第6回で再び扱う |
| 卓球台の摩擦 | μ = 0.25 | Nakashimaら 2010の動摩擦測定値 |
| 抗力係数 | C_D = 0.47 | 同プロジェクトのMuJoCoシミュレーターで測定した実効値0.471に合わせた値。文献の範囲は0.37〜0.55(Sony AI 2026 表I) |
| マグナス係数 | C_M = 0.6(質量あたり 3.4×10⁻³) | シミュレーター側のノートがTebbeら 2020から転載した値(原文未確認)。文献によって3倍以上異なる(第6回) |
| ラケットの反発係数 | e_r = 0.8 | 文献値の0.788(Koçら 2018)、0.81(Nakashimaら 2010)の間 |
座標系と質量・直径・卓球台の規格は、同じプロジェクトで作成しているMuJoCo卓球シミュレーターと同一です。シミュレーターがDeepMindのデータセットノートPCのMJCFを出発点としているため、本記事のボール状態をそのまま入力して結果を照合できます。
6. 制限事項
- 飛行モデルは、回転が飛行中に減衰しないと仮定しています。0.5秒前後の飛行において回転の減衰がどの程度になるのかは測定していません(未実測)。
- データセットのボールは、人間とロボットが混ざったアマチュアレベルのラリーです。選手レベルのボール速度分布については一次資料にアクセスできていません(未確認)。
- 「エンドラインを通過する時刻」は、ロボットが打球できる時刻の代表値に過ぎません。実際の打点は、ロボットのワークスペースや戦略によって異なります。Koçら(2018)は、固定された仮想打球面(virtual hitting plane)が軌道を不必要に制限すると指摘し、打球時刻と打点を同時に最適化しています。本シリーズではシンプルに y = −1.6 m の面を基本打球面とします。
- 遅延の数値はGoogleシステムの測定値を流用したものであり、私たちが構築するハードウェアの遅延は未計測です。
7. まとめ
- 相手が打ったボールは、データセットの中央値基準で0.65秒後、速いボールであれば0.2〜0.3秒後にロボットの前にやってきます。
- 計算は高速です。時間を食うのは「十分に見ること」、「遅延」、そして「アームを動かすこと」です。
- そのため、ハードウェアを選ぶ際にまず見るべき数値は、カメラのフレームレートと遅延、そして関節の加速度の限界値です。次回以降、それらの数値を一つずつ計算につなげていきます。
ティティの一言。 ボールが飛んでくる0.6秒の間に、ロボットは7つの仕事をこなします。計算はあっという間に終わりますが、ボールを長く見るほどアームを動かす時間が削られてしまうのが本当の悩みどころです!
参考文献
すべての資料は2026年10月18日に閲覧しました。
- ITTF, Statutes 2026, 第2章 The Laws of Table Tennis(2.1.1, 2.1.3, 2.2.3, 2.3.1, 2.3.2).
- Google DeepMind, competitive_robot_table_tennis 初期ボール状態データセット、CC-BY 4.0.
- D'Ambrosio 他, Achieving Human Level Competitive Robot Table Tennis, arXiv:2408.03906(ICRA 2025).
- D'Ambrosio 他, Robotic Table Tennis: A Case Study into a High Speed Learning System, arXiv:2309.03315(RSS 2023), 表 I.
- Büchler 他, Learning to Play Table Tennis From Scratch using Muscular Robots, arXiv:2006.05935 v1.
- Koç, Maeda, Peters, Online optimal trajectory generation for robot table tennis, Robotics and Autonomous Systems 105 (2018), 著者公開版.
- Nakashima 他, Modeling of Rebound Phenomenon of a Rigid Ball with Friction and Elastic Effects, ACC 2010, 機関リポジトリ.
- Conti 他(Sony AI), Physics Models for Sim-to-Real Transfer in Professional-Level Robot Table Tennis, arXiv:2606.28805, 表 I.
- mjbots, moteus docs/reference/theory.md.