物理応答律速 vs ソフトウェア律速

振幅 vs 完了時間
設計の失敗
視覚サーボ設計

振幅(°)ごとの動作完了時間 — SPEED=20, j0, 5試行平均

振幅が大きいほど完了時間が長くなる。振幅 10° で約 500ms(2Hz 相当)。 ソフトウェアは 91Hz で命令を送れるが、アームが 1 サイクル完了するまで 47 回分の命令が積み上がる。 外れ値(amp=30 trial 2: 2436ms、amp=45 trial 3: 187ms)は pymycobot の確率的挙動によるもの。

最初の設計 制御ループ中に 10回に1回 get_angles を呼ぶ
↓
発見した欠陥 1 get_angles がシリアルバスをブロック → ループが 100〜700ms 停止
↓
発見した欠陥 2 i % 10 == 0 は常に偶数 → target=HOME のときしか計測されない
↓
発見した欠陥 3 pymycobot が稀に 180° の異常値を返す → tracking_rate を歪める
↓
結論 「wait_ms の影響」ではなく「get_angles の遅延」を測っていた。
設計を破棄して is_moving() ベースに切り替えた。

測定行為が測定対象を変える問題は、シリアル通信が 1 本しかない環境で特に発生しやすい。 「制御」と「計測」を同一バスで同時に行う設計は根本的に分離できない。

層 数値 測定方法 意味
ソフトウェア律速 91 Hz set_fresh_mode ベンチ 命令を送れる速度の上限
物理応答律速(10°) 2 Hz is_moving() 計測 アームが動ける速度の上限
差 45 倍 — ソフトが速すぎて物理が追えない

視覚サーボ実用周期の設計式

実用周期 = max( 制御ループ最低周期, 動作完了時間 )
     = max( 11ms, 519ms ) ← 振幅 10° の場合
     = 519ms ≈ 2 Hz

次の設計課題は「何 Hz で送るか」ではなく「1 ループあたりの移動量(振幅)をどう制御するか」。 振幅を小さく保てば、より高頻度なループが組める。