Control
Homing の状態機械 (速度が主信号、電流は確認)
「動き始めの電流」と「壁に当たった電流」は電流だけでは区別できない。速度と時間で切り分ける
要点: 動き始めの慣性 breakaway と「初期位置が壁」は電流だけでは区別できない。速度が立ち上がるかどうかを主信号にして、電流は「本当に押し当ててる」の 2 度目の確認として使う。soft-start で加速電流ピークを潰す。
なぜ電流だけでは足りないか
| 状態 | 電流 | 速度 |
|---|---|---|
| 起動 (加速中) | 高い (慣性 + 静止摩擦の breakaway) | 0 → 上がる |
| 初期位置が limit | 高い (壁を押している) | 0 のまま |
電流の時系列形状は同じ。区別できるのは「その後 速度が立ち上がるかどうか」だけ。
6 相の状態機械
VELOCITY 指令ベース (RoboMaster MD の DUTY = 電流指令だと壁到達で電流スパイクが出ないため、初期の DUTY 版から 2026-09 に切替 [[current-based-endstop-detection]])。
S0 BASELINE - OFF 50〜150 ms で offset, σ_off, v_min を測定
S1 SOFT_START - velocity 0 → velocity_home に 200 ms で ramp。current 無視
S2 MOVE_GATE - ramp 完了 + start_gate_ms 監視
|v| > v_min が v_min_hold_ms 連続 → S3
timeout → LIMIT_AT_START (初期位置が壁)
S3 CRUISE - move_baseline_ms 間、I_move / σ_move を実測
S4 WATCH - 20 ms 毎に (|v| < v_min かつ I > I_move + k·σ_move) 検査
成立 → LIMIT_HIT / timeout → FAULT
S5 BACKOFF - -velocity_home × 0.5 で逆方向、position 差分 ≥ backoff で停止
DONE - この位置を原点として登録3 つの仕掛け
① Soft-start: velocity = 0 → velocity_home を 200 ms で ramp。inrush current を潰す。これだけで加速中の電流ピークが下がり、stall 電流との差 (SNR) が上がる。
② 速度で「動いた」を判定: |v| > v_min が 50〜100 ms 連続で「動いてる」。v_min は encoder 分解能 + ノイズより十分上に設定 (自動導出は 3·σ_v_off 床値 0.05 rad/s)。
③ 初期位置 limit と加速中を、時間で切り分け: soft-start 完了 + 追加 100 ms 待って、まだ |v| ≈ 0 なら「初期位置が limit」と判定。加速中なら 200 ms もあれば必ず動き始める。動かないのは物理的に動けないから。
「初期位置 limit」からの確認
S_LIMIT_AT_START に落ちたら、逆方向に低 duty で 300 ms 戻す:
- 戻る間に
|v| > v_minを観測できたら「本当に limit にいた」→ その位置を limit として採用 - 戻っても動かなければ「機構ジャム or 配線切れ」→ fault (押しっぱなしは焼く)
パラメータの床値・目安
| Param | 目安 | 決め方 |
|---|---|---|
v_min | 0.05〜0.2 rad/s | max(3·σ_v_off, 0.05) を毎回自動計算 |
v_min_hold_ms | 50 ms | 短くすると誤検出、長すぎると遅延 |
ramp_time_ms | 200 ms | 慣性大 (アーム先端) は 400、軽量 (ピッカ) は 100 |
start_gate_ms | 100 ms | soft-start 後の加速完了待ち |
k_current_margin | 3.0 | I_move + k·σ_move の閾値係数、3σ で誤検出 0.3% |
timeout_ms | stroke / min_speed × 3 | 正常所要時間の 3 倍が上限 |
電流は主信号にしない
- 主信号は速度: 「今動いているか、詰まったか」の 2 値判定
- 電流は 2 段目: 「止まった」に加えて「本当に押し当ててる」の確認
- 電流だけを主にすると、加速電流スパイクを stall と誤検知する
関連
- Homing 用パラメータ校正 — この state machine が使う数字の準備
- 電流ベースの homing — 検出アルゴリズム
- 電流センサの零点校正 — feedback を clean にする前提
最終更新: