輪投げ プロトタイプ手順

Pro Micro + MPU6050 + 1ボタンの輪投げデバイスで、データ収集 → 学習 → Pro Micro 推論まで通すための作業メモです。 Web Serial を使うため、収集ページは Chrome または Edge で localhost または HTTPS から開きます。

手順メモ Pro Micro Web Serial Python

0. 構成ファイル

データ収集ページ ringtoss-collect.html
軌跡プレビュー ringtoss-trajectory.html
収集ファーム prototypes/ringtoss_data_collector/ringtoss_data_collector.ino
学習スクリプト tools/ringtoss_train.py
推論ファーム prototypes/ringtoss_inference/ringtoss_inference.ino
推論係数ヘッダ prototypes/ringtoss_inference/ringtoss_model_coefficients.h

1. データ収集ファームを書き込む

Arduino IDE で prototypes/ringtoss_data_collector/ringtoss_data_collector.ino を開き、Pro Micro に書き込みます。

必要ライブラリ

  • MPU6050_tockn
  • Wire(Arduino IDE 標準)

主な設定値

サンプリングレートSAMPLE_RATE_HZ = 100
baseline 区間BASELINE_MS = 500
ボタン入力D5(押している間だけ1投として記録)
シリアル115200 bps

シリアル出力フォーマット

1ボタンを押している間、次の形式で送信します。

READY,mode=one_button_gyro,rate=<rate_hz>,baseline_ms=<baseline_ms>
BEGIN,<trial>,<rate_hz>,<baseline_ms>
S,<trial>,<seq>,<t_ms>,<phase>,<gx>,<gy>,<gz>
BASE,<trial>,<samples>,<gx0>,<gy0>,<gz0>
END,<trial>,<samples>,<duration_ms>,<reason>

最初の BASELINE_MS はボタンを押したまま手前に引く区間です。この区間のジャイロ平均を基準として、以後の throw 区間から差し引きます。

2. Web 収集ページで CSV を作る

Chrome または Edge で ringtoss-collect.html を開きます。 Web Serial API は file:// では動かないため、localhost または HTTPS から開くのが安定します。

ローカルで開く例

リポジトリのルートで簡易 HTTP サーバを起動します。

python3 -m http.server 8765 --bind 127.0.0.1

ブラウザで次を開きます。

http://127.0.0.1:8765/ringtoss-collect.html

操作

  • 1

    シリアル接続

    「シリアル接続」ボタンを押し、Pro Micro を選びます。
    接続
  • 2

    収集開始

    「収集開始」を押すと、画面の 3×3 グリッドのいずれかが光ります。
    開始
  • 3

    1投する

    ボタンを押し込み、手前に引いてから、的に向けて前へ振ります。振り終わったらボタンを離します。
    1投
  • 4

    次の的

    1投を終えると次の的が自動で光ります。十分集まったら「CSV保存」でファイルを書き出します。
    保存

注意

  • ボタンは「投げる瞬間で離す」ではなく、振り終わるまで握り続けて離します。
  • リリース点はジャイロ3軸ベクトル絶対値 sqrt(gx²+gy²+gz²) のピークで自動判定します。
  • デバイスは実際には投げません。手首ストラップ推奨。
  • 最終形の輪っかデバイスでセンサーの向き・持ち方が変わる場合は、必ず最終形で取り直します。

3. 学習する

CSV を保存したら、tools/ringtoss_train.py で特徴量抽出と線形モデル学習を行います。 9 マス分類モデルと、初速ベクトル vx, vy, vz, strength の回帰モデルを同時に学習します。 外部ライブラリ不要、Python 3 のみで動きます。

実行例

python3 tools/ringtoss_train.py path/to/ringtoss-session.csv \
    --header prototypes/ringtoss_inference/ringtoss_model_coefficients.h \
    --summary ringtoss_model.summary.json \
    --web-model ringtoss_model.web.json

出力

ringtoss_model_coefficients.h Pro Micro 推論用の係数ヘッダ。prototypes/ringtoss_inference/ に上書きする。
ringtoss_model.summary.json 訓練精度・特徴量名・係数の要約。
ringtoss_model.web.json 軌跡プレビューページが読み込む Web 用モデル。

特徴量

1 投あたり 20 個の特徴量を作ります。

duration_s, sample_count_scaled,
release_t_s, release_ratio, peak_gyro,
peak_gx, peak_gy, peak_gz,
mean_gx, mean_gy, mean_gz,
int_gx, int_gy, int_gz,
max_gx, max_gy, max_gz,
min_gx, min_gy, min_gz

4. 軌跡を確認する

ringtoss-trajectory.html を開き、 学習で出力された ringtoss_model.web.json と、収集に使った CSV を読み込みます。

画面右の TARGET で的を選ぶと、その的として記録された全投について、 モデルが予測した vx, vy, vz, strength から疑似軌跡を重ねて表示します。

色の意味

オレンジ予測が選択中の的と一致した投
グレー選択中の的として記録されたが、モデル予測が別の的にズレた投
モデル未読込時のガイド表示

5. 推論ファームを書き込む

Arduino IDE で prototypes/ringtoss_inference/ringtoss_inference.ino を開き、Pro Micro に書き込みます。 ringtoss_model_coefficients.h が同じディレクトリにある状態で書き込んでください。

推論時の出力

RING,<vx>,<vy>,<vz>,<strength>,<class_id>,<samples>
vx, vy, vz輪の初速ベクトル
strength強さ
class_id3×3 マスの推定値。左上から右下へ 0..8
samplesその投で使った時系列サンプル数

6. 運用メモ・データ収集の目安

  • 最初の疎通確認は、各マス 2〜3 投・合計 18〜27 投で十分。
  • 1 人で学習傾向を見るなら、各マス 10 投・合計 90 投を目安。
  • Phase 1 以降は、各マスにつき最低 20 投以上、複数人で集める。
  • 最終形の輪っかデバイスでセンサー向きが変わる場合は、必ず最終形で取り直す。
  • 初速ベクトル vx, vy は、現状は正解ラベル位置から作った理想値を学習している。物理軌跡の実測を反映する場合は tools/ringtoss_train.py の正解値の作り方を見直す。
データ収集ページを開く 軌跡プレビューを開く 輪投げトップへ戻る