01
制御周期
実測値
02
二重律速
の構造
03
発見した
バグ 3件
01 制御周期実測値 — Pi完結版 vs Mac経由版
物理限界 ~10Hz
Stage 1 · j5 ±2° × 10 · Pi 71.28 Hz
Stage 1 · j5 ±2° × 10 · Mac 72.92 Hz
Stage 2 · j5 ±2° × 100 · Pi 83.66 Hz
Stage 2 · j5 ±2° × 100 · Mac 76.18 Hz
Stage 3 · j0 ±2° × 100 · Pi ★最大値 91.51 Hz
Stage 3 · j0 ±2° × 100 · Mac 76.19 Hz
Stage 4 · j0 ±5° × 100 · Pi 83.10 Hz
Stage 4 · j0 ±5° × 100 · Mac 76.61 Hz
Pi完結版
Mac経由版
物理限界 ~10Hz
02 二重律速の構造 — ソフトとハードは別の限界を持つ
SOFTWARE LIMIT / ソフトウェア律速
70〜91 Hz
pymycobot 2.9.6 + set_fresh_mode(1) によるシリアル送信の実測上限。
Pi完結版: 最大91.51 Hz / Mac経由版: 最大76.61 Hz
期待値「5〜10 Hz」の約10倍。
↓ 指令は届いている。しかしアームが追いつけない。
PHYSICAL LIMIT / 物理応答律速
5〜10 Hz 以下
j0に91Hzで100回命令を送ったとき、アームが追従できたのは目視で5〜10回。
「カタカタ」現象はPi完結版でもMac経由版でも同じ。
ネットワーク経路に依存しない純粋な物理限界。

→ 次の実験: wait_msスイープで追従できる最小指令間隔を定量化する
03 実装中に発見したバグ 3件
BUG 01
pymycobot がインポート時に stdout に警告を出力する
from pymycobot.mycobot import MyCobot を実行すると、ライブラリが stderr ではなく stdout にメンテナンス警告を出力する。デーモンの JSON 通信チャネルを汚染し JSONDecodeError が発生した。
FIX: インポート前後で sys.stdout = sys.stderr に一時リダイレクト
BUG 02
SSH 非対話シェルで set_fresh_mode が AttributeError
paramiko の exec_command はデフォルトで非対話シェルを使う。Pi の ~/.bashrc が読まれないため catkin_ws の PYTHONPATH が通らず、set_fresh_mode を持たない古い pymycobot がロードされた。
FIX: exec_command を bash -ic でラップして ~/.bashrc を読ませる
BUG 03
get_angles() が確率的に空配列を返す
pymycobot 2.9.6 では send_angles() 直後に get_angles() を呼ぶと、シリアル通信の応答タイミングで確率的に空配列が返る。毎回必ず起きるわけではなく再現性が低い。
FIX: get_angles() を最大5回リトライ。100ms待機して再取得。