ステータス:ドラフト(2026-10-18)、計算と調査。 ハードウェアはまだ購入も製作もしていません。この記事の数値は次の3種類です。 計算は自前のスクリプト(
flight_window.py,axis_budget.py)で直接算出した値であり、入力はDeepMindが公開したデータの初期ボール状態です。 物理はMuJoCoではなく簡易モデル(抗力、マグナス効果、反発係数の境界)であり、係数を2パターン(A:マグナス効果あり、B:なし)で回して範囲として記載しました。 調査は2026-10-18時点の公式販売元と論文・リポジトリを開いて確認した値であり、価格はその日公式販売元に表示されていた値です。 推定は根拠はあるものの確認できなかった値であり、その旨を表示しています。 元データは作業ディレクトリtt-robot/hardware.mdとtt-robot/hw/にあります。
目次
- 1. 直感:待ち受ける軸と打つ軸は役割が違う
- 2. ボールがもたらす時間:相手が打ってから1秒以内の出来事
- 3. 位置軸は思ったより遅くてもよい
- 4. 打つ軸:低価格なオープンソースアームはなぜ遅いのか
- 5. 構造:ベルトレール+スイング軸
- 6. moteusに統一した理由
- 7. 目:カメラのfpsと遅延
- 8. コスト(推定を含む)
- 9. 第1段階の試作仕様
- 10. ライセンス:NCを付けない理由
- 11. 限界
- 12. 次回へ向けて
- 参考
1. 直感:待ち受ける軸と打つ軸は役割が違う
卓球選手の体を二つに分けて見るとこうなります。足はボールが来る位置へ あらかじめ移動して待ち、腕はボールが来たときに 短く素早く振ります。 足が多少遅くても早く出発すれば間に合います。腕は瞬間的な速度が必要ですが、動く距離は短いです。
ロボットも同様です。卓の幅をカバーする 位置軸は早めに出発することが重要であり、ラケットの速度を生み出す スイング軸は瞬間的な加速が重要です。 1つの腕で両方の役割をこなそうとすると、高価で重くなります。この記事では、役割を分ければどれほど安くシンプルになるかを数値で検証します。
2. ボールがもたらす時間:相手が打ってから1秒以内の出来事
DeepMindデータの初期ボール状態(ラリー13,088件、サーブ2,704件)のうち、ロボット側に向かってくるボール14,703個を簡易物理演算で飛ばしました。 ロボット側の卓で一度バウンドするボールは、係数Aで11,723個、係数Bで10,431個でした(サーブは最初のバウンドが相手側にあるため大半が除外されます)。
| 項目(5 / 50 / 95パーセンタイル) | 係数A | 係数B |
|---|---|---|
| 相手の打撃から自側の最初のバウンドまで | 0.317 / 0.450 / 0.621 s | 0.323 / 0.462 / 0.629 s |
| 頂点の高さ(卓の上) | 0.214 / 0.309 / 0.457 m | 0.234 / 0.337 / 0.498 m |
| 打撃面(エンドラインの23 cm後ろ、y = −1.6 m)への到達 | 0.537 / 0.726 / 1.003 s | 0.528 / 0.721 / 1.011 s |
| 打撃面でのボールの速さ | 2.15 / 2.86 / 3.83 m/s | 2.09 / 2.84 / 3.93 m/s |
ボールは思ったよりもゆっくり到着します。バウンドと空気抵抗が速度を削るためです。一方でショートボールが多く、打撃面を後ろに下げるほど、2回目のバウンド前に打てるボールが減ります。
| 打撃面 | 打てるボール(係数A) | (係数B) |
|---|---|---|
| エンドライン y = −1.37 m | 89.7% | 93.0% |
| y = −1.6 m | 76.8% | 85.6% |
| y = −1.9 m | 49.1% | 68.6% |
3. 位置軸は思ったより遅くてもよい
各ボールに対し、ロボットがホームポジション(x = 0、高さ0.25 m)から出発し、「決定時刻」以降にのみ動き出し、各軸が台形速度プロファイルに従って移動すると仮定しました。 ラケットの半径7.5 cm分は少なく移動しても当たると見なしました。決定時刻は、カメラの遅延と予測が確定する時間を合わせた値です。
| 軸仕様(最高速度・加速度) | 決定 0.1 s | 決定 0.2 s | 決定 0.3 s |
|---|---|---|---|
| 1.5 m/s・10 m/s² | 92.0–92.5% | 81.0–82.3% | 65.4–67.0% |
| 2 m/s・20 m/s² | 99.0–99.2% | 95.3–95.6% | 85.0–86.0% |
| 3 m/s・20 m/s² | 99.8–99.9% | 97.7–98.3% | 89.3–89.9% |
| 3 m/s・40 m/s² | 100% | 99.5–99.7% | 96.2–96.9% |
| 5 m/s・40 m/s² | 100% | 99.8% | 97.7–98.3% |
(範囲は係数BとAの値です。打撃面 y = −1.6 m に到達するボールA 9,025個、B 8,930個を基準とし、水平と高さの2軸がともに間に合う場合を成功としてカウントします。)
決定が0.1 s遅れるごとに、同じ割合を維持するために必要な軸の仕様が大きく跳ね上がります。決定 0.2 sにおいて、ボールの半分は水平軸が3.7 m/s²だけでも済みますが、 95%をカバーするには14.4 m/s²、その時の最高速度2.92 m/sが必要でした(係数A)。 カメラの遅延を減らすことにお金をかける方が、モーターを大きくするよりも安上がりです。
下の図は、同じ計算を5つのボールでシミュレーションしたものです。図をクリックすると、ボールが飛んでくる間に2つの仕様のキャリッジが0.2 sに出発して打撃位置に向かいます。
図の5つのボールは、seed 0で抽出した600個を同じ簡易物理で飛ばし、水平位置が均等に分散するように選んだものです。最も端の2つのボール(水平方向 −0.74 m、+0.90 m)に対し、 1.5 m/s・10 m/s²のキャリッジは0.79 s、0.90 sに到着してボール(0.74 s、0.81 s)より遅れ、3 m/s・40 m/s²のキャリッジは0.50 s、0.55 sに到着しました。 図用として計算を標準ライブラリに移行しましたが、600個のサンプルの到達割合(決定 0.2 sで82.7%、95.2%、99.2%)は元の計算と1%pの誤差以内で一致しました。図は水平軸のみを描画しています。
4. 打つ軸:低価格なオープンソースアームはなぜ遅いのか
ラケット法線方向の1次元衝突として考えると、ボールの出射速度は v_out = e·v_in + (1+e)·v_r です。入ってくるボールの中央値を2.8 m/sとし、
ラケットの反発係数eを0.6~0.85と仮定した場合(推定)、必要なラケット速度は次のようになります。
| 目標のボール速度 | e = 0.85 | e = 0.6 |
|---|---|---|
| 5 m/s(研究用空気圧アームの一般的な返球) | 1.4 m/s | 2.1 m/s |
| 8 m/s | 3.0 m/s | 3.9 m/s |
| 12 m/s(同アームのスマッシュ) | 5.2 m/s | 6.4 m/s |
返球にはラケット1.5~4 m/s、スマッシュには5~7 m/sを設定しました。これをアームの先端速度に換算すると、低価格なアームでは不足します。
- SO-101: サーボSTS3215の無負荷速度は12 V版が45 rpm、7.4 V版が52 rpmです。可動範囲とラケットを考慮して換算すると、ラケット先端の上限は2.6~3.0 m/s、負荷がかかると約1.7 m/sになります(推定)。
- PAROL6、AR4(ステッパーアーム): 1 m/s未満です(推定)。AR4は再販売を禁止する独自のライセンスでもあります。
- OpenArm 2.0: 仕様上は十分ですが(定格速度で約7.9 m/s、推定)、両腕で6,500ドルであり、卓の幅をカバーするにはどうせ別途レールが必要です。
逆にスイング軸1つを長さ0.30 mのアームで作る場合、ラケットの1.5~7 m/sは角速度5~23 rad/s(48~220 rpm)に相当します。ブラシレスモーターを直駆動するか1:4に減速すれば容易に達成できます。
5. 構造:ベルトレール+スイング軸
| 軸 | 段階 | 動き | モーター / コントローラー | 目標 |
|---|---|---|---|---|
| X 横レール | 1 | 直線、ストローク 1.7~1.8 m(レール 2.2~2.4 m) | ODrive D6374 150KV / moteus-n1、HTD5Mスチール芯ベルト | 3 m/s、30~40 m/s²、移動質量 2 kg以下 |
| S スイング | 1 | 水平軸に平行な軸を中心に回転し、アーム 0.25~0.30 mが円弧を描く | mjbots mj5208 / moteus r4.11、1:4 ベルト | ラケット先端 1.5~7 m/s、±120° |
| Y 奥行き(または Z 高さ) | 2 | 直線、ストローク 0.4~0.6 m | D6374 / moteus-n1 | 2~3 m/s、20~30 m/s² |
| 手首の2軸 | 3 | ラケット面の向き | mj5208 / moteus-c1 | ±45–60° |
第1段階のスイングアームは円弧を描くため、タイミングさえ合わせれば高さ(卓上 0.03~0.53 m)と奥行きを同時にカバーでき、ラケットの速度もこの軸が発揮します。 DeepMindロボット(6軸産業用アーム+2軸レール)から「肩の1つ」だけを残したような形です。第2段階の軸で奥行きを先に見る理由は、第2節の表にあります。打撃面を23 cm後ろに下げるだけで、打てるボールが7~13%p減少しました。
軸のサイズも計算しました(回転子の慣性は推定)。
- 水平軸: 移動質量 2 kg、加速度 40 m/s²、摩擦 20 Nの場合、必要な力は 100 N、回転子の慣性を加えると約 110 Nとなります。20Tプーリー(半径 15.9 mm)とD6374により、 トルク 1.75 Nm、電流約 32 Aが必要となり、ピーク 4.96 Nmの 35%となります。同じ作業にmj5208(ピーク 1.7 Nm)では不足します。
- スイング軸: ラケットとアームの慣性を約 0.02 kg·m²とすると(推定)、0.1 s以内に 20 rad/sに到達するには 4 Nmが必要です。mj5208に1:4の減速を組み合わせるとピーク 6.8 Nmとなります。
6. moteusに統一した理由
| コントローラー | 連続 / ピーク電流 | 通信 | ハードウェア / ファームウェアライセンス | 価格 |
|---|---|---|---|---|
| moteus r4.11 | ファンレス 12 A、冷却時 32 A / 100 A | CAN-FD | Apache-2.0 / Apache-2.0 | 94ドル |
| moteus-n1 | 9 A、26 A / 100 A | CAN-FD、RS422 | Apache-2.0 / Apache-2.0 | 149ドル |
| moteus-c1 | 5 A、14 A / 20 A | CAN-FD | Apache-2.0 / Apache-2.0 | 69ドル |
| ODrive S1 / Pro | 20~40 A / 80~100 A | CAN 2.0B | 非公開 / 非公開 | 149 / 229ドル |
| SimpleFOC Mini | 最大 8 A | なし | MIT / MIT | 12ユーロ、品切れ |
- ハードウェアとファームウェアの両方が公開されており、現在も更新されています。 調査時点でmoteusリポジトリの最後のプッシュは2026-09-27でした。ODriveはv3.6から、Tinymovrはv3.1から設計が非公開になりました。 同様のことが起きた場合、私たちの設計を他者が再現できなくなってしまいます。
- 1つのCAN-FDバスですべての軸をまとめます。 位置制限、電流制限、ウォッチドッグなどの安全設定が1つの体系にまとめられます。
- SimpleFOCは低電流のリスト(手首)や教育用には適していますが、水平軸の電流(30–50 A)には合いません。
7. 目:カメラのfpsと遅延
現在の卓球スコアボード機能で使用しているカメラは30 fpsです。ロボットの目としては不足しています。
- 3 m/sのボールは1フレームで10 cm、8 m/sのボールは27 cm移動します。
- USB3カメラが3〜4枚のフレームをバッファに保持している場合、30 fpsでは100〜133 ms遅れます(カメラメーカーのFAQ基準)。これだけで0.2 sの意思決定予算の半分を超えます。 同じ3〜4枚が200 fpsであれば15〜20 msになります(計算)。
- 打点の3次元位置と回転を見るには、同期されたカメラが2台以上(ステレオ)必要です。DeepMindは125 Hzのカメラを2台使用しました。
| カメラ | センサー | 最大fps | インターフェース | 価格 |
|---|---|---|---|---|
| Basler dart daA720-520uc | IMX287 | 523(720×540) | USB3 | 245ドル |
| FLIR BFS-U3-04S2M-CS | IMX287 | 522 | USB3 | 541.50ドル |
| OAK-D S2(ステレオ一体型) | OV9282 | 255(400p) | USB | 329ドル |
| Raspberry Pi Global Shutter | IMX296 | 60 | CSI | 50ドル |
第1段階以降は、Basler dartを2台、200–250 fpsで使用することをお勧めします。2台をハードウェアトリガーで同期できるかどうかはまだ確認できていません(未確認)。 全体の遅延(写真からモーター指令まで)の目標は50 ms以下とし、打撃時刻の誤差は±10 ms程度に設定しました(ボール 3 m/s × 10 ms = 3 cm、ラケットの半径より小さい、推定)。
8. 費用(推定含む)
| 区分 | 内容 | 金額 |
|---|---|---|
| 駆動(公式価格) | D6374 119、moteus-n1 149、mj5208 74、moteus r4.11 94、CAN-FDアダプター 39ドル | 475ドル |
| カメラ(公式価格) | Basler dart 2台 | 490ドル |
| 機構(推定) | リニアレール、フレーム、ベルト・プーリー、キャリッジ・スイングアーム、ラケット | 410–1,150ドル |
| 電源・安全(推定) | 36–44 V電源と回生対策、非常停止・コンタクタ・リミットスイッチ、保護ネット | 300–750ドル |
| レンズ・ケーブル・三脚(推定) | 130–300ドル | |
| ボール発射機とボール(推定) | オープンソース設計AIMY 1台、練習球100個 | 530–960ドル |
| 第1段階合計 | 約2,300–4,100ドル | |
| 第2・3段階の追加(推定含む) | 奥行き軸、手首2軸 | 900–1,600ドル |
| 全体 | 約3,200–5,800ドル |
カメラを低価格なUSB2カメラ2台に変更すると350–450ドル、発射機の代わりに人が手で投げると500–900ドル削減できます。比較として、OpenArmの両腕だけで6,500ドルです。
9. 第1段階の試作仕様
- 水平レール1軸:ストローク1.7–1.8 m、3 m/s、30–40 m/s²、移動質量2 kg以下
- スイング1軸:アーム0.25–0.30 m、ラケット先端最大5 m/s、回転軸は卓上面上約0.25–0.30 m、先端の真上
- 目:グローバルシャッター200 fps以上のステレオ、意思決定時刻0.2 s以下
- ボール:オープンソース設計の発射機(AIMY)で速度3–8 m/s、弱い回転から
- 合格基準:発射機の設定ごとに100球打って接触80%以上、相手コートへの返球50%以上。この目標値にはまだ根拠がありません。結果は、研究用空気圧アームの返球率(75–77%)と並べて記載します。
- 安全:2 kgのキャリッジが3 m/sで移動する場合、運動エネルギーは9 Jです。調査したコントローラーの中で公認STO(Safe Torque Off)を謳った製品はなかったため、非常停止は外部回路(キノコ型ボタン → DCコンタクタ)に任せ、 コントローラーの位置・電流・速度制限とウォッチドッグを二重にかけます。人間は保護ネットの背後にいます。
10. ライセンス:NCを付けない理由
TT Labは営利目的のないプロジェクトですが、私たちが公開する成果物には非営利条項(NC)を付けません。オープンソースハードウェア協会(OSHWA)の定義1.0は 用途による差別を禁止し(第8条)、その例としてビジネスでの使用を妨げてはならないと定めています。NCを付けるとオープンハードウェアとして認められません。 「私たちが非営利」であるという事実は、他人のNC素材を使ってもよいという意味でああり、私たちの成果物をNCでロックするという意味ではありません。
| 成果物 | ライセンス | 理由 |
|---|---|---|
| メカCAD(編集可能なオリジナル)、回路図、PCB | CERN-OHL-S-2.0 | 強い互恵性により、改良版も公開されるようにします。OpenArmも同じ選択をしています。 |
| ファームウェア、制御、ビジョンコード | Apache-2.0 | moteusやDeepMindの公開コードと同じであり、組み合わせやすいためです。 |
| ドキュメント、写真、測定データ | CC BY-SA 4.0 | ハードウェアのS(互恵性)に合わせます。 |
流用する素材の義務も一緒に負います。発射機AIMYのCADとコードはBSD-3(著作権表示の維持)、AIMYの回転軌跡データはDL-DE-BY-2.0(出所の表示)、 DeepMindのボール状態はCC BY 4.0(出所の表示)です。ライセンスのない公開リポジトリは、ファイルをコピーせずアイデアのみ参考にします。
この文章で使用したデータの出所表示。 第2〜3節の計算は、Google DeepMindの competitive_robot_table_tennis リポジトリに公開された初期ボール状態(rallies.json、serves.json、© 2025 Google LLC)を 入力として使用しました。このデータはCC BY 4.0、同リポジトリのコードはApache-2.0です。私たちはロボット側に向かってくるボール(vel_y < 0)のみを抽出し、簡易物理で飛ばしました。 データ自体は再配布せず、計算結果のみを掲載しています。
11. 限界
- 第2〜3節は簡易物理です。抗力、マグナス効果、テーブルの反発と摩擦がすべて仮定であるため、係数を2パターンで計算して範囲として記載しました。 第2部のMuJoCo測定で再確認する予定です。
- 結果はサーブを除いたラリーのボールが中心であり、DeepMindのデータは初心者から上級者までの人間が打ったボールです。プロ選手のスマッシュの分布は含まれていません。
- ラケットの反発係数、モーターの回転子慣性、レール・フレーム・電源の価格は推定です。カメラ2台の同期、CAN-FD多軸ループの実効周期、カメラからモーターまでの実効遅延は確認できていません。
12. 次回予告
次のステップは、この構成をまずMuJoCo内に構築することです。レールとスイング軸をボールモデルに組み込み、アーム長、回転軸の高さ、第2段階の軸(奥行き対高さ)をシミュレーターで決定します。 ロボットアームの座標系や逆運動学などの基礎は、「卓球ロボットアームの基礎」シリーズ(目次)で併せて取り上げます。 シリーズの次の記事である 第4部は一時的に卓球を離れ、同じアプローチでPX4ドローンをポッドから飛ばした実験について扱います。
ティティの一言。 足は早く動き出せば遅くてもいいし、腕は短く素早く振ればいいんだよ。ロボットもそのように役割分担させれば、高価な腕を1つ使うより安く作れるよ。その代わり、目は速くなければならないね!
参考
すべてのリンクは2026-10-18にアクセスして開くことを確認しました。販売サイトの1つが自動アクセスをブロックしているため今回は再取得できず、その価格は同日の調査資料の値です。
- DeepMind公開データ: https://github.com/google-deepmind/competitive_robot_table_tennis(初期ボール状態 CC BY 4.0、コード Apache-2.0)、論文: https://arxiv.org/abs/2408.03906, https://arxiv.org/abs/2309.03315
- 空気圧人工筋肉アーム(返球率・スマッシュ速度): https://arxiv.org/abs/2006.05935、PAMY2設計: https://github.com/intelligent-soft-robots/pamy2
- 軽量5自由度アーム: https://arxiv.org/abs/2505.01617
- ボール発射機AIMY: https://arxiv.org/abs/2210.06048、CAD: https://github.com/intelligent-soft-robots/ball_launcher_hardware
- moteus: https://github.com/mjbots/moteus, https://mjbots.com/products/moteus-r4-11, https://mjbots.com/products/mj5208
- SO-101: https://github.com/TheRobotStudio/SO-ARM100、OpenArm 2.0モーター: https://docs.openarm.dev/hardware/openarm-2.0/motor
- カメラ:Basler daA720-520uc https://www.baslerweb.com/en-us/shop/daa720-520uc-cs-mount/(今回の確認時は自動アクセス遮断)、カメラ遅延FAQ https://support.stereolabs.com/hc/en-us/articles/206918319-What-is-the-latency-of-the-ZED-camera
- ライセンス:OSHWA オープンソースハードウェア定義 1.0 https://www.oshwa.org/definition/、CERN-OHL v2 https://cern-ohl.web.cern.ch/、CC BY 4.0 https://creativecommons.org/licenses/by/4.0/