1. はじめに
-
「スキーターンの回転角」をモーター+エンコーダで再現するシミュレーターを製作した記録です。
-
GNSS/IMU 評価で使っている自作データの一部を「リアルタイムで物理的に再生」するのが狙い。
-
実機が回る様子とグラフがシンクロしているので直感的に理解しやすい。
2. ハード構成
-
モーター:ステッピングモーター(200PPR)、TMC2209 ドライバで駆動
-
減速機構:3:1 減速
-
エンコーダ:600PPR → クアドラチャで 2400 カウント/回転
-
制御基板:Teensy 4.1
-
センサー:IMU(I2C接続、DRDY割り込み)
-
配線/I2C対策:ツイストペア、33Ω直列抵抗、プルアップ強化(製作時の工夫ポイント)
3. ソフト構成
-
headMotテーブル:スキーターンの角度データを 120ms スロットで並べたもの
-
エンコーダ追従制御
-
以前は「時間ベースの apply/stop」制御だった
-
今回は「角度→必要カウント換算」で直接エンコーダに追従
-
ENC_PER_TURN = 2400
に修正して初めて正しい角度スケールになった
-
-
ループ処理
-
DRDY 割り込みで IMU と同期
-
enc_follow_headMot()
関数でスロットごとに DIR と周波数を設定 -
角度完了で自動的に次スロットに進む
-
4. トラブルと解決
-
loop が回らない → 初回
dθ=0
問題を修正(スロット n→n+1 差分で計算) -
20°程度で往復 → 800 → 2400 へ修正して解決
-
apply/stop 不要化 → エンコーダ角で自然に完了判定できるよう統合
5. 実験と結果
-
実機でモーターを回転 → グラフとほぼ完全に一致
-
動画を撮影し、**「リアルタイムグラフ+モーター軸の動き」**を同時に画面に表示
-
X(Twitter)と YouTube に投稿、数分で 10人以上が視聴
-
「スキーターン回転角シミュレーター」として直感的に伝わる
6. 今後の課題
-
速度変更:speed_scale を導入して倍速・半速シミュレーション
-
IMUとの誤差評価:gZ や yaw との比較をリアルタイムで表示
-
UI改善:グラフに凡例や目標/実測二重プロットを追加
-
長時間安定性:連続回転時の誤差蓄積チェック
7. おわりに
-
「角度データを実機で再現する」ことで、机上シミュレーションでは見えなかった直感的な理解が得られた。
-
コードは Gist に公開 → [リンクをここに記載]
-
興味のある方はぜひビルド&試作してみてください。