---
title: "フィジカルAI研究室を作る Log#20 | ゲームパッドで動いた mechArm 270、遅さは pymycobot の版"
slug: gamepad-moves-mecharm-270-pymycobot-version
date: 2026-11-03
day: 436
meta_description: "ゲームパッドで mechArm 270 を動かすと1回の指令に1.6秒かかった原因は、Pi の daemon が pymycobot 4.0.4 を読んでいたこと。2.9.6 に戻すと送信は約0.02秒、長押しで毎秒約8°動くようになった。"
tags: [フィジカルAI研究室, mechArm 270, ゲームパッド, テレオペレーション, pymycobot, daemon, jog, 人の補正, Claude Code]
series: "フィジカルAI研究室"
---

市販のゲームパッドで小型ロボットアーム mechArm 270 を実機で動かしたところ、1回の指令ごとに約1.6秒待たされていた原因は、アームの中の Raspberry Pi で動く制御の受け口（daemon）が、使うはずの制御ライブラリ pymycobot 2.9.6 ではなく 4.0.4 を読んでいたことでした。**pymycobot 4.0.4 は、指令を送るたびにアームからの返事を0.5秒ずつ3回待ち、同じ指令を3回書いてから −1 を返していました。** 2.9.6 に戻すと1回の送信は約0.02秒になり、十字キーを押し続ければ関節が毎秒約8°で動き続けるようになりました。

この回でやったことで、次のことが変わります。

- 良くなること：十字キーを押し続けると、関節が止まらずに動き続ける。長押しの速さは、直す前の毎秒1.0°から、毎秒約8°（中央の値。実機の記録 14 回の長押しから）になった。1回押して1.6秒待つことはなくなった
- もたらされること：10月30日の夜に daemon を自動で起動する形にしてから、このアームを使うスクリプトはすべて、1回の送信に約1.6秒かかっていた。AI（Physical Intelligence の π0.5）の推論も同じ daemon を通るので、次の推論から送る待ちが短くなる見込み。推論で実際にどれだけ縮むかは、次の実機の推論で測る
- 時間・費用：遅さに気づいてから daemon を直すまで約6分（7:51 に長押しが動かないと気づき、7:57 に直った daemon で動いた）。直したのは起動スクリプトの1行。GPU は使っていないので費用は0円

【動画】LOG436_02_hold_ahead.mp4 十字キーの長押しで mechArm 270 の関節を動かしているところ。読んだ角度から3°先の目標を0.1秒おきに送る形で、関節は止まらずに動くが、ところどころで速さがゆれる

前の回（LOG419）では、ゲームパッドで関節を動かすスクリプトを、アームに指令を送らない試しまで作りました。同じシリーズの Log#18（LOG422）では、AI の推論の途中で手首の関節が垂れたまま戻らなくなり、実機を止めていました。今回は手首の点検から始め、ゲームパッドで初めて実物のアームを動かしました。動かしてみると、決めた範囲が狭すぎる、0.5°の押しでは関節が動かない、押すたびに長く待たされる、長押しがぎこちない、と困りごとが順に出てきて、その場で1つずつ直しています。

| 段階 | やったこと | 結果 |
|---|---|---|
| 手首を点検する | 6つのサーボの力・角度・電圧・温度を、アームを動かさずに読んだ | 手首 j4 にも力が入っていた。あとでゲームパッドで動かすと、0°から −10°まで指令どおりに動いた |
| ゲームパッドで初めて実機を動かす | 根元・肩・ひじ・手首・爪・停止・HOME を一通り押した | 動いた。ただ、起動した姿勢から各関節 ±10° の枠では、HOME からブロックの上まで運べなかった |
| 範囲を広げ、長押しを足す | 枠をやめてアーム本体の可動域にし、十字キーの長押しで送り続ける形にした | 別の Claude にコードを読んでもらい、直すべき点1つと推奨5つのうち4つを直した |
| 長押しが動かない理由を調べる | 記録を見ると、1回送るたびに約1.6秒かかっていた | Pi の daemon が pymycobot 4.0.4 を読んでいた。起動スクリプトで 2.9.6 を読むように直した |
| 刻みと送り直し | 0.5°の押しは半分以上で関節が動かなかった。無視された指令で8秒止まった | 1押しを1°にし、動いていなければ同じ指令を送り直す形にした |
| 長押しをなめらかにする | 刻みごとに着いて止まっていたので、読んだ角度から3°先を0.1秒おきに送る形にした | 止まらずには動くが、なめらかにはならなかった。角度の読み取りが続けて失敗し、13秒止まった場面もあった |
| 限界を測る準備 | 今の形をタグで残し、jog（押している間だけ動き続けるアームの命令）を測る試しを作った | 実機では、次の回で測る |

ゲームパッドで直す練習を重ねる前に、mechArm 270 でどこまでなめらかに動かせるのかを数字で知りたい、というのが次の課題です。

GPU を買うか借りるかの判断は、Runpod で実際に借りて学習させた費用をもとに、別のページにまとめています。

【バナー】gpu-buy-or-rent


## 作業ログ ― 手首の点検から、ゲームパッドの実機と daemon の pymycobot の版まで

この回の数字は、すべて実機の記録（KIOXIA の `runs/experiments/gamepad_teleop/` の log.jsonl 5本と、`diag/servo_check_20261103_071326/`）から数えたものです。見込みの数字は、見込みと書いています。

### この回で使う言葉

| 言葉 | 意味 |
|---|---|
| daemon（デーモン） | アームの中の Raspberry Pi で、ずっと動いている受け口のプログラム（`mecharm_daemon.py`）。Mac から送られた指令を受け取り、シリアルでアームへ流す。ゲームパッドのスクリプトも AI の推論も、ここを通ってアームを動かす |
| systemd | Raspberry Pi の電源を入れたときに、決めたプログラムを自動で起動する仕組み。10月30日の夜から daemon はこれで起動している |
| fresh_mode | アームの設定の1つ。1にすると、前の動きが終わるのを待たずに、新しい指令で上書きできる |
| jog | アームの命令の1つ。関節と向きと速さを渡すと、止める命令が来るまで、一定の速さで動き続ける |

### pymycobot は、mechArm を Python から動かすためのライブラリ

[pymycobot](https://github.com/elephantrobotics/pymycobot) は、mechArm 270 を作っている Elephant Robotics が出している Python のライブラリです。関節の角度を送る `send_angles`、角度を読む `get_angles`、爪を動かす命令などが入っています。[PyPI](https://pypi.org/project/pymycobot/) で版ごとに配られていて、同じ名前の命令でも、版によって中の動きが違います。

| この回で出てくる版 | 置き場所（Raspberry Pi） | 送る命令の返り方 |
|---|---|---|
| 2.9.6 | `/usr/local/lib/python2.7/dist-packages`（対話のシェルの `~/.bashrc` で PYTHONPATH に入る） | 書いたらすぐ返る |
| 4.0.4 | Python 3 の標準の置き場所（何も付けずに起動すると読まれる） | アームの返事を0.5秒ずつ3回待ち、来なければ −1 を返す |

このプロジェクトでは、daemon も、点検のスクリプトも、2.9.6 を前提に作ってきました。2.9.6 が対話のシェルでしか読まれず、何も付けずに起動すると 4.0.4 が読まれることは、10月19日のレビュー（`docs/review_request_20261019_record_teach_demo.md`）で分かっていました。


## 11/3 7:05：前回までの状態を確かめた

ゲームパッドのスクリプトの残りを頼んだ依頼69は、前の晩に終わっていました（ドライランは記録しない・起動時の SDL の警告を消す。テスト53件。commit f061d54）。

#### 依頼箱の報告 20261102_69_ゲームパッドのドライランは記録しない・SDLの重複を直す_20261102_1939.md

```markdown
# 結果：20261102_69_ゲームパッドのドライランは記録しない・SDLの重複を直す

- 状態：完了
- 始めた時刻：2026-11-02 19:39
- 終わった時刻：2026-11-02 20:09（30分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume e3ba2c9d-9a7a-49a7-82b0-e461abd73097`

## Claude Code の報告

**やったこと**
- ドライラン（`--execute` なし）は、KIOXIA に何も書かないようにしました。フォルダも作らず、KIOXIA がつながっているかも確かめないので、つながっていなくても動きます。`--execute` のときは今までどおり記録します。
- 変わる表示は2行だけです。始めの行は「[記録] ドライランなので記録しません」、終わりの行は「記録なし（ドライラン）」になります。ほかのターミナルの表示と画面は前と同じです。
- スクリプトの先頭の説明に「L2+R2 は新しい指令を送らないだけで、送った1回分（HOME を含む）は最後まで動く」を書きました。
- SDL が2つ読み込まれる原因が分かりました。
  - 2つ目は opencv（cv2）に入っている `site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib` です。
  - gamepad_teleop.py が先頭で読む `pi05/run_policy_client.py` が `import cv2` をしていました（camera_resolver から cv2_enumerate_cameras も読む）。`j0_sweep_scan.py`・`visual_servo_pick.py`・`pi05/policy_recorder.py` も先頭で cv2 を読みます。
- 直し方：
  - この3つ（run_policy_client・j0_sweep_scan・visual_servo_pick）は、`--execute` のときだけ読むようにしました。
  - ドライランでも要る値（HOME・J4_SAFE・GRIPPER_SLEEP、waypoint_replay.py の可動域）は、元のファイルの書いてある値をそのまま読みます。同じ値を二重に書いてはいません。
  - `--execute` では、読み込んだあとに値が同じかを確かめます。違えば、記録も daemon も触らずに止めます。
  - ほかのスクリプトと Python の環境は変えていません。
- 操作・刻み・守りの値・送り方・停止の作り・十字キー左右の向きは変えていません。実機には流していません。
- codex のレビューは2回通しました。必須の指摘は2回ともなしでした。推奨は1回目に3件、2回目に1件あり、すべて直しました。

**結果**
- テストは53件すべて通りました（前からの46件と、新しく足した7件）。
  - ドライランのテストは「KIOXIA に何も作らない・書かない」を確かめる形に変えました。
  - 新しいテストは、`--execute` では今までどおり書くこと、別のプロセスで起動したドライランに cv2 が入らず警告も出ないこと、値の読み取りと一致を確かめます。
- PS4 コントローラーをつないだ状態で本物のドライランを起動し、objc の警告は0行でした（前は十数行）。
- 画面の描画を前の版と比べたところ、止まっていないときも止まっているときも同じでした。
- KIOXIA の `gamepad_teleop/` の中は `teleop_20261102_192657_dry` だけのままです。消していませんし、動かしてもいません。
- pygame 自身が出す「pkg_resources is deprecated」の警告は残ります。SDL とは別のもので、pygame だけを読む `gamepad_check.py` でも出ます。

**変えたファイル**
- `tools/gamepad_teleop.py`
- `tools/test_gamepad_teleop.py`
- `logs/20261102_2009.md`（作業の記録）
- commit：f061d54（この3つを個別に指定して add しました）

**決めてほしいこと**
- `--execute` のときは cv2 を読むので、SDL の警告は今までどおり出ます（動きには影響ありません）。消すには、Python の環境を変える（opencv か pygame を入れ替える）か、`visual_servo_pick.py` などで cv2 を読むところを変える必要があります。このままにするか、決めてください。
```

手首の点検のスクリプトを頼んだ依頼58は、codex の2回目のレビューを待つ間に時間切れになっていました。Mac の `~/r2r2r-scripts` を見ると、`tools/servo_check.sh`・`tools/pi/servo_check_pi.py` とテストはでき上がっていて、コミットされていないだけでした。2回目のレビューの結果はありません。テストを流すと、シェルの52件と Python の15件はどちらも通りました。

#### tools/test_servo_check.sh の出力

```text
[1] systemd で動いている・読むだけ
  ok   終了コード 0
  ok   console.txt がある
  ok   result.json を持ち帰った
  ok   result.json の move は null (読むだけ)
  ok   6 つのサーボを読んだ
  ok   Pi へ写してから流した
  ok   止めてから流した
  ok   流したあとに戻した
  ok   --read-only を渡した
  ok   PYTHONPATH に 2.9.6 の置き場所
  ok   画面に j4 の力が入っていない
  ok   画面にデーモンが戻った
  ok   2.9.6 で戻れば PYTHONPATH の注意は出ない
  ok   デーモンは動いている
  ok   手で起動していない
[2] 手で起動されている・動かす側で q
  ok   終了コード 0
  ok   pkill で止めた
  ok   対話シェルで戻した
  ok   systemctl は使っていない
  ok   --read-only を渡していない
  ok   支える 1 行が出た
  ok   q で何も送らずに止めた
  ok   result.json に止めた印
[3] デーモンが動いていない
  ok   終了コード 0
  ok   止めていない・起動していない
  ok   動いていないと出した
  ok   デーモンは動いていないまま
[4] Pi のスクリプトが失敗しても戻す
  ok   終了コード 3 を返す
  ok   戻した
  ok   持ち帰れないと出した
[5] デーモンが止まらない
  ok   終了コード 1
  ok   止まらないと出した
  ok   Pi のスクリプトは流していない
[6] 止めたあとも 5555 が開いている・シリアルを別のプロセスが開いている・確かめられない
  ok   listen_stays: 終了コード 1
  ok   listen_stays: 止めた理由を出した
  ok   listen_stays: Pi のスクリプトは流していない
  ok   serial=777: 終了コード 1
  ok   serial=777: 止めた理由を出した
  ok   serial=777: Pi のスクリプトは流していない
  ok   serial=不明: 終了コード 1
  ok   serial=不明: 止めた理由を出した
  ok   serial=不明: Pi のスクリプトは流していない
[7] 戻す前に点検の残りを止める・戻したデーモンが 4.0.4 かもしれない・戻らない
  ok   点検の残りを止めてから戻した
  ok   JSON を持ち帰ってから戻した
  ok   PYTHONPATH の注意を出した
  ok   戻らないと注意を出した
  ok   戻らなくても終了コードは Pi のもの (0)
[8] KIOXIA がない・同じ名前がある・引数が違う
  ok   KIOXIA がないと 1
  ok   KIOXIA がないと Pi に触らない
  ok   同じ名前があると 1
  ok   同じ名前があると Pi に触らない
  ok   知らない引数は 2
OK 52 / NG 0
```

#### test_servo_check_pi.py の出力

```text
test_main_read_only_writes_json (test_servo_check_pi.TestMain) ... ok
test_already_zero_goes_home (test_servo_check_pi.TestMove) ... ok
test_focus_missing_stops (test_servo_check_pi.TestMove) ... ok
test_negative_start (test_servo_check_pi.TestMove) ... ok
test_partial_moves_follow_measured (test_servo_check_pi.TestMove) ... ok
test_q_at_prompt_sends_nothing (test_servo_check_pi.TestMove) ... ok
test_q_during_angle_retries (test_servo_check_pi.TestMove) ... ok
test_q_during_steps_stops_sending (test_servo_check_pi.TestMove) ... ok
test_send_failure_stops (test_servo_check_pi.TestMove) ... ok
test_steps_to_zero_then_home (test_servo_check_pi.TestMove) ... ok
test_stuck_does_not_run_ahead (test_servo_check_pi.TestMove) ... ok
test_exception_is_not_fatal (test_servo_check_pi.TestRead) ... ok
test_legacy_fallback_and_missing (test_servo_check_pi.TestRead) ... ok
test_no_reply_servo (test_servo_check_pi.TestRead) ... ok
test_read_only_sends_nothing (test_servo_check_pi.TestRead) ... ok

----------------------------------------------------------------------
Ran 15 tests in 2.280s

OK
```

アームを動かす部分（手首に力を入れ直して5°ずつ0°へ戻す）はレビューが終わっていないので、まず読むだけの点検（`--read-only`）を流すことにしました。


## 7:13：手首 j4 のサーボを読むだけで点検すると、力が入っていた

1回目は Pi へスクリプトを送る所で接続が切れ、2回目で通りました。

#### KIOXIA の diag/servo_check_20261103_071236/console.txt

```text
servo_check 20261103_071236 (結果: /Volumes/KIOXIA/r2r2r-data/diag/servo_check_20261103_071236)
scp: Connection closed
ABORT: Pi へ送れなかった
```

#### servo_check.sh --read-only を流したターミナルの出力（1〜64行目）

```text
Last login: Mon Nov  2 15:44:30 on ttys003
(base) shimazueiichi@shimadzueiichinoMacBook-Pro ~ % cd ~/r2r2r-scripts
tools/servo_check.sh --read-only
servo_check 20261103_071236 (結果: /Volumes/KIOXIA/r2r2r-data/diag/servo_check_20261103_071236)
scp: Connection closed
ABORT: Pi へ送れなかった
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % cd ~/r2r2r-scripts
tools/servo_check.sh --read-only
servo_check 20261103_071326 (結果: /Volumes/KIOXIA/r2r2r-data/diag/servo_check_20261103_071326)
--- デーモンの状態 (止める前)
mode=systemd
pid=540
listen=yes
daemon_pythonpath=(なし)
serial_users=540
checker=no
--- デーモンの状態 (止めたあと)
mode=none
pid=なし
listen=no
serial_users=(なし)
checker=no
pymycobot 2.9.6 (/usr/local/lib/python2.7/dist-packages/pymycobot/__init__.py)
========================================================================
1. 読むだけの点検 (アームは動かさない)
========================================================================
  get_angles                 [+23.29, +109.77, -62.40, +0.79, -49.30, -30.93]
  get_encoders               [1783, 3297, 1338, 2039, 1487, 2400]
  get_error_information      取れない  (この版に get_error_information がない)
  get_servo_status           [0, 0, 0]
  get_servo_temps            [6425, 5654, 6421]
  get_servo_voltages         [+1901.60, +1901.80, +1876.10]
  get_system_version         [11]
  is_all_servo_enable        1
  is_controller_connected    1
  is_power_on                1
  read_next_error            [0, 0, 0, 0, 0, 0, 0]

  サーボごと (力 1=入っている 0=入っていない -1=エラー / 番地 62・63・65 は Feetech STS 想定・未確認)
      id    力       角度    エンコ     エンコ→°   電圧62   温度63   状態65     電圧     温度     応答
  j0   1    1   +23.29   1783    -23.29     74     25      0 +1901.60   6425     あり
  j1   2    1  +109.77   3297   +109.78     72     26      0 +1901.80   5654     あり
  j2   3    1   -62.40   1338    -62.40     74     22      0 +1876.10   6421     あり
  j3   4    1    +0.79   2039     -0.79     74     22      0   応答なし   応答なし     あり
  j4   5    1   -49.30   1487    -49.31     73     25      0   応答なし   応答なし     あり
  j5   6    1   -30.93   2400    +30.94     73     21      0   応答なし   応答なし     あり

  目安:
    j4 の電圧62 73 / ほかの関節の中央 74
    j4 の温度63 25 / ほかの関節の中央 22
    j4 の角度 -49.30 / エンコーダからの角度 -49.31 (差 0.0°。2048=0°・向きは仮定。同じセンサーの読みどうし)
結果: /tmp/servo_check_20261103_071326.json
Connection to 192.168.2.1 closed.
--- servo_check_pi.py の終了コード: 0
結果の JSON: /Volumes/KIOXIA/r2r2r-data/diag/servo_check_20261103_071326/result.json
--- デーモンを戻す (systemctl start)
mode=systemd
pid=31095
listen=yes
daemon_pythonpath=(なし)
serial_users=31095
checker=no
デーモンは戻った (5555 LISTEN)
注意: デーモンの PYTHONPATH に python2.7 がない (pymycobot 4.0.4 を読んでいるかもしれない)
```

#### KIOXIA の diag/servo_check_20261103_071326/result.json

```json
{
 "read": {
  "global": {
   "is_power_on": 1,
   "is_controller_connected": 1,
   "is_all_servo_enable": 1,
   "read_next_error": [
    0,
    0,
    0,
    0,
    0,
    0,
    0
   ],
   "get_error_information": {
    "error": "この版に get_error_information がない"
   },
   "get_system_version": [
    11
   ],
   "get_servo_voltages": [
    1901.6,
    1901.8,
    1876.1
   ],
   "get_servo_temps": [
    6425,
    5654,
    6421
   ],
   "get_servo_status": [
    0,
    0,
    0
   ],
   "get_encoders": [
    1783,
    3297,
    1338,
    2039,
    1487,
    2400
   ],
   "get_angles": [
    23.29,
    109.77,
    -62.4,
    0.79,
    -49.3,
    -30.93
   ]
  },
  "servos": [
   {
    "joint": "j0",
    "servo_id": 1,
    "enable": 1,
    "encoder": 1783,
    "voltage_raw": 74,
    "temp_raw": 25,
    "status_raw": 0,
    "angle": 23.29,
    "angle_from_encoder": -23.291015625,
    "responded": true,
    "voltage_list": 1901.6,
    "temp_list": 6425,
    "status_list": 0
   },
   {
    "joint": "j1",
    "servo_id": 2,
    "enable": 1,
    "encoder": 3297,
    "voltage_raw": 72,
    "temp_raw": 26,
    "status_raw": 0,
    "angle": 109.77,
    "angle_from_encoder": 109.775390625,
    "responded": true,
    "voltage_list": 1901.8,
    "temp_list": 5654,
    "status_list": 0
   },
   {
    "joint": "j2",
    "servo_id": 3,
    "enable": 1,
    "encoder": 1338,
    "voltage_raw": 74,
    "temp_raw": 22,
    "status_raw": 0,
    "angle": -62.4,
    "angle_from_encoder": -62.40234375,
    "responded": true,
    "voltage_list": 1876.1,
    "temp_list": 6421,
    "status_list": 0
   },
   {
    "joint": "j3",
    "servo_id": 4,
    "enable": 1,
    "encoder": 2039,
    "voltage_raw": 74,
    "temp_raw": 22,
    "status_raw": 0,
    "angle": 0.79,
    "angle_from_encoder": -0.791015625,
    "responded": true,
    "voltage_list": null,
    "temp_list": null,
    "status_list": null
   },
   {
    "joint": "j4",
    "servo_id": 5,
    "enable": 1,
    "encoder": 1487,
    "voltage_raw": 73,
    "temp_raw": 25,
    "status_raw": 0,
    "angle": -49.3,
    "angle_from_encoder": -49.306640625,
    "responded": true,
    "voltage_list": null,
    "temp_list": null,
    "status_list": null
   },
   {
    "joint": "j5",
    "servo_id": 6,
    "enable": 1,
    "encoder": 2400,
    "voltage_raw": 73,
    "temp_raw": 21,
    "status_raw": 0,
    "angle": -30.93,
    "angle_from_encoder": 30.9375,
    "responded": true,
    "voltage_list": null,
    "temp_list": null,
    "status_list": null
   }
  ],
  "notes": [
   "j4 の電圧62 73 / ほかの関節の中央 74",
   "j4 の温度63 25 / ほかの関節の中央 22",
   "j4 の角度 -49.30 / エンコーダからの角度 -49.31 (差 0.0°。2048=0°・向きは仮定。同じセンサーの読みどうし)"
  ]
 },
 "move": null,
 "pymycobot": {
  "version": "2.9.6",
  "file": "/usr/local/lib/python2.7/dist-packages/pymycobot/__init__.py"
 },
 "started": "2022-10-13 14:44:59",
 "finished": "2022-10-13 14:45:02"
}
```

6つのサーボすべてに力が入っていて（is_all_servo_enable 1）、エラーの読み（read_next_error）も全部0でした。手首 j4 の電圧の読み（番地62）は73で、ほかの関節の中央の74とほぼ同じ、温度の読み（番地63）は25で、ほかの中央22より少し高いだけでした。LOG422 では手首が +54.49° のまま指令に応えなくなっていましたが、この朝は −49.30° にいて、力も入っていました。電源を入れ直したあと、どこかで戻ったと見ています。何が戻したのかは、この記録からは分かりません。

点検の終わりに、デーモンの PYTHONPATH に python2.7 がない、という注意が出ています。止める前から同じ状態だったので、この時点では点検で変わったものではないと判断しました。この注意が、あとで遅さの原因につながります。


## 7:14：ゲームパッドで初めて実物の mechArm 270 を動かした

アームは起動したとき j1（肩）が +109.77° で、PICK の高さ（90.87°）より下にいました。スクリプトは守りの外と判断し、HOME の長押しだけを受け付けました。HOME で戻してから、根元・肩・ひじ・手首・爪・停止を一通り押しています。

#### gamepad_teleop.py --execute を動かしたターミナルの出力（65〜217行目）

```text
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/gamepad_teleop.py --execute
/opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import resource_stream, resource_exists
objc[7091]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1063912c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b08e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1063913b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b09d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0a20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1063914d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0a98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0ae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0b38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1063915c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0b88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1063915e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0bb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0bd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0c50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0cc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0d18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106391778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0d40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7091]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1063917c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1278b0d90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
[記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_071424
[実機] daemon に送ります。起動したときの姿勢: +23.29 +109.77 -62.40 +0.79 -49.30 -30.93
[注意] 起動したときの姿勢が守りの外: j1=+109.77。この関節を含む操作は送りません（HOME の長押しは送れます）
コントローラーを待っています（つないでいなければ、今つないでください）
[接続] PS4 Controller  GUID=03008fe54c050000cc09000000016800  軸=6  ボタン=16
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.4°）  届いた角度 -0.17 +1.40 +0.43 +0.35 +1.05 -30.58
[送信] j0 -0.5° → -0.50 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.31°）  届いた角度 +0.00 +1.31 +0.87 +0.26 +1.23 -30.32
[送信] j0 -0.5° → -1.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.31°）  届いた角度 -0.96 +1.31 +0.87 +0.26 +0.61 -30.23
[関節] 上下で動かす関節を j2 にしました
[関節] 上下で動かす関節を j3 にしました
[関節] 上下で動かす関節を j4 にしました
[関節] 上下で動かす関節を j5 にしました
[関節] 上下で動かす関節を j1 にしました
[送信] j0 -0.5° → -1.50 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.31°）  届いた角度 -0.96 +1.31 +0.87 +0.26 +0.52 -30.23
[受付なし] 前の操作が終わっていません（ためません）
  [Pi] GRIPPER: OPEN result= -1
[受付なし] 前の操作が終わっていません（ためません）
[爪] 爪を開く（待ち 0.8 秒のあと受付）
[送信] j0 +0.5° → -1.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.31°）  届いた角度 -1.05 +1.31 +0.87 +0.26 -1.23 -30.23
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[受付なし] 前の操作が終わっていません（ためません）
[爪] 爪を閉じる（待ち 0.8 秒のあと受付）
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[爪] 爪を閉じる（待ち 0.8 秒のあと受付）
  [Pi] GRIPPER: OPEN result= -1
[爪] 爪を開く（待ち 0.8 秒のあと受付）
  [Pi] GRIPPER: VALUE=20 speed=100 result= -1
[爪] 爪を閉じる（待ち 0.8 秒のあと受付）
  [Pi] GRIPPER: OPEN result= -1
[爪] 爪を開く（待ち 0.8 秒のあと受付）
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 -0.5° → -1.00 -0.50 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.29°）  届いた角度 -1.14 +0.79 +0.87 +0.26 -0.26 -30.23
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 +0.5° → -1.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 -1.14 +0.79 +0.87 +0.26 -0.26 -30.23
[受付なし] 前の操作が終わっていません（ためません）
[送信] j0 +2.0° → +1.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 +1.31 +0.79 +0.87 +0.26 -0.26 -30.23
[送信] j0 +2.0° → +3.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 +3.16 +0.79 +0.87 +0.26 -0.26 -30.23
[送信] j0 +2.0° → +5.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 +5.18 +0.79 +0.87 +0.26 -0.26 -30.23
[送信] j0 -2.0° → +3.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 +2.81 +0.79 +0.87 +0.26 -0.26 -30.23
[送信] j0 -2.0° → +1.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 +0.87 +0.79 +0.87 +0.17 -0.26 -30.23
[送信] j0 -2.0° → -1.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 -1.14 +0.79 +0.87 +0.17 -0.26 -30.14
[送信] j1 +0.5° → -1.00 +0.50 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.87°）  届いた角度 -1.14 +1.23 +0.87 +0.17 -0.26 -30.14
[関節] 上下で動かす関節を j2 にしました
  [Pi] GRIPPER: OPEN result= -1
[受付なし] 前の操作が終わっていません（ためません）
[爪] 爪を開く（待ち 0.8 秒のあと受付）
[送信] j2 -2.0° → -1.00 +0.50 -2.00 +0.00 +0.00 -30.00  届いた（ずれ 1.48°）  届いた角度 -1.14 +1.23 -0.52 +0.17 -0.26 -30.14
[受付なし] 前の操作が終わっていません（ためません）
[送信] j2 -2.0° → -1.00 +0.50 -4.00 +0.00 +0.00 -30.00  届いた（ずれ 1.37°）  届いた角度 -1.14 +1.23 -2.63 +0.17 -0.26 -30.14
[送信] j2 +2.0° → -1.00 +0.50 -2.00 +0.00 +0.00 -30.00  届いた（ずれ 0.95°）  届いた角度 -1.14 +1.23 -1.05 +0.17 -0.26 -30.14
[送信] j2 +2.0° → -1.00 +0.50 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.96°）  届いた角度 -1.14 +1.23 +0.96 +0.17 -0.26 -30.14
[送信] j2 +2.0° → -1.00 +0.50 +2.00 +0.00 +0.00 -30.00  届いた（ずれ 0.81°）  届いた角度 -1.14 +1.23 +2.81 +0.17 -0.26 -30.14
[送信] j2 +2.0° → -1.00 +0.50 +4.00 +0.00 +0.00 -30.00  届いた（ずれ 0.92°）  届いた角度 -1.14 +1.23 +4.92 +0.17 -0.26 -30.14
[送信] j2 +2.0° → -1.00 +0.50 +6.00 +0.00 +0.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 +0.17 -0.26 -30.14
[関節] 上下で動かす関節を j3 にしました
[送信] j3 +2.0° → -1.00 +0.50 +6.00 +2.00 +0.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 +1.31 -0.26 -30.14
[送信] j3 -2.0° → -1.00 +0.50 +6.00 +0.00 +0.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 +0.70 -0.26 -30.14
[送信] j3 -2.0° → -1.00 +0.50 +6.00 -2.00 +0.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.31 -0.26 -30.14
[関節] 上下で動かす関節を j4 にしました
[受付なし] 前の操作が終わっていません（ためません）
[送信] j4 +2.0° → -1.00 +0.50 +6.00 -2.00 +2.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.58 +1.75 -30.14
[受付なし] 前の操作が終わっていません（ためません）
[送信] j4 -2.0° → -1.00 +0.50 +6.00 -2.00 +0.00 -30.00  届いた（ずれ 1.66°）  届いた角度 -1.14 +1.23 +6.85 -1.66 +1.66 -30.14
[送信] j4 -2.0° → -1.00 +0.50 +6.00 -2.00 -2.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.66 -1.84 -30.14
[送信] j4 -2.0° → -1.00 +0.50 +6.00 -2.00 -4.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.66 -3.33 -30.14
[送信] j4 -2.0° → -1.00 +0.50 +6.00 -2.00 -6.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.66 -6.41 -30.14
[送信] j4 -2.0° → -1.00 +0.50 +6.00 -2.00 -8.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.75 -7.99 -30.14
[送信] j4 -2.0° → -1.00 +0.50 +6.00 -2.00 -10.00 -30.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.75 -9.93 -30.14
[範囲] j4 を -12.00° → -10.00° に切った（基準の姿勢からの範囲 -10.00°） / j4 -12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j4 -2.0°
[関節] 上下で動かす関節を j5 にしました
[受付なし] 前の操作が終わっていません（ためません）
[送信] j5 +2.0° → -1.00 +0.50 +6.00 -2.00 -10.00 -28.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.75 -9.93 -28.21
[送信] j5 +2.0° → -1.00 +0.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.75 -9.93 -26.19
[関節] 上下で動かす関節を j1 にしました
[送信] j1 -2.0° → -1.00 -1.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 1.07°）  届いた角度 -1.14 -0.43 +6.85 -1.75 -10.10 -26.19
[送信] j1 +2.0° → -1.00 +0.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.85°）  届いた角度 -1.14 +1.23 +6.85 -1.84 -10.10 -26.19
[送信] j1 +2.0° → -1.00 +2.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.92°）  届いた角度 -1.14 +3.42 +6.85 -1.84 -10.10 -26.19
[送信] j1 +2.0° → -1.00 +4.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.86°）  届いた角度 -1.14 +5.36 +6.85 -1.93 -10.19 -26.19
[送信] j1 +2.0° → -1.00 +6.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.88°）  届いた角度 -1.14 +7.38 +6.85 -1.93 -10.19 -26.19
[送信] j1 +2.0° → -1.00 +8.50 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.9°）  届いた角度 -1.14 +9.40 +6.85 -2.02 -10.19 -26.19
[範囲] j1 を +10.50° → +10.00° に切った（基準の姿勢からの範囲 +10.00°）
[送信] j1 +2.0° → -1.00 +10.00 +6.00 -2.00 -10.00 -26.00  届いた（ずれ 0.89°）  届いた角度 -1.14 +10.89 +6.85 -2.10 -10.19 -26.19
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[関節] 上下で動かす関節を j2 にしました
[送信] j2 +2.0° → -1.00 +10.00 +8.00 -2.00 -10.00 -26.00  届いた（ずれ 0.89°）  届いた角度 -1.14 +10.89 +8.87 -2.10 -10.19 -26.19
[送信] j2 +2.0° → -1.00 +10.00 +10.00 -2.00 -10.00 -26.00  届いた（ずれ 0.89°）  届いた角度 -1.14 +10.89 +10.81 -2.19 -10.19 -26.19
[関節] 上下で動かす関節を j3 にしました
[関節] 上下で動かす関節を j4 にしました
[関節] 上下で動かす関節を j5 にしました
[関節] 上下で動かす関節を j1 にしました
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[範囲] j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j1 +2.0°
[送信] j1 -2.0° → -1.00 +8.00 +10.00 -2.00 -10.00 -26.00  届いた（ずれ 1.22°）  届いた角度 -1.14 +9.22 +10.81 -2.28 -10.19 -26.19
[送信] j1 -2.0° → -1.00 +6.00 +10.00 -2.00 -10.00 -26.00  届いた（ずれ 1.11°）  届いた角度 -1.14 +7.11 +10.81 -2.28 -10.54 -26.19
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 +2.0° → -1.00 +8.00 +10.00 -2.00 -10.00 -26.00  届いた（ずれ 0.96°）  届いた角度 -1.14 +8.96 +10.81 -2.28 -10.54 -26.19
[関節] 上下で動かす関節を j2 にしました
[範囲] j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j2 +2.0°
[受付なし] 前の操作が終わっていません（ためません）
[送信] j2 -2.0° → -1.00 +8.00 +8.00 -2.00 -10.00 -26.00  届いた（ずれ 1.66°）  届いた角度 -1.14 +8.96 +9.66 -2.28 -10.54 -26.19
[送信] j2 +2.0° → -1.00 +8.00 +10.00 -2.00 -10.00 -26.00  届いた（ずれ 0.96°）  届いた角度 -1.14 +8.96 +10.72 -2.28 -10.54 -26.19
[範囲] j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j2 +2.0°
[範囲] j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j2 +2.0°
[範囲] j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）
[送らない] j2 +2.0°
[停止] L2+R2。新しい指令は送りません（OPTIONS で再開）
[受付なし] HOME: 停止中です（押し直してください）
[受付なし] 停止中です（OPTIONS で再開）
[停止] L2+R2。新しい指令は送りません（OPTIONS で再開）
[再開] 操作を受け付けます
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.4°）  届いた角度 -0.26 +1.23 +1.40 -0.35 -0.17 -29.00
[停止] controller_disconnected。新しい指令は送りません（OPTIONS で再開）
^C
[終了] Ctrl+C
[終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_071424
```

根元（j0）も肩（j1）も手首（j4）も動き、L2+R2 の停止と OPTIONS の再開、HOME の長押しも決めたとおりに動きました。爪の行に出る `result= -1` は、LOG175 のころから出ている返り値で、動いたかどうかとは関係ありません（arm_kinematics.md の「DAY175 既知の問題」）。

止まったのは、j1 の +10°、j2 の +10°、j4 の −10° でした。どれも、起動した姿勢（HOME を押したあとは HOME）から各関節 ±10° の枠です。決めたとおりに効いていました。

> 関節のリミットあってる？

決めたとおりではあるけれど、この枠では HOME から始めると、各関節 ±10° の中しか動けず、PICK の高さまで下ろせません。AI が止めた姿勢の近くで直すだけなら足りますが、HOME から手でブロックの上まで運ぶ使い方には合いません。

> HOME から手でブロックの上まで運ぶ使い方もするのでアーム本体の可動域まで広げてください。
> それと方向キーの長押しでずっと関節が動くように修正してください。


## 7:23：範囲をアーム本体の可動域に広げ、十字キーの長押しで送り続ける形にした

最初は依頼箱に依頼77として置きましたが、依頼箱では ServiceSim の依頼75が作業中、76が待ちで、始まるまでに時間がかかる状態でした。

> 依頼じゃなく、すぐに進めてください。

依頼77は依頼箱から外し（`依頼箱/_to_delete_77.md` に移した）、Claude が Mac の `~/r2r2r-scripts` を直接直しました。外した依頼文は、何を頼もうとしたかの記録として残します。

#### 依頼箱から外した依頼文 20261103_77_ゲームパッドの範囲を物理可動域にし長押しで動き続けるようにする.md

```markdown
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 120
---
# 依頼77：tools/gamepad_teleop.py の範囲を物理可動域まで広げ、十字キーの長押しで関節が動き続けるようにする。実機には流さない（2026-11-03）

2026-11-03 朝の実機の試し（runs/experiments/gamepad_teleop/teleop_20261103_071424、120行）を受けて、エイイチが決めた。
ゲームパッドは、AI の動きを近くで直すだけでなく、HOME から手でブロックの上まで運ぶ使い方もする。

## 1. 範囲：基準の姿勢から ±15°・±10° の枠をなくし、物理可動域にする

- 今の枠（J0_RANGE_DEG 15・JOINT_RANGE_DEG 10、基準の姿勢から測る BASE）では、HOME から始めると各関節 ±10° の中しか動けず、PICK の高さまで下ろせない（今朝、j1・j2 は +10°、j4 は −10° で切られた）
- BASE の枠を外す。残す守りは次の3つ（狭い方が勝つ形は今のまま）
  - 物理可動域（wr.JOINT_LIMITS。今の読み方のまま）
  - j1 は 90.87 を超えない（PICK_J1_FIXED。床に当てないため。エイイチと決めた値のまま）
  - j4 は J4_SAFE（−90〜+60）
- 起動したときの姿勢が守りの外なら HOME しか送らない、の扱いは今のまま（今朝は j1 +109.77 で起動して、そのとおりに動いた）
- 基準の姿勢（base_pose）は範囲には使わなくなる。記録の項目として残すか消すかは任せる

## 2. 十字キーの長押しで、押している間ずっと動く

- 短く押したら今までどおり 1 刻み（0.5°、R1 を押しながらなら 2°）
- 押し続けたら、離すまで同じ向きに刻みを送り続ける。十字キーの左右（j0）・上下（選んでいる関節）の両方
- 注意：今の届いたかの判定（REACH_TOL_DEG 3°）は刻み（0.5°・2°）より大きいので、送った直後に「届いた」になる（今朝の elapsed_sec は 0.01〜0.04 秒）。この判定を頼りに次を送ると、アームより指令が先へ走る。次のように歩調を決める
  - 長押しとみなすのは、押してから約 0.4 秒たっても押しているとき（短い押しで 2 刻み出ないように）
  - 送る間隔は一定（目安 0.15〜0.2 秒。下の速さを見て決める）
  - 送る前に読んだ角度と、直前に送った指令の差が 3° を超えていたら、その回は送らずに待つ（離したときに、アームが指令から大きく遅れて動き続けないように）
  - 速さの目安：0.5° 刻みで 2〜3°/秒、R1 で 8〜10°/秒くらい。daemon と speed 20 で実際に出る速さを、ログ（今朝の分を含む）や送り口の待ち時間から見て決め、報告に書く
- 長押しを止めるもの：ボタンを離す・L2+R2 の停止・範囲の端に着いた（端では 1 回だけ「送らない」を出して、同じ行を繰り返さない）・コントローラーの接続が切れた・読み取りの失敗
- 長押しの途中で R1 を押す／離すと刻みが変わってよい
- 長押しの途中で別の関節に △ で切り替えたら、その長押しは止める
- 記録：送った 1 刻みごとに log.jsonl へ 1 行（今までと同じ項目）。長押しの何回目か・同じ長押しの通し番号を足す
- 停止の作りは変えない（L2+R2 は新しい指令を送らないだけ。送った 1 刻み分は最後まで動く）

## 変えないもの

- ボタンの割り当て・刻み（0.5° / 2°）・HOME の長押し・爪・停止と OPTIONS の再開
- 十字キー左右の向き（J0_LEFT_SIGN）。エイイチの確認待ち
- send_angles だけ・speed 20・daemon の送り方と読み方
- daemon、run_policy_client.py・visual_servo_pick.py などの既存のスクリプト、tools/gamepad_check.py
- 既存のデータ（runs/experiments/gamepad_teleop/ の2つのフォルダ）

## 確かめ（実機なし）

- 今のテスト53件が通ること（枠を外したことで意味が変わるテストは直し、直した理由を書く）
- 足すテスト：HOME から j1 を 90.87 まで下ろせる・90.87 で止まる、j4 が J4_SAFE で止まる、物理可動域で止まる／長押しで刻みが続く・短い押しは 1 刻み・離すと止まる・L2+R2 で止まる・指令が読んだ角度より 3° 先なら送らない・端で止まって同じ行を繰り返さない・△ で長押しが止まる
- ドライランで、長押しがひととおり動くこと

## 終わったら

- 関節を動かすコードで、守りの枠を外すので、codex のレビューを通してから報告する（code_review_request_template.md の形）。指摘は直すか、直さない理由を書く
- 実機には流さない。報告に、エイイチが最初に試す手順を書く（HOME から j0 の長押し → j1 の長押しで少し下ろす → 離して止まるか → L2+R2 で止まるか）
- 個別のファイルを指定して add・commit する（`git add .` は使わない）
```

直したのは2つです。

| 直した所 | 前 | 後 |
|---|---|---|
| 範囲 | 起動した姿勢から j0 ±15°・j1〜j5 ±10°、物理可動域、j1 ≤ 90.87、j4 は J4_SAFE（−90〜+60） | 物理可動域、j1 ≤ 90.87、j4 は J4_SAFE。基準の姿勢からの枠はやめた |
| 十字キーの長押し | なし（1回押すと1刻み） | 0.4秒押し続けたら、0.2秒おきに同じ向きの刻みを送る。直前の指令と読んだ角度の差が3°を超えている間は送らずに待つ |

j1 の 90.87（PICK の高さ。床に当てないため）と、手首の J4_SAFE は残しました。HOME からブロックの上まで運んで PICK の高さまで下ろすなら、どちらにも当たりません。

長押しを足すときに、記録で気づいたことがあります。届いたかを見る幅（3°）が刻み（0.5°・2°）より大きいので、送った直後に届いたと判定されていました（7:14 の記録の elapsed_sec は 0.01〜0.04秒）。この判定を合図に次を送ると、指令がアームより先へ走り、離したあとも動き続けます。そのため、読んだ角度と指令の差で待つ形にしました。

### 別の Claude に、長押しのコードを読んでもらった

codex は Mac の外からは呼べなかったので、書いた Claude とは別の Claude のエージェントに、差分と全体を読んでもらいました（読み取りだけ・ファイルは変えない）。

#### レビュー依頼 docs/review_request_20261103_gamepad_hold.md（差分を含む全文）

````markdown
# レビュー依頼：gamepad_teleop.py の範囲を物理可動域にし、十字キーの長押しで動き続けるようにした（2026-11-03）

前提: 2026-11-03 朝の実機の試し（runs/experiments/gamepad_teleop/teleop_20261103_071424）で、基準の姿勢から ±10° の枠により HOME から PICK の高さへ下ろせなかった。エイイチが「HOME から手でブロックの上まで運ぶ使い方もするので、アーム本体の可動域まで広げる」「方向キーの長押しでずっと関節が動くように」と決めた。
実装は Claude（依頼箱を通さず、エイイチの指示ですぐ直した）。まだ実機では流していない。

## 変えたこと
1. 範囲: 基準の姿勢 ±15°/±10° の枠（BASE）をやめた。残る守りは 物理可動域（wr.JOINT_LIMITS）・j1 ≤ 90.87（PICK_J1_FIXED）・j4 は J4_SAFE（−90〜+60）。起動時の姿勢が守りの外なら HOME しか送らない扱いは今のまま
2. 長押し: 十字キーを押して 0.4 秒たっても押していれば、0.2 秒おきに同じ向きの刻みを送る。2 回目からは送る前に、直前の指令と読んだ角度の差（6 関節の最大）が 3° を超えている間は送らずに待つ。3 秒待っても追いつかなければ、その長押しを止める。離す・L2+R2・△・ほかのボタン（R1 以外）・接続が切れる・範囲の端・送れなかった で長押しは止まる
   - 背景: 届いたかの判定 3° が刻み（0.5°・2°）より大きく、送った直後に「届いた」になる（今朝の elapsed_sec は 0.01〜0.04 秒）。この判定を合図に送ると指令がアームより先へ走る

## 見てほしい点
1. 長押しで、指令がアームより大きく先へ走る道がないか（離したあと、アームが大きく動き続けないか）
2. 停止（L2+R2）・接続が切れたあとに、長押しの指令が送られる道がないか（SendGate との関係・待っている間の停止）
3. 範囲を物理可動域にしたことで、守りが抜ける道がないか（出発点が範囲の外のとき・HOME）
4. スレッド: 送る仕事のスレッドが self.hold を読む（_hold_alive）。pygame のループ側が書き換える。問題ないか
5. 1 回の長押しの中で同じ行がたくさん出る・ログが壊れる道がないか

ファイル変更・実機操作はしないこと。日本語で、必須 / 推奨 / 据え置きに分けて、表（項目 / 判定 / 確認結果・修正案）で返すこと。

## 差分
```diff
--- a/tools/gamepad_teleop.py
+++ b/tools/gamepad_teleop.py	2026-11-02 22:28:53.464993143 +0000
@@ -9,6 +9,12 @@
   十字キー 左 / 右 (13 / 14)  j0 を 0.5° ずつ. どの関節を選んでいても いつも j0
                               (向き: 左 = J0_LEFT_SIGN. 依頼に向きの指定がないので, 右 = +, 左 = − にしてある)
   十字キー 上 / 下 (11 / 12)  選んでいる関節を 0.5° ずつ. 上 = −, 下 = +. 始めは j1
+  十字キーの長押し            押している間, 同じ向きに刻みを送り続ける (2026-11-03). 短く押せば 1 刻み.
+                              押して HOLD_START_SEC (0.4 秒) たっても押していれば, HOLD_INTERVAL_SEC (0.2 秒) おきに送る.
+                              直前の指令と読んだ角度の差が HOLD_LEAD_MAX_DEG (3°) を超えている間は送らずに待つ
+                              (指令がアームより先へ走らないように. 離したら, アームは直前の指令までで止まる).
+                              HOLD_WAIT_MAX_SEC (3 秒) 待っても追いつかなければ, その長押しは止める (押し直す).
+                              離す・L2+R2・範囲の端・△・ほかのボタン・接続が切れる で長押しは止まる. R1 は途中で効く
   △ (3)                       上下で動かす関節を切り替える: j1 → j2 → j3 → j4 → j5 → j1
   R1 (10) を押しながら        1 回 2° ずつ (十字キーの左右・上下とも)
   × (0) / ○ (1)              爪を閉じる / 開く
@@ -20,8 +26,8 @@
 守り:
   - j1 は 90.87 (arm_kinematics.md の PICK_J1_FIXED) を超える指令を送らない
     (fk_lookup.J1_SAFE_MAX = 88.0 は別の用途の値なので, ここでは使わない)
-  - j0 は 基準の姿勢 ±15°, j1〜j5 は ±10°. j4 は J4_SAFE (−90〜+60). 物理可動域 (wr.JOINT_LIMITS) も通す
-  - 基準の姿勢 = 起動したときに読んだ姿勢. HOME を送ったあとは HOME を基準にし直す
+  - 各関節は物理可動域 (wr.JOINT_LIMITS) まで. j4 は J4_SAFE (−90〜+60)
+    (基準の姿勢から j0 ±15°・j1〜j5 ±10° の枠は 2026-11-03 にやめた. HOME から手でブロックの上まで運ぶため)
   - 範囲で切られたら理由を画面とログに出す. 別の関節で補わない
   - HOME だけは範囲の検査を通さずに送れる (run_policy_client.py の h と同じ扱い)
 
@@ -203,14 +209,19 @@
 
 # ---- 守り ----
 J1_MAX_DEG = 90.87             # arm_kinematics.md の PICK_J1_FIXED (エイイチと決めた. J1_SAFE_MAX 88 は使わない)
-J0_RANGE_DEG = 15.0            # 基準の姿勢から j0 は ±15°
-JOINT_RANGE_DEG = 10.0         # j1〜j5 は ±10°
 J4_SAFE = tuple(float(v) for v in _RPC_CONST["J4_SAFE"])   # (-90, 60)
 JOINT_LIMITS = [tuple(float(v) for v in lim) for lim in _WR_CONST["JOINT_LIMITS"]]   # 物理可動域 (wr.JOINT_LIMITS)
 GRIPPER_SLEEP = float(_RPC_CONST["GRIPPER_SLEEP"])   # 爪のあとの待ち (rpc.GRIPPER_SLEEP. ドライランと画面の表示で使う)
 LIMIT_EPS_DEG = 1e-6
 REACH_TOL_DEG = 3.0            # 届いたかの判定 (推論の到着確認と同じ 3°)
 
+# ---- 長押し (2026-11-03) ----
+HOLD_START_SEC = 0.4           # 押してからこれだけたっても押していれば, 長押しとして送り続ける
+HOLD_INTERVAL_SEC = 0.2        # 長押しで送る間隔 (0.5° なら 2.5°/秒, R1 の 2° なら 10°/秒)
+HOLD_LEAD_MAX_DEG = 3.0        # 直前の指令と読んだ角度の差がこれを超えている間は送らない
+HOLD_WAIT_MAX_SEC = 3.0        # 追いつくのをこれだけ待っても追いつかなければ, 長押しを止める
+HOLD_POLL_SEC = 0.05           # 追いつくのを待つ間に読み直す間隔
+
 DRY_MOVE_SEC = 0.3             # ドライランで「動いている」状態を見せる時間
 SEND_RPC_TIMEOUT_SEC = 8.0     # send_angles 1 回の通信 (接続・ping・送信・返事) の上限. 通信が詰まった
                                # 送信が 停止のずっとあとに届かないように (daemon の返事は送信後の読み直し込みで最長 3.7 秒. LOG352)
@@ -242,14 +253,13 @@
 # 守り (純関数. テストで直接呼ぶ)
 # =============================================================================
 
-def joint_window(base):
-    """基準の姿勢 base から, 各関節に送ってよい範囲 (lo, hi, 各端の出どころ) を作る.
-    出どころ: BASE (基準 ±15/±10) / PHYS (物理可動域) / J4_SAFE / J1_MAX. 狭い方が勝つ."""
+def joint_window():
+    """各関節に送ってよい範囲 (lo, hi, 各端の出どころ) を作る.
+    出どころ: PHYS (物理可動域) / J4_SAFE / J1_MAX. 狭い方が勝つ."""
     lo, hi, lo_src, hi_src = [], [], [], []
     for k in range(6):
-        r = J0_RANGE_DEG if k == 0 else JOINT_RANGE_DEG
-        cands_lo = [(float(base[k]) - r, "BASE"), (JOINT_LIMITS[k][0], "PHYS")]
-        cands_hi = [(float(base[k]) + r, "BASE"), (JOINT_LIMITS[k][1], "PHYS")]
+        cands_lo = [(JOINT_LIMITS[k][0], "PHYS")]
+        cands_hi = [(JOINT_LIMITS[k][1], "PHYS")]
         if k == 4:
             cands_lo.append((J4_SAFE[0], "J4_SAFE"))
             cands_hi.append((J4_SAFE[1], "J4_SAFE"))
@@ -261,11 +271,11 @@
     return np.array(lo), np.array(hi), lo_src, hi_src
 
 
-LIMIT_JA = {"BASE": "基準の姿勢からの範囲", "PHYS": "物理可動域", "J4_SAFE": "J4_SAFE",
+LIMIT_JA = {"PHYS": "物理可動域", "J4_SAFE": "J4_SAFE",
             "J1_MAX": "j1 の上限 90.87 (PICK_J1_FIXED)"}
 
 
-def plan_step(start, joint, delta, base):
+def plan_step(start, joint, delta):
     """start (今回の出発点) の joint を delta 動かした目標を作り, 範囲を通す.
 
     戻り値 dict:
@@ -275,7 +285,7 @@
     動かした関節は範囲の端で切る (端までは送る). 端にいて押した向きに 1 ° も進めないときは送らない.
     ほかの関節は変えない (補わない). 6 関節のどれかが範囲の外なら送らない.
     """
-    lo, hi, lo_src, hi_src = joint_window(base)
+    lo, hi, lo_src, hi_src = joint_window()
     want = np.asarray(start, dtype=float)[:6].copy()
     out = {"target": None, "clip": [], "refused": []}
     if not np.all(np.isfinite(want)):
@@ -346,7 +356,7 @@
         why = {"at_limit": "範囲の端にいて、押した向きに進めない",
                "out_of_window": "範囲の外",
                "start_out_of_window": "出発点が範囲の外（HOME の長押しで戻せます）",
-               "empty_window": "範囲が空（基準の姿勢が守りの外）"}.get(r["why"], r["why"])
+               "empty_window": "範囲が空"}.get(r["why"], r["why"])
         parts.append(f"j{r['joint']} {r['value']:+.2f}° は送らない：{why}"
                      f"（範囲 [{r['lo']:+.2f}, {r['hi']:+.2f}]・{LIMIT_JA.get(r['limit'], r['limit'])}）")
     return " / ".join(parts)
@@ -535,7 +545,6 @@
         self.log = log
         self.out = out
         self.spawn = spawn or self._spawn_thread
-        self.base = np.asarray(start_pose, dtype=float).copy()       # 基準の姿勢
         self.cmd = np.asarray(start_pose, dtype=float).copy()        # 直前の目標 (始めは起動時の姿勢)
         self.cmd_reached = True
         self.measured = np.asarray(start_pose, dtype=float).copy()   # 最後に読めた角度
@@ -560,6 +569,8 @@
         self.read_error = False
         self.seq = 0
         self.n_sent = 0
+        self.hold = None                   # 十字キーの長押し {id, button, joint, sign, down_at, n, last_req_at}
+        self.hold_seq = 0
 
     # ---- 見せる値 ----
     @property
@@ -588,8 +599,7 @@
         return e
 
     def _finish(self, e):
-        e.update({"grip_state": self.grip, "stopped": self.stopped, "stop_reason": self.stop_reason,
-                  "base_pose": _r(self.base)})
+        e.update({"grip_state": self.grip, "stopped": self.stopped, "stop_reason": self.stop_reason})
         try:
             self.log.write(e)
         except Exception as ex:          # SSD が外れたなど. ローカルには逃がさない
@@ -619,9 +629,16 @@
             self.out("[HOME] 長押しの途中で受け付けられなくなったので取り消しました（押し直してください）")
             self._finish(self._entry(BTN_HOME, "home", accepted=False, reason="hold_cancelled"))
 
+    def _end_hold(self, msg=None):
+        if self.hold is not None:
+            if msg:
+                self.out(msg)
+            self.hold = None
+
     def enter_stop(self, reason, button=None, kind="stop"):
         was = self.stopped
         self.stopped = True
+        self._end_hold()
         committed = self._cancel_gate()
         if not was:
             self.stop_reason = reason
@@ -683,6 +700,7 @@
             self.r1 = True
             self._finish(self._entry(button, "modifier", accepted=True))
             return
+        self._end_hold()                     # 十字キーの長押しは, ほかのボタン (R1 以外) で止まる
         if button == BTN_TRIANGLE:
             self.sel = (self.sel + 1) % len(SELECT_ORDER)
             self.out(f"[関節] 上下で動かす関節を j{self.joint} にしました")
@@ -702,16 +720,19 @@
                          + "（押し直してください）")
                 self._finish(self._entry(button, "home", accepted=False, reason=why))
             return                           # 1 秒続いたとき (tick) か 離したとき (release) に 1 行書く
-        if button in (BTN_LEFT, BTN_RIGHT):
-            sign = J0_LEFT_SIGN if button == BTN_LEFT else -J0_LEFT_SIGN
-            self._request(self._entry(button, "move", joint=0, delta=sign * self.step),
-                          ("move", 0, sign * self.step))
-            return
-        if button in (BTN_UP, BTN_DOWN):
-            sign = UP_SIGN if button == BTN_UP else -UP_SIGN
-            j = self.joint
-            self._request(self._entry(button, "move", joint=j, delta=sign * self.step),
-                          ("move", j, sign * self.step))
+        if button in (BTN_LEFT, BTN_RIGHT, BTN_UP, BTN_DOWN):
+            if button in (BTN_LEFT, BTN_RIGHT):
+                sign = J0_LEFT_SIGN if button == BTN_LEFT else -J0_LEFT_SIGN
+                j = 0
+            else:
+                sign = UP_SIGN if button == BTN_UP else -UP_SIGN
+                j = self.joint
+            self.hold_seq += 1
+            self.hold = {"id": self.hold_seq, "button": button, "joint": j, "sign": sign,
+                         "down_at": now, "n": 0, "last_req_at": now}
+            self._request(self._entry(button, "move", joint=j, delta=sign * self.step,
+                                      hold_id=self.hold_seq, hold_n=0),
+                          ("move", j, sign * self.step, None))
             return
         if button in (BTN_CROSS, BTN_CIRCLE):
             state = 1 if button == BTN_CROSS else 0
@@ -721,6 +742,8 @@
         self._finish(self._entry(button, "ignored", accepted=False, reason="unassigned"))
 
     def release(self, button, now):
+        if self.hold is not None and button == self.hold["button"]:
+            self.hold = None                 # 離したら長押しを止める
         if button == BTN_R1:
             self.r1 = False
         elif button == BTN_HOME:
@@ -740,6 +763,21 @@
             self.home_handled = True
             self._request(self._entry(BTN_HOME, "home", held_sec=round(now - self.home_down_at, 3)),
                           ("home",))
+        h = self.hold
+        if (h is not None and not self.stopped and not self.busy
+                and now - h["down_at"] >= HOLD_START_SEC - 1e-6
+                and now - h["last_req_at"] >= HOLD_INTERVAL_SEC - 1e-6):
+            h["n"] += 1
+            h["last_req_at"] = now
+            d = h["sign"] * self.step
+            self._request(self._entry(h["button"], "move", joint=h["joint"], delta=d,
+                                      hold_id=h["id"], hold_n=h["n"],
+                                      held_sec=round(now - h["down_at"], 3)),
+                          ("move", h["joint"], d, h["id"]))
+
+    def _hold_alive(self, hold_id):
+        h = self.hold
+        return h is not None and h["id"] == hold_id
 
     # ---- 送る仕事 ----
     def _request(self, e, job):
@@ -758,7 +796,7 @@
         self.pending = e
         gate = SendGate()
         self.gate = gate
-        snap = {"cmd": self.cmd.copy(), "cmd_reached": self.cmd_reached, "base": self.base.copy()}
+        snap = {"cmd": self.cmd.copy(), "cmd_reached": self.cmd_reached}
         self.spawn(lambda: self._run_job(job, snap, gate))
 
     def _spawn_thread(self, fn):
@@ -769,12 +807,35 @@
         res = {}
         try:
             if job[0] == "move":
-                _, j, d = job
+                _, j, d, hold_id = job
                 q = self.arm.read()
                 res["measured_before"] = _r(q)
                 if q is None:
                     res["error"] = "read_failed"
                     return
+                if hold_id is not None:
+                    # 長押しの 2 回目から: 直前の指令にアームが追いつくまで送らない
+                    t_w = time.monotonic()
+                    while True:
+                        lead = float(np.max(np.abs(np.asarray(snap["cmd"]) - q)))
+                        if lead <= HOLD_LEAD_MAX_DEG:
+                            break
+                        if gate.cancel.is_set() or self.quitting.is_set():
+                            res.update(sent=False, why="halted_before_send")
+                            return
+                        if not self._hold_alive(hold_id):
+                            res.update(sent=False, why="hold_released", hold_lead_deg=round(lead, 3))
+                            return
+                        if time.monotonic() - t_w >= HOLD_WAIT_MAX_SEC:
+                            res.update(sent=False, why="arm_not_following", hold_lead_deg=round(lead, 3))
+                            return
+                        time.sleep(HOLD_POLL_SEC)
+                        q = self.arm.read()
+                        if q is None:
+                            res["error"] = "read_failed"
+                            return
+                    res["hold_wait_sec"] = round(time.monotonic() - t_w, 3)
+                    res["measured_before"] = _r(q)
                 # 出発点: 直前の目標に届いていて, 今読んだ角度とも 3° 以内ならその目標.
                 # そうでなければ今読んだ角度 (手で動かされたなど. 古い目標から大きく動かさない. codex 必須 3)
                 gap = float(np.max(np.abs(np.asarray(snap["cmd"]) - q)))
@@ -782,7 +843,7 @@
                 start = snap["cmd"] if use_cmd else q
                 res["start_source"] = "command" if use_cmd else "measured"
                 res["cmd_gap_deg"] = round(gap, 3)
-                plan = plan_step(start, j, d, snap["base"])
+                plan = plan_step(start, j, d)
                 res["clip"] = plan["clip"]
                 res["refused"] = plan["refused"]
                 res["limit_ja"] = limit_text_ja(plan)
@@ -838,8 +899,6 @@
             self.n_sent += 1
             self.cmd = np.asarray(target, dtype=float)
             self.cmd_reached = bool(res.get("reached"))
-            if job[0] == "home":
-                self.base = np.array(HOME, dtype=float)    # HOME を送ったあとは HOME を基準にし直す
         elif sent == "unknown":
             self.cmd_reached = False                      # 次は読んだ角度から
         if job[0] == "grip" and res.get("error"):
@@ -851,7 +910,7 @@
         e["reached"] = res.get("reached") if sent is True else None
         # ---- ターミナル ----
         if job[0] == "move":
-            label = f"j{job[1]} {job[2]:+.1f}°"
+            label = f"j{job[1]} {job[2]:+.1f}°" + (f"（長押し {e.get('hold_n')}）" if job[3] is not None else "")
         elif job[0] == "home":
             label = "HOME"
         else:
@@ -869,8 +928,16 @@
                      f"（ずれ {res.get('reach_err')}°）  届いた角度 {_fmt(res.get('reached_angles'))}")
         elif res.get("why") == "halted_before_send":
             self.out(f"[送らない] {label}: 停止が入ったので送りませんでした")
+        elif res.get("why") == "hold_released":
+            pass                                           # 追いつくのを待つ間に離した. 何も出さない
+        elif res.get("why") == "arm_not_following":
+            self.out(f"[送らない] {label}: {HOLD_WAIT_MAX_SEC:.0f} 秒待ってもアームが指令に追いつきません"
+                     f"（差 {res.get('hold_lead_deg')}°）")
         else:
             self.out(f"[送らない] {label}")
+        # 長押しの中で送れなかったら (範囲の端・追いつかない・停止), その長押しは止める. 端で同じ行を繰り返さない
+        if job[0] == "move" and sent is not True and e.get("hold_id") is not None and self._hold_alive(e["hold_id"]):
+            self._end_hold("[長押し] 止めました（もう一度押せば動きます）" if res.get("why") == "arm_not_following" else None)
         self.gate = None
         self._finish(e)
         if res.get("error"):
@@ -904,7 +971,7 @@
             ("big", f"GRIP   {self.grip}"),
         ]
         for k in range(6):
-            lines.append(("mono", f"j{k}  {q[k]:+8.2f}   cmd {self.cmd[k]:+8.2f}   base {self.base[k]:+8.2f}"))
+            lines.append(("mono", f"j{k}  {q[k]:+8.2f}   cmd {self.cmd[k]:+8.2f}"))
         lines.append(("small", "last limit: " + (self.last_limit or "-")))
         if self.stopped:
             lines.append(("small", f"stop reason: {self.stop_reason}  (OPTIONS = resume)"))
@@ -989,7 +1056,7 @@
         screen.blit(fonts[kind].render(text[:110], True, col), (10, y))
         y += {"big": 44, "mono": 26, "small": 24}[kind]
     y += 6
-    for t in ("dpad L/R: j0   dpad U/D: selected joint (up = -, down = +)   triangle: next joint",
+    for t in ("dpad L/R: j0   dpad U/D: selected joint (up = -, down = +)   hold: keep moving   triangle: next joint",
               "R1 hold: 2 deg   cross: close   circle: open   HOME hold 1s: home",
               "L2+R2: stop   OPTIONS: resume   window close / Ctrl+C: quit (arm is not moved)"):
         screen.blit(fonts["small"].render(t, True, (150, 150, 160)), (10, y))
@@ -1059,7 +1126,7 @@
             start = np.asarray(start_pose_dry if start_pose_dry is not None else HOME, dtype=float)
             arm = DryArm(start)
             print("[ドライラン] daemon にもアームにも触りません。HOME から始まる仮の姿勢を動かします")
-        lo, hi, _, _ = joint_window(start)
+        lo, hi, _, _ = joint_window()
         bad = [k for k in range(6) if not (lo[k] - LIMIT_EPS_DEG <= start[k] <= hi[k] + LIMIT_EPS_DEG)]
         if bad:
             print("[注意] 起動したときの姿勢が守りの外: " + ", ".join(f"j{k}={start[k]:+.2f}" for k in bad)
@@ -1072,15 +1139,17 @@
             "python": sys.version, "pygame": pygame.version.ver,
             "sdl": ".".join(str(v) for v in pygame.get_sdl_version()), "platform": platform.platform(),
             "start_pose": _r(start),
-            "guards": {"J1_MAX_DEG": J1_MAX_DEG, "J0_RANGE_DEG": J0_RANGE_DEG, "JOINT_RANGE_DEG": JOINT_RANGE_DEG,
+            "guards": {"J1_MAX_DEG": J1_MAX_DEG, "range": "physical_limits (no base window. 2026-11-03)",
                        "J4_SAFE": list(J4_SAFE), "JOINT_LIMITS": [list(x) for x in JOINT_LIMITS],
-                       "window_at_start": {"lo": _r(lo), "hi": _r(hi)},
+                       "window": {"lo": _r(lo), "hi": _r(hi)},
                        "home_bypasses_range_check": True},
             "motion": {"speed": SPEED, "step_fine_deg": STEP_FINE_DEG, "step_coarse_deg": STEP_COARSE_DEG,
                        "reach_tol_deg": REACH_TOL_DEG, "reach_timeout_min_sec": REACH_TIMEOUT_SEC,
                        "poll_sec": POLL_SLEEP, "gripper_sleep_sec": rpc.GRIPPER_SLEEP,
                        "grip_close_value": rpc.GRIP_VALUE, "send_wait": rpc.SEND_WAIT,
                        "home": HOME, "home_hold_sec": HOME_HOLD_SEC, "trigger_stop_above": TRIGGER_STOP_ABOVE,
+                       "hold_start_sec": HOLD_START_SEC, "hold_interval_sec": HOLD_INTERVAL_SEC,
+                       "hold_lead_max_deg": HOLD_LEAD_MAX_DEG, "hold_wait_max_sec": HOLD_WAIT_MAX_SEC,
                        "j0_left_sign": J0_LEFT_SIGN, "up_sign": UP_SIGN, "select_order": list(SELECT_ORDER)},
             "button_map": {str(k): v for k, v in BUTTON_NAMES.items()},
             "git": git_info(__file__),
--- a/tools/test_gamepad_teleop.py
+++ b/tools/test_gamepad_teleop.py	2026-11-02 22:28:35.369895819 +0000
@@ -5,7 +5,9 @@
 
 中身:
   - ボタン番号と操作の対応 (依頼 68 の表) / 十字キー上下の向き / △ で j1 → j5 → j1
-  - 守り: j1 は 90.87 を超えない / j0 ±15°・j1〜j5 ±10° / J4_SAFE / HOME のあと基準が HOME
+  - 守り: j1 は 90.87 を超えない / 物理可動域まで (基準の姿勢からの枠はない. 2026-11-03) / J4_SAFE
+  - 長押し (2026-11-03): 短い押しは 1 刻み / 押している間は送り続ける / 離す・停止・△・範囲の端で止まる /
+    指令が読んだ角度より 3° 先なら送らずに待つ / 追いつかなければ止める
   - 停止: L2・R2 の両方 > 0.0 で止まる・片方では止まらない / 停止中は受け付けない / OPTIONS で戻る / 接続が切れたら停止
   - HOME: 1 秒に満たない長押しでは送らない / 1 秒続けたら 1 回だけ送る
   - 動いている間の押しは受け付けない (ためない)
@@ -175,23 +177,26 @@
         self.assertTrue(refused and refused[-1]["refused"][0]["why"] == "at_limit")
         self.assertIn("J1_MAX", tp.last_limit)
 
-    def test_j0_15_and_others_10(self):
+    def test_home_to_pick_height(self):
+        # HOME から j1 を PICK の高さ 90.87 まで下ろせる (基準の姿勢からの ±10° の枠はない. 2026-11-03)
         tp, arm, log, _ = make()
         tp.r1 = True
+        for _ in range(50):
+            press(tp, gt.BTN_DOWN)
+        self.assertAlmostEqual(max(s[1] for s in arm.sent), 90.87)
+        self.assertFalse(any(r.get("clip") and r["clip"][0]["limit"] == "BASE" for r in log.rows))
+        # ほかの関節も ±10° を超えて動く
         for _ in range(12):
             press(tp, gt.BTN_RIGHT)
-        self.assertAlmostEqual(max(s[0] for s in arm.sent), 15.0)
-        for _ in range(20):
-            press(tp, gt.BTN_LEFT)
-        self.assertAlmostEqual(min(s[0] for s in arm.sent), -15.0)
+        self.assertAlmostEqual(arm.sent[-1][0], 24.0)
         tp.sel = 1                                          # j2
-        for _ in range(10):
+        for _ in range(15):
             press(tp, gt.BTN_UP)
-        self.assertAlmostEqual(min(s[2] for s in arm.sent), -10.0)
-        tp.sel = 4                                          # j5 (基準 -30)
+        self.assertAlmostEqual(arm.sent[-1][2], -30.0)
+        tp.sel = 4                                          # j5
         for _ in range(10):
             press(tp, gt.BTN_DOWN)
-        self.assertAlmostEqual(max(s[5] for s in arm.sent), -20.0)
+        self.assertAlmostEqual(arm.sent[-1][5], -10.0)
 
     def test_j4_safe(self):
         start = [0.0, 0.0, 0.0, 0.0, 55.0, -30.0]
@@ -204,39 +209,41 @@
         self.assertEqual([r for r in log.rows if r.get("clip")][0]["clip"][0]["limit"], "J4_SAFE")
 
     def test_window_function(self):
-        lo, hi, lo_src, hi_src = gt.joint_window([0, 85, 0, 0, 55, -30])
+        lo, hi, lo_src, hi_src = gt.joint_window()
         self.assertAlmostEqual(hi[1], 90.87)
         self.assertEqual(hi_src[1], "J1_MAX")
+        self.assertAlmostEqual(lo[4], -90.0)
         self.assertAlmostEqual(hi[4], 60.0)
-        self.assertEqual(hi_src[4], "J4_SAFE")
-        self.assertAlmostEqual(lo[0], -15.0)
-        self.assertAlmostEqual(hi[2], 10.0)
+        self.assertEqual((lo_src[4], hi_src[4]), ("J4_SAFE", "J4_SAFE"))
+        for k in (0, 2, 3, 5):                                # 残りは物理可動域
+            self.assertEqual((lo[k], hi[k]), gt.JOINT_LIMITS[k])
+            self.assertEqual((lo_src[k], hi_src[k]), ("PHYS", "PHYS"))
+        self.assertEqual(lo[1], gt.JOINT_LIMITS[1][0])
 
     def test_no_compensation_other_joints(self):
         start = [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]
-        p = gt.plan_step(start, 1, 20.0, start)
-        self.assertAlmostEqual(p["target"][1], 10.0)
+        p = gt.plan_step(start, 1, 20.0)
+        self.assertAlmostEqual(p["target"][1], 20.0)
         self.assertEqual(list(p["target"][[0, 2, 3, 4, 5]]), [0.0, 0.0, 0.0, 0.0, -30.0])
 
     def test_out_of_window_start_refuses(self):
         # 起動したときに j1 が 91 (守りの外): j1 を下げる (−) 押しも, 他の関節の押しも送らない
         start = [0.0, 91.0, 0.0, 0.0, 0.0, -30.0]
-        p = gt.plan_step(start, 0, 0.5, start)
+        p = gt.plan_step(start, 0, 0.5)
         self.assertIsNone(p["target"])
         self.assertEqual(p["refused"][0]["joint"], 1)
 
-    def test_home_rebases(self):
+    def test_home_then_continue(self):
         start = [10.0, 5.0, 0.0, 0.0, 0.0, -30.0]
         tp, arm, log, _ = make(start)
         tp.press(gt.BTN_HOME, 0.0)
         tp.tick(1.01)
         tp.poll()
         self.assertEqual(arm.sent[-1], HOME)
-        self.assertEqual(list(tp.base), HOME)
         tp.r1 = True
         for _ in range(10):
             press(tp, gt.BTN_LEFT)
-        self.assertAlmostEqual(arm.sent[-1][0], -15.0)       # 基準が HOME (j0=0) になった
+        self.assertAlmostEqual(arm.sent[-1][0], -20.0)       # HOME から続けて動く (枠はない)
 
     def test_home_bypasses_range(self):
         # 範囲の外 (j1=95) にいても HOME は送れる
@@ -258,11 +265,201 @@
         self.assertEqual(log.rows[-1]["start_source"], "measured")
 
 
+class LagArm(FakeArm):
+    """送ると「届いた」と返すが, 角度は読むたびに lag_step ずつしか追いつかない (読みが古いのと同じ)."""
+
+    def __init__(self, start=HOME, lag_step=0.0):
+        super().__init__(start)
+        self.target = np.asarray(start, dtype=float).copy()
+        self.lag_step = lag_step
+        self.reads = 0
+
+    def read(self):
+        self.reads += 1
+        d = self.target - self.q
+        self.q = self.q + np.clip(d, -self.lag_step, self.lag_step)
+        return self.q.copy()
+
+    def send_and_check(self, target, gate, quitting):
+        if not gate.run(lambda: self.sent.append([float(v) for v in target])):
+            return {"sent": False, "why": "halted_before_send"}
+        self.target = np.asarray(target, dtype=float).copy()
+        return {"sent": True, "reached": True, "reached_angles": gt._r(self.q), "reach_err": 0.0}
+
+
+def make_arm(arm, sync=True):
+    log = ListLog()
+    out = []
+    tp = gt.Teleop(arm, arm.q.copy(), log, out=out.append, spawn=lambda fn: fn())
+    return tp, log, out
+
+
+class TestHold(unittest.TestCase):
+    def test_short_press_is_one_step(self):
+        tp, arm, log, _ = make()
+        tp.press(gt.BTN_RIGHT, 0.0)
+        tp.poll()
+        tp.release(gt.BTN_RIGHT, 0.1)
+        for t in (0.4, 0.6, 1.0):
+            tp.tick(t)
+            tp.poll()
+        self.assertEqual(len(arm.sent), 1)
+
+    def test_hold_keeps_sending_until_release(self):
+        tp, arm, log, _ = make()
+        tp.press(gt.BTN_RIGHT, 0.0)
+        tp.poll()
+        for t in (0.1, 0.3, 0.39):                   # 0.4 秒までは 1 刻みだけ
+            tp.tick(t); tp.poll()
+        self.assertEqual(len(arm.sent), 1)
+        tp.tick(0.4); tp.poll()
+        tp.tick(0.5); tp.poll()                      # 間隔 0.2 秒に満たない
+        tp.tick(0.6); tp.poll()
+        tp.tick(0.8); tp.poll()
+        self.assertEqual([s[0] for s in arm.sent], [0.5, 1.0, 1.5, 2.0])
+        moves = [r for r in log.rows if r["kind"] == "move"]
+        self.assertEqual([r["hold_n"] for r in moves], [0, 1, 2, 3])
+        self.assertEqual(len({r["hold_id"] for r in moves}), 1)
+        tp.release(gt.BTN_RIGHT, 0.85)
+        for t in (1.0, 1.2, 2.0):
+            tp.tick(t); tp.poll()
+        self.assertEqual(len(arm.sent), 4)
+
+    def test_hold_up_down_selected_joint_and_r1(self):
+        tp, arm, log, _ = make()
+        tp.sel = 1                                    # j2
+        tp.press(gt.BTN_UP, 0.0); tp.poll()
+        tp.tick(0.4); tp.poll()
+        tp.press(gt.BTN_R1, 0.45)                     # 途中で R1: 刻みが 2° に
+        tp.tick(0.6); tp.poll()
+        self.assertEqual([s[2] for s in arm.sent], [-0.5, -1.0, -3.0])
+        self.assertIsNotNone(tp.hold)                 # R1 では長押しは止まらない
+
+    def test_triangle_and_other_buttons_end_hold(self):
+        tp, arm, log, _ = make()
+        tp.press(gt.BTN_DOWN, 0.0); tp.poll()
+        tp.press(gt.BTN_TRIANGLE, 0.1)
+        tp.tick(0.5); tp.poll()
+        self.assertEqual(len(arm.sent), 1)
+        tp.press(gt.BTN_RIGHT, 1.0); tp.poll()
+        tp.press(gt.BTN_CIRCLE, 1.1); tp.poll()       # 爪で止まる
+        tp.tick(1.5); tp.poll()
+        self.assertEqual(len(arm.sent), 2)
+
+    def test_stop_ends_hold_and_resume_does_not_revive(self):
+        tp, arm, log, _ = make()
+        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
+        tp.tick(0.4); tp.poll()
+        tp.set_triggers(0.5, 0.5)
+        tp.tick(0.6); tp.poll()
+        self.assertEqual(len(arm.sent), 2)
+        self.assertIsNone(tp.hold)
+        tp.set_triggers(-1.0, -1.0)
+        press(tp, gt.BTN_OPTIONS, 0.7)
+        tp.tick(0.9); tp.tick(1.2); tp.poll()        # 押しっぱなしでも, 押し直すまで動かない
+        self.assertEqual(len(arm.sent), 2)
+
+    def test_disconnect_ends_hold(self):
+        tp, arm, log, _ = make()
+        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
+        tp.controller_lost("controller_disconnected")
+        tp.tick(0.5); tp.poll()
+        self.assertEqual(len(arm.sent), 1)
+        self.assertIsNone(tp.hold)
+
+    def test_limit_ends_hold_without_repeating_lines(self):
+        start = [0.0, 89.0, 0.0, 0.0, 0.0, -30.0]
+        tp, arm, log, _ = make(start)
+        tp.r1 = True
+        tp.press(gt.BTN_DOWN, 0.0); tp.poll()         # 89 → 90.87 (切られて端まで)
+        self.assertAlmostEqual(arm.sent[-1][1], 90.87)
+        tp.tick(0.4); tp.poll()                       # 端: 送らない → 長押しを止める
+        n_rows = len(log.rows)
+        for t in (0.6, 0.8, 1.0, 2.0):
+            tp.tick(t); tp.poll()
+        self.assertEqual(len(arm.sent), 1)
+        self.assertEqual(len(log.rows), n_rows)       # 同じ行を繰り返さない
+        self.assertIsNone(tp.hold)
+        self.assertEqual(log.rows[-1]["refused"][0]["why"], "at_limit")
+
+    def test_waits_for_arm_and_never_leads_more_than_3(self):
+        arm = LagArm(lag_step=0.2)                    # 読むたびに 0.2° しか追いつかない
+        tp, log, out = make_arm(arm)
+        tp.r1 = True
+        with mock.patch.object(gt, "HOLD_POLL_SEC", 0.0):
+            tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
+            t = 0.4
+            for _ in range(8):
+                tp.tick(t); tp.poll()
+                t += 0.2
+        self.assertEqual(len(arm.sent), 9)
+        sent_rows = [r for r in log.rows if r["kind"] == "move" and r.get("sent") is True]
+        for r in sent_rows[1:]:                      # 送る前に読んだ角度は, 直前の指令から 3° 以内
+            prev_cmd = sent_rows[sent_rows.index(r) - 1]["command"][0]
+            self.assertLessEqual(abs(prev_cmd - r["measured_before"][0]), gt.HOLD_LEAD_MAX_DEG + 1e-9)
+        self.assertTrue(any(r.get("hold_wait_sec", 0) >= 0 and r.get("hold_n", 0) > 0 for r in sent_rows))
+
+    def test_arm_not_following_ends_hold(self):
+        arm = LagArm(lag_step=0.0)                    # まったく動かない (読みは 0 のまま, 送ると「届いた」)
+        tp, log, out = make_arm(arm)
+        tp.r1 = True
+        with mock.patch.object(gt, "HOLD_POLL_SEC", 0.0), mock.patch.object(gt, "HOLD_WAIT_MAX_SEC", 0.05):
+            tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
+            t = 0.4
+            for _ in range(6):
+                tp.tick(t); tp.poll()
+                t += 0.2
+        self.assertEqual([s[0] for s in arm.sent], [2.0, 4.0])   # 差 2 → 送る, 差 4 → 待って止める
+        self.assertIsNone(tp.hold)
+        self.assertEqual([r for r in log.rows if r["kind"] == "move"][-1]["why"], "arm_not_following")
+        self.assertTrue(any("追いつきません" in o for o in out))
+
+    def test_release_while_waiting_does_not_send(self):
+        arm = LagArm(lag_step=0.0)
+        tp, log, out = make_arm(arm)
+        tp.r1 = True
+        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
+        tp.tick(0.4); tp.poll()                       # 4.0 を送った (読みは 0)
+        orig = arm.read
+
+        def read_then_release():
+            q = orig()
+            if arm.reads > 6:
+                tp.hold = None                        # 待っている間に離した
+            return q
+        arm.read = read_then_release
+        with mock.patch.object(gt, "HOLD_POLL_SEC", 0.0), mock.patch.object(gt, "HOLD_WAIT_MAX_SEC", 5.0):
+            tp.tick(0.6); tp.poll()
+        self.assertEqual(len(arm.sent), 2)
+        last = [r for r in log.rows if r["kind"] == "move"][-1]
+        self.assertEqual(last["why"], "hold_released")
+        self.assertFalse(any("送らない" in o and "長押し 2" in o for o in out))
+
+    def test_stop_while_waiting_does_not_send(self):
+        arm = LagArm(lag_step=0.0)
+        tp, log, out = make_arm(arm)
+        tp.r1 = True
+        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
+        tp.tick(0.4); tp.poll()
+        orig = arm.read
+
+        def read_then_stop():
+            q = orig()
+            if arm.reads > 6 and tp.gate is not None:
+                tp.gate.cancel_now()                  # 待っている間に L2+R2 (取り消し)
+            return q
+        arm.read = read_then_stop
+        with mock.patch.object(gt, "HOLD_POLL_SEC", 0.0), mock.patch.object(gt, "HOLD_WAIT_MAX_SEC", 5.0):
+            tp.tick(0.6); tp.poll()
+        self.assertEqual(len(arm.sent), 2)
+        self.assertEqual([r for r in log.rows if r["kind"] == "move"][-1]["why"], "halted_before_send")
+
+
 class TestCodexR1(unittest.TestCase):
     def test_selected_joint_out_of_window_not_clamped(self):
         # 基準 j1=100 (守りの外) から −0.5 を押しても 90.87 へ 1 回で動かさない
         start = [0.0, 100.0, 0.0, 0.0, 0.0, -30.0]
-        p = gt.plan_step(start, 1, -0.5, start)
+        p = gt.plan_step(start, 1, -0.5)
         self.assertIsNone(p["target"])
         self.assertEqual(p["refused"][0]["why"], "start_out_of_window")
         tp, arm, log, _ = make(start)
@@ -271,7 +468,7 @@
 
     def test_physical_limit_ends(self):
         base = [0.0, 0.0, 170.0, 0.0, 0.0, -30.0]       # j2 の物理可動域は ±177
-        p = gt.plan_step(base, 2, 20.0, base)
+        p = gt.plan_step(base, 2, 20.0)
         self.assertAlmostEqual(p["target"][2], 177.0)
         self.assertEqual(p["clip"][0]["limit"], "PHYS")
 
@@ -282,7 +479,7 @@
         press(tp, gt.BTN_RIGHT)
         self.assertAlmostEqual(arm.sent[-1][0], 10.5)   # 今読んだ角度から 0.5
         self.assertEqual(log.rows[-1]["start_source"], "measured")
-        arm.q[0] = -20.0                                # 基準から ±15 の外 → 送らない
+        arm.q[0] = -170.0                               # 物理可動域 (-156) の外 → 送らない
         press(tp, gt.BTN_RIGHT)
         self.assertEqual(len(arm.sent), 2)
 
```
````

#### 別の Claude のレビューの全文

```markdown
# gamepad_teleop.py 長押しと範囲変更のレビュー（2026-11-03）

**確かめた範囲：** 依頼文・`gamepad_teleop.py` 全体・`test_gamepad_teleop.py` を読みました。ここには pygame と、定数を読む元のファイル（`run_policy_client.py`・`waypoint_replay.py`）がないので、64 件のテストは流せていません。代わりに、`gamepad_teleop.py` をスクラッチに写し、定数と pygame を仮のものに差し替えて、下の A・B・C の道を実際に起こして確かめました。元のファイルは何も変えていません。

## 必須

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| A. 動いている間に押した十字キーが、受付なしと出たあとで長押しとして動き出す（L723-736, L789-793） | 必須 | **起きる順番：** HOME や爪の仕事で busy の間に十字キー下を押す。`press` が L731 で `self.hold` を作ってから `_request` を呼び、`_request` は busy で断る。画面には「[受付なし] 前の操作が終わっていません（ためません）」と出る。それでも `hold` は残っているので、busy が解けたあとの `tick`（L766-776）が 0.2 秒おきに送り始める。<br>**確かめた結果：** 爪の仕事の間に下を押して断られたあと、tick 4 回で j1 が 0.5→1.0→1.5→2.0 と送られた。<br>停止中に押した場合も `hold` は残る。ただしこちらは、再開に使う OPTIONS が L703 で長押しを消すので動かない。<br>HOME の長押しには「押し始めに受け付けられなければ、続けても送らない」という決まりがある（L715-717、codex 必須 4）。十字キーの長押しはこの決まりと食い違っている。<br>**直し方：** `press` で `_request` のあとに `if not e.get("accepted"): self.hold = None` を足す。または、停止中・busy のときは `hold` を作らない。直したらテストを 1 件足す（busy の間に押して押し続ける → 送られた数が増えない）。 |

## 推奨

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| B. 離したあとに 1 刻み送られることがある（L816-838, L856） | 推奨 | 待つループ（L820-831）は、先に角度の差を見て 3° 以内ならすぐ抜ける。長押しが生きているかを見るのは、差が 3° を超えているときだけ（L826）。そのため次の 2 つの道で、離したあとに 1 刻みが出る。<br>(1) 仕事が始まって角度を読んでいる間に離した。<br>(2) 待っている途中で離し、ちょうど次に読んだ角度で追いついた。<br>**確かめた結果：** 2 つとも実際に送られた（j0 が 0.5→1.0、2.0→4.0）。<br>出るのは 1 刻み（2° まで）なので、大きく走り続ける道ではありません。ただ、読み取りが遅いと（`read_angles` の読み直し）、離してから数秒たって 1 刻みが届くことがあります。説明（L15「離したら直前の指令までで止まる」）とも合いません。<br>**直し方：** `release` で、走っている仕事がこの長押しの 2 回目以降（`hold_n>=1`）なら `self.gate.cancel_now()` を呼ぶ。SendGate の鍵で「送ると決める」と順番が決まるので、決める前なら必ず止まる。あわせて `_apply` で、停止していないときの `halted_before_send` は「離した」と表示を分ける。1 回目（`hold_n=0`、短く押した分）は取り消さないこと。 |
| C. アームより先へ出る量は 3° ではなく「3° + 刻み」（L821, L842-846） | 推奨 | 送ってよいかの判断は「直前の指令と読んだ角度の差 ≤ 3°」で、そのあと指令 + 刻みを送る。なので、読んだ角度より先へ出る量は最大 3 + 2 = 5°（R1 のとき）になる。止まらない道ではなく、上限が 5° に決まっている。読む角度が古い場合は、アームは実際にはもっと進んでいるので、安全な側にずれる。<br>**直し方：** 説明と `HOLD_LEAD_MAX_DEG` の注記を「最大 3° + 刻み」に直す。または、作った目標で `max|target − q| ≤ 3` になるまで待つ。 |
| D. 離した合図を取りこぼすと、物理可動域の端まで動き続ける（L744-746, L1033-1039） | 推奨 | 長押しを止めるのは、ボタンを離した合図・停止・ほかのボタンだけ。コントローラーの今の状態は見直していない。合図を取りこぼす道（Bluetooth の乱れで接続が切れたことにならないとき、手前にないウィンドウで合図が届かないとき）では、範囲の端まで送り続ける。前の ±10° の枠がなくなったので、この道で動く量は大きくなった。<br>**直し方：** `run_loop` で毎コマ `js.get_button(tp.hold["button"])` を見て、押されていなければ `tp.release(...)` を呼ぶ。手を離せば止まる仕組みを、合図とボタンの状態の 2 本立てにする。 |
| E. 物理可動域まで広げたので、机や本体に当たる道がある（L256-271） | 推奨 | j1 は 90.87 で切られる。しかし j2・j4 も手先を下げる向きに効く（L205 のコメント）。j1 を 90.87 にしたまま j2 や j4 を下へ長押しすると、手先が机の高さより下へ行く指令を止める守りはない。j2 の ±177 などは、ぶつからない範囲ではない。範囲を広げたのはエイイチの決定なので、禁止にはしません。<br>**案：** FK で手先の高さが机 + 余白を下回る目標を断る守りを足す（`fk_lookup` が使えるか確かめる）。または、j2・j4 だけ PICK のデータが届く範囲までにする。<br>**初回の試し方：** R1 なし（0.5°）で、机に近いところでは短い長押しだけ。L2+R2 は、送った 1 刻み（先へ出る量 5° まで）は止めないことを前提にする。 |
| F. 机などに押し当たって追いつかないとき、最後の指令が残り続ける（L829-831, L933-940） | 推奨 | 当たって追いつかないと 3 秒で長押しは止まる。しかし最後の指令（読んだ角度より最大 5° 先）は残るので、サーボは押し続ける。逆向きを 1 回押せば、読んだ角度を出発点にして戻れる（L842-843）。<br>**直し方：** `arm_not_following` の表示に「当たっていれば逆向きを 1 回押すか、HOME で戻してください」と足す。 |

## 据え置き

| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|
| 停止（L2+R2）・接続が切れたときと SendGate の関係 | 問題なし | 送り口は `gate.run` の中だけ（L420・L458・L460）。ほかに送る道はない。<br>待つループは `gate.cancel` と `quitting` を見ている（L823）。待ち終えて抜けても、送る直前に `gate.run` の鍵の中でもう一度確かめる。<br>`enter_stop` は長押しを消してから取り消しを立てる（L641-642）。`tick` は止まっている間は送らない（L767）。再開は OPTIONS を押したときに長押しも消える（L703）ので、押し直すまで動かない。<br>接続が切れたとき・読み取りに失敗したときも `enter_stop` を通る。今回の変更が SendGate を抜ける道は見つからなかった。 |
| スレッド（`_hold_alive` が `self.hold` を読む） | 問題なし（B を除く） | 送る仕事のスレッドは読むだけで、書くのは pygame のループ側だけ。参照の読み出しは一度に行われ、`h["id"]` は作ったあと変わらない。`tick` が書き換えるのは `n` と `last_req_at` だけ。壊れた値を読む道はない。残るのは、確かめてから送るまでの間の食い違いだけで、これは B として上に書いた。 |
| 出発点が範囲の外のとき・HOME | 問題なし | 枠が固定になっただけで、判定は変わっていない。出発点の 6 関節のどれかが範囲の外なら送らない（L296-302）。長押しでもこれで送れなければ長押しを止める（L939-940）。<br>HOME `[0,0,0,0,0,-30]` は範囲の中にある。HOME を押すと十字キーの長押しは止まる（L703）。 |
| ログに同じ行がたくさん出る・壊れる | 問題なし | 1 刻み = 1 行。busy の間は `tick` が仕事を作らないので「受付なし」の行は出ない。範囲の端・追いつかない・出発点が範囲の外では、1 行出したあと長押しを止める（L939-940、テストあり）。`hold_released` はログに 1 行だけ残り、画面には出ない。<br>小さな改善：送れたときにも `hold_lead_deg` を残すと、あとでアームの遅れを分析できる。 |
| 6 関節すべての差で待つ | このまま | j1 の重さによる 2〜3° の不足が 3° を超えると、j0 の長押しも 3 秒で止まりやすい。それでも、動かす関節だけで判定すると、出発点が読んだ角度になったときに、ほかの関節（j1 の沈み）を毎回読んだ値で送り直して、ずり下がっていく道ができる。今のままが安全な側。初回のログの `hold_lead_deg` と `arm_not_following` の回数を見て決める。 |
| テストが本当のスレッドを使っていない | このまま | `spawn` がその場で呼ぶ形なので、別スレッドとの食い違いは試されていない。A と B を直すときに、`read` に差し込んだ処理で離す・押す再現テストを足すとよい（今回スクラッチで同じやり方で確かめた）。 |

**実機で試してよいか：** 必須 A を直してから、R1 なし（0.5°）の短い長押しで試してください。B〜F は、直す前でも動く量の上限はおおむね 1 刻みか 5° までです。ただし D（離した合図の取りこぼし）と E（机に当たる道）は、範囲を広げたことで影響が大きくなっているので、早めに直すのがよいです。
```

直すべき点は1つでした。動いている間に押した十字キーは受付なしと出るのに、押し続けるとあとから長押しとして動き出していました。HOME の長押しには、押し始めに受け付けられなければ押し続けても送らない、という決まりがあり、それと食い違っています。押し始めに受け付けられなかった押しは長押しにしない形に直しました。

推奨5つのうち、離したあとに1刻み出る道（B）、先へ出る量の説明（C）、離した合図の取りこぼし（D）、当たったときの表示（F）を直しました。机に当たる道（E）は、範囲を広げたのが決めたことなので、止めは足していません。

#### docs/review_result_20261103_gamepad_hold.md

```markdown
# レビュー結果：gamepad_teleop.py の範囲を物理可動域にし、十字キーの長押しで動き続けるようにした（2026-11-03）

依頼文: docs/review_request_20261103_gamepad_hold.md。レビューは、実装した Claude とは別の Claude のエージェント（読み取りのみ。codex は Mac の外から呼べなかったので使っていない）。

| 指摘 | 分類 | 対応 |
|---|---|---|
| A. 動いている間・停止中に押した十字キーが、受付なしと出たあと押し続けると長押しとして動き出す | 必須 | 直した。押し始めに受け付けられなければ長押しにしない（HOME の長押しと同じ）。テスト 2 件 |
| B. 離したあとに 1 刻み送られることがある | 推奨 | 直した。離したとき、長押しの 2 回目からの刻みをまだ送ると決めていなければ SendGate で取り消す。1 回目（短い押し）は取り消さない。テスト 2 件 |
| C. 先へ出る量は 3° ではなく 3° + 1 刻み | 推奨 | 説明と定数の注記を直した |
| D. 離した合図を取りこぼすと物理可動域の端まで動き続ける | 推奨 | 直した。長押しの最中は毎コマ js.get_button を見て、押されていなければ離したことにする。読めなければ停止。テスト 1 件 |
| E. 物理可動域まで広げたので、j2・j4 を下げる向きで机に当たる道がある | 推奨 | 据え置き。範囲はエイイチの決定。初回は R1 なし（0.5°）の短い長押しで試す |
| F. 当たって追いつかないとき最後の指令が残る | 推奨 | 表示に「逆向きを1回押すか HOME で戻してください」を足した |
| 送れたときにも hold_lead_deg を残す | 小さな改善 | 足した |

テスト: 69 件すべて通過（前からの 53 件・長押し 11 件・レビュー対応 5 件）。実機ではまだ流していない。
```

- ねらい：離した合図を取りこぼしても、長押しが範囲の端まで走り続けないようにする
- 変わったこと：長押しの間は、毎コマ（60回／秒）コントローラーのボタンの状態も見て、押されていなければ離したことにする。読めなければ停止
- 見込める効果：Bluetooth の乱れで離した合図が届かなくても止まる見込み。実機で合図を取りこぼした場面は、この回の記録にはまだない

テストは69件すべて通り、Mac で36def3cとしてコミットしました。


## 7:49：長押しが動かない。0.5°では関節が動かず、1回の送信に約1.6秒かかっていた

```text
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % cd ~/r2r2r-scripts
git add tools/gamepad_teleop.py tools/test_gamepad_teleop.py docs/review_request_20261103_gamepad_hold.md docs/review_result_20261103_gamepad_hold.md
git commit -m "gamepad_teleop: 範囲を物理可動域に (j1 90.87・J4_SAFE は残す), 十字キーの長押しで送り続ける (0.4 秒から 0.2 秒おき・指令と読んだ角度の差 3° 超は 待つ・3 秒追いつかなければ止める・離したら未送信の刻みを取り消す・毎コマ ボタン の状態も見る). テスト 69 件

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LevEXRnwfWWxYdvM8WRMgs"
python3 tools/gamepad_teleop.py --execute
[main 36def3c] gamepad_teleop: 範囲を物理可動域に (j1 90.87・J4_SAFE は残す), 十字キーの長押しで送り続ける (0.4 秒から 0.2 秒おき・指令と読んだ角度の差 3° 超は待つ・3 秒追いつかなければ止める・離したら未送信の刻みを取り消す・毎コマ ボタンの状態も見る). テスト 69 件
 4 files changed, 1144 insertions(+), 61 deletions(-)
 create mode 100644 docs/review_request_20261103_gamepad_hold.md
 create mode 100644 docs/review_result_20261103_gamepad_hold.md
/opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import resource_stream, resource_exists
objc[7735]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1020812c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db88e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1020813b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db89d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8a20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1020814d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8a98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8ae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8b38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1020815c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8b88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1020815e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8bb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8bd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8c50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8cc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8d18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102081778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8d40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7735]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1020817c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x112db8d90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
[記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_074936
[実機] daemon に送ります。起動したときの姿勢: -0.43 +1.23 +1.31 -0.26 -0.17 -29.70
コントローラーを待っています（つないでいなければ、今つないでください）
[接続] PS4 Controller  GUID=03008fe54c050000cc09000000016800  軸=6  ボタン=16
[送信] j0 -0.5° → -0.93 +1.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.79°）  届いた角度 -0.43 +2.02 +2.02 -0.26 -0.17 -29.70
[送信] j1 -0.5° → -0.93 +0.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.29°）  届いた角度 -0.43 +2.02 +2.02 -0.17 -0.17 -29.70
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 +0.5° → -0.93 +1.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.79°）  届いた角度 -0.43 +2.02 +2.02 -0.17 -0.17 -29.70
[送信] j0 +0.5° → -0.43 +1.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.79°）  届いた角度 -0.43 +2.02 +2.10 -0.17 -0.17 -29.70
[送信] j0 +0.5°（長押し 1） → +0.07 +1.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.79°）  届いた角度 -0.43 +2.02 +2.10 -0.17 -0.17 -29.70
[送信] j0 -0.5° → -0.43 +1.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.79°）  届いた角度 -0.43 +2.02 +2.10 -0.17 -0.17 -29.70
[関節] 上下で動かす関節を j2 にしました
[関節] 上下で動かす関節を j3 にしました
[関節] 上下で動かす関節を j4 にしました
[関節] 上下で動かす関節を j5 にしました
  [Pi] GRIPPER: OPEN result= -1
[関節] 上下で動かす関節を j1 にしました
[爪] 爪を開く（待ち 0.8 秒のあと受付）
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 -0.5° → -0.43 +0.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.29°）  届いた角度 -0.43 +2.02 +2.10 -0.17 -0.17 -29.70
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 +2.0° → -0.43 +2.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.96°）  届いた角度 -0.43 +3.69 +2.10 -0.17 -0.17 -29.70
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 +2.0° → -0.43 +4.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.8°）  届いた角度 -0.43 +5.53 +2.10 -0.17 -0.17 -29.70
[送信] j0 -0.5° → -0.93 +4.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.8°）  届いた角度 -0.43 +5.53 +2.10 -0.17 -0.17 -29.70
[送信] j0 +0.5° → -0.43 +4.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.8°）  届いた角度 -0.43 +5.53 +2.10 -0.17 -0.17 -29.70
[送信] j0 +0.5° → +0.07 +4.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.8°）  届いた角度 -0.43 +5.53 +2.10 -0.17 -0.17 -29.70
[送信] j1 +0.5° → +0.07 +5.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.83°）  届いた角度 -0.43 +6.06 +2.10 -0.17 -0.17 -29.79
[送信] j1 +0.5°（長押し 1） → +0.07 +5.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.86°）  届いた角度 -0.43 +6.59 +2.10 -0.17 -0.17 -29.79
[送信] j1 +0.5°（長押し 2） → +0.07 +6.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.8°）  届いた角度 -0.43 +7.03 +2.10 -0.17 -0.17 -29.79
[送信] j1 +0.5°（長押し 3） → +0.07 +6.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.82°）  届いた角度 -0.43 +7.55 +2.10 -0.17 -0.17 -29.79
[送信] j1 +0.5°（長押し 4） → +0.07 +7.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.94°）  届いた角度 -0.43 +8.17 +2.10 -0.17 -0.17 -29.79
[送信] j1 +0.5°（長押し 5） → +0.07 +7.73 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.79°）  届いた角度 -0.43 +8.52 +2.10 -0.17 -0.17 -29.79
[送信] j1 +0.5°（長押し 6） → +0.07 +8.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.82°）  届いた角度 -0.43 +9.05 +2.10 -0.17 -0.17 -29.79
[送信] j1 +2.0°（長押し 7） → +0.07 +10.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.02°）  届いた角度 -0.43 +11.25 +2.10 -0.17 -0.17 -29.79
[送信] j1 +2.0°（長押し 8） → +0.07 +12.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.04°）  届いた角度 -0.43 +13.27 +2.10 -0.08 -0.17 -29.79
[送信] j1 +2.0°（長押し 9） → +0.07 +14.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.97°）  届いた角度 -0.43 +15.20 +2.10 -0.08 -0.08 -29.79
[送信] j1 +2.0°（長押し 10） → +0.07 +16.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 0.99°）  届いた角度 -0.43 +17.22 +2.10 +0.00 -0.08 -29.79
[受付なし] 前の操作が終わっていません（ためません）
[送信] j1 +2.0°（長押し 11） → +0.07 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 -0.43 +19.33 +2.10 +0.00 -0.08 -29.79
[送信] j0 +0.5° → +0.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +0.43 +19.33 +2.10 +0.00 -0.08 -29.79
[送信] j0 +2.0°（長押し 1） → +2.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +2.63 +19.33 +2.10 +0.08 -0.08 -29.79
[送信] j0 +2.0°（長押し 2） → +4.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +4.74 +19.33 +2.10 +0.08 -0.08 -29.79
[送信] j0 +2.0°（長押し 3） → +6.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +6.67 +19.33 +2.10 +0.08 -0.08 -29.79
[送信] j0 +2.0°（長押し 4） → +8.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +8.52 +19.33 +2.10 +0.17 -0.08 -29.79
[送信] j0 +2.0°（長押し 5） → +10.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +10.63 +19.33 +2.10 +0.17 -0.08 -29.79
[送信] j0 +2.0°（長押し 6） → +12.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +12.83 +19.33 +2.10 +0.08 -0.08 -29.79
[送信] j0 +2.0°（長押し 7） → +14.57 +18.23 +1.31 -0.26 -0.17 -29.70  届いた（ずれ 1.1°）  届いた角度 +14.85 +19.33 +2.10 +0.08 -0.08 -29.88
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 2.02°）  届いた角度 +0.00 +1.31 +2.02 +0.08 -0.08 -29.88
^C
[終了] Ctrl+C
[終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_074936
```

> ちゃんと動いてなくない？

記録を見ると、2つのことが重なっていました。

1つ目は、0.5°の押しではサーボが反応しないことです。0.5°の送信のうち、読んだ角度が0.2°以上動いたのは、7:14 の記録で7回中3回、7:49 の記録で18回中8回でした。2°の送信は毎回動いています。始めの1押しを左右に交互に押すと、指令だけが行ったり来たりして、アームは止まったままでした。

2つ目は、1回の仕事に約1.6秒かかっていたことです。長押しの2回目以降を送った間隔は、中央1.630秒でした。送る前の読み取りは約0.04秒、送ったあと届いたかの確かめは0.02秒前後で、残りは `daemon_send_angles` の返事を待つ時間です。長押しの速さは毎秒1.0°でした。

ゲームパッドの1押しは、次のように決めました。

| 決めたこと | 選んだもの |
|---|---|
| ふつうの1押し | 1°（R1 を押しながらは2°のまま）。7:14 の記録で、1°の差は動いていた |
| 1.6秒の遅さ | daemon の遅さを調べて直す |


## 7:53：daemon の pymycobot 4.0.4 が、送るたびに返事を0.5秒×3回待っていた

daemon（`mecharm_daemon.py`）は、`send_angles` の前後の時間を `daemon.log` に書いています。daemon は `from pymycobot.mycobot import MyCobot` で読み込み、`_mc.send_angles(angles, speed)` を呼ぶだけです。daemon のコードは変えていないので、変わったのはライブラリの側だと考え、pymycobot の 4.0.4 と 2.9.6 の中身を PyPI から取ってきて比べました。

#### pymycobot 4.0.4 と 2.9.6 の該当箇所（PyPI の配布物から）

```python
=== pymycobot 4.0.4 generate.py (send_angles)
    def send_angles(self, angles, speed, _async=False):
        """Send the angles of all joints to robot arm.

        Args:
            angles: a list of angle values(List[float]). len 6.
            speed : (int) 1 ~ 100
        """
        self.calibration_parameters(class_name=self.__class__.__name__, angles=angles, speed=speed)
        angles = [self._angle2int(angle) for angle in angles]
        return self._mesg(ProtocolCode.SEND_ANGLES, angles, speed, has_reply=True, _async=_async)

=== pymycobot 4.0.4 mycobot.py (MyCobot._mesg / _res)
    def _mesg(self, genre, *args, **kwargs):
        """

        Args:
            genre: command type (Command)
            *args: other data.
                   It is converted to octal by default.
                   If the data needs to be encapsulated into hexadecimal,
                   the array is used to include them. (Data cannot be nested)
            **kwargs: support `has_reply`
                has_reply: Whether there is a return value to accept.
        """
        real_command, has_reply, _async = super(
            MyCobot, self)._mesg(genre, *args, **kwargs)
        if self.thread_lock:
            with self.lock:
                return self._res(real_command, has_reply, genre)
        else:
            return self._res(real_command, has_reply, genre)
            
    def _res(self, real_command, has_reply, genre):
        try_count = 0
        while try_count < 3:
            self._write(self._flatten(real_command))
            data = self._read(genre)
            if data is not None and data != b'':
                break
            try_count += 1
        else:
            return -1

=== pymycobot 4.0.4 common.py (read の待ち時間)
def read(self, genre, method=None, command=None, _class=None, timeout=None, real_command=None):
    datas = b""
    data_len = -1
    k = 0
    pre = 0
    t = time.time()
    if platform.system() == "Windows":
        wait_time = 0.15
    else:
        wait_time = 0.5
    if method is not None:
        wait_time = 0.3
    if timeout is not None:
        wait_time = timeout

=== pymycobot 2.9.6 generate.py (send_angles)
    def send_angles(self, degrees, speed):
        """Send the degrees of all joints to robot arm.

        Args:
            degrees: a list of degree values(List[float]).\n
                        for mycobot: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0].\n
                        for mypalletizer: [0.0, 0.0, 0.0, 0.0]
                        for mypalletizer 340: [0.0, 0.0, 0.0]
            speed : (int) 0 ~ 100
        """
        # self.calibration_parameters(degrees=degrees, speed=speed)
        degrees = [self._angle2int(degree) for degree in degrees]
        return self._mesg(ProtocolCode.SEND_ANGLES, degrees, speed)

=== pymycobot 2.9.6 mycobot.py (_mesg)
    def _mesg(self, genre, *args, **kwargs):
        """

        Args:
            genre: command type (Command)
            *args: other data.
                   It is converted to octal by default.
                   If the data needs to be encapsulated into hexadecimal,
                   the array is used to include them. (Data cannot be nested)
            **kwargs: support `has_reply`
                has_reply: Whether there is a return value to accept.
        """
        real_command, has_reply = super(
            MyCobot, self)._mesg(genre, *args, **kwargs)
        self._write(self._flatten(real_command))

        if has_reply:
            data = self._read(genre)
            if genre == ProtocolCode.SET_SSID_PWD:
                return None
            res = self._process_received(data, genre)

=== pymycobot 2.9.6 common.py (read の待ち時間)
def read(self, genre):
    datas = b""
    data_len = -1
    k = 0
    pre = 0
    t = time.time()
    wait_time = 0.1
    if genre == ProtocolCode.GET_SSID_PWD:
        time.sleep(0.1)
        if self._serial_port.inWaiting()>0:
            datas = self._serial_port.read(self._serial_port.inWaiting())
        return datas
    elif genre == ProtocolCode.GET_ACCEI_DATA:
        wait_time = 1
    while True and time.time() - t < wait_time: 
        data = self._serial_port.read()

=== pymycobot 2.9.6 generate.py (jog_angle / jog_stop)
    def jog_angle(self, joint_id, direction, speed):
        """Jog control angle.

        Args:
            joint_id: int
                    For mycobot: int 1-6.\n
                    For mypalletizer: int 1-4.
                    For mypalletizer 340: int 1-3.
            direction: 0 - decrease, 1 - increase
            speed: int (0 - 100)
        """
        return self._mesg(ProtocolCode.JOG_ANGLE, joint_id, direction, speed)

    def jog_stop(self):
        """Stop jog moving"""
        return self._mesg(ProtocolCode.JOG_STOP)
```

4.0.4 は `send_angles` を `has_reply=True`（返事を受け取る）で送ります。古い `MyCobot` のクラスは、返事が来るまで、指令を書いて0.5秒待つことを3回まで繰り返し、来なければ −1 を返します。mechArm 270-Pi のファームウェア（get_system_version は11）は、この命令に返事を返さないので、毎回 0.5秒×3回 = 1.5秒待ち、同じ指令を3回書いていました。爪の命令も同じで、ずっと出ていた `result= -1` はこれでした。2.9.6 は返事を待たずに、書いたらすぐ返ります。

10月30日の夜（依頼36。コミットは10月31日の 3fa44b5）に、daemon を systemd で自動で起動する形にしました。起動スクリプト `mecharm_daemon_start.sh` は `/usr/bin/python3` を何も付けずに起動するので、`~/.bashrc` の PYTHONPATH が入らず、4.0.4 が読まれます。それより前は、対話のシェルで手で起動していて 2.9.6 でした。10月31日（LOG417）と11月1日（LOG422）の実機の推論も、この daemon を通っていました。11月1日の推論の作業の記録（依頼57）にも `送ってから rpc が返るまで（約 1.6 秒。daemon が着いたと判定するまで）` とあり、推論も同じ待ちを通っていたことになります。

起動スクリプトで 2.9.6 を読むように、`export PYTHONPATH=/usr/local/lib/python2.7/dist-packages` を足し、起動の行に読んだ pymycobot の版を書くようにしました。

#### tools/pi/mecharm_daemon_start.sh（直したあとの全文）

```bash
#!/bin/bash
# mecharm_daemon_start.sh (Pi 側, systemd mecharm-daemon.service から呼ぶ)
# - シリアルの準備を待ってから mecharm_daemon.py を起動する
# - すでに 5555 を受け付けている / デーモンのプロセスがいるときは起動しない (二重起動防止)
# - ログは今までどおり /home/ubuntu/daemon.log に足していく
# このファイルのコマンド行は「mecharm_daemon_start.sh」なので
# 下の pgrep -f '[m]echarm_daemon\.py' は自分に当たらない。

LOG=/home/ubuntu/daemon.log
DAEMON=/home/ubuntu/mecharm_daemon.py
SERIAL=/dev/ttyAMA0
BOOT_WAIT_SEC=5

stamp() { echo "[START $(date '+%H:%M:%S')] $*" >> "$LOG"; }

# シリアルの準備を待つ (最大 30 秒, その後さらに BOOT_WAIT_SEC 秒)
for i in $(seq 1 30); do
    [ -e "$SERIAL" ] && break
    sleep 1
done
sleep "$BOOT_WAIT_SEC"

if ss -ltn | grep -q ':5555 '; then
    stamp "5555 はすでに LISTEN 中。起動しない"
    exit 0
fi
if pgrep -f '[m]echarm_daemon\.py' > /dev/null; then
    stamp "mecharm_daemon.py のプロセスがすでにいる。起動しない"
    exit 0
fi

# pymycobot は対話シェル (~/.bashrc) と同じ 2.9.6 を読む (2026-11-03).
# 何も付けずに起動すると 4.0.4 を読み, send_angles・爪のたびに返事を 0.5 秒 × 3 回待って
# 同じ指令を 3 回書き, -1 を返す (1 回の送信が約 1.6 秒. 10-31 に systemd で起動するようにしてから)
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages
stamp "mecharm_daemon.py を起動する ($(/usr/bin/python3 -c 'import pymycobot; print("pymycobot", pymycobot.__version__, pymycobot.__file__)' 2>&1))"
cd /home/ubuntu
exec /usr/bin/python3 -u "$DAEMON" >> "$LOG" 2>&1
```

ゲームパッドの1押しは 0.5° から 1° にしました（テストは0.5°の刻みで書いてあるので、テストの中だけ0.5°にし、実際の値が1°であることを別のテストで確かめる形にした）。

Pi のログで裏付けを取ってから、起動スクリプトを入れ替えて daemon を起動し直しました。

#### daemon.log の確かめと、起動スクリプトの入れ替え・daemon の起動し直し（300〜350行目）

```text
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % cd ~/r2r2r-scripts
ssh -i ~/.ssh/id_rsa_pi ubuntu@192.168.2.1 'grep "send_angles 呼び出し後" /home/ubuntu/daemon.log | tail -5'
tools/daemon_ctl.sh install
tools/daemon_ctl.sh restart
tools/daemon_ctl.sh log 5
python3 tools/gamepad_teleop.py --execute
[DAEMON 15:55:21] send_angles 呼び出し後: result=-1, elapsed_ms=1552.6
[DAEMON 15:55:27] send_angles 呼び出し後: result=-1, elapsed_ms=1564.2
[DAEMON 15:55:42] send_angles 呼び出し後: result=-1, elapsed_ms=1506.2
[DAEMON 16:58:01] send_angles 呼び出し後: result=-1, elapsed_ms=1503.3
Binary file /home/ubuntu/daemon.log matches
mecharm_daemon_start.sh                       100% 1742   674.0KB/s   00:00    
mecharm-daemon.service                        100%  636   553.6KB/s   00:00    
--- process
31095 /usr/bin/python3 -u /home/ubuntu/mecharm_daemon.py
--- 5555
LISTEN   0         1                   0.0.0.0:5555             0.0.0.0:*       
--- systemd
enabled: enabled
active:  active
--- process
21541 /usr/bin/python3 -u /home/ubuntu/mecharm_daemon.py
--- 5555
LISTEN   0         1                   0.0.0.0:5555             0.0.0.0:*       
--- systemd
enabled: enabled
active:  active
[START 15:28:11] mecharm_daemon.py を起動する (pymycobot 2.9.6 /usr/local/lib/python2.7/dist-packages/pymycobot/__init__.py)
[DAEMON 15:28:12] MyCobot 初期化中 (/dev/ttyAMA0, baud=1000000)...
[DAEMON 15:28:12] ✓ MyCobot 初期化完了
[DAEMON 15:28:12] startup_warmup angles=[-0.26, 1.31, 2.02, 0.08, -0.08, -29.88]
[DAEMON 15:28:12] ポート 5555 で待ち受け中...
/opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import resource_stream, resource_exists
objc[7913]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b12c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dc890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dc8e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dc958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b13b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dc980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dc9d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dca20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b14d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dca98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcb38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b15c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcb88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b15e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcbb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcbd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcc50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dccc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcd18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b1778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcd40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[7913]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1058b17c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1170dcd90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
```

直す前の送信はどれも `result=-1, elapsed_ms=1500` 前後でした。起動し直した daemon の行には `pymycobot 2.9.6` と出ています（Pi の時計は日本の時刻からずれていて、15:28 と出ている）。

- ねらい：アームに送る1回の指令を、返事を待たない 2.9.6 の形に戻す
- 変わったこと：daemon の `send_angles` が約1.5秒から、すぐ返るようになった。ゲームパッドで押してから送り終わるまでの時間は、中央0.042秒から0.024秒、長押しの送る間隔は中央1.630秒から0.216秒（同じ刻みの形の長押しで比べた）
- 見込める効果：daemon を使う推論・お手本の再生・点検も、1回の送信の待ちが短くなる見込み。推論での効き方は次の実機の推論で測る


## 7:57：2.9.6 に戻すと長押しが続いたが、無視された指令で8秒止まった

7:57 からの記録（`teleop_20261103_075657`）では、長押しの送る間隔は中央0.216秒、長押しの速さは中央毎秒5.9°になりました。

途中で3回、8秒止まりました。3回とも、指令は送れているのに、どの関節も送る前の角度のままでした。指令がアームにまるごと無視されています。ゲームパッドは送り直さない作りだったので、届くまでの待ちの上限の8秒、次の押しが受付なしになっていました。

| 時刻（記録の始めから） | 関節 | 指令 | 送る前 | 8秒後 |
|---|---|---|---|---|
| 48.94秒 | j2 | +6.02 | +9.58 | +9.49 |
| 81.09秒 | j4 | −4.43 | −0.43 | −0.43 |
| 94.32秒 | j5 | −21.88 | −26.19 | −26.10 |

LOG422 にも `[RETRY] 1回目送信が無視された（pre→last max|Δ| 0.00°）` と出ていて、お手本の再生のスクリプト（`waypoint_replay.py`）のコメントにも `単発は無視されるが、0.1s 周期で打てば通る` とあります。4.0.4 が同じ指令を3回書いていたことで、無視が目立たなかった面もあるかもしれません。ゲームパッドにも送り直しを入れました。送ってから0.5秒たっても届いておらず、どの関節も0.3°動いていなければ、同じ目標を送り直します（3回まで）。送り直しも停止の鍵（SendGate）の中で送るので、L2+R2 のあとや長押しを離したあとは送りません。

#### 7:57 からのターミナルの出力と、2.9.6 の起動・1°の刻みのコミット（351〜760行目）

```text
[記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_075657
[実機] daemon に送ります。起動したときの姿勢: -0.26 +1.31 +2.02 +0.08 -0.08 -29.88
コントローラーを待っています（つないでいなければ、今つないでください）
[接続] PS4 Controller  GUID=03008fe54c050000cc09000000016800  軸=6  ボタン=16
[送信] j0 -1.0° → -1.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.0°）  届いた角度 -0.26 +1.31 +2.02 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 1） → -2.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.21°）  届いた角度 -1.05 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 2） → -3.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -2.54 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 3） → -4.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -3.95 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 4） → -5.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -4.57 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 5） → -6.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -5.53 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 6） → -7.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.02°）  届いた角度 -6.24 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 7） → -8.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -7.91 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 8） → -9.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -8.52 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 9） → -10.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -9.66 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 10） → -11.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -10.28 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 11） → -12.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.25°）  届いた角度 -10.01 +2.19 +2.81 +0.08 -0.08 -29.88
[送信] j0 -1.0°（長押し 12） → -13.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -12.65 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -1.0°（長押し 13） → -14.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -14.06 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -1.0°（長押し 14） → -15.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -14.50 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -1.0°（長押し 15） → -16.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.68°）  届いた角度 -14.58 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -1.0°（長押し 16） → -17.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -16.78 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -2.0° → -19.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -19.07 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -2.0°（長押し 1） → -21.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.58°）  届いた角度 -19.68 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -2.0°（長押し 2） → -23.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.38°）  届いた角度 -21.88 +2.19 +2.81 +0.08 -0.08 -29.97
[送信] j0 -2.0°（長押し 3） → -25.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.36°）  届いた角度 -23.90 +2.19 +2.81 +0.08 -0.08 -30.05
[送信] j0 -2.0°（長押し 4） → -27.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.43°）  届いた角度 -25.83 +2.19 +2.81 +0.08 -0.08 -30.05
[送信] j0 -2.0°（長押し 5） → -29.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.32°）  届いた角度 -27.94 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 6） → -31.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.38°）  届いた角度 -29.88 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 7） → -33.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.45°）  届いた角度 -31.81 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 8） → -35.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.43°）  届いた角度 -33.83 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 9） → -37.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.41°）  届いた角度 -35.85 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 10） → -39.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.56°）  届いた角度 -37.70 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 11） → -41.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.36°）  届いた角度 -39.90 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 12） → -43.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.43°）  届いた角度 -41.83 +2.19 +2.81 +0.08 -0.08 -30.14
[送信] j0 -2.0°（長押し 13） → -45.26 +1.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.88°）  届いた角度 -45.00 +2.19 +2.81 +0.08 -0.08 -30.32
[送信] j1 -1.0° → -45.26 +0.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.88°）  届いた角度 -45.08 +2.19 +2.81 +0.08 -0.08 -30.32
[送信] j1 -2.0° → -45.26 -1.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.9°）  届いた角度 -45.35 -0.79 +2.81 +0.08 +0.00 -30.23
[送信] j1 -2.0°（長押し 1） → -45.26 -3.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.9°）  届いた角度 -45.43 -0.79 +2.81 +0.08 +0.00 -30.23
[送信] j1 -2.0°（長押し 2） → -45.26 -5.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.95°）  届いた角度 -45.35 -4.74 +2.81 +0.08 +0.26 -30.23
[送信] j1 -2.0°（長押し 3） → -45.26 -7.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.95°）  届いた角度 -45.35 -4.74 +2.81 +0.08 +0.26 -30.23
[送信] j1 -2.0°（長押し 4） → -45.26 -9.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.82°）  届いた角度 -45.35 -8.87 +2.81 +0.08 +0.35 -30.23
[送信] j1 -2.0°（長押し 5） → -45.26 -11.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.8°）  届いた角度 -45.43 -10.89 +2.81 +0.08 +0.35 -30.23
[送信] j1 -2.0°（長押し 6） → -45.26 -13.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.8°）  届いた角度 -45.43 -10.89 +2.81 +0.08 +0.35 -30.23
[送信] j1 -2.0°（長押し 7） → -45.26 -15.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.86°）  届いた角度 -45.52 -12.83 +2.81 +0.08 +0.35 -30.14
[送信] j1 -2.0°（長押し 8） → -45.26 -17.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.17 -17.05 +2.81 +0.08 +0.35 -30.14
[送信] j1 -2.0°（長押し 9） → -45.26 -19.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.26 -18.98 +2.81 +0.08 +0.35 -30.14
[送信] j1 -2.0°（長押し 10） → -45.26 -21.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.43 -21.09 +2.81 +0.08 +0.35 -30.14
[送信] j1 -2.0°（長押し 11） → -45.26 -23.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.43 -23.20 +2.81 +0.08 +0.35 -30.14
[送信] j1 -2.0°（長押し 12） → -45.26 -25.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.49°）  届いた角度 -45.43 -23.20 +2.81 +0.08 +0.35 -30.14
[送信] j1 -2.0°（長押し 13） → -45.26 -27.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.17 -27.24 +2.81 +0.17 +0.35 -30.14
[送信] j1 -2.0°（長押し 14） → -45.26 -29.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.45°）  届いた角度 -45.17 -27.24 +2.81 +0.17 +0.35 -30.14
[送信] j1 +2.0° → -45.26 -27.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.57°）  届いた角度 -45.17 -29.26 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 1） → -45.26 -25.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.17 -25.22 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 2） → -45.26 -23.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.53°）  届いた角度 -45.17 -25.22 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 3） → -45.26 -21.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.52 -21.00 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 4） → -45.26 -19.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.31°）  届いた角度 -45.52 -21.00 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 5） → -45.26 -17.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.47°）  届いた角度 -45.52 -19.16 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 6） → -45.26 -15.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.53°）  届いた角度 -45.52 -17.22 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 7） → -45.26 -13.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.42°）  届いた角度 -45.61 -15.11 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 8） → -45.26 -11.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.31°）  届いた角度 -45.52 -13.00 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 9） → -45.26 -9.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.61 -8.96 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 10） → -45.26 -7.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.27°）  届いた角度 -45.61 -8.96 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 11） → -45.26 -5.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.79°）  届いた角度 -45.52 -4.92 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 12） → -45.26 -3.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.23°）  届いた角度 -45.52 -4.92 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 13） → -45.26 -1.69 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.82°）  届いた角度 -45.52 -0.87 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 14） → -45.26 +0.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.18°）  届いた角度 -45.52 -0.87 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 15） → -45.26 +2.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.94°）  届いた角度 -45.52 +3.25 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 16） → -45.26 +4.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.06°）  届いた角度 -45.52 +3.25 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 17） → -45.26 +6.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.04°）  届いた角度 -45.61 +5.27 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 18） → -45.26 +8.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.09°）  届いた角度 -45.61 +9.40 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 19） → -45.26 +10.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.91°）  届いた角度 -45.61 +9.40 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 20） → -45.26 +12.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.06°）  届いた角度 -45.52 +11.25 +2.81 +0.17 +0.35 -30.05
[送信] j1 +2.0°（長押し 21） → -45.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -45.52 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +1.0° → -44.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.26°）  届いた角度 -45.52 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 1） → -42.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -42.45 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 2） → -40.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.57°）  届いた角度 -41.83 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 3） → -38.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -38.49 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 4） → -36.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.97°）  届いた角度 -38.23 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 5） → -34.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.51°）  届いた角度 -35.77 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 6） → -32.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -32.69 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 7） → -30.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.46°）  届いた角度 -31.72 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 8） → -28.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.18°）  届いた角度 -29.44 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 9） → -26.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.24°）  届いた角度 -27.50 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 10） → -24.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.22°）  届いた角度 -25.48 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 11） → -22.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -22.14 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 12） → -20.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.62°）  届いた角度 -21.88 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 13） → -18.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -18.36 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 14） → -16.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.4°）  届いた角度 -17.66 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 15） → -14.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.2°）  届いた角度 -15.46 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 16） → -12.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.36°）  届いた角度 -13.62 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 17） → -10.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.25°）  届いた角度 -11.51 +15.29 +2.81 +0.17 +0.35 -30.05
[送信] j0 +2.0°（長押し 18） → -8.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -8.08 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 19） → -6.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -6.32 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 20） → -4.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.71°）  届いた角度 -5.97 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 21） → -2.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 2.04°）  届いた角度 -4.30 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 22） → -0.26 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 -0.35 +15.29 +2.81 +0.17 +0.35 -29.88
[送信] j0 +2.0°（長押し 23） → +1.74 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 +1.49 +15.29 +2.81 +0.17 +0.35 -29.88
[送信] j0 +2.0°（長押し 24） → +3.74 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.64°）  届いた角度 +2.10 +15.29 +2.81 +0.17 +0.35 -29.88
[送信] j0 +2.0°（長押し 25） → +5.74 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 1.35°）  届いた角度 +4.39 +15.29 +2.81 +0.17 +0.35 -29.97
[送信] j0 +2.0°（長押し 26） → +7.74 +14.31 +2.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 +7.82 +15.29 +2.81 +0.17 +0.35 -29.88
[関節] 上下で動かす関節を j2 にしました
[送信] j2 +2.0° → +7.74 +14.31 +4.02 +0.08 -0.08 -29.88  届いた（ずれ 1.21°）  届いた角度 +7.82 +15.29 +2.81 +0.17 +0.35 -29.88
[送信] j2 +2.0°（長押し 1） → +7.74 +14.31 +6.02 +0.08 -0.08 -29.88  届いた（ずれ 1.19°）  届いた角度 +7.82 +15.29 +4.83 +0.17 +0.00 -29.88
[送信] j2 +2.0°（長押し 2） → +7.74 +14.31 +8.02 +0.08 -0.08 -29.88  届いた（ずれ 1.17°）  届いた角度 +7.82 +15.29 +6.85 +0.17 -0.08 -29.88
[送信] j2 +2.0°（長押し 3） → +7.74 +14.31 +10.02 +0.08 -0.08 -29.88  届いた（ずれ 1.06°）  届いた角度 +7.82 +15.29 +8.96 +0.17 -0.43 -29.88
[送信] j2 +2.0°（長押し 4） → +7.74 +14.31 +12.02 +0.08 -0.08 -29.88  届いた（ずれ 0.98°）  届いた角度 +7.82 +15.29 +12.91 +0.17 -0.96 -29.88
[送信] j2 +2.0°（長押し 5） → +7.74 +14.31 +14.02 +0.08 -0.08 -29.88  届いた（ずれ 1.02°）  届いた角度 +7.82 +15.29 +13.00 +0.17 -0.96 -29.88
[送信] j2 -2.0° → +7.74 +14.31 +12.02 +0.08 -0.08 -29.88  届いた（ずれ 1.77°）  届いた角度 +7.82 +15.29 +13.79 +0.17 -0.96 -29.88
[送信] j2 -2.0°（長押し 1） → +7.74 +14.31 +10.02 +0.08 -0.08 -29.88  届いた（ずれ 1.49°）  届いた角度 +7.82 +15.29 +11.51 +0.17 -0.96 -29.88
[送信] j2 -2.0°（長押し 2） → +7.74 +14.31 +8.02 +0.08 -0.08 -29.88  届いた（ずれ 1.56°）  届いた角度 +7.82 +15.29 +9.58 +0.17 -0.96 -29.88
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
[関節] 上下で動かす関節を j3 にしました
[受付なし] 前の操作が終わっていません（ためません）
[送信] j2 -2.0°（長押し 3） → +7.74 +14.31 +6.02 +0.08 -0.08 -29.88  届かなかった（ずれ 3.47°）  届いた角度 +7.82 +15.29 +9.49 +0.17 -0.52 -29.88
[送信] j0 +1.0° → +8.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.0°）  届いた角度 +7.82 +15.29 +9.49 +0.17 -0.43 -29.88
[送信] j0 +2.0°（長押し 1） → +10.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 2.21°）  届いた角度 +8.61 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 +2.0°（長押し 2） → +12.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.31°）  届いた角度 +11.51 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 +2.0°（長押し 3） → +14.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.91°）  届いた角度 +12.91 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 +2.0°（長押し 4） → +16.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.44°）  届いた角度 +15.38 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 +2.0°（長押し 5） → +18.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.42°）  届いた角度 +17.40 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 +2.0°（長押し 6） → +20.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.4°）  届いた角度 +19.42 +16.08 +10.19 +0.17 -0.43 -29.97
[送信] j0 +2.0°（長押し 7） → +22.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.91°）  届いた角度 +20.91 +16.08 +10.19 +0.17 -0.43 -29.97
[送信] j0 +2.0°（長押し 8） → +24.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 +24.69 +16.08 +10.19 +0.17 -0.43 -29.97
[送信] j0 -1.0° → +23.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.14°）  届いた角度 +24.96 +16.08 +10.19 +0.17 -0.43 -29.97
[送信] j0 -2.0°（長押し 1） → +21.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 +22.06 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 2） → +19.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.8°）  届いた角度 +21.62 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 3） → +17.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.42°）  届いた角度 +19.24 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 4） → +15.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.49°）  届いた角度 +17.31 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 5） → +13.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 +13.88 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 6） → +11.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 +12.04 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 7） → +9.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 +10.01 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 8） → +7.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.84°）  届いた角度 +9.66 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 9） → +5.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.65°）  届いた角度 +7.47 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 10） → +3.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.45°）  届いた角度 +5.27 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 11） → +1.82 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.43°）  届いた角度 +3.25 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 12） → -0.18 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 +0.08 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 13） → -2.18 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.75°）  届いた角度 -0.43 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 14） → -4.18 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.64°）  届いた角度 -2.54 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j0 -2.0°（長押し 15） → -6.18 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 1.35°）  届いた角度 -4.83 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j3 +2.0° → -6.18 +15.29 +9.49 +2.17 -0.43 -29.88  届いた（ずれ 2.0°）  届いた角度 -6.41 +16.08 +10.19 +0.17 -0.43 -29.88
[送信] j3 +2.0°（長押し 1） → -6.18 +15.29 +9.49 +4.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 -6.41 +16.08 +10.19 +3.86 -0.43 -29.88
[送信] j3 +2.0°（長押し 2） → -6.18 +15.29 +9.49 +6.17 -0.43 -29.88  届いた（ずれ 2.31°）  届いた角度 -6.41 +16.08 +10.19 +3.86 -0.43 -29.88
[送信] j3 +2.0°（長押し 3） → -6.18 +15.29 +9.49 +8.17 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 -6.41 +16.08 +10.19 +7.82 -0.43 -29.88
[送信] j3 -2.0° → -6.18 +15.29 +9.49 +6.17 -0.43 -29.88  届いた（ずれ 1.65°）  届いた角度 -6.41 +16.08 +10.19 +7.82 -0.43 -29.88
[送信] j3 -2.0°（長押し 1） → -6.18 +15.29 +9.49 +4.17 -0.43 -29.88  届いた（ずれ 0.83°）  届いた角度 -6.41 +16.08 +10.19 +5.00 -0.43 -29.88
[送信] j3 -2.0°（長押し 2） → -6.18 +15.29 +9.49 +2.17 -0.43 -29.88  届いた（ずれ 2.83°）  届いた角度 -6.41 +16.08 +10.19 +5.00 -0.43 -29.88
[送信] j3 -2.0°（長押し 3） → -6.18 +15.29 +9.49 +0.17 -0.43 -29.88  届いた（ずれ 2.73°）  届いた角度 -6.41 +16.08 +10.19 +2.90 -0.43 -29.88
[送信] j3 -2.0°（長押し 4） → -6.18 +15.29 +9.49 -1.83 -0.43 -29.88  届いた（ずれ 2.79°）  届いた角度 -6.41 +16.08 +10.19 +0.96 -0.43 -29.79
[送信] j3 -2.0°（長押し 5） → -6.18 +15.29 +9.49 -3.83 -0.43 -29.88  届いた（ずれ 1.02°）  届いた角度 -6.41 +16.08 +10.19 -2.81 -0.43 -29.88
[送信] j3 -2.0°（長押し 6） → -6.18 +15.29 +9.49 -5.83 -0.43 -29.88  届いた（ずれ 1.0°）  届いた角度 -6.41 +16.08 +10.19 -4.83 -0.43 -29.88
[送信] j3 -2.0°（長押し 7） → -6.18 +15.29 +9.49 -7.83 -0.43 -29.88  届いた（ずれ 2.83°）  届いた角度 -6.41 +16.08 +10.19 -5.00 -0.43 -29.88
[送信] j3 -2.0°（長押し 8） → -6.18 +15.29 +9.49 -9.83 -0.43 -29.88  届いた（ずれ 2.89°）  届いた角度 -6.41 +16.08 +10.19 -6.94 -0.43 -29.88
[送信] j3 -2.0°（長押し 9） → -6.18 +15.29 +9.49 -11.83 -0.43 -29.88  届いた（ずれ 0.85°）  届いた角度 -6.41 +16.08 +10.19 -10.98 -0.43 -29.88
[送信] j3 -2.0°（長押し 10） → -6.18 +15.29 +9.49 -13.83 -0.43 -29.88  届いた（ずれ 0.83°）  届いた角度 -6.41 +16.08 +10.19 -13.00 -0.43 -29.88
[送信] j3 -2.0°（長押し 11） → -6.18 +15.29 +9.49 -15.83 -0.43 -29.88  届いた（ずれ 0.81°）  届いた角度 -6.41 +16.08 +10.19 -15.02 -0.43 -29.88
[送信] j3 -2.0°（長押し 12） → -6.18 +15.29 +9.49 -17.83 -0.43 -29.88  届いた（ずれ 0.87°）  届いた角度 -6.41 +16.08 +10.19 -16.96 -0.43 -29.88
[送信] j3 -2.0°（長押し 13） → -6.18 +15.29 +9.49 -19.83 -0.43 -29.88  届いた（ずれ 2.78°）  届いた角度 -6.41 +16.08 +10.19 -17.05 -0.43 -29.88
[送信] j3 -2.0°（長押し 14） → -6.18 +15.29 +9.49 -21.83 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 -6.41 +16.08 +10.19 -21.09 -0.43 -29.88
[送信] j3 +1.0° → -6.18 +15.29 +9.49 -20.83 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 -6.41 +16.08 +10.19 -21.18 -0.43 -29.88
[送信] j3 +2.0°（長押し 1） → -6.18 +15.29 +9.49 -18.83 -0.43 -29.88  届いた（ずれ 2.35°）  届いた角度 -6.41 +16.08 +10.19 -21.18 -0.43 -29.88
[送信] j3 +2.0°（長押し 2） → -6.18 +15.29 +9.49 -16.83 -0.43 -29.88  届いた（ずれ 1.01°）  届いた角度 -6.41 +16.08 +10.19 -17.84 -0.43 -29.88
[送信] j3 +2.0°（長押し 3） → -6.18 +15.29 +9.49 -14.83 -0.43 -29.88  届いた（ずれ 0.81°）  届いた角度 -6.41 +16.08 +10.19 -15.64 -0.43 -29.88
[送信] j3 +2.0°（長押し 4） → -6.18 +15.29 +9.49 -12.83 -0.43 -29.88  届いた（ずれ 2.81°）  届いた角度 -6.41 +16.08 +10.19 -15.64 -0.43 -29.88
[送信] j3 +2.0°（長押し 5） → -6.18 +15.29 +9.49 -10.83 -0.43 -29.88  届いた（ずれ 0.85°）  届いた角度 -6.41 +16.08 +10.19 -11.68 -0.43 -29.88
[送信] j3 +2.0°（長押し 6） → -6.18 +15.29 +9.49 -8.83 -0.43 -29.88  届いた（ずれ 2.59°）  届いた角度 -6.41 +16.08 +10.19 -11.42 -0.43 -29.88
[送信] j3 +2.0°（長押し 7） → -6.18 +15.29 +9.49 -6.83 -0.43 -29.88  届いた（ずれ 2.66°）  届いた角度 -6.41 +16.08 +10.19 -9.49 -0.43 -29.88
[送信] j3 +2.0°（長押し 8） → -6.18 +15.29 +9.49 -4.83 -0.43 -29.88  届いた（ずれ 2.64°）  届いた角度 -6.41 +16.08 +10.19 -7.47 -0.43 -29.88
[送信] j3 +2.0°（長押し 9） → -6.18 +15.29 +9.49 -2.83 -0.43 -29.88  届いた（ずれ 2.61°）  届いた角度 -6.41 +16.08 +10.19 -5.44 -0.43 -29.88
[受付なし] 前の操作が終わっていません（ためません）
[送信] j3 +2.0° → -6.18 +15.29 +9.49 -0.83 -0.43 -29.88  届いた（ずれ 0.79°）  届いた角度 -6.41 +16.08 +10.19 -1.31 -0.43 -29.79
[関節] 上下で動かす関節を j4 にしました
[送信] j4 -2.0° → -6.18 +15.29 +9.49 -0.83 -2.43 -29.88  届いた（ずれ 2.0°）  届いた角度 -6.41 +16.08 +10.19 -1.23 -0.43 -29.88
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
[送信] j4 -2.0°（長押し 1） → -6.18 +15.29 +9.49 -0.83 -4.43 -29.88  届かなかった（ずれ 4.0°）  届いた角度 -6.41 +16.08 +10.19 -1.05 -0.43 -29.88
[関節] 上下で動かす関節を j5 にしました
[送信] j0 +2.0° → -4.41 +16.08 +10.19 -1.05 -0.43 -29.88  届いた（ずれ 0.88°）  届いた角度 -4.65 +16.96 +10.89 -1.05 -0.43 -29.88
[送信] j0 +2.0°（長押し 1） → -2.41 +16.08 +10.19 -1.05 -0.43 -29.88  届いた（ずれ 1.72°）  届いた角度 -4.13 +16.96 +10.89 -1.05 -0.43 -29.88
[送信] j0 +2.0°（長押し 2） → -0.41 +16.08 +10.19 -1.05 -0.43 -29.88  届いた（ずれ 1.34°）  届いた角度 -1.75 +16.96 +10.89 -0.96 -0.43 -29.88
[送信] j0 +2.0°（長押し 3） → +1.59 +16.08 +10.19 -1.05 -0.43 -29.88  届いた（ずれ 1.85°）  届いた角度 -0.26 +16.96 +10.89 -0.96 -0.43 -29.88
[送信] j5 +2.0° → +1.59 +16.08 +10.19 -1.05 -0.43 -27.88  届いた（ずれ 2.0°）  届いた角度 +1.49 +16.96 +10.89 -0.87 -0.43 -29.88
[送信] j5 +2.0°（長押し 1） → +1.59 +16.08 +10.19 -1.05 -0.43 -25.88  届いた（ずれ 0.88°）  届いた角度 +1.49 +16.96 +10.89 -0.87 -0.43 -26.19
[送信] j5 +2.0°（長押し 2） → +1.59 +16.08 +10.19 -1.05 -0.43 -23.88  届いた（ずれ 2.31°）  届いた角度 +1.49 +16.96 +10.89 -0.87 -0.43 -26.19
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
[送信] j5 +2.0°（長押し 3） → +1.59 +16.08 +10.19 -1.05 -0.43 -21.88  届かなかった（ずれ 4.22°）  届いた角度 +1.49 +16.96 +10.89 -0.87 -0.43 -26.10
[送信] j5 -2.0° → +1.49 +16.96 +10.89 -0.87 -0.43 -28.10  届いた（ずれ 2.0°）  届いた角度 +1.49 +16.96 +10.89 -0.87 -0.43 -26.10
[送信] j5 -2.0°（長押し 1） → +1.49 +16.96 +10.89 -0.87 -0.43 -30.10  届いた（ずれ 1.28°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -28.82
[送信] j5 -2.0°（長押し 2） → +1.49 +16.96 +10.89 -0.87 -0.43 -32.10  届いた（ずれ 1.17°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -30.93
[送信] j5 -2.0°（長押し 3） → +1.49 +16.96 +10.89 -0.87 -0.43 -34.10  届いた（ずれ 1.15°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -32.95
[送信] j5 -2.0°（長押し 4） → +1.49 +16.96 +10.89 -0.87 -0.43 -36.10  届いた（ずれ 1.04°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -35.06
[送信] j5 -2.0°（長押し 5） → +1.49 +16.96 +10.89 -0.87 -0.43 -38.10  届いた（ずれ 0.93°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -37.17
[送信] j5 -2.0°（長押し 6） → +1.49 +16.96 +10.89 -0.87 -0.43 -40.10  届いた（ずれ 2.93°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -37.17
[送信] j5 -2.0°（長押し 7） → +1.49 +16.96 +10.89 -0.87 -0.43 -42.10  届いた（ずれ 2.91°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -39.19
[送信] j5 -2.0°（長押し 8） → +1.49 +16.96 +10.89 -0.87 -0.43 -44.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -43.24
[送信] j5 +2.0° → +1.49 +16.96 +10.89 -0.87 -0.43 -42.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -42.89
[送信] j5 +2.0°（長押し 1） → +1.49 +16.96 +10.89 -0.87 -0.43 -40.10  届いた（ずれ 2.79°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -42.89
[送信] j5 +2.0°（長押し 2） → +1.49 +16.96 +10.89 -0.87 -0.43 -38.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -38.84
[送信] j5 +2.0°（長押し 3） → +1.49 +16.96 +10.89 -0.87 -0.43 -36.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -36.73
[送信] j5 +2.0°（長押し 4） → +1.49 +16.96 +10.89 -0.87 -0.43 -34.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.79 -0.43 -34.71
[送信] j5 +2.0°（長押し 5） → +1.49 +16.96 +10.89 -0.87 -0.43 -32.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -0.43 -32.60
[送信] j5 +2.0°（長押し 6） → +1.49 +16.96 +10.89 -0.87 -0.43 -30.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -0.43 -30.58
[送信] j5 +2.0°（長押し 7） → +1.49 +16.96 +10.89 -0.87 -0.43 -28.10  届いた（ずれ 2.48°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -0.43 -30.58
[送信] j5 +2.0°（長押し 8） → +1.49 +16.96 +10.89 -0.87 -0.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -0.43 -26.54
[関節] 上下で動かす関節を j1 にしました
[関節] 上下で動かす関節を j2 にしました
[関節] 上下で動かす関節を j3 にしました
[関節] 上下で動かす関節を j4 にしました
[送信] j4 -2.0° → +1.49 +16.96 +10.89 -0.87 -2.43 -26.10  届いた（ずれ 2.0°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -0.43 -26.45
[送信] j4 -2.0°（長押し 1） → +1.49 +16.96 +10.89 -0.87 -4.43 -26.10  届いた（ずれ 1.27°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -3.16 -26.45
[送信] j4 -2.0°（長押し 2） → +1.49 +16.96 +10.89 -0.87 -6.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -5.36 -26.45
[送信] j4 -2.0°（長押し 3） → +1.49 +16.96 +10.89 -0.87 -8.43 -26.10  届いた（ずれ 1.14°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -7.29 -26.45
[送信] j4 -2.0°（長押し 4） → +1.49 +16.96 +10.89 -0.87 -10.43 -26.10  届いた（ずれ 0.94°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -9.49 -26.36
[送信] j4 -2.0°（長押し 5） → +1.49 +16.96 +10.89 -0.87 -12.43 -26.10  届いた（ずれ 2.94°）  届いた角度 +1.49 +17.84 +11.51 -0.70 -9.49 -26.36
[送信] j4 -2.0°（長押し 6） → +1.49 +16.96 +10.89 -0.87 -14.43 -26.10  届いた（ずれ 0.99°）  届いた角度 +1.49 +17.84 +11.51 -0.61 -13.44 -26.36
[送信] j4 -2.0°（長押し 7） → +1.49 +16.96 +10.89 -0.87 -16.43 -26.10  届いた（ずれ 2.99°）  届いた角度 +1.49 +17.84 +11.51 -0.61 -13.44 -26.36
[送信] j4 -2.0°（長押し 8） → +1.49 +16.96 +10.89 -0.87 -18.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.61 -17.57 -26.36
[送信] j4 -2.0°（長押し 9） → +1.49 +16.96 +10.89 -0.87 -20.43 -26.10  届いた（ずれ 2.86°）  届いた角度 +1.49 +17.84 +11.51 -0.61 -17.57 -26.36
[送信] j4 -2.0°（長押し 10） → +1.49 +16.96 +10.89 -0.87 -22.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.61 -21.62 -26.36
[送信] j4 -2.0°（長押し 11） → +1.49 +16.96 +10.89 -0.87 -24.43 -26.10  届いた（ずれ 2.81°）  届いた角度 +1.49 +17.84 +11.51 -0.61 -21.62 -26.36
[送信] j4 -2.0°（長押し 12） → +1.49 +16.96 +10.89 -0.87 -26.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.52 -25.92 -26.27
[送信] j4 -2.0°（長押し 13） → +1.49 +16.96 +10.89 -0.87 -28.43 -26.10  届いた（ずれ 2.51°）  届いた角度 +1.49 +17.84 +11.51 -0.52 -25.92 -26.27
[送信] j4 -2.0°（長押し 14） → +1.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +1.49 +17.84 +11.51 -0.52 -29.79 -26.27
[送信] j0 -1.0° → +0.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.0°）  届いた角度 +1.49 +17.84 +11.51 -0.52 -30.58 -26.27
[送信] j0 -1.0°（長押し 1） → -0.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.12°）  届いた角度 +0.61 +17.84 +11.51 -0.17 -30.58 -26.27
[送信] j0 -1.0°（長押し 2） → -1.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.95°）  届いた角度 -1.40 +17.84 +11.51 +0.08 -30.58 -26.27
[送信] j0 -1.0°（長押し 3） → -2.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.11°）  届いた角度 -1.40 +17.84 +11.51 +0.00 -30.58 -26.19
[送信] j0 -1.0°（長押し 4） → -3.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.13°）  届いた角度 -2.72 +17.84 +11.51 +0.26 -30.58 -26.19
[送信] j0 -1.0°（長押し 5） → -4.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 2.23°）  届いた角度 -2.28 +17.84 +11.51 +0.17 -30.58 -26.19
[送信] j0 -1.0°（長押し 6） → -5.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.39°）  届いた角度 -5.00 +17.84 +11.51 +0.52 -30.58 -26.10
[送信] j0 -1.0°（長押し 7） → -6.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.95°）  届いた角度 -6.50 +17.84 +11.51 +0.08 -30.58 -25.83
[送信] j0 -1.0°（長押し 8） → -7.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.19°）  届いた角度 -6.32 +17.84 +11.51 +0.08 -30.58 -25.75
[送信] j0 -1.0°（長押し 9） → -8.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.04°）  届いた角度 -7.91 +17.84 +11.51 +0.17 -30.58 -25.75
[送信] j0 -1.0°（長押し 10） → -9.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.9°）  届いた角度 -8.61 +17.84 +11.51 -0.35 -30.58 -25.75
[送信] j0 -1.0°（長押し 11） → -10.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.37°）  届いた角度 -9.14 +17.84 +11.51 -0.43 -30.58 -25.75
[送信] j0 +1.0° → -9.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -10.10 +17.84 +11.51 -0.26 -30.58 -25.75
[送信] j0 +1.0°（長押し 1） → -8.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -9.31 +17.84 +11.51 -0.43 -30.58 -25.75
[送信] j0 +1.0°（長押し 2） → -7.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.8°）  届いた角度 -9.31 +17.84 +11.51 -0.43 -30.58 -25.66
[送信] j0 +1.0°（長押し 3） → -6.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -6.94 +17.84 +11.51 -0.43 -30.58 -25.66
[送信] j0 +1.0°（長押し 4） → -5.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -6.24 +17.84 +11.51 -0.70 -30.58 -25.66
[送信] j0 +1.0°（長押し 5） → -4.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -5.09 +17.84 +11.51 -0.87 -30.58 -25.66
[送信] j0 +1.0°（長押し 6） → -3.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 2.29°）  届いた角度 -5.80 +17.84 +11.51 -0.96 -30.58 -25.66
[送信] j0 +1.0°（長押し 7） → -2.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -2.90 +17.84 +11.51 -1.31 -30.58 -25.66
[送信] j0 +1.0°（長押し 8） → -1.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 -1.23 +17.84 +11.51 -1.05 -30.58 -25.57
[送信] j0 +1.0°（長押し 9） → -0.51 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.24°）  届いた角度 -1.75 +17.84 +11.51 -1.05 -30.58 -25.57
[送信] j0 +1.0°（長押し 10） → +0.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 2.24°）  届いた角度 -1.75 +17.84 +11.51 -1.05 -30.58 -25.57
[送信] j0 +1.0°（長押し 11） → +1.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +1.40 +17.84 +11.51 -1.05 -30.58 -25.66
[送信] j0 +1.0°（長押し 12） → +2.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +2.46 +17.84 +11.51 -1.14 -30.58 -25.66
[送信] j0 +1.0°（長押し 13） → +3.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 1.03°）  届いた角度 +2.46 +17.84 +11.51 -1.14 -30.58 -25.66
[送信] j0 +1.0°（長押し 14） → +4.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 2.12°）  届いた角度 +2.37 +17.84 +11.51 -1.14 -30.58 -25.66
[送信] j0 +1.0°（長押し 15） → +5.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +5.00 +17.84 +11.51 -1.31 -30.58 -25.66
[送信] j0 +1.0°（長押し 16） → +6.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +6.41 +17.84 +11.51 -1.14 -30.58 -25.75
[受付なし] 前の操作が終わっていません（ためません）
[送信] j4 -1.0° → +6.49 +16.96 +10.89 -0.87 -31.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +6.24 +17.84 +11.51 -1.14 -30.58 -25.75
[送信] j0 +1.0° → +7.49 +16.96 +10.89 -0.87 -31.43 -26.10  届いた（ずれ 1.25°）  届いた角度 +6.24 +17.84 +11.51 -1.14 -30.58 -25.75
[送信] j4 -1.0° → +7.49 +16.96 +10.89 -0.87 -32.43 -26.10  届いた（ずれ 1.76°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -30.67 -25.75
[送信] j4 -1.0°（長押し 1） → +7.49 +16.96 +10.89 -0.87 -33.43 -26.10  届いた（ずれ 1.35°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -32.08 -25.75
[送信] j4 -1.0°（長押し 2） → +7.49 +16.96 +10.89 -0.87 -34.43 -26.10  届いた（ずれ 1.21°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -33.22 -25.75
[送信] j4 -1.0°（長押し 3） → +7.49 +16.96 +10.89 -0.87 -35.43 -26.10  届いた（ずれ 2.21°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -33.22 -25.75
[送信] j4 -1.0°（長押し 4） → +7.49 +16.96 +10.89 -0.87 -36.43 -26.10  届いた（ずれ 1.02°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -35.41 -25.75
[送信] j4 -1.0°（長押し 5） → +7.49 +16.96 +10.89 -0.87 -37.43 -26.10  届いた（ずれ 1.75°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -35.68 -25.75
[送信] j4 -1.0°（長押し 6） → +7.49 +16.96 +10.89 -0.87 -38.43 -26.10  届いた（ずれ 2.75°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -35.68 -25.75
[送信] j4 +2.0° → +7.49 +16.96 +10.89 -0.87 -36.43 -26.10  届いた（ずれ 1.36°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -37.79 -25.75
[送信] j4 +2.0°（長押し 1） → +7.49 +16.96 +10.89 -0.87 -34.43 -26.10  届いた（ずれ 1.34°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -35.77 -25.75
[送信] j4 +2.0°（長押し 2） → +7.49 +16.96 +10.89 -0.87 -32.43 -26.10  届いた（ずれ 2.9°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -35.33 -25.75
[送信] j4 +2.0°（長押し 3） → +7.49 +16.96 +10.89 -0.87 -30.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -31.02 -25.75
[送信] j4 +1.0° → +7.49 +16.96 +10.89 -0.87 -29.43 -26.10  届いた（ずれ 1.59°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -31.02 -25.75
[送信] j4 +2.0°（長押し 1） → +7.49 +16.96 +10.89 -0.87 -27.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -27.94 -25.75
[送信] j4 +2.0°（長押し 2） → +7.49 +16.96 +10.89 -0.87 -25.43 -26.10  届いた（ずれ 2.51°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -27.94 -25.75
[送信] j4 +2.0°（長押し 3） → +7.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +7.47 +17.84 +11.51 -0.96 -23.90 -25.75
[関節] 上下で動かす関節を j5 にしました
[送信] j0 +2.0° → +9.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +9.22 +17.84 +11.51 -0.61 -23.90 -25.75
[送信] j0 +2.0°（長押し 1） → +11.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.83°）  届いた角度 +9.66 +17.84 +11.51 -0.79 -23.90 -25.75
[送信] j0 +2.0°（長押し 2） → +13.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.88°）  届いた角度 +13.44 +17.84 +11.51 -0.70 -23.90 -25.66
[送信] j0 +2.0°（長押し 3） → +15.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.87°）  届いた角度 +13.62 +17.84 +11.51 -0.79 -23.90 -25.66
[送信] j0 -1.0° → +14.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.96°）  届いた角度 +13.53 +17.84 +11.51 -0.79 -23.90 -25.66
[送信] j0 -2.0°（長押し 1） → +12.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.04°）  届いた角度 +13.53 +17.84 +11.51 -0.79 -23.90 -25.66
[送信] j0 -2.0°（長押し 2） → +10.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.81°）  届いた角度 +12.30 +17.84 +11.51 -0.52 -23.90 -25.66
[送信] j0 -2.0°（長押し 3） → +8.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.44°）  届いた角度 +9.93 +17.84 +11.51 -0.26 -23.90 -25.66
[送信] j0 -2.0°（長押し 4） → +6.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.5°）  届いた角度 +7.99 +17.84 +11.51 -0.17 -23.90 -25.66
[関節] 上下で動かす関節を j1 にしました
[送信] j0 +2.0° → +8.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 2.25°）  届いた角度 +6.24 +17.84 +11.51 -0.87 -23.73 -25.75
[送信] j0 +2.0°（長押し 1） → +10.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.71°）  届いた角度 +8.78 +17.84 +11.51 -0.70 -23.73 -25.75
[送信] j1 -2.0° → +10.49 +14.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 2.88°）  届いた角度 +8.70 +17.84 +11.51 -0.70 -23.73 -25.75
[送信] j1 -2.0°（長押し 1） → +10.49 +12.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.27°）  届いた角度 +10.72 +14.23 +11.51 -0.79 -22.93 -25.75
[送信] j1 -2.0°（長押し 2） → +10.49 +10.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.25°）  届いた角度 +10.63 +12.21 +11.51 -0.79 -22.93 -25.75
[送信] j1 -2.0°（長押し 3） → +10.49 +8.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.23°）  届いた角度 +10.63 +10.19 +11.51 -0.79 -22.93 -25.75
[送信] j1 +2.0° → +10.49 +10.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.77°）  届いた角度 +10.63 +10.19 +11.51 -0.79 -22.93 -25.75
[送信] j1 +2.0°（長押し 1） → +10.49 +12.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.01°）  届いた角度 +10.63 +13.97 +11.51 -0.79 -22.93 -25.75
[送信] j1 +2.0°（長押し 2） → +10.49 +14.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.99°）  届いた角度 +10.63 +13.97 +11.51 -0.79 -22.93 -25.75
[送信] j1 +2.0°（長押し 3） → +10.49 +16.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 2.99°）  届いた角度 +10.63 +13.97 +11.51 -0.79 -22.93 -25.75
[送信] j1 +2.0°（長押し 4） → +10.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 0.95°）  届いた角度 +10.63 +18.01 +11.51 -0.79 -22.85 -25.75
[関節] 上下で動かす関節を j2 にしました
[送信] j0 +2.0° → +12.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.86°）  届いた角度 +10.63 +20.03 +11.51 -0.87 -22.85 -25.75
[送信] j0 +2.0°（長押し 1） → +14.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.66°）  届いた角度 +12.83 +20.03 +11.51 -0.70 -22.85 -25.75
[送信] j0 +2.0°（長押し 2） → +16.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +16.34 +20.03 +11.51 -0.79 -22.85 -25.75
[送信] j2 -2.0° → +16.49 +18.96 +8.89 -0.87 -23.43 -26.10  届いた（ずれ 1.83°）  届いた角度 +16.52 +20.03 +10.72 -0.87 -22.85 -25.75
[送信] j2 -2.0°（長押し 1） → +16.49 +18.96 +6.89 -0.87 -23.43 -26.10  届いた（ずれ 1.45°）  届いた角度 +16.52 +20.03 +8.34 -0.87 -22.85 -25.75
[送信] j2 -2.0°（長押し 2） → +16.49 +18.96 +4.89 -0.87 -23.43 -26.10  届いた（ずれ 1.43°）  届いた角度 +16.52 +20.03 +6.32 -0.87 -22.85 -25.75
[送信] j2 +1.0° → +16.49 +18.96 +5.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +16.52 +20.03 +6.32 -0.87 -22.85 -25.75
[送信] j2 +1.0°（長押し 1） → +16.49 +18.96 +6.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +16.52 +20.03 +6.41 -0.87 -22.85 -25.75
[送信] j2 +1.0°（長押し 2） → +16.49 +18.96 +7.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +16.52 +20.03 +8.61 -0.87 -22.85 -25.75
[送信] j2 +1.0°（長押し 3） → +16.49 +18.96 +8.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +16.52 +20.03 +9.66 -0.87 -22.85 -25.75
[送信] j2 +1.0°（長押し 4） → +16.49 +18.96 +9.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +16.52 +20.03 +9.66 -0.87 -22.85 -25.75
[送信] j2 +1.0°（長押し 5） → +16.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.23°）  届いた角度 +16.52 +20.03 +9.66 -0.87 -22.85 -25.75
[関節] 上下で動かす関節を j3 にしました
[送信] j0 -2.0° → +14.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +14.67 +20.03 +11.60 -0.87 -22.93 -25.75
[送信] j0 -2.0°（長押し 1） → +12.49 +18.96 +10.89 -0.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.74 +20.03 +11.60 -0.87 -22.93 -25.66
[送信] j3 -2.0° → +12.49 +18.96 +10.89 -2.87 -23.43 -26.10  届いた（ずれ 2.0°）  届いた角度 +12.30 +20.03 +11.60 -0.87 -22.93 -25.66
[送信] j3 -2.0°（長押し 1） → +12.49 +18.96 +10.89 -4.87 -23.43 -26.10  届いた（ずれ 2.94°）  届いた角度 +12.39 +20.03 +11.60 -1.93 -22.93 -25.75
[送信] j3 -2.0°（長押し 2） → +12.49 +18.96 +10.89 -6.87 -23.43 -26.10  届いた（ずれ 2.92°）  届いた角度 +12.39 +20.03 +11.60 -3.95 -22.93 -25.75
[送信] j3 -2.0°（長押し 3） → +12.49 +18.96 +10.89 -8.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.48 +20.03 +11.60 -8.43 -22.93 -25.75
[送信] j3 -2.0°（長押し 4） → +12.49 +18.96 +10.89 -10.87 -23.43 -26.10  届いた（ずれ 2.44°）  届いた角度 +12.48 +20.03 +11.60 -8.43 -22.93 -25.75
[送信] j3 -2.0°（長押し 5） → +12.49 +18.96 +10.89 -12.87 -23.43 -26.10  届いた（ずれ 2.59°）  届いた角度 +12.48 +20.03 +11.60 -10.28 -22.93 -25.75
[送信] j3 -1.0°（長押し 6） → +12.49 +18.96 +10.89 -13.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.65 +20.03 +11.60 -13.18 -23.11 -25.75
[送信] j3 -1.0° → +12.49 +18.96 +10.89 -14.87 -23.43 -26.10  届いた（ずれ 1.6°）  届いた角度 +12.56 +20.03 +11.60 -13.27 -23.11 -25.75
[送信] j3 -2.0°（長押し 1） → +12.49 +18.96 +10.89 -16.87 -23.43 -26.10  届いた（ずれ 2.55°）  届いた角度 +12.56 +20.03 +11.60 -14.32 -23.11 -25.75
[送信] j3 -2.0°（長押し 2） → +12.49 +18.96 +10.89 -18.87 -23.43 -26.10  届いた（ずれ 2.62°）  届いた角度 +12.48 +20.03 +11.60 -16.25 -23.11 -25.75
[送信] j3 -2.0°（長押し 3） → +12.49 +18.96 +10.89 -20.87 -23.43 -26.10  届いた（ずれ 2.51°）  届いた角度 +12.39 +20.03 +11.60 -18.36 -23.11 -25.75
[送信] j3 -2.0°（長押し 4） → +12.49 +18.96 +10.89 -22.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.56 +20.03 +11.60 -22.67 -23.11 -25.75
[送信] j3 -2.0°（長押し 5） → +12.49 +18.96 +10.89 -24.87 -23.43 -26.10  届いた（ずれ 2.2°）  届いた角度 +12.56 +20.03 +11.60 -22.67 -23.11 -25.75
[送信] j3 -2.0°（長押し 6） → +12.49 +18.96 +10.89 -26.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.56 +20.03 +11.60 -26.54 -24.16 -25.75
[送信] j3 -2.0°（長押し 7） → +12.49 +18.96 +10.89 -28.87 -23.43 -26.10  届いた（ずれ 2.33°）  届いた角度 +12.56 +20.03 +11.60 -26.54 -24.16 -25.75
[送信] j3 -2.0°（長押し 8） → +12.49 +18.96 +10.89 -30.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 -30.58 -24.16 -25.75
[送信] j3 -2.0°（長押し 9） → +12.49 +18.96 +10.89 -32.87 -23.43 -26.10  届いた（ずれ 2.29°）  届いた角度 +12.39 +20.03 +11.60 -30.58 -24.16 -25.75
[送信] j3 +1.0° → +12.49 +18.96 +10.89 -31.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 -32.51 -24.16 -25.75
[送信] j3 +2.0°（長押し 1） → +12.49 +18.96 +10.89 -29.87 -23.43 -26.10  届いた（ずれ 2.64°）  届いた角度 +12.39 +20.03 +11.60 -32.51 -24.16 -25.75
[送信] j3 +2.0°（長押し 2） → +12.49 +18.96 +10.89 -27.87 -23.43 -26.10  届いた（ずれ 1.3°）  届いた角度 +12.39 +20.03 +11.60 -29.17 -24.16 -25.75
[送信] j3 +2.0°（長押し 3） → +12.49 +18.96 +10.89 -25.87 -23.43 -26.10  届いた（ずれ 1.11°）  届いた角度 +12.39 +20.03 +11.60 -26.98 -24.16 -25.75
[送信] j3 +2.0°（長押し 4） → +12.49 +18.96 +10.89 -23.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 -24.87 -24.16 -25.75
[送信] j3 +2.0°（長押し 5） → +12.49 +18.96 +10.89 -21.87 -23.43 -26.10  届いた（ずれ 3.0°）  届いた角度 +12.39 +20.03 +11.60 -24.87 -24.16 -25.75
[送信] j3 +2.0°（長押し 6） → +12.49 +18.96 +10.89 -19.87 -23.43 -26.10  届いた（ずれ 2.8°）  届いた角度 +12.30 +20.03 +11.60 -22.67 -24.16 -25.75
[送信] j3 +2.0°（長押し 7） → +12.49 +18.96 +10.89 -17.87 -23.43 -26.10  届いた（ずれ 2.69°）  届いた角度 +12.39 +20.03 +11.60 -20.56 -24.16 -25.75
[送信] j3 +2.0°（長押し 8） → +12.49 +18.96 +10.89 -15.87 -23.43 -26.10  届いた（ずれ 2.76°）  届いた角度 +12.39 +20.03 +11.60 -18.63 -24.16 -25.75
[送信] j3 +2.0°（長押し 9） → +12.49 +18.96 +10.89 -13.87 -23.43 -26.10  届いた（ずれ 2.74°）  届いた角度 +12.39 +20.03 +11.60 -16.61 -24.16 -25.75
[送信] j3 +2.0°（長押し 10） → +12.49 +18.96 +10.89 -11.87 -23.43 -26.10  届いた（ずれ 2.63°）  届いた角度 +12.39 +20.03 +11.60 -14.50 -24.16 -25.75
[送信] j3 +2.0°（長押し 11） → +12.49 +18.96 +10.89 -9.87 -23.43 -26.10  届いた（ずれ 2.61°）  届いた角度 +12.48 +20.03 +11.60 -12.48 -24.16 -25.75
[送信] j3 +2.0°（長押し 12） → +12.49 +18.96 +10.89 -7.87 -23.43 -26.10  届いた（ずれ 2.67°）  届いた角度 +12.39 +20.03 +11.60 -10.54 -24.16 -25.75
[送信] j3 +2.0°（長押し 13） → +12.49 +18.96 +10.89 -5.87 -23.43 -26.10  届いた（ずれ 2.56°）  届いた角度 +12.48 +20.03 +11.60 -8.43 -24.16 -25.75
[送信] j3 +2.0°（長押し 14） → +12.49 +18.96 +10.89 -3.87 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.48 +20.03 +11.60 -4.39 -24.16 -25.75
[送信] j3 +2.0°（長押し 15） → +12.49 +18.96 +10.89 -1.87 -23.43 -26.10  届いた（ずれ 2.52°）  届いた角度 +12.48 +20.03 +11.60 -4.39 -24.16 -25.75
[送信] j3 +2.0°（長押し 16） → +12.49 +18.96 +10.89 +0.13 -23.43 -26.10  届いた（ずれ 2.41°）  届いた角度 +12.48 +20.03 +11.60 -2.28 -24.16 -25.75
[送信] j3 +2.0°（長押し 17） → +12.49 +18.96 +10.89 +2.13 -23.43 -26.10  届いた（ずれ 2.39°）  届いた角度 +12.39 +20.03 +11.60 -0.26 -24.16 -25.75
[送信] j3 +2.0°（長押し 18） → +12.49 +18.96 +10.89 +4.13 -23.43 -26.10  届いた（ずれ 2.29°）  届いた角度 +12.48 +20.03 +11.60 +1.84 -24.16 -25.75
[送信] j3 +2.0°（長押し 19） → +12.49 +18.96 +10.89 +6.13 -23.43 -26.10  届いた（ずれ 2.44°）  届いた角度 +12.48 +20.03 +11.60 +3.69 -24.16 -25.75
[送信] j3 -2.0° → +12.49 +18.96 +10.89 +4.13 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +5.09 -24.16 -25.75
[送信] j3 -2.0°（長押し 1） → +12.49 +18.96 +10.89 +2.13 -23.43 -26.10  届いた（ずれ 2.96°）  届いた角度 +12.39 +20.03 +11.60 +5.09 -24.16 -25.75
[送信] j3 -2.0°（長押し 2） → +12.49 +18.96 +10.89 +0.13 -23.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.48 +20.03 +11.60 +1.14 -24.16 -25.75
[関節] 上下で動かす関節を j4 にしました
[送信] j4 -2.0° → +12.49 +18.96 +10.89 +0.13 -25.43 -26.10  届いた（ずれ 1.27°）  届いた角度 +12.39 +20.03 +11.60 +0.79 -24.16 -25.75
[送信] j4 -2.0°（長押し 1） → +12.49 +18.96 +10.89 +0.13 -27.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.70 -26.63 -25.75
[送信] j4 -2.0°（長押し 2） → +12.49 +18.96 +10.89 +0.13 -29.43 -26.10  届いた（ずれ 2.8°）  届いた角度 +12.39 +20.03 +11.60 +0.70 -26.63 -25.75
[送信] j4 -2.0°（長押し 3） → +12.49 +18.96 +10.89 +0.13 -31.43 -26.10  届いた（ずれ 2.87°）  届いた角度 +12.39 +20.03 +11.60 +0.70 -28.56 -25.75
[送信] j4 -2.0°（長押し 4） → +12.49 +18.96 +10.89 +0.13 -33.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.61 -32.69 -25.75
[送信] j4 +1.0° → +12.49 +18.96 +10.89 +0.13 -32.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.61 -32.69 -25.75
[送信] j4 +2.0°（長押し 1） → +12.49 +18.96 +10.89 +0.13 -30.43 -26.10  届いた（ずれ 2.26°）  届いた角度 +12.39 +20.03 +11.60 +0.61 -32.69 -25.75
[送信] j4 +2.0°（長押し 2） → +12.49 +18.96 +10.89 +0.13 -28.43 -26.10  届いた（ずれ 1.1°）  届いた角度 +12.39 +20.03 +11.60 +0.52 -29.53 -25.75
[送信] j4 +2.0°（長押し 3） → +12.49 +18.96 +10.89 +0.13 -26.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.52 -27.42 -25.75
[送信] j4 +2.0°（長押し 4） → +12.49 +18.96 +10.89 +0.13 -24.43 -26.10  届いた（ずれ 2.99°）  届いた角度 +12.39 +20.03 +11.60 +0.52 -27.42 -25.75
[送信] j4 +2.0°（長押し 5） → +12.49 +18.96 +10.89 +0.13 -22.43 -26.10  届いた（ずれ 2.97°）  届いた角度 +12.39 +20.03 +11.60 +0.52 -25.40 -25.75
[送信] j4 +2.0°（長押し 6） → +12.49 +18.96 +10.89 +0.13 -20.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.52 -21.26 -25.75
[送信] j4 +2.0°（長押し 7） → +12.49 +18.96 +10.89 +0.13 -18.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.52 -19.24 -25.75
[送信] j4 +2.0°（長押し 8） → +12.49 +18.96 +10.89 +0.13 -16.43 -26.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -17.22 -25.75
[関節] 上下で動かす関節を j5 にしました
[送信] j5 -2.0° → +12.49 +18.96 +10.89 +0.13 -16.43 -28.10  届いた（ずれ 1.21°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.96 -26.89
[送信] j5 -2.0°（長押し 1） → +12.49 +18.96 +10.89 +0.13 -16.43 -30.10  届いた（ずれ 2.95°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.87 -27.15
[送信] j5 -1.0° → +12.49 +18.96 +10.89 +0.13 -16.43 -31.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.87 -30.32
[送信] j5 -2.0°（長押し 1） → +12.49 +18.96 +10.89 +0.13 -16.43 -33.10  届いた（ずれ 2.78°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.87 -30.32
[送信] j5 -2.0°（長押し 2） → +12.49 +18.96 +10.89 +0.13 -16.43 -35.10  届いた（ずれ 2.41°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -32.69
[送信] j5 -2.0°（長押し 3） → +12.49 +18.96 +10.89 +0.13 -16.43 -37.10  届いた（ずれ 2.39°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -34.71
[送信] j5 -2.0°（長押し 4） → +12.49 +18.96 +10.89 +0.13 -16.43 -39.10  届いた（ずれ 2.72°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -36.38
[送信] j5 -2.0°（長押し 5） → +12.49 +18.96 +10.89 +0.13 -16.43 -41.10  届いた（ずれ 2.78°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -38.32
[送信] j5 -2.0°（長押し 6） → +12.49 +18.96 +10.89 +0.13 -16.43 -43.10  届いた（ずれ 2.68°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -40.42
[送信] j5 -2.0°（長押し 7） → +12.49 +18.96 +10.89 +0.13 -16.43 -45.10  届いた（ずれ 2.65°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -42.45
[送信] j5 -2.0°（長押し 8） → +12.49 +18.96 +10.89 +0.13 -16.43 -47.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -46.49
[送信] j5 -2.0°（長押し 9） → +12.49 +18.96 +10.89 +0.13 -16.43 -49.10  届いた（ずれ 2.61°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -46.49
[送信] j5 -2.0°（長押し 10） → +12.49 +18.96 +10.89 +0.13 -16.43 -51.10  届いた（ずれ 2.59°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -48.51
[送信] j5 -2.0°（長押し 11） → +12.49 +18.96 +10.89 +0.13 -16.43 -53.10  届いた（ずれ 2.66°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -50.44
[送信] j5 -2.0°（長押し 12） → +12.49 +18.96 +10.89 +0.13 -16.43 -55.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.78 -54.49
[送信] j5 +1.0° → +12.49 +18.96 +10.89 +0.13 -16.43 -54.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -54.49
[送信] j5 +2.0°（長押し 1） → +12.49 +18.96 +10.89 +0.13 -16.43 -52.10  届いた（ずれ 2.39°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -54.49
[送信] j5 +2.0°（長押し 2） → +12.49 +18.96 +10.89 +0.13 -16.43 -50.10  届いた（ずれ 2.98°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -53.08
[送信] j5 +2.0°（長押し 3） → +12.49 +18.96 +10.89 +0.13 -16.43 -48.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -49.04
[送信] j5 +2.0°（長押し 4） → +12.49 +18.96 +10.89 +0.13 -16.43 -46.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -46.93
[送信] j5 +2.0°（長押し 5） → +12.49 +18.96 +10.89 +0.13 -16.43 -44.10  届いた（ずれ 2.65°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -46.75
[送信] j5 +2.0°（長押し 6） → +12.49 +18.96 +10.89 +0.13 -16.43 -42.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -42.80
[送信] j5 +2.0°（長押し 7） → +12.49 +18.96 +10.89 +0.13 -16.43 -40.10  届いた（ずれ 2.52°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -42.62
[送信] j5 +2.0°（長押し 8） → +12.49 +18.96 +10.89 +0.13 -16.43 -38.10  届いた（ずれ 2.76°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -40.86
[送信] j5 +2.0°（長押し 9） → +12.49 +18.96 +10.89 +0.13 -16.43 -36.10  届いた（ずれ 2.74°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -38.84
[送信] j5 +2.0°（長押し 10） → +12.49 +18.96 +10.89 +0.13 -16.43 -34.10  届いた（ずれ 2.28°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -36.38
[送信] j5 +2.0°（長押し 11） → +12.49 +18.96 +10.89 +0.13 -16.43 -32.10  届いた（ずれ 2.61°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -34.71
[送信] j5 +2.0°（長押し 12） → +12.49 +18.96 +10.89 +0.13 -16.43 -30.10  届いた（ずれ 2.59°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -32.69
[送信] j5 +2.0°（長押し 13） → +12.49 +18.96 +10.89 +0.13 -16.43 -28.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -28.65
[送信] j5 +2.0°（長押し 14） → +12.49 +18.96 +10.89 +0.13 -16.43 -26.10  届いた（ずれ 2.55°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -28.65
[送信] j5 +2.0°（長押し 15） → +12.49 +18.96 +10.89 +0.13 -16.43 -24.10  届いた（ずれ 2.53°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -26.63
[送信] j5 +2.0°（長押し 16） → +12.49 +18.96 +10.89 +0.13 -16.43 -22.10  届いた（ずれ 1.07°）  届いた角度 +12.39 +20.03 +11.60 +0.43 -16.69 -22.58
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.4°）  届いた角度 +0.70 +1.14 +1.40 +0.00 +0.08 -28.82
^C
[終了] Ctrl+C
[終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_075657
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % cd ~/r2r2r-scripts
git add tools/gamepad_teleop.py tools/test_gamepad_teleop.py tools/pi/mecharm_daemon_start.sh
git commit -m "daemon を pymycobot 2.9.6 で起動する (4.0.4 は送るたびに 0.5 秒 × 3 回返事を待ち 1 回 1.6 秒). gamepad_teleop: 1 押し 1° (0.5° はサーボが反応しない), 無視された指令は 0.5 秒後に送り直す (3 回まで・停止のあとは送らない). テス ト 73 件

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LevEXRnwfWWxYdvM8WRMgs"
python3 tools/gamepad_teleop.py --execute
[main 15ca6a4] daemon を pymycobot 2.9.6 で起動する (4.0.4 は送るたびに 0.5 秒 × 3 回返事を待ち 1 回 1.6 秒). gamepad_teleop: 1 押し 1° (0.5° はサーボが反応しない), 無視された指令は 0.5 秒後に送り直す (3 回まで・停止のあとは送らない). テスト 73 件
```

> 動きがぎこちないけどよく動くようにはなった

【動画】LOG436_01_hold_step.mp4 2.9.6 に戻したあと、十字キーの長押しで関節を動かしているところ。0.2秒おきに1〜2°の刻みを送る形で、刻みごとに止まりながら動く


## 8:03：長押しは、読んだ角度から3°先を0.1秒おきに送る形にした

ぎこちない理由は、1刻み（1〜2°）ごとにアームが目標に着いて止まり、次の指令（0.2〜0.4秒後）でまた動き出していたことです。記録では、送る前の読んだ角度と直前の指令の差は、毎回1°前後まで詰まっていました。

長押しの間だけ、読んだ角度から3°先を0.1秒おきに送り直す形を提案し、speed 20 のまま止めずに動かすと決めました。

| 長押しの作り | 前（刻み） | 後（3°先） |
|---|---|---|
| 送る目標 | 直前の指令 + 1刻み | 動かす関節は、いま読んだ角度 + 3°。ほかの関節は直前の指令のまま |
| 送る間隔 | 0.2秒（差が3°を超えたら待つ） | 0.1秒。届くのを待たない |
| 目標が戻るとき | ― | 前の目標より後ろへは戻さない（読んだ角度が古いと引き戻すため） |
| 止まる条件 | 3秒追いつかない | 1秒進まない（当たっているなど） |
| ターミナル | 1刻みごとに1行 | 離したときに `[長押し] j0 を ○° → ○° まで` の1行 |
| R1 | 長押しの刻みも2°になる | 短い押しの刻み（2°）にだけ効く。長押しの速さは speed で決まる |

ほかの関節を直前の指令のまま送るのは、読んだ角度で送り直すと、j1 が重さで沈んだ分（記録では1°前後）を毎回なぞって、ずり下がっていくからです。テストは73件すべて通り、15ca6a4・413f7e1 としてコミットしました。

#### 3°先の形で動かしたターミナルの出力（761〜822行目）

```text
 3 files changed, 278 insertions(+), 154 deletions(-)
/opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import resource_stream, resource_exists
objc[8239]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f152c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106c890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106c8e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106c958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f153b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106c980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106c9d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106ca20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f154d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106ca98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cb38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f155c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cb88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f155e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cbb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cbd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cc50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106ccc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cd18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f15778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cd40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8239]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106f157c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x12106cd90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
[記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_080648
[実機] daemon に送ります。起動したときの姿勢: -0.26 +1.14 +1.40 +0.00 +0.17 -29.70
コントローラーを待っています（つないでいなければ、今つないでください）
[接続] PS4 Controller  GUID=03008fe54c050000cc09000000016800  軸=6  ボタン=16
[送信] j0 -1.0° → -1.26 +1.14 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 1.0°）  届いた角度 -0.26 +1.14 +1.40 +0.00 +0.17 -29.70
[長押し] j0 を -0.96° → -19.86° まで（13 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 +1.0° → -24.50 +1.14 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 1.33°）  届いた角度 -25.83 +1.93 +2.10 -0.26 +0.17 -29.97
[長押し] j0 を -24.52° → +5.44° まで（14 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j1 -1.0° → +9.06 +0.14 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 1.79°）  届いた角度 +8.78 +1.93 +2.10 -0.43 +0.17 -29.88
[長押し] j1 を +1.66° → -0.35° まで（2 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j1 +1.0° → +9.06 -3.23 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 0.7°）  届いた角度 +8.78 -2.98 +2.10 -0.43 +0.52 -29.88
[長押し] j1 を -2.54° → +25.40° まで（16 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j1 -1.0° → +9.06 +27.40 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 2.13°）  届いた角度 +8.78 +29.53 +2.10 -0.43 +0.52 -29.88
[長押し] j1 を +29.53° → +14.58° まで（15 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 -2.0° → +7.06 +11.58 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 1.6°）  届いた角度 +7.47 +13.18 +2.10 -0.43 +0.52 -29.88
[長押し] j0 を +7.03° → +0.79° まで（4 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 -1.0° → -3.21 +11.58 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 1.6°）  届いた角度 -1.75 +13.18 +2.10 -0.35 +0.52 -29.88
[長押し] j0 を -3.07° → -15.11° まで（8 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 +1.0° → -17.11 +11.58 +1.40 +0.00 +0.17 -29.70  届いた（ずれ 1.6°）  届いた角度 -17.75 +13.18 +2.10 -0.26 +0.52 -29.88
[長押し] j0 を -16.69° → +14.58° まで（17 回送信。離したあと最大 3° 先まで動いて止まります）
[関節] 上下で動かす関節を j2 にしました
[関節] 上下で動かす関節を j3 にしました
[送信] j3 -2.0° → +20.31 +11.58 +1.40 -2.00 +0.17 -29.70  届いた（ずれ 1.6°）  届いた角度 +20.56 +13.18 +2.10 -0.79 +0.52 -29.88
[長押し] j3 を -0.79° → -12.48° まで（8 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j3 +1.0° → +20.31 +11.58 +1.40 -14.48 +0.17 -29.70  届いた（ずれ 1.6°）  届いた角度 +20.56 +13.18 +2.10 -14.50 +0.52 -29.88
[長押し] j3 を -14.50° → -7.47° まで（6 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j3 +2.0° → +20.31 +11.58 +1.40 -2.47 +0.17 -29.70  届いた（ずれ 1.6°）  届いた角度 +20.56 +13.18 +2.10 -2.90 +0.52 -29.88
[関節] 上下で動かす関節を j4 にしました
[送信] j4 -2.0° → +20.31 +11.58 +1.40 +0.10 -1.83 -29.70  届いた（ずれ 1.6°）  届いた角度 +20.56 +13.18 +2.10 -0.17 -2.28 -29.88
[長押し] j4 を -2.28° → -14.32° まで（8 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j4 +2.0° → +20.31 +11.58 +1.40 +0.10 -17.69 -29.70  届いた（ずれ 2.52°）  届いた角度 +20.47 +13.18 +2.10 -0.08 -20.21 -29.79
[長押し] j4 を -19.59° → +11.51° まで（25 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j4 -1.0° → +20.31 +11.58 +1.40 +0.10 +15.53 -29.70  届いた（ずれ 1.6°）  届いた角度 +20.39 +13.18 +2.10 +0.08 +15.55 -29.79
[長押し] j4 を +15.55° → +3.60° まで（8 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 -1.0° → +19.31 +11.58 +1.40 +0.10 +0.60 -29.70  届いた（ずれ 1.6°）  届いた角度 +20.39 +13.18 +2.10 +0.17 +1.23 -29.79
[長押し] j0 を +19.51° → -21.79° まで（22 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 +1.0° → -26.60 +11.58 +1.40 +0.10 +0.60 -29.70  届いた（ずれ 1.6°）  届いた角度 -28.03 +13.18 +2.10 +0.43 +1.23 -29.79
[長押し] j0 を -26.80° → +3.16° まで（19 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 2.1°）  届いた角度 -0.35 +1.49 +2.10 +0.43 -0.52 -29.79
^C
[終了] Ctrl+C
[終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_080648
```

#### 目標を戻さない形をコミットしたあとのターミナルの出力（823〜917行目）

```text
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % cd ~/r2r2r-scripts
git add tools/gamepad_teleop.py tools/test_gamepad_teleop.py tools/pi/mecharm_daemon_start.sh
git commit -m "gamepad_teleop: 長押しは 0.1 秒おきに読んだ角度 + 3° 先を送り, 届くのを待たずに止めずに動かす (ほかの関節は指令のまま・目標は戻さない・1 秒進まなければ止める). 無視された指令は送り直す. 1 押し 1°. daemon を pymycobot 2.9.6 で起動. テスト 73 件

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LevEXRnwfWWxYdvM8WRMgs"
python3 tools/gamepad_teleop.py --execute
[main 413f7e1] gamepad_teleop: 長押しは 0.1 秒おきに読んだ角度 + 3° 先を送り, 届くのを待たずに止めずに動かす (ほかの関節は指令のまま・目標は戻さない・1 秒進まなければ止める). 無視された指令は送り直す. 1 押し 1°. daemon を pymycobot 2.9.6 で起動. テスト 73 件
 2 files changed, 18 insertions(+)
/opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  from pkg_resources import resource_stream, resource_exists
objc[8310]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d2c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ec890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ec8e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ec958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d3b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ec980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ec9d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175eca20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d4d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175eca98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecb38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d5c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecb88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d5e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecbb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecbd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecc50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175eccc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecd18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecd40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
objc[8310]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x10694d7c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1175ecd90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
[記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_080930
[実機] daemon に送ります。起動したときの姿勢: -0.26 +1.49 +2.10 +0.26 -0.26 -29.79
コントローラーを待っています（つないでいなければ、今つないでください）
[接続] PS4 Controller  GUID=03008fe54c050000cc09000000016800  軸=6  ボタン=16
[送信] j0 -1.0° → -1.26 +1.49 +2.10 +0.26 -0.26 -29.79  届いた（ずれ 1.0°）  届いた角度 -0.26 +1.49 +2.10 +0.26 -0.26 -29.79
[長押し] j0 を -1.05° → -17.13° まで（12 回送信。離したあと最大 3° 先まで動いて止まります）
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
  [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries
[関節] 上下で動かす関節を j2 にしました
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
  [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries
[受付なし] 前の操作が終わっていません（ためません）
[受付なし] 前の操作が終わっていません（ためません）
  [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries
[受付なし] 前の操作が終わっていません（ためません）
[送信] j0 +1.0° → -22.21 +1.49 +2.10 +0.26 -0.26 -29.79  届いた（ずれ 0.79°）  届いた角度 -22.32 +2.28 +2.81 -0.08 -0.26 -29.79
[送信] j2 -1.0° → -22.21 +1.49 +1.10 +0.26 -0.26 -29.79  届いた（ずれ 1.71°）  届いた角度 -21.88 +2.28 +2.81 -0.08 -0.26 -29.79
[送信] j2 -1.0° → -22.21 +1.49 +0.10 +0.26 -0.26 -29.79  届いた（ずれ 2.0°）  届いた角度 -21.88 +2.28 +2.10 -0.08 -0.26 -29.79
[長押し] j2 を +2.10° → -1.93° まで（5 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j2 +1.0° → -22.21 +1.49 -4.02 +0.26 -0.26 -29.79  届いた（ずれ 0.88°）  届いた角度 -21.88 +2.37 -3.33 +0.00 +0.08 -29.79
[長押し] j2 を -3.25° → +0.79° まで（2 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j2 +1.0° → -22.21 +1.49 +4.87 +0.26 -0.26 -29.79  届いた（ずれ 0.88°）  届いた角度 -21.88 +2.37 +4.92 +0.00 +0.08 -29.79
[長押し] j2 を +5.71° → +5.71° まで（1 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j2 -1.0° → -22.21 +1.49 +7.71 +0.26 -0.26 -29.79  届いた（ずれ 2.04°）  届いた角度 -21.88 +2.37 +9.75 +0.00 +0.08 -29.79
[長押し] j2 を +9.66° → -3.42° まで（16 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j2 +1.0° → -22.21 +1.49 -5.60 +0.26 -0.26 -29.79  届いた（ずれ 0.88°）  届いた角度 -21.88 +2.37 -4.83 +0.08 +0.08 -29.79
[長押し] j2 を -4.83° → +24.34° まで（15 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j2 -1.0° → -22.21 +1.49 +26.34 +0.26 -0.26 -29.79  届いた（ずれ 1.6°）  届いた角度 -21.88 +2.37 +27.94 +0.26 +0.08 -29.79
[長押し] j2 を +27.94° → +24.34° まで（6 回送信。離したあと最大 3° 先まで動いて止まります）
[関節] 上下で動かす関節を j3 にしました
[送信] j3 -1.0° → -22.21 +1.49 +20.11 -0.74 -0.26 -29.79  届いた（ずれ 1.77°）  届いた角度 -21.88 +2.37 +21.88 +0.26 +0.08 -29.79
[長押し] j3 を +0.26° → -5.88° まで（5 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j3 +1.0° → -22.21 +1.49 +20.11 -9.38 -0.26 -29.79  届いた（ずれ 1.77°）  届いた角度 -21.88 +2.37 +21.88 -9.40 +0.08 -29.79
[長押し] j3 を -9.40° → +0.35° まで（5 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j3 -1.0° → -22.21 +1.49 +20.11 +2.35 -0.26 -29.79  届いた（ずれ 1.77°）  届いた角度 -21.88 +2.37 +21.88 +2.81 +0.08 -29.79
[長押し] j3 を +2.81° → +0.96° まで（3 回送信。離したあと最大 3° 先まで動いて止まります）
[関節] 上下で動かす関節を j4 にしました
[送信] j4 -1.0° → -22.21 +1.49 +20.11 -2.21 -1.26 -29.79  届いた（ずれ 1.77°）  届いた角度 -21.88 +2.37 +21.88 -1.49 +0.08 -29.79
[長押し] j4 を +0.08° → -48.77° まで（32 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j4 +1.0° → -22.21 +1.49 +20.11 -2.21 -50.77 -29.79  届いた（ずれ 1.77°）  届いた角度 -21.88 +2.37 +21.88 -1.93 -51.50 -29.79
[長押し] j4 を -51.50° → -2.19° まで（40 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 -1.0° → -23.21 +1.49 +20.11 -2.21 +2.21 -29.79  届いた（ずれ 1.77°）  届いた角度 -21.88 +2.37 +21.88 -1.93 +1.40 -29.79
[長押し] j0 を -23.02° → -32.25° まで（7 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j0 +1.0° → -34.60 +1.49 +20.11 -2.21 +2.21 -29.79  届いた（ずれ 1.77°）  届いた角度 -34.45 +2.37 +21.88 -2.10 +1.58 -29.79
[長押し] j0 を -34.54° → +28.91° まで（34 回送信。離したあと最大 3° 先まで動いて止まります）
[関節] 上下で動かす関節を j5 にしました
[送信] j5 +2.0° → +31.91 +1.49 +20.11 -2.21 +2.21 -27.79  届いた（ずれ 2.0°）  届いた角度 +31.99 +2.37 +21.88 -2.37 +2.10 -29.79
[送信] j0 -1.0° → +30.91 +1.49 +20.11 -2.21 +2.21 -27.79  届いた（ずれ 2.0°）  届いた角度 +31.99 +2.37 +21.88 -2.37 +2.10 -29.79
[送信] j5 +1.0° → +30.91 +1.49 +20.11 -2.21 +2.21 -26.79  届いた（ずれ 1.77°）  届いた角度 +30.84 +2.37 +21.88 -2.37 +2.10 -27.68
[長押し] j5 を -27.68° → -27.68° まで（1 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j5 -1.0° → +30.91 +1.49 +20.11 -2.21 +2.21 -23.48  届いた（ずれ 1.77°）  届いた角度 +30.84 +2.37 +21.88 -2.37 +2.10 -23.20
[長押し] j5 を -23.20° → -25.40° まで（2 回送信。離したあと最大 3° 先まで動いて止まります）
[関節] 上下で動かす関節を j1 にしました
[送信] j1 -1.0° → +30.91 +0.49 +20.11 -2.21 +2.21 -29.01  届いた（ずれ 1.88°）  届いた角度 +30.84 +2.37 +21.88 -2.37 +2.10 -28.38
[長押し] j1 を +1.75° → -23.20° まで（19 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j1 +2.0° → +30.91 -24.20 +20.11 -2.21 +2.21 -29.01  届いた（ずれ 1.77°）  届いた角度 +30.76 -23.73 +21.88 -2.37 +2.72 -28.65
[長押し] j1 を -23.73° → +7.55° まで（13 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] j1 -1.0° → +30.91 +13.33 +20.11 -2.21 +2.21 -29.01  届いた（ずれ 1.87°）  届いた角度 +30.76 +15.20 +21.88 -2.37 +2.72 -28.74
[長押し] j1 を +15.20° → -9.40° まで（19 回送信。離したあと最大 3° 先まで動いて止まります）
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 1.84°）  届いた角度 +0.08 +0.70 +1.84 -1.14 +1.14 -29.70
^C
[終了] Ctrl+C
[終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261103_080930
(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % 
```

- ねらい：長押しの間、アームを目標に着かせずに動かし続け、刻みごとに止まらないようにする
- 変わったこと：長押しの送る間隔は中央0.216秒から0.119〜0.126秒、長押しの速さは中央毎秒5.9°から8.3°・7.7°（記録2本）
- 見込める効果：ブロックの上まで運ぶ時間が縮む見込み。止まらずに動くかは、下の通りまだ足りない


## 8:13：3°先の形でも、なめらかにはならなかった

> 動きの滑らかさはないね。R1押しても押さなくても動く角度変わらなくない？

R1 はその通りで、長押しの速さは R1 があってもなくても同じにしていました。R1 が効くのは短い押しの刻み（1°と2°）だけで、0.4秒以上押すと長押しに切り替わるので、R1 の差はほとんど感じられません。

なめらかにならない理由は、記録から2つ見えています。

1. speed 20 のアームは、3°先の目標に0.15秒ほどで着いて止まる。0.1秒おきに送っても、ときどき1回の仕事が0.4秒かかり（長押しの送る間隔の90%の値は0.406〜0.417秒）、そのたびに止まる
2. 角度の読み取りが続けて失敗し、13秒止まった場面があった。8.57秒に押した右が、送れたのは21.45秒。ターミナルにも `daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries` が3回出ている。指令を細かく送り続けると、アームからの返事が混ざって読み取りに失敗しやすくなると見ている（確かめてはいない）

### 5本の記録から数えた、送る間隔と長押しの速さ

```python
#!/usr/bin/env python3
"""analyze_gamepad_runs.py — 2026-11-03 のゲームパッドの実機の記録 (log.jsonl) 5 本を読み, 送る間隔・長押しの速さ・止まった所を数える (LOG436)

  python3 analyze_gamepad_runs.py <gamepad_teleop のフォルダ>
"""
import json
import os
import statistics as st
import sys

RUNS = ["teleop_20261103_071424", "teleop_20261103_074936", "teleop_20261103_075657",
        "teleop_20261103_080648", "teleop_20261103_080930"]


def load(root, run):
    rows = [json.loads(l) for l in open(os.path.join(root, run, "log.jsonl"), encoding="utf-8")]
    meta = json.load(open(os.path.join(root, run, "meta.json"), encoding="utf-8"))
    return rows, meta


def fmt(a):
    return " ".join("{:+7.2f}".format(x) for x in a)


def main(root):
    print("## 1. 記録ごとのまとめ")
    print("| 記録 | コミット | 1押しの刻み | 行 | 送った | 受付なし(busy) | 長押しの送る間隔 中央/90% (秒) | 届くまで1秒超 | 押してから送るまで 中央/最大 (秒) |")
    print("|---|---|---|---|---|---|---|---|---|")
    for run in RUNS:
        rows, meta = load(root, run)
        mv = [r for r in rows if r["kind"] == "move"]
        sent = [r for r in mv if r.get("sent") is True]
        busy = sum(1 for r in mv if r.get("reason") == "busy")
        by = {}
        for r in sent:
            if r.get("hold_id") is not None:
                by.setdefault(r["hold_id"], []).append(r)
        gaps = []
        for rs in by.values():
            ts = sorted(x["t_send"] for x in rs if x.get("t_send"))
            gaps += [b - a for a, b in zip(ts, ts[1:])]
        lat = [r["t_send"] - r["t_unix"] for r in sent if r.get("t_send")]
        long_ = sum(1 for r in sent if (r.get("elapsed_sec") or 0) > 1)
        g = "{:.3f} / {:.3f}".format(st.median(gaps), sorted(gaps)[int(len(gaps) * 0.9)]) if gaps else "-"
        print("| {} | {} {} | {}° | {} | {} | {} | {} | {} | {:.3f} / {:.2f} |".format(
            run, meta["git"]["commit"][:7], "" if meta["git"]["script_status"] == "clean" else "(変更あり)",
            meta["motion"]["step_fine_deg"], len(rows), len(sent), busy, g, long_, st.median(lat), max(lat)))

    print("\n## 2. 長押し (5 回以上送ったもの) の速さ = 動かした関節の進んだ角度 ÷ かかった時間")
    for run in RUNS[1:]:
        rows, _ = load(root, run)
        by = {}
        for r in rows:
            if (r["kind"] == "move" and r.get("sent") is True and r.get("hold_id") is not None
                    and (r.get("hold_n") or 0) >= 1 and r.get("measured_before")):
                by.setdefault(r["hold_id"], []).append(r)
        sp = []
        for rs in by.values():
            if len(rs) < 5:
                continue
            j = rs[0]["joint"]
            d = abs(rs[-1]["measured_before"][j] - rs[0]["measured_before"][j])
            t = rs[-1]["t_send"] - rs[0]["t_send"]
            if t > 0:
                sp.append(d / t)
        if sp:
            print("- {}: 長押し {} 回・中央 {:.1f}°/秒・最小 {:.1f}・最大 {:.1f}".format(run, len(sp), st.median(sp), min(sp), max(sp)))
        else:
            print("- {}: 5 回以上の長押しなし".format(run))

    print("\n## 3. 届くまで 1 秒を超えた送信 (指令が無視されたもの)")
    for run in RUNS:
        rows, _ = load(root, run)
        t0 = rows[0]["t_unix"]
        for r in rows:
            if r["kind"] == "move" and r.get("sent") is True and (r.get("elapsed_sec") or 0) > 1:
                print("- {} {:7.2f}秒 j{} {:+.1f}° 長押し {}/{} 届くまで {} 秒 ずれ {}°".format(
                    run, r["t_unix"] - t0, r["joint"], r["delta"], r.get("hold_id"), r.get("hold_n"),
                    r["elapsed_sec"], r.get("reach_err")))
                print("    送る前   " + fmt(r["measured_before_send"]))
                print("    指令     " + fmt(r["command"]))
                print("    届いた   " + fmt(r["reached_angles"]))

    print("\n## 4. 押してから送るまで 1 秒を超えたもの (角度の読み取りが続けて失敗した)")
    for run in RUNS:
        rows, _ = load(root, run)
        t0 = rows[0]["t_unix"]
        for r in rows:
            if r["kind"] == "move" and r.get("t_send") and r["t_send"] - r["t_unix"] > 1:
                print("- {} {:7.2f}秒に押した j{} → 送ったのは {:.2f}秒 ({:.2f} 秒あと)".format(
                    run, r["t_unix"] - t0, r["joint"], r["t_send"] - t0, r["t_send"] - r["t_unix"]))

    print("\n## 5. 0.5° の押しで, 送る前と届いた角度が変わったか (1 押し 0.5° の 2 本)")
    for run in RUNS[:2]:
        rows, _ = load(root, run)
        moved = same = 0
        for r in rows:
            if r["kind"] == "move" and r.get("sent") is True and abs(r["delta"]) == 0.5 and r.get("reached_angles"):
                j = r["joint"]
                if abs(r["reached_angles"][j] - r["measured_before_send"][j]) < 0.2:
                    same += 1
                else:
                    moved += 1
        print("- {}: 0.5° の送信 {} 回のうち, 読んだ角度が 0.2° 以上動いたのは {} 回".format(run, moved + same, moved))


if __name__ == "__main__":
    main(sys.argv[1])
```

#### analyze_gamepad_runs.py の出力

```text
## 1. 記録ごとのまとめ
| 記録 | コミット | 1押しの刻み | 行 | 送った | 受付なし(busy) | 長押しの送る間隔 中央/90% (秒) | 届くまで1秒超 | 押してから送るまで 中央/最大 (秒) |
|---|---|---|---|---|---|---|---|---|
| teleop_20261103_071424 | f061d54  | 0.5° | 121 | 46 | 13 | - | 0 | 0.040 / 0.31 |
| teleop_20261103_074936 | 36def3c  | 0.5° | 50 | 32 | 5 | 1.630 / 1.658 | 0 | 0.042 / 0.08 |
| teleop_20261103_075657 | 36def3c (変更あり) | 1.0° | 437 | 370 | 10 | 0.216 / 0.443 | 5 | 0.042 / 0.08 |
| teleop_20261103_080648 | 15ca6a4  | 1.0° | 228 | 209 | 0 | 0.126 / 0.406 | 0 | 0.024 / 0.44 |
| teleop_20261103_080930 | 413f7e1  | 1.0° | 307 | 274 | 8 | 0.119 / 0.417 | 0 | 0.024 / 12.89 |

## 2. 長押し (5 回以上送ったもの) の速さ = 動かした関節の進んだ角度 ÷ かかった時間
- teleop_20261103_074936: 長押し 2 回・中央 1.0°/秒・最小 0.7・最大 1.3
- teleop_20261103_075657: 長押し 23 回・中央 5.9°/秒・最小 2.6・最大 9.4
- teleop_20261103_080648: 長押し 13 回・中央 8.3°/秒・最小 4.7・最大 12.6
- teleop_20261103_080930: 長押し 14 回・中央 7.7°/秒・最小 3.8・最大 10.3

## 3. 届くまで 1 秒を超えた送信 (指令が無視されたもの)
- teleop_20261103_075657   48.94秒 j2 -2.0° 長押し 8/3 届くまで 8.08 秒 ずれ 3.47°
    送る前     +7.82  +15.29   +9.58   +0.17   -0.96  -29.88
    指令       +7.74  +14.31   +6.02   +0.08   -0.08  -29.88
    届いた     +7.82  +15.29   +9.49   +0.17   -0.52  -29.88
- teleop_20261103_075657   81.09秒 j4 -2.0° 長押し 19/1 届くまで 8.09 秒 ずれ 4.0°
    送る前     -6.41  +16.08  +10.19   -1.23   -0.43  -29.88
    指令       -6.18  +15.29   +9.49   -0.83   -4.43  -29.88
    届いた     -6.41  +16.08  +10.19   -1.05   -0.43  -29.88
- teleop_20261103_075657   94.32秒 j5 +2.0° 長押し 23/3 届くまで 8.12 秒 ずれ 4.22°
    送る前     +1.49  +16.96  +10.89   -0.87   -0.43  -26.19
    指令       +1.59  +16.08  +10.19   -1.05   -0.43  -21.88
    届いた     +1.49  +16.96  +10.89   -0.87   -0.43  -26.10
- teleop_20261103_075657  286.46秒 j4 +2.0° 長押し 36/2 届くまで 1.66 秒 ずれ 2.9°
    送る前     +7.47  +17.84  +11.51   -0.96  -35.77  -25.75
    指令       +7.49  +16.96  +10.89   -0.87  -32.43  -26.10
    届いた     +7.47  +17.84  +11.51   -0.96  -35.33  -25.75
- teleop_20261103_075657  343.03秒 j5 -2.0° 長押し 53/1 届くまで 1.36 秒 ずれ 2.95°
    送る前    +12.39  +20.03  +11.60   +0.43  -16.96  -26.89
    指令      +12.49  +18.96  +10.89   +0.13  -16.43  -30.10
    届いた    +12.39  +20.03  +11.60   +0.43  -16.87  -27.15

## 4. 押してから送るまで 1 秒を超えたもの (角度の読み取りが続けて失敗した)
- teleop_20261103_080930    8.57秒に押した j0 → 送ったのは 21.45秒 (12.89 秒あと)

## 5. 0.5° の押しで, 送る前と届いた角度が変わったか (1 押し 0.5° の 2 本)
- teleop_20261103_071424: 0.5° の送信 7 回のうち, 読んだ角度が 0.2° 以上動いたのは 3 回
- teleop_20261103_074936: 0.5° の送信 18 回のうち, 読んだ角度が 0.2° 以上動いたのは 8 回
```

| 記録 | daemon の pymycobot | 長押しの形 | 長押しの送る間隔（中央） | 長押しの速さ（中央） |
|---|---|---|---|---|
| 7:49（074936） | 4.0.4 | 刻み（0.5°・2°） | 1.630秒 | 毎秒1.0° |
| 7:57（075657） | 2.9.6 | 刻み（1°・2°） | 0.216秒 | 毎秒5.9° |
| 8:06（080648） | 2.9.6 | 3°先を0.1秒おき | 0.126秒 | 毎秒8.3° |
| 8:09（080930） | 2.9.6 | 3°先を0.1秒おき（目標を戻さない） | 0.119秒 | 毎秒7.7° |

【図解】LOG436_hold_modes.html


## 8:20：今の長押しをタグで残し、jog と fresh_mode を測る試しを用意した

指令を何度も送り直すやり方では、mechArm でなめらかに動かすのは難しいと見ています。アームには jog という、押している間だけ一定の速さで動き続ける命令があり、Pi の pymycobot 2.9.6 にも `jog_angle` と `jog_stop` が入っています。jog に変えるなら、押したら動かし始め、離したら止め、R1 で jog の速さを変え、L2+R2 で本当に動きを止められます。ただし daemon に jog と停止の命令と、通信が切れたら止める見張りを足す必要があり、mechArm のファームウェアが jog に応えるかもまだ分かりません。

> 今の仕様を暫定で保管（今の動きでも大方の問題は解決はできている）しつつ、jogの修正も進めてください。
> どこまでmecharmの動きを改善できるのか限界もまた知りたいです。

今の長押しは commit 413f7e1 にあり、`gamepad-stream-v1` のタグで残します。jog 版は別に作り、今の `gamepad_teleop.py` はそのまま使えるようにします。

前のシリーズ（mechArm 270 Pi 動的追従の限界を探る Log#1〜#2、LOG182・LOG183）では、fresh_mode を有効にすると Pi 上で毎秒91回まで指令を送れることと、アームの物理応答は振幅10°で約0.5秒かかることを測っています。その続きとして、同じ根元 j0 で4つの動かし方を並べて測る試し `jog_probe` を作りました。daemon を一時止めて Pi で直接 pymycobot を使う形で、手首の点検（`servo_check.sh`）と同じ流れです。

| テスト | 動かし方 | 見るもの |
|---|---|---|
| 0 | 読むだけ（get_angles を40回） | 1回の読み取りの時間と、空で返る割合 |
| A | 1回だけ send_angles（+10°、speed 20） | 着くまでの時間と最高速度（アームそのものの速さ） |
| B | 0.1秒おきに、読んだ角度 + 3° を send_angles（1秒） | 今の長押しのなめらかさ |
| C | B と同じに fresh_mode(1) を足す | 上書きでなめらかになるか |
| D | jog_angle を speed 10 と 30 で1秒ずつ → jog_stop | jog に応えるか・速さ・止める命令のあとの行きすぎ |

どのテストも、始めの角度から25°離れたら止め、終わるたびに始めの角度へ戻します。0.1秒ごとの速さを並べて出すので、数字がそろっていればなめらか、0が混ざっていれば止まりながら動いている、と読めます。

#### tools/jog_probe.sh

```bash
#!/bin/bash
# jog_probe.sh — Mac から, Pi の mechArm で根元 j0 を 4 つの動かし方で動かし, なめらかさと限界を測る (2026-11-03)
#
#   tools/jog_probe.sh     A 1 回の send_angles / B 送り直し (今の長押し) / C 送り直し + fresh_mode / D jog (speed 10・30)
#                          テストごとに Enter で進む。q と Enter で止める
#
# 流れ (tools/servo_check.sh と同じ):
#   0. KIOXIA のマウントを確かめ, diag/jog_probe_{日時}/ を作る
#   1. tools/pi/jog_probe_pi.py を Pi へ送る
#   2. デーモンを止める (シリアルを直接使うため). 止まったこと・5555 とシリアルが空いたことを確かめる
#   3. Pi で jog_probe_pi.py を流す (PYTHONPATH に 2.9.6 の置き場所を入れる)
#   4. 終わったら (途中で止めても) 測るプロセスが残っていれば止め, 結果の JSON を持ち帰り, デーモンを元の起動のしかたで戻す
# 画面の出力は全部 console.txt に残す。

set -u
PI=ubuntu@192.168.2.1
KEY="$HOME/.ssh/id_rsa_pi"
SSH_OPTS=(-i "$KEY" -o ConnectTimeout=5 -o ServerAliveInterval=5 -o ServerAliveCountMax=3)   # 切れたら約 15 秒で返る
SSH=(ssh "${SSH_OPTS[@]}" "$PI")           # 標準入力を使うもの (heredoc)
SSHN=(ssh -n "${SSH_OPTS[@]}" "$PI")       # 端末の入力を読まないもの
UNIT=mecharm-daemon.service
DATA_ROOT="${SERVO_CHECK_DATA_ROOT:-/Volumes/KIOXIA/r2r2r-data}"
PI_SCRIPT=/home/ubuntu/jog_probe_pi.py
PI_PYTHONPATH=/usr/local/lib/python2.7/dist-packages   # 対話シェルの ~/.bashrc と同じ (pymycobot 2.9.6)
DAEMON_UP_WAIT=${SERVO_CHECK_UP_WAIT:-60}   # 戻したデーモンが 5555 を開くまで待つ上限 (秒)
HERE="$(cd "$(dirname "$0")" && pwd)"

case "${1:-}" in
    "") ;;
    *) echo "使い方: $0" >&2; exit 2 ;;
esac

if [ ! -d "$DATA_ROOT/diag" ]; then
    echo "ABORT: $DATA_ROOT/diag がない (KIOXIA がマウントされていない?)" >&2
    exit 1
fi
STAMP=$(date +%Y%m%d_%H%M%S)
OUT="$DATA_ROOT/diag/jog_probe_$STAMP"
if [ -e "$OUT" ]; then
    echo "ABORT: $OUT がすでにある" >&2
    exit 1
fi
mkdir "$OUT" || exit 1
PI_OUT=/tmp/jog_probe_$STAMP.json

# Pi のデーモンの状態を key=value で出す
remote_state() {
    "${SSH[@]}" 'bash -s' <<'REMOTE'
pid=$(pgrep -f '[m]echarm_daemon\.py' | head -n 1)
if [ "$(systemctl is-active mecharm-daemon.service 2>/dev/null)" = active ]; then mode=systemd
elif [ -n "$pid" ]; then mode=manual
else mode=none; fi
echo "mode=$mode"
echo "pid=${pid:-なし}"
if ss -ltn | grep -q ':5555 '; then echo "listen=yes"; else echo "listen=no"; fi
if [ -n "$pid" ]; then
    pp=$(tr '\0' '\n' < /proc/$pid/environ 2>/dev/null | sed -n 's/^PYTHONPATH=//p')
    echo "daemon_pythonpath=${pp:-(なし)}"
fi
# /dev/ttyAMA0 を開いているプロセス (root のものも見るため sudo。読めなければ「不明」)
if sudo -n true 2>/dev/null; then
    u=$(sudo -n find /proc/[0-9]*/fd -lname /dev/ttyAMA0 2>/dev/null | cut -d/ -f3 | sort -u | tr '\n' ' ')
    u=${u% }
    echo "serial_users=${u:-(なし)}"
else
    echo "serial_users=不明"
fi
if pgrep -f '[j]og_probe_pi\.py' > /dev/null; then echo "checker=yes"; else echo "checker=no"; fi
REMOTE
}

state_val() { sed -n "s/^$1=//p" <<<"$2" | head -n 1; }

MODE=""
RESTORED=0
restore() {                 # デーモンを元に戻す (MODE が決まる前に終わったときは何もしない)
    [ "$RESTORED" = 1 ] && return
    RESTORED=1
    [ -n "$MODE" ] || return
    # 点検のプロセスが残っていれば止めてから戻す (シリアルを二重に開かない)
    "${SSHN[@]}" "pkill -INT -f '[j]og_probe_pi\.py'; for i in 1 2 3 4 5; do pgrep -f '[j]og_probe_pi\.py' > /dev/null || exit 0; sleep 1; done; pkill -KILL -f '[j]og_probe_pi\.py'; sleep 1"
    scp -i "$KEY" -q -o ConnectTimeout=5 "$PI:$PI_OUT" "$OUT/result.json" 2>/dev/null &&
        echo "結果の JSON: $OUT/result.json" || echo "結果の JSON は持ち帰れなかった"
    case "$MODE" in
        systemd)
            echo "--- デーモンを戻す (systemctl start)"
            "${SSHN[@]}" "sudo systemctl start $UNIT" ;;
        manual)
            echo "--- デーモンを戻す (対話シェルで手で起動)"
            "${SSHN[@]}" 'bash -ic "nohup python3 /home/ubuntu/mecharm_daemon.py >> /home/ubuntu/daemon.log 2>&1 &"' ;;
        *) return ;;
    esac
    local i st
    for ((i = 0; i < DAEMON_UP_WAIT; i += 5)); do
        st=$(remote_state)
        [ "$(state_val listen "$st")" = yes ] && break
        sleep 5
    done
    echo "$st"
    if [ "$(state_val listen "$st")" = yes ]; then
        echo "デーモンは戻った (5555 LISTEN)"
        case "$(state_val daemon_pythonpath "$st")" in
            *python2.7*) ;;
            *) echo "注意: デーモンの PYTHONPATH に python2.7 がない (pymycobot 4.0.4 を読んでいるかもしれない)" ;;
        esac
    else
        echo "注意: デーモンが 5555 を開いていない。tools/daemon_ctl.sh status で確かめる"
    fi
}

main() {
    echo "jog_probe $STAMP (結果: $OUT)"
    trap 'restore' EXIT
    trap 'exit 130' INT TERM

    scp -i "$KEY" -q -o ConnectTimeout=5 "$HERE/pi/jog_probe_pi.py" "$PI:$PI_SCRIPT" || { echo "ABORT: Pi へ送れなかった"; exit 1; }

    echo "--- デーモンの状態 (止める前)"
    local st
    st=$(remote_state) || { echo "ABORT: Pi につながらない"; exit 1; }
    echo "$st"
    MODE=$(state_val mode "$st")
    case "$MODE" in
        systemd) "${SSHN[@]}" "sudo systemctl stop $UNIT" ;;
        manual) "${SSHN[@]}" "pkill -TERM -f '[m]echarm_daemon\.py'" ;;
        none) echo "デーモンは動いていない (終わったあとも起動しない)" ;;
        *) echo "ABORT: デーモンの状態が読めない"; MODE=""; exit 1 ;;
    esac
    local i
    for ((i = 0; i < 10; i++)); do
        st=$(remote_state)
        [ "$(state_val pid "$st")" = なし ] && [ "$(state_val listen "$st")" = no ] && break
        sleep 1
    done
    echo "--- デーモンの状態 (止めたあと)"
    echo "$st"
    if [ "$(state_val pid "$st")" != なし ]; then
        echo "ABORT: デーモンが止まらない"
        exit 1
    fi
    if [ "$(state_val listen "$st")" != no ]; then
        echo "ABORT: 5555 がまだ開いている"
        exit 1
    fi
    if [ "$(state_val serial_users "$st")" != "(なし)" ]; then
        echo "ABORT: /dev/ttyAMA0 を開いているプロセスがある・確かめられない ($(state_val serial_users "$st"))"
        exit 1
    fi

    ssh -tt "${SSH_OPTS[@]}" "$PI" "PYTHONPATH=$PI_PYTHONPATH python3 -u $PI_SCRIPT --out $PI_OUT"
    local rc=$?
    echo "--- jog_probe_pi.py の終了コード: $rc"
    exit "$rc"
}

main 2>&1 | tee -i "$OUT/console.txt"
exit "${PIPESTATUS[0]}"
```

#### tools/pi/jog_probe_pi.py

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""jog_probe_pi.py — 根元 j0 で 4 つの動かし方を測り, mechArm がどこまでなめらかに動くかを見る (2026-11-03)

Mac の tools/jog_probe.sh から呼ぶ (デーモンを止めてから, シリアルに直接つなぐ)。
Pi の python3 は 3.6, pymycobot 2.9.6 (PYTHONPATH=/usr/local/lib/python2.7/dist-packages)。

測るもの (どれも j0 だけを動かす. 始める前に HOME 近くにいること. 各テストのあと始めの角度へ戻す):
  0. 読み取り: get_angles を 40 回. 1 回の時間と, 空で返る割合
  A. 1 回の send_angles (+10°, speed 20): 着くまでの時間と最高速度 (アーム自体の速さ)
  B. 送り直し (今のゲームパッドの長押しと同じ): 0.1 秒おきに「読んだ角度 + 3°」を send_angles. 1 秒
  C. B と同じ. ただし set_fresh_mode(1) (前の動きを待たずに上書き)
  D. jog_angle(1, 向き, speed) を 1 秒 → jog_stop. speed 10 と 30
各テストで: 進んだ角度・平均の速さ・0.1 秒ごとの速さのばらつき (なめらかさ)・止まった区間の割合・
止める命令のあとに進んだ角度 (行きすぎ) を出す。生の記録 (時刻と角度) は --out の JSON に入る。

守り: j0 が始めの角度から JOG_GUARD_DEG (25°) 離れたらそのテストを止める (jog_stop・stop)。
q と Enter (または Ctrl-C・ssh が切れたとき) で止める。終わるとき (止めたときも) jog_stop と set_fresh_mode(0)。
send_coords() は使わない。release 系は呼ばない。
"""

from __future__ import print_function

import argparse
import json
import select
import signal
import statistics
import sys
import time

SERIAL_PORT = "/dev/ttyAMA0"
BAUDRATE = 1000000
HOME = [0, 0, 0, 0, 0, -30]
SPEED = 20
HOME_TOL_DEG = 5.0
JOG_GUARD_DEG = 25.0
STEP_A_DEG = 10.0
STREAM_SEC = 1.0
STREAM_INTERVAL_SEC = 0.1
STREAM_AHEAD_DEG = 3.0
JOG_SEC = 1.0
JOG_SPEEDS = (10, 30)
AFTER_STOP_SEC = 1.0
RETURN_TIMEOUT_SEC = 10.0
BIN_SEC = 0.1
GET_ANGLES_RETRIES = 12


class Quit(Exception):
    pass


def now():
    return time.time()


def stdin_quit():
    r, _w, _x = select.select([sys.stdin], [], [], 0)
    if r:
        line = sys.stdin.readline()
        if line.strip().lower() == "q":
            raise Quit()


def ask(msg):
    print(msg + "  (Enter で進む / q と Enter で終わる)", flush=True)
    line = sys.stdin.readline()
    if not line or line.strip().lower() == "q":
        raise Quit()


def read_angles(mc, tries=GET_ANGLES_RETRIES):
    for _ in range(tries):
        a = mc.get_angles()
        if a and len(a) == 6:
            return [float(x) for x in a]
        time.sleep(0.02)
    return None


def wait_arrive(mc, target, timeout):
    t0 = now()
    a = None
    while now() - t0 < timeout:
        stdin_quit()
        a = read_angles(mc)
        if a is not None and max(abs(x - y) for x, y in zip(a, target)) <= 2.0:
            return a, True
        time.sleep(0.1)
    return a, False


def summarize(samples, t_cmd0, t_stop, sign):
    """samples: [(t, j0)]. t_cmd0 = 動かし始めた時刻, t_stop = 止める命令 (なければ None)."""
    act = [(t, q) for t, q in samples if t >= t_cmd0 and (t_stop is None or t <= t_stop)]
    out = {"n_samples": len(samples)}
    if len(act) < 2:
        return out
    travel = (act[-1][1] - act[0][1]) * sign
    dur = act[-1][0] - act[0][0]
    out.update(travel_deg=round(travel, 2), active_sec=round(dur, 2),
               mean_speed=round(travel / dur, 2) if dur > 0 else None)
    # 0.1 秒ごとの速さ (最初の 0.2 秒は加速として除く)
    bins = []
    t = act[0][0] + 0.2
    while t + BIN_SEC <= act[-1][0]:
        seg = [(ts, q) for ts, q in act if t <= ts <= t + BIN_SEC]
        if len(seg) >= 2:
            bins.append((seg[-1][1] - seg[0][1]) * sign / (seg[-1][0] - seg[0][0]) if seg[-1][0] > seg[0][0] else 0.0)
        t += BIN_SEC
    if bins:
        med = statistics.median(bins)
        out.update(bin_speeds=[round(b, 1) for b in bins], median_speed=round(med, 2),
                   max_speed=round(max(bins), 2),
                   speed_cv=round(statistics.pstdev(bins) / med, 2) if med > 0.5 else None,
                   stall_ratio=round(sum(1 for b in bins if b < 0.25 * med) / len(bins), 2) if med > 0.5 else None)
    if t_stop is not None:
        before = [q for ts, q in samples if ts <= t_stop]
        after = [(ts, q) for ts, q in samples if ts > t_stop]
        if before and after:
            q_stop = before[-1]
            out["overshoot_deg"] = round((after[-1][1] - q_stop) * sign, 2)
            moving = [ts for (ts, q), (ts2, q2) in zip(after, after[1:]) if abs(q2 - q) > 0.1]
            out["stop_latency_sec"] = round(moving[-1] - t_stop, 2) if moving else 0.0
    return out


def run_sampling(mc, start, sec, sign, on_tick=None, label=""):
    """sec 秒, できるだけ速く j0 を読む. on_tick(t, angles) を毎回呼ぶ. 守りを超えたら止める."""
    samples = []
    t0 = now()
    while now() - t0 < sec:
        stdin_quit()
        a = mc.get_angles()
        t = now()
        if a and len(a) == 6:
            samples.append((t, float(a[0])))
            if abs(float(a[0]) - start[0]) > JOG_GUARD_DEG:
                print("  守り: j0 が始めから {:.1f}° 離れたので止めます".format(float(a[0]) - start[0]), flush=True)
                return samples, True
            if on_tick is not None:
                on_tick(t, [float(x) for x in a])
    return samples, False


def back_to_start(mc, start):
    mc.send_angles(start, SPEED)
    a, ok = wait_arrive(mc, start, RETURN_TIMEOUT_SEC)
    print("  始めの角度へ戻した: " + ("着いた" if ok else "着かない") + " j0={}".format(None if a is None else round(a[0], 2)), flush=True)
    time.sleep(0.5)


def test_read(mc):
    lat, empty = [], 0
    for _ in range(40):
        t = now()
        a = mc.get_angles()
        lat.append(now() - t)
        if not (a and len(a) == 6):
            empty += 1
    r = {"median_ms": round(statistics.median(lat) * 1000, 1), "max_ms": round(max(lat) * 1000, 1),
         "empty_ratio": round(empty / 40.0, 2)}
    print("  読み取り 1 回: 中央 {median_ms} ms / 最大 {max_ms} ms / 空で返った割合 {empty_ratio}".format(**r), flush=True)
    return r


def test_step(mc, start):
    target = list(start)
    target[0] = start[0] + STEP_A_DEG
    t_cmd = now()
    mc.send_angles(target, SPEED)
    samples, guard = run_sampling(mc, start, 2.0, +1)
    s = summarize(samples, t_cmd, None, +1)
    reached = [t for t, q in samples if abs(q - target[0]) <= 1.0]
    s["arrive_sec"] = round(reached[0] - t_cmd, 2) if reached else None
    return s, samples, t_cmd, None


def test_stream(mc, start, sign, fresh):
    if fresh:
        mc.set_fresh_mode(1)
    st = {"last": 0.0, "n": 0}
    t_cmd = now()

    def tick(t, a):
        if t - st["last"] >= STREAM_INTERVAL_SEC:
            target = list(start)
            target[0] = a[0] + sign * STREAM_AHEAD_DEG
            mc.send_angles(target, SPEED)
            st["last"] = t
            st["n"] += 1
    try:
        samples, guard = run_sampling(mc, start, STREAM_SEC, sign, on_tick=tick)
        t_stop = now()
        after, _ = run_sampling(mc, start, AFTER_STOP_SEC, sign)
    finally:
        if fresh:
            mc.set_fresh_mode(0)
    s = summarize(samples + after, t_cmd, t_stop, sign)
    s["n_sends"] = st["n"]
    return s, samples + after, t_cmd, t_stop


def test_jog(mc, start, sign, speed):
    direction = 1 if sign > 0 else 0
    t_cmd = now()
    try:
        mc.jog_angle(1, direction, speed)
        samples, guard = run_sampling(mc, start, JOG_SEC, sign)
    finally:
        mc.jog_stop()
    t_stop = now()
    after, _ = run_sampling(mc, start, AFTER_STOP_SEC, sign)
    s = summarize(samples + after, t_cmd, t_stop, sign)
    moved = abs(samples[-1][1] - samples[0][1]) if len(samples) >= 2 else 0.0
    s["jog_moved"] = moved > 1.0
    return s, samples + after, t_cmd, t_stop


def show(name, s):
    keys = ["travel_deg", "mean_speed", "median_speed", "max_speed", "speed_cv", "stall_ratio",
            "overshoot_deg", "stop_latency_sec", "arrive_sec", "n_sends", "jog_moved"]
    print("  [{}] ".format(name) + "  ".join("{}={}".format(k, s[k]) for k in keys if k in s), flush=True)
    if "bin_speeds" in s:
        print("        0.1 秒ごとの速さ (°/秒): " + " ".join(str(v) for v in s["bin_speeds"]), flush=True)


def main(argv=None):
    ap = argparse.ArgumentParser()
    ap.add_argument("--out", required=True)
    args = ap.parse_args(argv)

    def on_hup(signum, frame):
        raise Quit()
    signal.signal(signal.SIGHUP, on_hup)

    import pymycobot
    from pymycobot.mycobot import MyCobot
    print("pymycobot {} ({})".format(getattr(pymycobot, "__version__", "?"), pymycobot.__file__), flush=True)
    mc = MyCobot(SERIAL_PORT, BAUDRATE)
    time.sleep(0.5)
    result = {"started_at": time.strftime("%Y-%m-%d %H:%M:%S"), "pymycobot": getattr(pymycobot, "__version__", "?"),
              "params": {"speed": SPEED, "stream_interval": STREAM_INTERVAL_SEC, "stream_ahead": STREAM_AHEAD_DEG,
                         "jog_speeds": list(JOG_SPEEDS), "guard_deg": JOG_GUARD_DEG}, "tests": {}}
    try:
        start = read_angles(mc)
        print("始めの角度: {}".format(start), flush=True)
        if start is None:
            print("角度が読めないので終わります", flush=True)
            return 1
        if max(abs(x - y) for x, y in zip(start, HOME)) > HOME_TOL_DEG:
            ask("HOME から離れています。HOME [0,0,0,0,0,-30] へ送ります")
            mc.send_angles(HOME, SPEED)
            start, ok = wait_arrive(mc, HOME, 15.0)
            if not ok:
                print("HOME に着かないので終わります", flush=True)
                return 1
            time.sleep(0.5)
            start = read_angles(mc)
        result["start"] = start
        print("根元 j0 だけを、始めの角度から 25° 以内で動かします。毎回始めの角度へ戻します。", flush=True)

        print("\n0. 読み取りの速さ (動かさない)", flush=True)
        result["tests"]["read"] = test_read(mc)

        plan = [("A_step_10deg", lambda: test_step(mc, start)),
                ("B_stream", lambda: test_stream(mc, start, +1, False)),
                ("C_stream_fresh", lambda: test_stream(mc, start, -1, True)),
                ("D_jog_speed{}".format(JOG_SPEEDS[0]), lambda: test_jog(mc, start, +1, JOG_SPEEDS[0])),
                ("D_jog_speed{}".format(JOG_SPEEDS[1]), lambda: test_jog(mc, start, -1, JOG_SPEEDS[1]))]
        for name, fn in plan:
            ask("\n{} を始めます".format(name))
            s, samples, t_cmd, t_stop = fn()
            show(name, s)
            result["tests"][name] = dict(s, samples=[[round(t - t_cmd, 4), round(q, 2)] for t, q in samples],
                                         t_stop=None if t_stop is None else round(t_stop - t_cmd, 4))
            back_to_start(mc, start)
    except Quit:
        print("\n止めました (このあとは動かす命令を送りません)", flush=True)
        result["quit"] = True
    finally:
        for f in (getattr(mc, "jog_stop", None),):
            try:
                if f is not None:
                    f()
            except Exception:
                pass
        try:
            mc.set_fresh_mode(0)
        except Exception:
            pass
        with open(args.out, "w") as fp:
            json.dump(result, fp, ensure_ascii=False)
        print("結果: " + args.out, flush=True)
    return 0


if __name__ == "__main__":
    sys.exit(main())
```

実機の代わりに、0.1秒で目標へ寄る偽の MyCobot（毎秒25°で動き、jog は speed の0.6倍の速さ）で一通り流し、テストの流れと数え方が動くことを確かめました。偽物の数字なので、mechArm の値ではありません。

#### 偽の pymycobot.mycobot（確かめ用）

```python
import time
class MyCobot:
    def __init__(s,*a):
        s.q=[0.3,0,0,0,0,-30.0]; s.t=time.time(); s.tgt=None; s.v=0; s.calls=[]
    def _upd(s):
        t=time.time(); dt=t-s.t; s.t=t
        if s.v: s.q[0]+=s.v*dt
        elif s.tgt is not None:
            d=s.tgt-s.q[0]; step=25*dt
            s.q[0]+= max(-step,min(step,d))
    def get_angles(s):
        time.sleep(0.01); s._upd(); return list(s.q)
    def send_angles(s,a,sp): s._upd(); s.tgt=a[0]; s.v=0; s.calls.append(("send",a[0]))
    def jog_angle(s,j,d,sp): s._upd(); s.v=(sp*0.6)*(1 if d==1 else -1); s.calls.append(("jog",j,d,sp))
    def jog_stop(s): s._upd(); s.v=0; s.tgt=s.q[0]
    def set_fresh_mode(s,v): pass
```

#### 偽の MyCobot で jog_probe_pi.py を流した出力

```text
pymycobot fake (/sessions/rcw-01levexrnwfwwxydvm8wrmgs/work/fakepmc/pymycobot/__init__.py)
始めの角度: [0.3, 0.0, 0.0, 0.0, 0.0, -30.0]
根元 j0 だけを、始めの角度から 25° 以内で動かします。毎回始めの角度へ戻します。

0. 読み取りの速さ (動かさない)
  読み取り 1 回: 中央 12.4 ms / 最大 15.4 ms / 空で返った割合 0.0

A_step_10deg を始めます  (Enter で進む / q と Enter で終わる)
  [A_step_10deg] travel_deg=9.7  mean_speed=4.87  median_speed=0.0  max_speed=29.42  speed_cv=None  stall_ratio=None  arrive_sec=0.36
        0.1 秒ごとの速さ (°/秒): 25.0 29.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
  始めの角度へ戻した: 着いた j0=1.1

B_stream を始めます  (Enter で進む / q と Enter で終わる)
  守り: j0 が始めから 25.2° 離れたので止めます
  [B_stream] travel_deg=24.93  mean_speed=24.99  median_speed=24.99  max_speed=25.01  speed_cv=0.0  stall_ratio=0.0  overshoot_deg=0.31  stop_latency_sec=0.0  n_sends=10
        0.1 秒ごとの速さ (°/秒): 25.0 25.0 25.0 24.9 25.0 25.0 25.0
  始めの角度へ戻した: 着いた j0=2.18

C_stream_fresh を始めます  (Enter で進む / q と Enter で終わる)
  守り: j0 が始めから -25.3° 離れたので止めます
  [C_stream_fresh] travel_deg=24.65  mean_speed=24.99  median_speed=25.0  max_speed=25.03  speed_cv=0.0  stall_ratio=0.0  overshoot_deg=0.61  stop_latency_sec=0.01  n_sends=10
        0.1 秒ごとの速さ (°/秒): 25.0 25.0 25.0 25.0 25.0 25.0 25.0
  始めの角度へ戻した: 着いた j0=0.3

D_jog_speed10 を始めます  (Enter で進む / q と Enter で終わる)
  [D_jog_speed10] travel_deg=5.97  mean_speed=6.0  median_speed=6.0  max_speed=6.0  speed_cv=0.0  stall_ratio=0.0  overshoot_deg=0.01  stop_latency_sec=0.0  jog_moved=True
        0.1 秒ごとの速さ (°/秒): 6.0 6.0 6.0 6.0 6.0 6.0 6.0
  始めの角度へ戻した: 着いた j0=0.3

D_jog_speed30 を始めます  (Enter で進む / q と Enter で終わる)
  [D_jog_speed30] travel_deg=17.77  mean_speed=18.0  median_speed=18.0  max_speed=18.05  speed_cv=0.01  stall_ratio=0.0  overshoot_deg=0.05  stop_latency_sec=0.0  jog_moved=True
        0.1 秒ごとの速さ (°/秒): 17.7 18.0 18.0 18.0 18.0 18.0 18.0
  始めの角度へ戻した: 着いた j0=-0.45
結果: /tmp/jp.json
```

実機の jog_probe は、アームを止めたので次の回で流します。


## 次に実機で確かめること

| 順番 | 確かめること | 見る数字 |
|---|---|---|
| 1 | `git tag gamepad-stream-v1 413f7e1` で今の長押しを残し、`tools/jog_probe.sh` を流す | テストごとの0.1秒ごとの速さ・止まった区間の割合・jog の行きすぎ |
| 2 | jog に応えれば、jog 版のゲームパッドを作る（daemon に jog と停止と見張り） | 長押しの速さのばらつき・離してから止まるまでの角度 |
| 3 | 十字キーの右で根元がどちらに回るかを決める（今は右 = +） | ― |
| 4 | AI（π0.5）の動きを、ゲームパッドで直す | 1回の直しにかかる時間・2.9.6 に戻した daemon での推論の送る待ち |
| 5 | 手首の点検のスクリプト（servo_check.sh）の2回目のレビューを通してコミットする | ― |


## この回のコード（全文）

### gamepad_teleop.py（commit 413f7e1）

```python
#!/usr/bin/env python3
"""gamepad_teleop.py — ゲームパッドで mechArm 270 を手で動かす (依頼 68. 2026-11-02)

PICK で爪の位置がずれたときに, エイイチがゲームパッドで左右・上げ下げ・爪の開閉を直す.
押した分だけそのまま動く. 自動で動く要素は入れない (自動の握り直し・失敗時の自動 HOME などはない).
押した操作と, 送った角度・届いた角度をすべて log.jsonl に残す (あとで「人が直した記録」として使う).

操作 (エイイチが決めた. 変えない):
  十字キー 左 / 右 (13 / 14)  j0 を 1° ずつ (2026-11-03 に 0.5° から変えた. 0.5° ではサーボが反応しなかった). どの関節を選んでいても いつも j0
                              (向き: 左 = J0_LEFT_SIGN. 依頼に向きの指定がないので, 右 = +, 左 = − にしてある)
  十字キー 上 / 下 (11 / 12)  選んでいる関節を 1° ずつ. 上 = −, 下 = +. 始めは j1
  十字キーの長押し            押している間, 止めずに動かし続ける (2026-11-03). 短く押せば 1 刻み.
                              押して HOLD_START_SEC (0.4 秒) たっても押していれば, HOLD_INTERVAL_SEC (0.1 秒) おきに
                              「いま読んだ角度から HOLD_AHEAD_DEG (3°) 先」を送り直す. アームは目標に着く前に次の目標を
                              受け取るので止まらず, speed 20 の速さで動き続ける (刻みごとに着いて止まるとぎこちなかった).
                              長押しの送信では届いたかを待たない. 先へ出るのは最大 3° (離すと, そこまで動いて止まる).
                              R1 は短い押しの刻み (2°) にだけ効く. 長押しの速さは speed で決まる (20 のまま).
                              離したら, 送ると決める前の送信は取り消す.
                              押し始めに受け付けられなかった押し (動いている間・停止中) は, 押し続けても長押しにしない.
                              離した合図を取りこぼしても止まるよう, 毎コマ コントローラーのボタンの状態も見る.
                              HOLD_STALL_SEC (1 秒) のあいだ動かした関節が進んでいなければ, その長押しは止める (当たっているなど).
                              離す・L2+R2・範囲の端・△・ほかのボタン・接続が切れる で長押しは止まる
  △ (3)                       上下で動かす関節を切り替える: j1 → j2 → j3 → j4 → j5 → j1
  R1 (10) を押しながら        1 回 2° ずつ (十字キーの左右・上下とも)
  × (0) / ○ (1)              爪を閉じる / 開く
  HOME (5) を 1 秒長押し      HOME [0, 0, 0, 0, 0, -30] に戻る. 1 秒続けて押したときに 1 回だけ送る
  L2 と R2 (軸 4・5) の両方が 0.0 を超えたとき  停止. 以後の動く操作を受け付けない. OPTIONS (6) で再開
                              L2+R2 は新しい指令を送らないだけで, 送った 1 回分 (HOME を含む) は最後まで動く
  ほかのボタン (□・SHARE・L1・L3・R3・タッチパッド・スティック) は何もしない

守り:
  - j1 は 90.87 (arm_kinematics.md の PICK_J1_FIXED) を超える指令を送らない
    (fk_lookup.J1_SAFE_MAX = 88.0 は別の用途の値なので, ここでは使わない)
  - 各関節は物理可動域 (wr.JOINT_LIMITS) まで. j4 は J4_SAFE (−90〜+60)
    (基準の姿勢から j0 ±15°・j1〜j5 ±10° の枠は 2026-11-03 にやめた. HOME から手でブロックの上まで運ぶため)
  - 範囲で切られたら理由を画面とログに出す. 別の関節で補わない
  - HOME だけは範囲の検査を通さずに送れる (run_policy_client.py の h と同じ扱い)

送り方:
  - send_angles だけ (send_coords は使わない). speed 20 (j0_sweep_scan.SPEED)
  - 1 回押すごとに目標を 1 つ作って送り, 3° 以内に届いたかを読んで確かめる.
    送った指令が無視されることがある (どの関節も動かない. 2026-11-03 の実機で 3 回, 8 秒止まった.
    waypoint_replay.py の「単発は無視されるが, 打ち直せば通る」と同じ). 送ってから IGNORED_CHECK_SEC
    (0.5 秒) たっても, 届いておらず, どの関節も IGNORED_MOVE_DEG (0.3°) 動いていなければ, 同じ目標を
    送り直す (IGNORED_MAX_RESENDS 回まで). 送り直しも SendGate の中で行うので, 停止のあとは送らない
  - 送ってから届くまで (または待ちの上限まで) と, 爪のあとの GRIPPER_SLEEP の間は
    次の動く操作を受け付けない (ためない). 停止はいつでも受け付ける
    (送る仕事は別のスレッドで行い, 画面とコントローラーの読み取りは止めない)
  - 停止が入ったあとは新しい指令を送らない. **動いている途中の動きは止められない**
    (daemon に止める命令がない. 依頼 68 の報告を参照)

1 回の出発点:
  直前に送った目標に届いていて, 送る前に読んだ角度とも 3° 以内なら その目標. そうでなければ 読んだ角度.
  (j1 の重さによる 2〜3° の不足があっても, 0.5° の刻みが読んだ値に引きずられないように.
   手で動かされたなど 3° を超えて離れていたら, 古い目標から大きく動かさない)
  出発点の 6 関節のどれかが範囲の外なら送らない (範囲の端へ切って 1 回で大きく動かさない).

停止と送信の順番 (codex R1):
  「送ると決める」と「停止・終了の取り消し」を 仕事ごとの鍵 (SendGate) で並べる (codex R1・R2).
  停止のあとに送ると決める指令はない. 停止は待たされない (画面も止まらない). 停止より前に決めた送信は
  通信の上限 SEND_RPC_TIMEOUT_SEC (8 秒) の中で終わる. 止める前に作った仕事は OPTIONS で再開しても生き返らない.
  1 コマの中では L2+R2 と読み取りの失敗を ボタンより先に見る. 送ったあと確かめる途中で関節角を
  読めなければ停止にする. log.jsonl に書けなくなったら停止し, 再開させない.

終わり方:
  Ctrl+C / ウィンドウを閉じる. 新しい指令は送らずに終わる. アームは動かさない
  (HOME 復帰もサーボ解放もしない. run_policy_client.py の finally と同じ)

Usage:
  python3 tools/gamepad_teleop.py              # ドライラン (daemon にもアームにも触らない. HOME から始まる仮の姿勢)
  python3 tools/gamepad_teleop.py --execute    # daemon に送る

記録 (--execute のときだけ): /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/{run_stem}/
      log.jsonl (押した操作 1 つにつき 1 行) / meta.json / gamepad_teleop.py (使ったスクリプトの写し)
      通しの完走ではないので台帳には書かない.
      ドライランは記録しない (KIOXIA に何も書かない・フォルダも作らない. KIOXIA がなくても動く. 依頼 69)

読み込み (依頼 69):
  run_policy_client・j0_sweep_scan・visual_servo_pick は cv2 を読み, cv2 は自分の libSDL2
  (site-packages/cv2/.dylibs/) を持っている. pygame の libSDL2 と 2 つ入ると objc の
  「Class SDLApplication is implemented in both ...」が十数行出る. なのでこの 3 つは --execute のときだけ
  load_daemon_modules() で読む (ドライランでは cv2 も daemon の送り口も読まない).
  ドライランでも要る値 (HOME・J4_SAFE・GRIPPER_SLEEP・物理可動域) は, 読み込まずに元のファイルの
  代入から読む (二重に書かない). --execute で読んだあと, 読み込んだ値と同じかを確かめる.
  --execute では cv2 を読むので 警告は今までどおり出る (動きには影響なし).
"""
import argparse
import ast
import hashlib
import json
import os
import platform
import queue
import shutil
import subprocess
import sys
import threading
import time
from datetime import datetime
from pathlib import Path

# ウィンドウが手前にないときもコントローラーの入力を受け取る (gamepad_check.py と同じ)
os.environ.setdefault("SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS", "1")
os.environ.setdefault("PYGAME_HIDE_SUPPORT_PROMPT", "1")

import numpy as np  # noqa: E402
import pygame  # noqa: E402

_HERE = Path(__file__).resolve().parent
_ROOT = _HERE.parent
sys.path.insert(0, str(_ROOT / "pi05"))
_RPC_PATH = _ROOT / "pi05" / "run_policy_client.py"
_WR_PATH = _ROOT / "dynamic_tracking_limits" / "drag_teaching" / "waypoint_replay.py"


def read_constants(path, names):
    """path を読み込まずに (実行せずに), 一番外の `名前 = 値` の値を読む. 1 回だけ代入されている名前に限る.
    ファイルのどこかで ほかの形 (+= ・型注釈つき・連鎖・for・global の中など) で同じ名前に代入していれば止める
    (--execute では読み込んだ値とも比べる)."""
    found = {}
    tree = ast.parse(Path(path).read_text(encoding="utf-8"))
    simple = set()
    for node in tree.body:
        if isinstance(node, ast.Assign) and len(node.targets) == 1 and isinstance(node.targets[0], ast.Name):
            name = node.targets[0].id
            if name in names:
                if name in found:
                    raise RuntimeError(f"{path} で {name} が 2 回代入されています")
                found[name] = ast.literal_eval(node.value)
                simple.add(id(node.targets[0]))
    for node in ast.walk(tree):
        if (isinstance(node, ast.Name) and node.id in names and isinstance(node.ctx, (ast.Store, ast.Del))
                and id(node) not in simple):
            raise RuntimeError(f"{path} で {node.id} がほかの形でも代入されています (行 {node.lineno})")
    missing = [n for n in names if n not in found]
    if missing:
        raise RuntimeError(f"{path} に {missing} が見つかりません")
    return found


# 爪 (gripper_cmd)・HOME・J4_SAFE・関節角の読み方 (read_angles) は run_policy_client と同じものを使う.
# daemon の送り口と run_policy_client は --execute のときだけ load_daemon_modules() で読む (cv2 の SDL を避ける)
_RPC_CONST = read_constants(_RPC_PATH, ("HOME", "J4_SAFE", "GRIPPER_SLEEP"))
_WR_CONST = read_constants(_WR_PATH, ("JOINT_LIMITS",))
rpc = None
wr = None
SPEED = POLL_SLEEP = REACH_TIMEOUT_SEC = None     # j0_sweep_scan の 20 / 0.3 / 8.0 (--execute で読む)
close_daemon_socket = daemon_send_angles = daemon_set_gripper = daemon_set_gripper_value = get_daemon_socket = None


def load_daemon_modules():
    """--execute のときだけ呼ぶ. run_policy_client (パスと pymycobot のスタブも入る)・j0_sweep_scan・
    visual_servo_pick の daemon の送り口を読む. 2 回目からは何もしない.
    読み込まずに読んだ値 (HOME・J4_SAFE・GRIPPER_SLEEP・JOINT_LIMITS) と違えば止める."""
    global rpc, wr, SPEED, POLL_SLEEP, REACH_TIMEOUT_SEC
    global close_daemon_socket, daemon_send_angles, daemon_set_gripper, daemon_set_gripper_value, get_daemon_socket
    if rpc is not None:
        return
    import run_policy_client as _rpc
    import j0_sweep_scan as _j0
    import visual_servo_pick as _vsp
    pairs = (("HOME", _rpc.HOME, HOME), ("J4_SAFE", _rpc.J4_SAFE, J4_SAFE),
             ("GRIPPER_SLEEP", _rpc.GRIPPER_SLEEP, GRIPPER_SLEEP), ("JOINT_LIMITS", _rpc.wr.JOINT_LIMITS, JOINT_LIMITS))
    diff = [n for n, loaded, read in pairs if _norm(loaded) != _norm(read)]
    if diff:
        raise RuntimeError(f"読み込んだ値がファイルから読んだ値と違います: {diff}")
    SPEED, POLL_SLEEP, REACH_TIMEOUT_SEC = _j0.SPEED, _j0.POLL_SLEEP, _j0.REACH_TIMEOUT_SEC
    close_daemon_socket, daemon_send_angles = _vsp.close_daemon_socket, _vsp.daemon_send_angles
    daemon_set_gripper, daemon_set_gripper_value = _vsp.daemon_set_gripper, _vsp.daemon_set_gripper_value
    get_daemon_socket = _vsp.get_daemon_socket
    wr = _rpc.wr
    rpc = _rpc


def _norm(v):
    if isinstance(v, (list, tuple)):
        return [_norm(x) for x in v]
    return float(v)


# ---- ボタンと軸 (/Volumes/KIOXIA/r2r2r-data/diag/gamepad_check_20261102/ で確かめた番号) ----
BTN_CROSS = 0
BTN_CIRCLE = 1
BTN_SQUARE = 2
BTN_TRIANGLE = 3
BTN_SHARE = 4
BTN_HOME = 5
BTN_OPTIONS = 6
BTN_L3 = 7
BTN_R3 = 8
BTN_L1 = 9
BTN_R1 = 10
BTN_UP = 11
BTN_DOWN = 12
BTN_LEFT = 13
BTN_RIGHT = 14
BTN_TOUCHPAD = 15
BUTTON_NAMES = {
    BTN_CROSS: "cross", BTN_CIRCLE: "circle", BTN_SQUARE: "square", BTN_TRIANGLE: "triangle",
    BTN_SHARE: "share", BTN_HOME: "home", BTN_OPTIONS: "options", BTN_L3: "l3", BTN_R3: "r3",
    BTN_L1: "l1", BTN_R1: "r1", BTN_UP: "dpad_up", BTN_DOWN: "dpad_down", BTN_LEFT: "dpad_left",
    BTN_RIGHT: "dpad_right", BTN_TOUCHPAD: "touchpad",
}
AXIS_L2 = 4
AXIS_R2 = 5
TRIGGER_STOP_ABOVE = 0.0      # L2 と R2 の両方がこれを超えたら停止 (離して -1.0, 押し込んで +1.0)

# ---- 動かし方 ----
STEP_FINE_DEG = 1.0            # 2026-11-03: 0.5° はサーボが反応しなかった (読んだ角度が変わらない). 1° にした
STEP_COARSE_DEG = 2.0          # R1 を押しながら
J0_LEFT_SIGN = -1.0            # 十字キー左で j0 を動かす向き (右はその逆). 依頼に向きの指定がない
UP_SIGN = -1.0                 # 十字キー上 = −, 下 = + (PICK の上空 → 床で j1・j2・j4 が増える向き)
SELECT_ORDER = (1, 2, 3, 4, 5)  # △ で回す順. 始めは j1
HOME_HOLD_SEC = 1.0
HOME = [float(v) for v in _RPC_CONST["HOME"]]   # [0, 0, 0, 0, 0, -30]

# ---- 守り ----
J1_MAX_DEG = 90.87             # arm_kinematics.md の PICK_J1_FIXED (エイイチと決めた. J1_SAFE_MAX 88 は使わない)
J4_SAFE = tuple(float(v) for v in _RPC_CONST["J4_SAFE"])   # (-90, 60)
JOINT_LIMITS = [tuple(float(v) for v in lim) for lim in _WR_CONST["JOINT_LIMITS"]]   # 物理可動域 (wr.JOINT_LIMITS)
GRIPPER_SLEEP = float(_RPC_CONST["GRIPPER_SLEEP"])   # 爪のあとの待ち (rpc.GRIPPER_SLEEP. ドライランと画面の表示で使う)
LIMIT_EPS_DEG = 1e-6
REACH_TOL_DEG = 3.0            # 届いたかの判定 (推論の到着確認と同じ 3°)

# ---- 長押し (2026-11-03) ----
HOLD_START_SEC = 0.4           # 押してからこれだけたっても押していれば, 長押しとして送り続ける
HOLD_INTERVAL_SEC = 0.1        # 長押しで目標を送り直す間隔
HOLD_AHEAD_DEG = 3.0           # 長押しの目標 = 読んだ角度からこれだけ先 (アームが着く前に次を送る. 離すとこれだけ先で止まる)
HOLD_STALL_SEC = 1.0           # このあいだ動かした関節が HOLD_STALL_DEG 進んでいなければ, 長押しを止める
HOLD_STALL_DEG = 0.3
DRY_HOLD_MAX_DEG = 1.5         # ドライランの長押しで 1 回に動かす量 (0.1 秒で 1.5° = 15°/秒 のつもり)

# ---- 無視された指令の送り直し (2026-11-03) ----
IGNORED_CHECK_SEC = 0.5        # 送ってからこれだけたっても動いていなければ, 無視されたとみなす
IGNORED_MOVE_DEG = 0.3         # どの関節もこれより動いていなければ「動いていない」
IGNORED_MAX_RESENDS = 3        # 送り直す回数の上限

DRY_MOVE_SEC = 0.3             # ドライランで「動いている」状態を見せる時間
SEND_RPC_TIMEOUT_SEC = 8.0     # send_angles 1 回の通信 (接続・ping・送信・返事) の上限. 通信が詰まった
                               # 送信が 停止のずっとあとに届かないように (daemon の返事は送信後の読み直し込みで最長 3.7 秒. LOG352)
WORKER_JOIN_SEC = 12.0         # 終わるとき, 送っている途中の仕事が戻るのを待つ上限 (読み取り 1 回は最長 3.7 秒)

DATA_ROOT = Path("/Volumes/KIOXIA/r2r2r-data")
LOG_ROOT = DATA_ROOT / "runs" / "experiments" / "gamepad_teleop"
SSD_MOUNT = "/Volumes/KIOXIA"

STATE_IDLE = "IDLE"
STATE_MOVING = "MOVING"
STATE_STOPPED = "STOPPED"


def ensure_ssd_mounted():
    if not os.path.ismount(SSD_MOUNT):
        sys.exit("[ABORT] KIOXIA がマウントされていません。記録をローカルには逃がさず、ここで止めます。")


def _r(a):
    return None if a is None else [round(float(v), 2) for v in a]


def _fmt(a):
    return "None" if a is None else " ".join(f"{float(v):+.2f}" for v in a)


# =============================================================================
# 守り (純関数. テストで直接呼ぶ)
# =============================================================================

def joint_window():
    """各関節に送ってよい範囲 (lo, hi, 各端の出どころ) を作る.
    出どころ: PHYS (物理可動域) / J4_SAFE / J1_MAX. 狭い方が勝つ."""
    lo, hi, lo_src, hi_src = [], [], [], []
    for k in range(6):
        cands_lo = [(JOINT_LIMITS[k][0], "PHYS")]
        cands_hi = [(JOINT_LIMITS[k][1], "PHYS")]
        if k == 4:
            cands_lo.append((J4_SAFE[0], "J4_SAFE"))
            cands_hi.append((J4_SAFE[1], "J4_SAFE"))
        if k == 1:
            cands_hi.append((J1_MAX_DEG, "J1_MAX"))
        v_lo, s_lo = max(cands_lo, key=lambda c: c[0])
        v_hi, s_hi = min(cands_hi, key=lambda c: c[0])
        lo.append(v_lo); hi.append(v_hi); lo_src.append(s_lo); hi_src.append(s_hi)
    return np.array(lo), np.array(hi), lo_src, hi_src


LIMIT_JA = {"PHYS": "物理可動域", "J4_SAFE": "J4_SAFE",
            "J1_MAX": "j1 の上限 90.87 (PICK_J1_FIXED)"}


def plan_step(start, joint, delta):
    """start (今回の出発点) の joint を delta 動かした目標を作り, 範囲を通す.

    戻り値 dict:
      target   送る目標 (6) or None (送らない)
      clip     切られた中身 [{joint, want, cmd, limit, bound}] (切られて端まで送るとき)
      refused  送らない理由 [{joint, value, limit, lo, hi, ...}] (空なら送ってよい)
    動かした関節は範囲の端で切る (端までは送る). 端にいて押した向きに 1 ° も進めないときは送らない.
    ほかの関節は変えない (補わない). 6 関節のどれかが範囲の外なら送らない.
    """
    lo, hi, lo_src, hi_src = joint_window()
    want = np.asarray(start, dtype=float)[:6].copy()
    out = {"target": None, "clip": [], "refused": []}
    if not np.all(np.isfinite(want)):
        out["refused"].append({"joint": None, "why": "nonfinite_start", "value": _r(want)})
        return out
    # 出発点の 6 関節がどれか範囲の外なら送らない (切ってから送ると, 範囲の外から 1 回で
    # 刻みより大きく動く. 例: j1=100 から −0.5 を押すと 90.87 へ −9.13° になる. codex 必須 2)
    for k in range(6):
        if want[k] < lo[k] - LIMIT_EPS_DEG or want[k] > hi[k] + LIMIT_EPS_DEG:
            src = hi_src[k] if want[k] > hi[k] else lo_src[k]
            out["refused"].append({"joint": k, "why": "start_out_of_window", "value": round(want[k], 2),
                                   "lo": round(lo[k], 2), "hi": round(hi[k], 2), "limit": src})
    if out["refused"]:
        return out
    v = want[joint] + delta
    if lo[joint] > hi[joint]:
        out["refused"].append({"joint": joint, "why": "empty_window", "value": round(v, 2),
                               "lo": round(lo[joint], 2), "hi": round(hi[joint], 2),
                               "limit": f"{lo_src[joint]}/{hi_src[joint]}"})
        return out
    c = min(max(v, lo[joint]), hi[joint])
    if abs(c - v) > LIMIT_EPS_DEG:
        src = hi_src[joint] if v > hi[joint] else lo_src[joint]
        bound = hi[joint] if v > hi[joint] else lo[joint]
        out["clip"].append({"joint": joint, "want": round(v, 2), "cmd": round(c, 2),
                            "limit": src, "bound": round(float(bound), 2)})
    if (c - want[joint]) * np.sign(delta) <= LIMIT_EPS_DEG:
        # 端にいる (または出発点が範囲の外で, 押した向きに進めない)
        src = hi_src[joint] if delta > 0 else lo_src[joint]
        out["refused"].append({"joint": joint, "why": "at_limit", "value": round(v, 2),
                               "lo": round(lo[joint], 2), "hi": round(hi[joint], 2), "limit": src})
        return out
    want[joint] = c
    for k in range(6):
        if want[k] < lo[k] - LIMIT_EPS_DEG or want[k] > hi[k] + LIMIT_EPS_DEG:
            src = hi_src[k] if want[k] > hi[k] else lo_src[k]
            out["refused"].append({"joint": k, "why": "out_of_window", "value": round(want[k], 2),
                                   "lo": round(lo[k], 2), "hi": round(hi[k], 2), "limit": src})
    if not out["refused"]:
        out["target"] = want
    return out


def limit_text_ascii(plan):
    """画面用 (英数字だけ)."""
    parts = []
    for c in plan.get("clip", []):
        parts.append(f"j{c['joint']} clipped {c['want']:+.2f}->{c['cmd']:+.2f} ({c['limit']} {c['bound']:+.2f})")
    for r in plan.get("refused", []):
        if r.get("joint") is None:
            parts.append(f"refused: {r['why']}")
        else:
            parts.append(f"j{r['joint']} refused {r['why']} {r['value']:+.2f} "
                         f"[{r['lo']:+.2f}, {r['hi']:+.2f}] ({r['limit']})")
    return " / ".join(parts)


def limit_text_ja(plan):
    """ターミナル用 (日本語)."""
    parts = []
    for c in plan.get("clip", []):
        parts.append(f"j{c['joint']} を {c['want']:+.2f}° → {c['cmd']:+.2f}° に切った"
                     f"（{LIMIT_JA.get(c['limit'], c['limit'])} {c['bound']:+.2f}°）")
    for r in plan.get("refused", []):
        if r.get("joint") is None:
            parts.append(f"送らない: {r['why']}")
            continue
        why = {"at_limit": "範囲の端にいて、押した向きに進めない",
               "out_of_window": "範囲の外",
               "start_out_of_window": "出発点が範囲の外（HOME の長押しで戻せます）",
               "empty_window": "範囲が空"}.get(r["why"], r["why"])
        parts.append(f"j{r['joint']} {r['value']:+.2f}° は送らない：{why}"
                     f"（範囲 [{r['lo']:+.2f}, {r['hi']:+.2f}]・{LIMIT_JA.get(r['limit'], r['limit'])}）")
    return " / ".join(parts)


# =============================================================================
# アームへの送り口
# =============================================================================

class SendGate:
    """1 つの仕事の「送ると決める」と「停止・終了の取り消し」を順番に並べる鍵 (codex R1 必須 1 / R2).

    送る側は 鍵の中で取り消しを確かめて「送ると決めた」(committed) を立て, 鍵の外で送る.
    停止・終了は 鍵の中で取り消しを立て, そのときに送ると決めていたかを受け取る.
    鍵を持つのは確かめる一瞬だけなので, 停止は待たされない (画面も止まらない).
    なので「停止のあとに送ると決めた指令」はない. 停止より前に決めた送信は, 通信が遅れても
    daemon_send_angles の timeout_override (SEND_RPC_TIMEOUT_SEC) の中で終わる.
    取り消しは仕事ごとに作り, OPTIONS で再開しても戻さない (止める前の仕事が生き返らない).
    """

    def __init__(self):
        self.lock = threading.Lock()
        self.cancel = threading.Event()
        self.committed = False

    def run(self, fn):
        """取り消されていなければ「送ると決めた」を立ててから fn() を呼ぶ. 戻り値: 呼んだか."""
        with self.lock:
            if self.cancel.is_set():
                return False
            self.committed = True
        fn()
        return True

    def cancel_now(self):
        """取り消しを立てる. 戻り値: それより前に送ると決めていたか (送信中・送信済み)."""
        with self.lock:
            self.cancel.set()
            return self.committed


class DaemonArm:
    """--execute: daemon に送る. 送り方・読み方は visual_servo_pick / run_policy_client と同じ."""

    execute = True

    def read(self):
        return rpc.read_angles()          # 5 回まで読み直す. 読めなければ None

    def send_and_check(self, target, gate, quitting, check=True):
        """target を send_angles (speed 20) で送り, 3° 以内に届くかを読んで確かめる.
        gate が取り消されていれば送らない. 無視されたら送り直す (IGNORED_*). 確かめる途中で読めなければ error.
        check=False (長押し): 送るだけで, 届いたかは待たない (0.1 秒後に次の目標を送るため)."""
        target = np.asarray(target, dtype=float)
        if not check:
            t_send = time.time()
            try:
                sent = gate.run(lambda: daemon_send_angles([float(v) for v in target], speed=SPEED,
                                                           wait=rpc.SEND_WAIT,
                                                           timeout_override=SEND_RPC_TIMEOUT_SEC))
            except Exception as e:
                return {"sent": "unknown", "error": f"send_failed: {type(e).__name__}: {e}", "t_send": t_send}
            if not sent:
                return {"sent": False, "why": "halted_before_send"}
            return {"sent": True, "reached": None, "no_check": True, "t_send": t_send}
        pre = self.read()
        if pre is None:
            return {"sent": False, "error": "read_failed_before_send"}
        pre_max = float(np.max(np.abs(target - pre)))
        timeout = max(REACH_TIMEOUT_SEC, wr._compute_arrival_timeout(pre_max))
        t_send = time.time()
        try:
            sent = gate.run(lambda: daemon_send_angles([float(v) for v in target], speed=SPEED,
                                                       wait=rpc.SEND_WAIT,
                                                       timeout_override=SEND_RPC_TIMEOUT_SEC))
        except Exception as e:
            # 届いたかどうか分からない. 呼び出し側で停止にする
            return {"sent": "unknown", "error": f"send_failed: {type(e).__name__}: {e}",
                    "measured_before_send": _r(pre), "t_send": t_send}
        if not sent:
            return {"sent": False, "why": "halted_before_send", "measured_before_send": _r(pre)}
        t0 = time.monotonic()
        t_last_send = t0
        last, err = None, None
        resends = []                      # 送り直した時刻 (送ってからの秒)
        base = {"sent": True, "timeout_sec": round(timeout, 2), "t_send": t_send, "measured_before_send": _r(pre),
                "resends": resends}
        while time.monotonic() - t0 < timeout:
            if quitting.is_set():
                return dict(base, reached=None, interrupted=True, reached_angles=_r(last),
                            reach_err=None if err is None else round(err, 3))
            a = self.read()
            if a is None:
                # 動いているはずの間に読めない: 届いたか分からないまま次を受け付けない (codex 必須 6)
                return dict(base, reached=None, reached_angles=_r(last),
                            reach_err=None if err is None else round(err, 3),
                            error="read_failed_during_check", elapsed_sec=round(time.monotonic() - t0, 2))
            last = a
            err = float(np.max(np.abs(a - target)))          # 丸める前の値で判定する (codex 推奨 3)
            if err <= REACH_TOL_DEG:
                return dict(base, reached=True, reached_angles=_r(a), reach_err=round(err, 3),
                            elapsed_sec=round(time.monotonic() - t0, 2))
            moved = float(np.max(np.abs(a - pre)))
            if (len(resends) < IGNORED_MAX_RESENDS and moved < IGNORED_MOVE_DEG
                    and time.monotonic() - t_last_send >= IGNORED_CHECK_SEC):
                # 無視された: 同じ目標を送り直す (停止・離したあとなら送らない)
                try:
                    again = gate.run(lambda: daemon_send_angles([float(v) for v in target], speed=SPEED,
                                                                wait=rpc.SEND_WAIT,
                                                                timeout_override=SEND_RPC_TIMEOUT_SEC))
                except Exception as e:
                    return dict(base, reached=None, reached_angles=_r(a), reach_err=round(err, 3),
                                error=f"resend_failed: {type(e).__name__}: {e}",
                                elapsed_sec=round(time.monotonic() - t0, 2))
                if not again:
                    return dict(base, reached=None, halted_during_check=True, reached_angles=_r(a),
                                reach_err=round(err, 3), elapsed_sec=round(time.monotonic() - t0, 2))
                t_last_send = time.monotonic()
                resends.append(round(t_last_send - t0, 2))
                continue
            time.sleep(POLL_SLEEP)
        return dict(base, reached=False, reached_angles=_r(last),
                    reach_err=None if err is None else round(err, 3),
                    elapsed_sec=round(time.monotonic() - t0, 2))

    def gripper(self, state, gate):
        """run_policy_client.gripper_cmd と同じ中身 (閉 = daemon_set_gripper_value(GRIP_VALUE) /
        開 = daemon_set_gripper(0, wait=GRIP_OPEN_DAEMON_WAIT). そのあと GRIPPER_SLEEP 待つ).
        指令だけを gate の中で送り, 待ちは gate の外で行う (停止の受け付けを待ちの分だけ遅らせない).
        戻り値: 送ったか."""
        if state == 1:
            sent = gate.run(lambda: daemon_set_gripper_value(rpc.GRIP_VALUE))
        else:
            sent = gate.run(lambda: daemon_set_gripper(0, wait=rpc.GRIP_OPEN_DAEMON_WAIT))
        if sent:
            time.sleep(rpc.GRIPPER_SLEEP)
        return sent


class DryArm:
    """ドライラン: daemon にもアームにも触らない. HOME から始まる仮の姿勢を動かす."""

    execute = False

    def __init__(self, start=HOME):
        self.q = np.asarray(start, dtype=float).copy()

    def read(self):
        return self.q.copy()

    def send_and_check(self, target, gate, quitting, check=True):
        t_send = time.time()
        if not gate.run(lambda: None):
            return {"sent": False, "why": "halted_before_send", "measured_before_send": _r(self.q)}
        if not check:                     # 長押し: 少しずつ目標へ寄せる (待たない)
            self.q = self.q + np.clip(np.asarray(target, dtype=float) - self.q, -DRY_HOLD_MAX_DEG, DRY_HOLD_MAX_DEG)
            return {"sent": True, "reached": None, "no_check": True, "t_send": t_send, "dry": True}
        time.sleep(DRY_MOVE_SEC)
        self.q = np.asarray(target, dtype=float).copy()
        return {"sent": True, "reached": True, "reached_angles": _r(self.q), "reach_err": 0.0,
                "t_send": t_send, "dry": True}

    def gripper(self, state, gate):
        if not gate.run(lambda: None):
            return False
        time.sleep(GRIPPER_SLEEP)         # 実機と同じ間だけ受け付けない
        return True


# =============================================================================
# 記録
# =============================================================================

class JsonlLog:
    def __init__(self, path):
        self.path = Path(path)
        self.f = open(self.path, "x", encoding="utf-8")

    def write(self, rec):
        self.f.write(json.dumps(rec, ensure_ascii=False) + "\n")
        self.f.flush()                    # 途中で止まっても残るように 1 行ごとに

    def close(self):
        if not self.f.closed:
            self.f.close()


class NullLog:
    """ドライラン: 何も書かない (依頼 69)."""

    def write(self, rec):
        pass

    def close(self):
        pass


def write_json_atomic(path, obj):
    tmp = Path(str(path) + ".tmp")
    with open(tmp, "w", encoding="utf-8") as f:
        json.dump(obj, f, ensure_ascii=False, indent=2)
        f.flush()
        os.fsync(f.fileno())
    os.replace(tmp, path)


# =============================================================================
# 操作の状態 (pygame に依存しない. テストで直接呼ぶ)
# =============================================================================

class Teleop:
    """押したボタンを受けて, 送る仕事を別のスレッドで 1 つずつ行う.

    送っている間 (busy) の動く操作は受け付けない (ためない). 停止はいつでも受け付ける.
    状態を書き換えるのは呼び出し側のスレッド (pygame のループ) だけ. 送る仕事の結果は
    results に入り, poll() で受け取って状態とログに反映する.
    送る直前の確かめは 仕事ごとの SendGate で行い, 停止・終了はその鍵を取ってから取り消す.
    """

    def __init__(self, arm, start_pose, log, out=print, spawn=None):
        self.arm = arm
        self.log = log
        self.out = out
        self.spawn = spawn or self._spawn_thread
        self.cmd = np.asarray(start_pose, dtype=float).copy()        # 直前の目標 (始めは起動時の姿勢)
        self.cmd_reached = True
        self.measured = np.asarray(start_pose, dtype=float).copy()   # 最後に読めた角度
        self.sel = 0                       # SELECT_ORDER の何番目 (始めは j1)
        self.r1 = False
        self.stopped = False
        self.stop_reason = None
        self.busy = False
        self.pending = None                # 送っている操作のログ行
        self.thread = None
        self.grip = "unknown"
        self.last_limit = ""               # 直前に範囲で切られた理由 (画面用. 英数字)
        self.last_msg = ""
        self.gate = None                   # 今の仕事の SendGate (停止・終了で取り消す)
        self.log_failed = False            # log.jsonl に書けなくなったら 再開させない (終わらせる)
        self.quitting = threading.Event()
        self.results = queue.Queue()
        self.home_down_at = None
        self.home_handled = False
        self.triggers = [-1.0, -1.0]
        self.both_triggers = False
        self.read_error = False
        self.seq = 0
        self.n_sent = 0
        self.hold = None                   # 十字キーの長押し {id, button, joint, sign, down_at, n, last_req_at}
        self.hold_seq = 0

    # ---- 見せる値 ----
    @property
    def joint(self):
        return SELECT_ORDER[self.sel]

    @property
    def step(self):
        return STEP_COARSE_DEG if self.r1 else STEP_FINE_DEG

    @property
    def state(self):
        if self.stopped:
            return STATE_STOPPED
        return STATE_MOVING if self.busy else STATE_IDLE

    # ---- 記録 ----
    def _entry(self, button, kind, **kw):
        self.seq += 1
        e = {"seq": self.seq, "t": datetime.now().isoformat(timespec="milliseconds"),
             "t_unix": round(time.time(), 3), "button": button,
             "button_name": BUTTON_NAMES.get(button) if isinstance(button, int) else button,
             "kind": kind, "selected_joint": self.joint, "step_deg": self.step,
             "execute": bool(self.arm.execute)}
        e.update(kw)
        return e

    def _finish(self, e):
        e.update({"grip_state": self.grip, "stopped": self.stopped, "stop_reason": self.stop_reason})
        try:
            self.log.write(e)
        except Exception as ex:          # SSD が外れたなど. ローカルには逃がさない
            first = not self.log_failed
            self.log_failed = True
            if first:
                self.out(f"[記録エラー] log.jsonl に書けません: {ex}。停止にします"
                         "（再開はできません。終わらせて KIOXIA を確かめてください）")
            if not self.stopped:
                self.stop_reason = "log_write_failed"
            self.stopped = True
            self._cancel_gate()
            self._drop_home_hold()

    # ---- 停止 ----
    def _cancel_gate(self):
        """今の仕事をまだ送ると決めていなければ, もう送らせない (待たない).
        戻り値: 停止より前に送ると決めていたか (None = 仕事なし)."""
        if self.gate is None:
            return None
        return self.gate.cancel_now()

    def _drop_home_hold(self):
        """HOME の長押しを無効にする (押し直しを求める. codex 必須 4)."""
        if self.home_down_at is not None and not self.home_handled:
            self.home_handled = True
            self.out("[HOME] 長押しの途中で受け付けられなくなったので取り消しました（押し直してください）")
            self._finish(self._entry(BTN_HOME, "home", accepted=False, reason="hold_cancelled"))

    def _end_hold(self, msg=None):
        h = self.hold
        if h is not None:
            if h.get("q0") is not None:
                self.out(f"[長押し] j{h['joint']} を {h['q0']:+.2f}° → {h['q_last']:+.2f}° まで"
                         f"（{h['n_sent']} 回送信。離したあと最大 {HOLD_AHEAD_DEG:.0f}° 先まで動いて止まります）")
            if msg:
                self.out(msg)
            self.hold = None

    def _hold_progress(self, e, job):
        """長押しの 1 回の送信のあと: 進み具合を覚え, HOLD_STALL_SEC 進んでいなければ止める."""
        h = self.hold
        if h is None or h["id"] != e.get("hold_id") or not e.get("measured_before"):
            return
        qj = float(e["measured_before"][job[1]])
        t = h["last_req_at"]
        if h.get("q0") is None:
            h.update(q0=qj, n_sent=0, prog_q=qj, prog_t=t)
        h["q_last"] = qj
        h["n_sent"] += 1
        if abs(qj - h["prog_q"]) >= HOLD_STALL_DEG:
            h["prog_q"], h["prog_t"] = qj, t
        elif t - h["prog_t"] >= HOLD_STALL_SEC:
            self._end_hold(f"[長押し] j{job[1]} が {HOLD_STALL_SEC:.0f} 秒進まないので止めました"
                           "（どこかに当たっていれば、逆向きを1回押すか HOME で戻してください）")

    def enter_stop(self, reason, button=None, kind="stop"):
        was = self.stopped
        self.stopped = True
        self._end_hold()
        committed = self._cancel_gate()
        if not was:
            self.stop_reason = reason
        self.out(f"[停止] {reason}。新しい指令は送りません（OPTIONS で再開）"
                 + ("。止める前に送った動きは止まらずに最後まで行きます" if committed else "")
                 + ("。まだ送っていなかった操作は送りません" if committed is False else ""))
        self._finish(self._entry(button, kind, accepted=True, reason=reason, already_stopped=was,
                                 busy=self.busy, send_committed_before_stop=committed,
                                 triggers=[round(v, 3) for v in self.triggers]))
        self._drop_home_hold()

    def set_triggers(self, l2, r2):
        self.triggers = [float(l2), float(r2)]
        both = l2 > TRIGGER_STOP_ABOVE and r2 > TRIGGER_STOP_ABOVE
        if both and not self.both_triggers:
            self.both_triggers = True
            self.enter_stop("L2+R2", button="L2+R2")
        self.both_triggers = both

    def controller_lost(self, reason):
        self.enter_stop(reason, button=None, kind="controller_lost")
        self.r1 = False                      # 押しっぱなしの状態を持ち越さない
        self.home_down_at = None
        self.home_handled = False
        self.both_triggers = False

    def controller_read_failed(self, msg):
        if not self.read_error:
            self.read_error = True
            self.enter_stop(f"read_error: {msg}", button=None, kind="read_error")

    def controller_read_ok(self):
        self.read_error = False

    def _resume(self, e):
        if not self.stopped:
            e.update(accepted=False, reason="not_stopped")
            self.out("[再開] 止まっていないので何もしません")
        elif self.both_triggers:
            e.update(accepted=False, reason="triggers_still_pressed")
            self.out("[再開] L2 と R2 を離してから OPTIONS を押してください")
        elif self.read_error:
            e.update(accepted=False, reason="controller_read_error")
            self.out("[再開] コントローラーを読めていないので再開しません")
        elif self.log_failed:
            e.update(accepted=False, reason="log_write_failed")
            self.out("[再開] 記録が書けないので再開しません（終わらせて KIOXIA を確かめてください）")
        else:
            # 止める前に作った仕事の取り消しは戻さない (仕事ごとの SendGate. 再開で生き返らない)
            self.stopped = False
            self.stop_reason = None
            e.update(accepted=True)
            self.out("[再開] 操作を受け付けます")
        self._finish(e)

    # ---- ボタン ----
    def press(self, button, now):
        if button == BTN_R1:
            self.r1 = True
            self._finish(self._entry(button, "modifier", accepted=True))
            return
        self._end_hold()                     # 十字キーの長押しは, ほかのボタン (R1 以外) で止まる
        if button == BTN_TRIANGLE:
            self.sel = (self.sel + 1) % len(SELECT_ORDER)
            self.out(f"[関節] 上下で動かす関節を j{self.joint} にしました")
            self._finish(self._entry(button, "select_joint", accepted=True))
            return
        if button == BTN_OPTIONS:
            self._resume(self._entry(button, "resume"))
            return
        if button == BTN_HOME:
            self.home_down_at = now
            self.home_handled = False
            if self.stopped or self.busy:
                # 押し始めに受け付けられないなら, 長押しを続けても送らない (押し直しを求める)
                self.home_handled = True
                why = "stopped" if self.stopped else "busy"
                self.out("[受付なし] HOME: " + ("停止中です" if self.stopped else "前の操作が終わっていません")
                         + "（押し直してください）")
                self._finish(self._entry(button, "home", accepted=False, reason=why))
            return                           # 1 秒続いたとき (tick) か 離したとき (release) に 1 行書く
        if button in (BTN_LEFT, BTN_RIGHT, BTN_UP, BTN_DOWN):
            if button in (BTN_LEFT, BTN_RIGHT):
                sign = J0_LEFT_SIGN if button == BTN_LEFT else -J0_LEFT_SIGN
                j = 0
            else:
                sign = UP_SIGN if button == BTN_UP else -UP_SIGN
                j = self.joint
            self.hold_seq += 1
            self.hold = {"id": self.hold_seq, "button": button, "joint": j, "sign": sign,
                         "down_at": now, "n": 0, "last_req_at": now}
            e = self._entry(button, "move", joint=j, delta=sign * self.step, hold_id=self.hold_seq, hold_n=0)
            self._request(e, ("move", j, sign * self.step, None))
            if not e.get("accepted"):
                # 押し始めに受け付けられない (動いている間・停止中) なら, 押し続けても長押しにしない (HOME と同じ)
                self.hold = None
            return
        if button in (BTN_CROSS, BTN_CIRCLE):
            state = 1 if button == BTN_CROSS else 0
            self._request(self._entry(button, "grip_close" if state else "grip_open", grip_cmd=state),
                          ("grip", state))
            return
        self._finish(self._entry(button, "ignored", accepted=False, reason="unassigned"))

    def release(self, button, now):
        if self.hold is not None and button == self.hold["button"]:
            hid = self.hold["id"]
            self._end_hold()                 # 離したら長押しを止める
            p = self.pending
            if (self.busy and self.gate is not None and p is not None
                    and p.get("hold_id") == hid and (p.get("hold_n") or 0) >= 1):
                # 長押しの 2 回目からの刻みを, まだ送ると決めていなければ送らない (1 回目 = 短い押しは取り消さない)
                p["released_during_job"] = True
                self.gate.cancel_now()
        if button == BTN_R1:
            self.r1 = False
        elif button == BTN_HOME:
            if self.home_down_at is not None and not self.home_handled:
                held = now - self.home_down_at
                self.out(f"[HOME] {held:.2f} 秒で離したので送りません（{HOME_HOLD_SEC:.0f} 秒の長押しで送ります）")
                self._finish(self._entry(button, "home_short", accepted=False, reason="held_too_short",
                                         held_sec=round(held, 3)))
            self.home_down_at = None
            self.home_handled = False

    def tick(self, now):
        if self.home_down_at is not None and not self.home_handled and (self.busy or self.stopped):
            self._drop_home_hold()           # 長押しの途中で別の操作が動いた・止まった
        if (self.home_down_at is not None and not self.home_handled
                and now - self.home_down_at >= HOME_HOLD_SEC):
            self.home_handled = True
            self._request(self._entry(BTN_HOME, "home", held_sec=round(now - self.home_down_at, 3)),
                          ("home",))
        h = self.hold
        if (h is not None and not self.stopped and not self.busy
                and now - h["down_at"] >= HOLD_START_SEC - 1e-6
                and now - h["last_req_at"] >= HOLD_INTERVAL_SEC - 1e-6):
            h["n"] += 1
            h["last_req_at"] = now
            d = h["sign"] * HOLD_AHEAD_DEG
            self._request(self._entry(h["button"], "move", joint=h["joint"], delta=d,
                                      hold_id=h["id"], hold_n=h["n"],
                                      held_sec=round(now - h["down_at"], 3)),
                          ("move", h["joint"], d, h["id"]))

    def _hold_alive(self, hold_id):
        h = self.hold
        return h is not None and h["id"] == hold_id

    # ---- 送る仕事 ----
    def _request(self, e, job):
        if self.stopped:
            e.update(accepted=False, reason="stopped")
            self.out("[受付なし] 停止中です（OPTIONS で再開）")
            self._finish(e)
            return
        if self.busy:
            e.update(accepted=False, reason="busy")
            self.out("[受付なし] 前の操作が終わっていません（ためません）")
            self._finish(e)
            return
        e["accepted"] = True
        self.busy = True
        self.pending = e
        gate = SendGate()
        self.gate = gate
        snap = {"cmd": self.cmd.copy(), "cmd_reached": self.cmd_reached}
        self.spawn(lambda: self._run_job(job, snap, gate))

    def _spawn_thread(self, fn):
        self.thread = threading.Thread(target=fn, daemon=True)
        self.thread.start()

    def _run_job(self, job, snap, gate):
        res = {}
        try:
            if job[0] == "move":
                _, j, d, hold_id = job
                q = self.arm.read()
                res["measured_before"] = _r(q)
                if q is None:
                    res["error"] = "read_failed"
                    return
                if hold_id is not None:
                    # 長押しの 2 回目から: 動かす関節は「いま読んだ角度 + 3° 先」. ほかの関節は直前の指令のまま
                    # (読んだ角度で送り直すと, 重さで沈んだ分を毎回なぞって j1 などがずり下がる)
                    cmd = np.asarray(snap["cmd"], dtype=float)
                    others = [k for k in range(6) if k != j]
                    gap_o = float(np.max(np.abs(cmd[others] - q[others])))
                    start = cmd.copy() if gap_o <= REACH_TOL_DEG else q.copy()
                    start[j] = q[j]
                    res["start_source"] = "hold" if gap_o <= REACH_TOL_DEG else "measured"
                    res["cmd_gap_deg"] = round(gap_o, 3)
                    res["hold_lead_deg"] = round(abs(float(cmd[j] - q[j])), 3)
                    plan = plan_step(start, j, d)
                    if (plan["target"] is not None and plan["clip"]
                            and abs(float(plan["target"][j] - cmd[j])) < 0.01):
                        # 範囲の端の目標をもう送ってある: 同じ目標を送り続けない (長押しを止める)
                        c = plan["clip"][0]
                        plan = {"target": None, "clip": [], "refused": [{
                            "joint": j, "why": "at_limit", "value": c["want"], "lo": c["bound"], "hi": c["bound"],
                            "limit": c["limit"]}]}
                    if (plan["target"] is not None and abs(float(cmd[j] - q[j])) <= HOLD_AHEAD_DEG + REACH_TOL_DEG
                            and (plan["target"][j] - cmd[j]) * np.sign(d) < 0):
                        # 読んだ角度が古いと「読んだ角度 + 3°」が前の目標より後ろになる. 後ろへは戻さない (引き戻さない)
                        plan["target"][j] = cmd[j]
                        res["held_previous_target"] = True
                    res["clip"] = plan["clip"]
                    res["refused"] = plan["refused"]
                    res["limit_ja"] = limit_text_ja(plan)
                    res["limit_ascii"] = limit_text_ascii(plan)
                    if plan["target"] is None:
                        res["sent"] = False
                        return
                    res["command"] = _r(plan["target"])
                    res["_target"] = plan["target"]
                    res.update(self.arm.send_and_check(plan["target"], gate, self.quitting, check=False))
                    return
                # 出発点: 直前の目標に届いていて, 今読んだ角度とも 3° 以内ならその目標.
                # そうでなければ今読んだ角度 (手で動かされたなど. 古い目標から大きく動かさない. codex 必須 3)
                gap = float(np.max(np.abs(np.asarray(snap["cmd"]) - q)))
                use_cmd = snap["cmd_reached"] and gap <= REACH_TOL_DEG
                start = snap["cmd"] if use_cmd else q
                res["start_source"] = "command" if use_cmd else "measured"
                res["cmd_gap_deg"] = round(gap, 3)
                plan = plan_step(start, j, d)
                res["clip"] = plan["clip"]
                res["refused"] = plan["refused"]
                res["limit_ja"] = limit_text_ja(plan)
                res["limit_ascii"] = limit_text_ascii(plan)
                if plan["target"] is None:
                    res["sent"] = False
                    return
                res["command"] = _r(plan["target"])
                res["_target"] = plan["target"]
                res.update(self.arm.send_and_check(plan["target"], gate, self.quitting))
            elif job[0] == "home":
                q = self.arm.read()
                res["measured_before"] = _r(q)
                if q is None:                # 読めなければ送らない (codex 必須 6)
                    res["error"] = "read_failed"
                    return
                res["command"] = _r(HOME)
                res["_target"] = np.array(HOME)
                res["range_check"] = "skipped_for_home"
                res.update(self.arm.send_and_check(np.array(HOME), gate, self.quitting))
            elif job[0] == "grip":
                res["measured_before"] = None
                sent = self.arm.gripper(job[1], gate)
                res["sent"] = bool(sent)
                if not sent:
                    res["why"] = "halted_before_send"
        except Exception as ex:
            res["error"] = f"{type(ex).__name__}: {ex}"
        finally:
            self.results.put((job, res))

    def poll(self):
        """送る仕事の結果を受け取り, 状態とログに反映する (pygame のループから毎回呼ぶ)."""
        while True:
            try:
                job, res = self.results.get_nowait()
            except queue.Empty:
                return
            self._apply(job, res)

    def _apply(self, job, res):
        e = self.pending or self._entry(None, "orphan_result")
        self.pending = None
        self.busy = False
        target = res.pop("_target", None)
        e.update(res)
        if res.get("reached_angles") is not None:
            self.measured = np.asarray(res["reached_angles"], dtype=float)
        elif res.get("measured_before") is not None:
            self.measured = np.asarray(res["measured_before"], dtype=float)
        sent = res.get("sent")
        if job[0] in ("move", "home") and sent is True:
            self.n_sent += 1
            self.cmd = np.asarray(target, dtype=float)
            # 長押しの送信は届くのを待たないが, アームは目標へ向かって動き続けるので「届く目標」として扱う
            # (次の短い押しは, 読んだ角度と 3° 以内ならこの目標から. 離れていれば読んだ角度から)
            self.cmd_reached = True if res.get("no_check") else bool(res.get("reached"))
        elif sent == "unknown":
            self.cmd_reached = False                      # 次は読んだ角度から
        if job[0] == "grip" and res.get("error"):
            self.grip = "unknown"
        if job[0] == "grip" and sent is True:
            self.grip = "closed" if job[1] == 1 else "open"
        if job[0] == "move":
            self.last_limit = res.get("limit_ascii", "")
        e["reached"] = res.get("reached") if sent is True else None
        # ---- ターミナル ----
        if job[0] == "move":
            label = f"j{job[1]} {job[2]:+.1f}°" + (f"（長押し {e.get('hold_n')}）" if job[3] is not None else "")
        elif job[0] == "home":
            label = "HOME"
        else:
            label = "爪を" + ("閉じる" if job[1] == 1 else "開く")
        if res.get("limit_ja"):
            self.out(f"[範囲] {res['limit_ja']}")
        if res.get("error"):
            self.out(f"[エラー] {label}: {res['error']}。停止にします")
        elif sent is True and job[0] == "grip":
            self.out(f"[爪] {label}（待ち {GRIPPER_SLEEP:.1f} 秒のあと受付）")
        elif sent is True and res.get("no_check"):
            self._hold_progress(e, job)                    # 長押し: 1 回ずつは出さない (離したときに 1 行)
        elif sent is True:
            r = res.get("reached")
            how = "届いた" if r else ("確かめる途中で終了" if r is None else "届かなかった")
            if res.get("resends"):
                how += f"・無視されたので {len(res['resends'])} 回送り直した"
            self.out(f"[送信] {label} → {_fmt(res.get('command'))}  {how}"
                     f"（ずれ {res.get('reach_err')}°）  届いた角度 {_fmt(res.get('reached_angles'))}")
        elif res.get("why") == "halted_before_send" and e.get("released_during_job") and not self.stopped:
            pass                                           # 長押しを離したので取り消した. 何も出さない
        elif res.get("why") == "halted_before_send":
            self.out(f"[送らない] {label}: 停止が入ったので送りませんでした")
        else:
            self.out(f"[送らない] {label}")
        # 長押しの中で送れなかったら (範囲の端・停止), その長押しは止める. 端で同じ行を繰り返さない
        if job[0] == "move" and sent is not True and e.get("hold_id") is not None and self._hold_alive(e["hold_id"]):
            self._end_hold()
        self.gate = None
        self._finish(e)
        if res.get("error"):
            self.enter_stop(f"arm_error: {res['error']}", kind="arm_error")

    # ---- 終わり ----
    def shutdown(self):
        """新しい指令を送らずに終わる. 送っている途中の仕事が戻るのを WORKER_JOIN_SEC まで待つ.
        戻り値: 仕事が終わっているか (終わっていなければ daemon のソケットを閉じない)."""
        self.quitting.set()
        committed = self._cancel_gate()
        if self.pending is not None:
            self.pending["send_committed_before_exit"] = committed
        if self.thread is not None:
            self.thread.join(WORKER_JOIN_SEC)
        self.poll()
        done = self.thread is None or not self.thread.is_alive()
        if self.pending is not None:
            e = self.pending
            self.pending = None
            e.update(reached=None, interrupted_at_exit=True)
            self._finish(e)
        return done

    def status_lines(self, q_now=None):
        """画面の文字 (英数字だけ)."""
        q = self.measured if q_now is None else q_now
        lines = [
            ("big", f"JOINT  j{self.joint}    STEP {self.step:.1f} deg"),
            ("big", f"STATE  {self.state}" + ("  (moving)" if self.stopped and self.busy else "")),
            ("big", f"GRIP   {self.grip}"),
        ]
        for k in range(6):
            lines.append(("mono", f"j{k}  {q[k]:+8.2f}   cmd {self.cmd[k]:+8.2f}"))
        lines.append(("small", "last limit: " + (self.last_limit or "-")))
        if self.stopped:
            lines.append(("small", f"stop reason: {self.stop_reason}  (OPTIONS = resume)"))
        return lines


# =============================================================================
# pygame のループ
# =============================================================================

WINDOW_SIZE = (900, 560)


def controller_info(js):
    return {"name": js.get_name(), "guid": js.get_guid(), "instance_id": js.get_instance_id(),
            "axes": js.get_numaxes(), "buttons": js.get_numbuttons(), "hats": js.get_numhats(),
            "connected_at": datetime.now().isoformat(timespec="seconds")}


def run_loop(tp, screen, fonts, mode_text, on_controller=None, on_frame=None):
    """ウィンドウを閉じるまで回す. 戻り値: 終わった理由."""
    js = None
    clock = pygame.time.Clock()
    frame = 0
    while True:
        if on_frame is not None:
            on_frame(frame, tp)
        frame += 1
        now = time.monotonic()
        events = pygame.event.get()
        buttons = []
        for ev in events:
            if ev.type == pygame.QUIT:
                return "window_closed"
            if ev.type == pygame.JOYDEVICEADDED:
                if js is None:
                    js = pygame.joystick.Joystick(ev.device_index)
                    info = controller_info(js)
                    tp.out(f"[接続] {info['name']}  GUID={info['guid']}  軸={info['axes']}  ボタン={info['buttons']}")
                    if on_controller is not None:
                        on_controller(info)
            elif ev.type == pygame.JOYDEVICEREMOVED:
                if js is not None and ev.instance_id == js.get_instance_id():
                    js = None
                    tp.controller_lost("controller_disconnected")
            elif ev.type in (pygame.JOYBUTTONDOWN, pygame.JOYBUTTONUP):
                if js is not None and ev.instance_id == js.get_instance_id():
                    buttons.append(ev)
        # 停止 (L2+R2) と 読み取りの失敗を ボタンより先に見る (同じコマのボタンで送らない. codex 必須 5)
        read_ok = js is not None
        if js is not None:
            try:
                l2, r2 = js.get_axis(AXIS_L2), js.get_axis(AXIS_R2)
                tp.controller_read_ok()
                tp.set_triggers(l2, r2)
            except Exception as ex:          # pygame.error など
                read_ok = False
                tp.controller_read_failed(f"{type(ex).__name__}: {ex}")
        if read_ok:
            for ev in buttons:
                if ev.type == pygame.JOYBUTTONDOWN:
                    tp.press(ev.button, now)
                else:
                    tp.release(ev.button, now)
        # 長押しの最中は, 離した合図を取りこぼしても止まるよう, ボタンの状態も毎コマ見る
        if js is not None and read_ok and tp.hold is not None:
            hb = tp.hold["button"]
            try:
                held = js.get_button(hb)
            except Exception as ex:          # pygame.error など
                tp.controller_read_failed(f"{type(ex).__name__}: {ex}")
            else:
                if not held:
                    tp.release(hb, now)
        tp.tick(now)
        tp.poll()
        draw(screen, fonts, tp, mode_text, js)
        clock.tick(60)


def draw(screen, fonts, tp, mode_text, js):
    screen.fill((20, 20, 24))
    color_state = {STATE_IDLE: (120, 220, 140), STATE_MOVING: (240, 200, 80),
                   STATE_STOPPED: (240, 90, 90)}[tp.state]
    y = 10
    screen.blit(fonts["small"].render(f"{mode_text}   controller: "
                                      + (js.get_name()[:40] if js is not None else "none"),
                                      True, (200, 220, 255)), (10, y))
    y += 28
    for kind, text in tp.status_lines():
        col = color_state if text.startswith("STATE") else (235, 235, 235)
        screen.blit(fonts[kind].render(text[:110], True, col), (10, y))
        y += {"big": 44, "mono": 26, "small": 24}[kind]
    y += 6
    for t in ("dpad L/R: j0   dpad U/D: selected joint (up = -, down = +)   hold: keep moving   triangle: next joint",
              "R1 hold: 2 deg   cross: close   circle: open   HOME hold 1s: home",
              "L2+R2: stop   OPTIONS: resume   window close / Ctrl+C: quit (arm is not moved)"):
        screen.blit(fonts["small"].render(t, True, (150, 150, 160)), (10, y))
        y += 22
    pygame.display.flip()


# =============================================================================
# main
# =============================================================================

def git_info(path):
    def run(*a):
        try:
            return subprocess.run(["git", *a], cwd=_ROOT, capture_output=True, text=True,
                                  timeout=5).stdout.strip()
        except Exception:
            return None
    rel = os.path.relpath(path, _ROOT)
    return {"commit": run("rev-parse", "HEAD"),
            "script_status": run("status", "--porcelain", "--", rel) or "clean"}


def main(argv=None, on_frame=None, start_pose_dry=None):
    ap = argparse.ArgumentParser(description="ゲームパッドで mechArm を手で動かす (既定はドライラン)")
    ap.add_argument("--execute", action="store_true", help="daemon に送る (付けなければドライラン)")
    args = ap.parse_args(argv)

    stamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    run_stem = f"teleop_{stamp}" + ("" if args.execute else "_dry")
    if args.execute:
        ensure_ssd_mounted()
        try:
            load_daemon_modules()
        except Exception as ex:          # 読み込みの失敗・値の違い. 記録も daemon もまだ触っていない
            sys.exit(f"[ABORT] daemon の送り口を読めません: {type(ex).__name__}: {ex}。何も送らずに終わります")
        run_dir = LOG_ROOT / run_stem
        if run_dir.exists():
            sys.exit(f"[ABORT] 同じ名前のフォルダがあります: {run_dir}")
        run_dir.mkdir(parents=True)
        script_copy = run_dir / Path(__file__).name
        shutil.copy2(__file__, script_copy)
        log = JsonlLog(run_dir / "log.jsonl")
        print(f"[記録] {run_dir}")
    else:
        # ドライランは記録しない: KIOXIA に何も書かない・フォルダも作らない (依頼 69)
        run_dir = script_copy = None
        log = NullLog()
        print("[記録] ドライランなので記録しません")

    tp = None
    meta = None
    end_reason = None
    daemon_used = False
    try:
        if args.execute:
            get_daemon_socket()
            daemon_used = True
            rpc.install_daemon_lock()
            arm = DaemonArm()
            start = arm.read()
            if start is None:
                end_reason = "start_read_failed"
                sys.exit("[ABORT] 起動したときの関節角を読めません（daemon を確かめてください）。何も送らずに終わります")
            print("[実機] daemon に送ります。起動したときの姿勢: " + _fmt(start))
        else:
            start = np.asarray(start_pose_dry if start_pose_dry is not None else HOME, dtype=float)
            arm = DryArm(start)
            print("[ドライラン] daemon にもアームにも触りません。HOME から始まる仮の姿勢を動かします")
        lo, hi, _, _ = joint_window()
        bad = [k for k in range(6) if not (lo[k] - LIMIT_EPS_DEG <= start[k] <= hi[k] + LIMIT_EPS_DEG)]
        if bad:
            print("[注意] 起動したときの姿勢が守りの外: " + ", ".join(f"j{k}={start[k]:+.2f}" for k in bad)
                  + "。この関節を含む操作は送りません（HOME の長押しは送れます）")

        meta = None if not args.execute else {
            "run_stem": run_stem, "started_at": datetime.now().isoformat(timespec="seconds"),
            "execute": bool(args.execute), "argv": sys.argv,
            "controllers": [],
            "python": sys.version, "pygame": pygame.version.ver,
            "sdl": ".".join(str(v) for v in pygame.get_sdl_version()), "platform": platform.platform(),
            "start_pose": _r(start),
            "guards": {"J1_MAX_DEG": J1_MAX_DEG, "range": "physical_limits (no base window. 2026-11-03)",
                       "J4_SAFE": list(J4_SAFE), "JOINT_LIMITS": [list(x) for x in JOINT_LIMITS],
                       "window": {"lo": _r(lo), "hi": _r(hi)},
                       "home_bypasses_range_check": True},
            "motion": {"speed": SPEED, "step_fine_deg": STEP_FINE_DEG, "step_coarse_deg": STEP_COARSE_DEG,
                       "reach_tol_deg": REACH_TOL_DEG, "reach_timeout_min_sec": REACH_TIMEOUT_SEC,
                       "poll_sec": POLL_SLEEP, "gripper_sleep_sec": rpc.GRIPPER_SLEEP,
                       "grip_close_value": rpc.GRIP_VALUE, "send_wait": rpc.SEND_WAIT,
                       "home": HOME, "home_hold_sec": HOME_HOLD_SEC, "trigger_stop_above": TRIGGER_STOP_ABOVE,
                       "hold_start_sec": HOLD_START_SEC, "hold_interval_sec": HOLD_INTERVAL_SEC,
                       "hold_ahead_deg": HOLD_AHEAD_DEG, "hold_stall_sec": HOLD_STALL_SEC,
                       "ignored_check_sec": IGNORED_CHECK_SEC, "ignored_max_resends": IGNORED_MAX_RESENDS,
                       "j0_left_sign": J0_LEFT_SIGN, "up_sign": UP_SIGN, "select_order": list(SELECT_ORDER)},
            "button_map": {str(k): v for k, v in BUTTON_NAMES.items()},
            "git": git_info(__file__),
            "script_copy": script_copy.name,
            "script_sha256": hashlib.sha256(script_copy.read_bytes()).hexdigest(),
        }
        if meta is not None:
            write_json_atomic(run_dir / "meta.json", meta)

        def on_controller(info):
            if meta is None:
                return
            meta["controllers"].append(info)
            try:
                write_json_atomic(run_dir / "meta.json", meta)
            except Exception as ex:
                print(f"[記録エラー] meta.json に書けません: {ex}")

        tp = Teleop(arm, start, log)
        pygame.init()
        pygame.joystick.init()
        screen = pygame.display.set_mode(WINDOW_SIZE)
        pygame.display.set_caption("gamepad_teleop" + (" [EXECUTE]" if args.execute else " [DRY RUN]"))
        mono = "menlo,consolas,dejavusansmono"
        fonts = {"big": pygame.font.SysFont(mono, 34, bold=True), "mono": pygame.font.SysFont(mono, 20),
                 "small": pygame.font.SysFont(mono, 16)}
        print("コントローラーを待っています（つないでいなければ、今つないでください）")
        end_reason = run_loop(tp, screen, fonts, "EXECUTE" if args.execute else "DRY RUN",
                              on_controller=on_controller, on_frame=on_frame)
    except KeyboardInterrupt:
        end_reason = "ctrl_c"
        print("\n[終了] Ctrl+C")
    finally:
        # 終わるときにアームを動かさない (HOME 復帰もサーボ解放もしない). 新しい指令も送らない
        worker_done = True
        if tp is not None:
            worker_done = tp.shutdown()
            if not worker_done:
                print("[終了] 送っている途中の仕事が戻らないまま終わります（ソケットは閉じません）")
        if meta is not None:
            meta.update(ended_at=datetime.now().isoformat(timespec="seconds"), end_reason=end_reason or "error",
                        n_sent=(tp.n_sent if tp is not None else 0))
            try:
                write_json_atomic(run_dir / "meta.json", meta)
            except Exception as ex:
                print(f"[記録エラー] meta.json に書けません: {ex}")
        log.close()
        if daemon_used and worker_done:
            try:
                close_daemon_socket()
            except Exception:
                pass
        pygame.quit()
        print("[終了] アームは動かしていません。" + (f"記録: {run_dir}" if run_dir is not None else "記録なし（ドライラン）"))
    return 0


if __name__ == "__main__":
    sys.exit(main())
```

### test_gamepad_teleop.py（テスト73件・commit 413f7e1）

```python
#!/usr/bin/env python3
"""test_gamepad_teleop.py — gamepad_teleop.py の確かめ (アームなし・コントローラーなし. 依頼 68).

  python3 tools/test_gamepad_teleop.py -v

中身:
  - ボタン番号と操作の対応 (依頼 68 の表) / 十字キー上下の向き / △ で j1 → j5 → j1
  - 守り: j1 は 90.87 を超えない / 物理可動域まで (基準の姿勢からの枠はない. 2026-11-03) / J4_SAFE
  - 長押し (2026-11-03): 短い押しは 1 刻み / 押している間は送り続ける / 離す・停止・△・範囲の端で止まる /
    指令が読んだ角度より 3° 先なら送らずに待つ / 追いつかなければ止める
  - 停止: L2・R2 の両方 > 0.0 で止まる・片方では止まらない / 停止中は受け付けない / OPTIONS で戻る / 接続が切れたら停止
  - HOME: 1 秒に満たない長押しでは送らない / 1 秒続けたら 1 回だけ送る
  - 動いている間の押しは受け付けない (ためない)
  - daemon への送り方: 停止が立っていれば送らない / 届かなくても送り直さない
  - ドライランで main() がひととおり動く (偽のコントローラー・ダミーの画面・一時フォルダ)
  - 依頼 69: ドライランは KIOXIA に書かない (フォルダも作らない・KIOXIA がなくても動く) / --execute は今までどおり書く /
    ドライランでは cv2 (2 つ目の libSDL2) を読まない・objc の重複の警告が出ない (別のプロセスで確かめる)
  - codex R1 の指摘: 範囲外の出発点 / 目標と読んだ角度のずれ / 長押しの持ち越し / 停止と送信の順番 /
    再開で古い仕事が生き返らない / 読み取り失敗 / 記録の失敗 / ボタンより先に L2+R2 を見る
KIOXIA にもアームにも触らない.
"""
import json
import os
import subprocess
import sys
import tempfile
import threading
import unittest
from pathlib import Path
from unittest import mock

os.environ.setdefault("SDL_VIDEODRIVER", "dummy")
os.environ.setdefault("SDL_AUDIODRIVER", "dummy")

import numpy as np  # noqa: E402

sys.path.insert(0, str(Path(__file__).resolve().parent))
import gamepad_teleop as gt  # noqa: E402

# DaemonArm のテストで daemon の送り口 (の差し替え) を使うので読み込んでおく.
# ドライランで読まないことは TestNoCv2InDryRun で別のプロセスで確かめる
gt.load_daemon_modules()

HOME = [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]

# テストは 0.5° の刻みで書いてある. 実際の値 (1°. 2026-11-03) は TestStepValue で確かめる
STEP_FINE_REAL = gt.STEP_FINE_DEG
gt.STEP_FINE_DEG = 0.5


class TestStepValue(unittest.TestCase):
    def test_real_steps(self):
        self.assertEqual(STEP_FINE_REAL, 1.0)
        self.assertEqual(gt.STEP_COARSE_DEG, 2.0)


class ListLog:
    def __init__(self):
        self.rows = []

    def write(self, rec):
        json.dumps(rec, ensure_ascii=False)      # JSON にできること
        self.rows.append(rec)


class FakeArm:
    execute = False

    def __init__(self, start=HOME, reach=True):
        self.q = np.asarray(start, dtype=float).copy()
        self.sent = []
        self.grips = []
        self.reach = reach

    def read(self):
        return self.q.copy()

    def send_and_check(self, target, gate, quitting, check=True):
        if not gate.run(lambda: self.sent.append([float(v) for v in target])):
            return {"sent": False, "why": "halted_before_send"}
        if not check:
            self.checks = getattr(self, "checks", []) + [False]
            self.q = np.asarray(target, dtype=float).copy() if self.reach else self.q
            return {"sent": True, "reached": None, "no_check": True}
        if self.reach:
            self.q = np.asarray(target, dtype=float).copy()
        return {"sent": True, "reached": self.reach, "reached_angles": gt._r(self.q), "reach_err": 0.0}

    def gripper(self, state, gate):
        return gate.run(lambda: self.grips.append(state))


def make(start=HOME, reach=True, sync=True):
    arm = FakeArm(start, reach)
    log = ListLog()
    spawned = []
    spawn = (lambda fn: fn()) if sync else spawned.append
    tp = gt.Teleop(arm, start, log, out=lambda *a: None, spawn=spawn)
    return tp, arm, log, spawned


def press(tp, b, now=0.0):
    tp.press(b, now)
    tp.release(b, now)
    tp.poll()


class TestButtonMap(unittest.TestCase):
    def test_numbers(self):
        self.assertEqual((gt.BTN_CROSS, gt.BTN_CIRCLE, gt.BTN_SQUARE, gt.BTN_TRIANGLE), (0, 1, 2, 3))
        self.assertEqual((gt.BTN_SHARE, gt.BTN_HOME, gt.BTN_OPTIONS, gt.BTN_L3, gt.BTN_R3), (4, 5, 6, 7, 8))
        self.assertEqual((gt.BTN_L1, gt.BTN_R1), (9, 10))
        self.assertEqual((gt.BTN_UP, gt.BTN_DOWN, gt.BTN_LEFT, gt.BTN_RIGHT, gt.BTN_TOUCHPAD), (11, 12, 13, 14, 15))
        self.assertEqual((gt.AXIS_L2, gt.AXIS_R2), (4, 5))

    def test_dpad_left_right_always_j0(self):
        for sel in range(5):
            tp, arm, log, _ = make()
            tp.sel = sel
            press(tp, gt.BTN_RIGHT)
            self.assertEqual(log.rows[-1]["joint"], 0)
            self.assertAlmostEqual(arm.sent[-1][0], 0.5)
            press(tp, gt.BTN_LEFT)
            press(tp, gt.BTN_LEFT)
            self.assertAlmostEqual(arm.sent[-1][0], -0.5)
            self.assertEqual(arm.sent[-1][1:], HOME[1:])

    def test_up_minus_down_plus_starts_j1(self):
        tp, arm, log, _ = make()
        self.assertEqual(tp.joint, 1)
        press(tp, gt.BTN_DOWN)
        self.assertAlmostEqual(arm.sent[-1][1], 0.5)
        press(tp, gt.BTN_UP)
        press(tp, gt.BTN_UP)
        self.assertAlmostEqual(arm.sent[-1][1], -0.5)

    def test_triangle_cycles(self):
        tp, arm, log, _ = make()
        seen = [tp.joint]
        for _ in range(5):
            press(tp, gt.BTN_TRIANGLE)
            seen.append(tp.joint)
        self.assertEqual(seen, [1, 2, 3, 4, 5, 1])
        self.assertEqual(arm.sent, [])                      # 切り替えだけでは送らない
        tp.sel = 3                                           # j4
        press(tp, gt.BTN_DOWN)
        self.assertAlmostEqual(arm.sent[-1][4], 0.5)

    def test_r1_coarse_step(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_R1, 0.0)
        press(tp, gt.BTN_RIGHT)
        self.assertAlmostEqual(arm.sent[-1][0], 2.0)
        press(tp, gt.BTN_DOWN)
        self.assertAlmostEqual(arm.sent[-1][1], 2.0)
        tp.release(gt.BTN_R1, 0.0)
        press(tp, gt.BTN_RIGHT)
        self.assertAlmostEqual(arm.sent[-1][0], 2.5)

    def test_gripper(self):
        tp, arm, log, _ = make()
        press(tp, gt.BTN_CROSS)
        self.assertEqual(arm.grips, [1])
        self.assertEqual(tp.grip, "closed")
        press(tp, gt.BTN_CIRCLE)
        self.assertEqual(arm.grips, [1, 0])
        self.assertEqual(tp.grip, "open")

    def test_unassigned_do_nothing(self):
        tp, arm, log, _ = make()
        for b in (gt.BTN_SQUARE, gt.BTN_SHARE, gt.BTN_L1, gt.BTN_L3, gt.BTN_R3, gt.BTN_TOUCHPAD):
            press(tp, b)
        self.assertEqual(arm.sent, [])
        self.assertEqual(arm.grips, [])
        self.assertTrue(all(r["kind"] == "ignored" for r in log.rows))
        self.assertEqual(tp.joint, 1)


class TestGuards(unittest.TestCase):
    def test_j1_never_above_9087(self):
        start = [0.0, 85.0, 0.0, 0.0, 0.0, -30.0]
        tp, arm, log, _ = make(start)
        tp.r1 = True
        for _ in range(6):
            press(tp, gt.BTN_DOWN)
        self.assertTrue(all(s[1] <= 90.87 + 1e-9 for s in arm.sent))
        self.assertAlmostEqual(arm.sent[-1][1], 90.87)
        clipped = [r for r in log.rows if r.get("clip")]
        self.assertEqual(clipped[0]["clip"][0]["limit"], "J1_MAX")
        refused = [r for r in log.rows if r.get("refused")]
        self.assertTrue(refused and refused[-1]["refused"][0]["why"] == "at_limit")
        self.assertIn("J1_MAX", tp.last_limit)

    def test_home_to_pick_height(self):
        # HOME から j1 を PICK の高さ 90.87 まで下ろせる (基準の姿勢からの ±10° の枠はない. 2026-11-03)
        tp, arm, log, _ = make()
        tp.r1 = True
        for _ in range(50):
            press(tp, gt.BTN_DOWN)
        self.assertAlmostEqual(max(s[1] for s in arm.sent), 90.87)
        self.assertFalse(any(r.get("clip") and r["clip"][0]["limit"] == "BASE" for r in log.rows))
        # ほかの関節も ±10° を超えて動く
        for _ in range(12):
            press(tp, gt.BTN_RIGHT)
        self.assertAlmostEqual(arm.sent[-1][0], 24.0)
        tp.sel = 1                                          # j2
        for _ in range(15):
            press(tp, gt.BTN_UP)
        self.assertAlmostEqual(arm.sent[-1][2], -30.0)
        tp.sel = 4                                          # j5
        for _ in range(10):
            press(tp, gt.BTN_DOWN)
        self.assertAlmostEqual(arm.sent[-1][5], -10.0)

    def test_j4_safe(self):
        start = [0.0, 0.0, 0.0, 0.0, 55.0, -30.0]
        tp, arm, log, _ = make(start)
        tp.sel = 3
        tp.r1 = True
        for _ in range(5):
            press(tp, gt.BTN_DOWN)
        self.assertAlmostEqual(max(s[4] for s in arm.sent), 60.0)
        self.assertEqual([r for r in log.rows if r.get("clip")][0]["clip"][0]["limit"], "J4_SAFE")

    def test_window_function(self):
        lo, hi, lo_src, hi_src = gt.joint_window()
        self.assertAlmostEqual(hi[1], 90.87)
        self.assertEqual(hi_src[1], "J1_MAX")
        self.assertAlmostEqual(lo[4], -90.0)
        self.assertAlmostEqual(hi[4], 60.0)
        self.assertEqual((lo_src[4], hi_src[4]), ("J4_SAFE", "J4_SAFE"))
        for k in (0, 2, 3, 5):                                # 残りは物理可動域
            self.assertEqual((lo[k], hi[k]), gt.JOINT_LIMITS[k])
            self.assertEqual((lo_src[k], hi_src[k]), ("PHYS", "PHYS"))
        self.assertEqual(lo[1], gt.JOINT_LIMITS[1][0])

    def test_no_compensation_other_joints(self):
        start = [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]
        p = gt.plan_step(start, 1, 20.0)
        self.assertAlmostEqual(p["target"][1], 20.0)
        self.assertEqual(list(p["target"][[0, 2, 3, 4, 5]]), [0.0, 0.0, 0.0, 0.0, -30.0])

    def test_out_of_window_start_refuses(self):
        # 起動したときに j1 が 91 (守りの外): j1 を下げる (−) 押しも, 他の関節の押しも送らない
        start = [0.0, 91.0, 0.0, 0.0, 0.0, -30.0]
        p = gt.plan_step(start, 0, 0.5)
        self.assertIsNone(p["target"])
        self.assertEqual(p["refused"][0]["joint"], 1)

    def test_home_then_continue(self):
        start = [10.0, 5.0, 0.0, 0.0, 0.0, -30.0]
        tp, arm, log, _ = make(start)
        tp.press(gt.BTN_HOME, 0.0)
        tp.tick(1.01)
        tp.poll()
        self.assertEqual(arm.sent[-1], HOME)
        tp.r1 = True
        for _ in range(10):
            press(tp, gt.BTN_LEFT)
        self.assertAlmostEqual(arm.sent[-1][0], -20.0)       # HOME から続けて動く (枠はない)

    def test_home_bypasses_range(self):
        # 範囲の外 (j1=95) にいても HOME は送れる
        start = [0.0, 95.0, 0.0, 0.0, 0.0, -30.0]
        tp, arm, log, _ = make(start)
        press(tp, gt.BTN_DOWN)
        self.assertEqual(arm.sent, [])
        tp.press(gt.BTN_HOME, 0.0)
        tp.tick(1.0)
        tp.poll()
        self.assertEqual(arm.sent, [HOME])

    def test_start_from_measured_when_not_reached(self):
        tp, arm, log, _ = make(reach=False)
        press(tp, gt.BTN_RIGHT)                    # 届かない (仮の姿勢は HOME のまま)
        self.assertFalse(tp.cmd_reached)
        press(tp, gt.BTN_RIGHT)                    # 次は読んだ角度 (0) から
        self.assertAlmostEqual(arm.sent[-1][0], 0.5)
        self.assertEqual(log.rows[-1]["start_source"], "measured")


class LagArm(FakeArm):
    """送ると「届いた」と返すが, 角度は読むたびに lag_step ずつしか追いつかない (読みが古いのと同じ)."""

    def __init__(self, start=HOME, lag_step=0.0):
        super().__init__(start)
        self.target = np.asarray(start, dtype=float).copy()
        self.lag_step = lag_step
        self.reads = 0

    def read(self):
        self.reads += 1
        d = self.target - self.q
        self.q = self.q + np.clip(d, -self.lag_step, self.lag_step)
        return self.q.copy()

    def send_and_check(self, target, gate, quitting, check=True):
        if not gate.run(lambda: self.sent.append([float(v) for v in target])):
            return {"sent": False, "why": "halted_before_send"}
        self.target = np.asarray(target, dtype=float).copy()
        if not check:
            return {"sent": True, "reached": None, "no_check": True}
        return {"sent": True, "reached": True, "reached_angles": gt._r(self.q), "reach_err": 0.0}


def make_arm(arm, sync=True):
    log = ListLog()
    out = []
    tp = gt.Teleop(arm, arm.q.copy(), log, out=out.append, spawn=lambda fn: fn())
    return tp, log, out


class TestHold(unittest.TestCase):
    """長押し (2026-11-03): 0.4 秒から 0.1 秒おきに「読んだ角度 + 3° 先」を送り, 届くのを待たない."""

    def test_short_press_is_one_step(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_RIGHT, 0.0)
        tp.poll()
        tp.release(gt.BTN_RIGHT, 0.1)
        for t in (0.4, 0.6, 1.0):
            tp.tick(t)
            tp.poll()
        self.assertEqual(len(arm.sent), 1)

    def test_hold_sends_ahead_of_measured_without_waiting(self):
        arm = LagArm(lag_step=1.0)                    # 読むたびに 1° ずつ目標へ寄る
        tp, log, out = make_arm(arm)
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()        # 1 刻み (0.5°. テストの刻み)
        for t in (0.1, 0.3, 0.39):
            tp.tick(t); tp.poll()
        self.assertEqual(len(arm.sent), 1)
        t = 0.4
        for _ in range(6):
            tp.tick(t); tp.poll()
            t += 0.1
        self.assertEqual(len(arm.sent), 7)
        rows = [r for r in log.rows if r["kind"] == "move" and r.get("hold_n", 0) >= 1]
        for r in rows:                                # 動かす関節は 読んだ角度 + 3°, ほかは そのまま
            self.assertAlmostEqual(r["command"][0], r["measured_before"][0] + gt.HOLD_AHEAD_DEG, places=2)
            self.assertEqual(r["command"][1:], HOME[1:])
            self.assertTrue(r["no_check"])
        self.assertEqual([r["hold_n"] for r in rows], [1, 2, 3, 4, 5, 6])
        tp.release(gt.BTN_RIGHT, 1.05)
        for t in (1.2, 1.5):
            tp.tick(t); tp.poll()
        self.assertEqual(len(arm.sent), 7)
        self.assertTrue(any("[長押し] j0" in o for o in out))     # 離したときに 1 行

    def test_hold_keeps_other_joints_at_command(self):
        # j1 が重さで 1° 沈んでいても, 長押しの送信で j1 を読んだ値で送り直さない (ずり下がらない)
        arm = LagArm(start=[0, 30.0, 0, 0, 0, -30], lag_step=1.0)
        tp, log, out = make_arm(arm)
        arm.q[1] = 31.0
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
        t = 0.4
        for _ in range(5):
            tp.tick(t); tp.poll()
            t += 0.1
        self.assertTrue(all(abs(s[1] - 30.0) < 1e-9 for s in arm.sent))

    def test_hold_direction_and_selected_joint(self):
        tp, arm, log, _ = make()
        tp.sel = 1                                    # j2
        tp.press(gt.BTN_UP, 0.0); tp.poll()
        tp.tick(0.4); tp.poll()
        self.assertAlmostEqual(arm.sent[-1][2], -0.5 - gt.HOLD_AHEAD_DEG)

    def test_triangle_and_other_buttons_end_hold(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_DOWN, 0.0); tp.poll()
        tp.press(gt.BTN_TRIANGLE, 0.1)
        tp.tick(0.5); tp.poll()
        self.assertEqual(len(arm.sent), 1)
        tp.press(gt.BTN_RIGHT, 1.0); tp.poll()
        tp.press(gt.BTN_CIRCLE, 1.1); tp.poll()       # 爪で止まる
        tp.tick(1.5); tp.poll()
        self.assertEqual(len(arm.sent), 2)

    def test_stop_ends_hold_and_resume_does_not_revive(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
        tp.tick(0.4); tp.poll()
        tp.set_triggers(0.5, 0.5)
        tp.tick(0.6); tp.poll()
        self.assertEqual(len(arm.sent), 2)
        self.assertIsNone(tp.hold)
        tp.set_triggers(-1.0, -1.0)
        press(tp, gt.BTN_OPTIONS, 0.7)
        tp.tick(0.9); tp.tick(1.2); tp.poll()
        self.assertEqual(len(arm.sent), 2)

    def test_disconnect_ends_hold(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
        tp.controller_lost("controller_disconnected")
        tp.tick(0.5); tp.poll()
        self.assertEqual(len(arm.sent), 1)
        self.assertIsNone(tp.hold)

    def test_limit_ends_hold_without_repeating_lines(self):
        start = [0.0, 89.0, 0.0, 0.0, 0.0, -30.0]
        arm = LagArm(start=start, lag_step=0.2)       # 端の手前で読みが追いつかない
        tp, log, out = make_arm(arm)
        tp.press(gt.BTN_DOWN, 0.0); tp.poll()         # 89 → 89.5
        tp.tick(0.4); tp.poll()                       # 読んだ角度 + 3 → 90.87 に切る
        self.assertAlmostEqual(arm.sent[-1][1], 90.87)
        tp.tick(0.5); tp.poll()                       # 同じ端の目標はもう送らない → 長押しを止める
        n_rows = len(log.rows)
        for t in (0.6, 0.8, 1.0, 2.0):
            tp.tick(t); tp.poll()
        self.assertEqual(len(arm.sent), 2)
        self.assertEqual(len(log.rows), n_rows)
        self.assertIsNone(tp.hold)
        self.assertEqual(log.rows[-1]["refused"][0]["why"], "at_limit")

    def test_hold_target_never_goes_back(self):
        # 読みが古く, 前の目標より後ろの「読んだ角度 + 3°」になるときは, 前の目標を送る (引き戻さない)
        arm = LagArm(lag_step=2.0)
        tp, log, out = make_arm(arm)
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
        tp.tick(0.4); tp.poll()
        arm.lag_step = 0.0                            # 読みが進まない (古い)
        arm.q[0] = 0.0
        tp.tick(0.5); tp.poll()
        js = [s[0] for s in arm.sent]
        self.assertEqual(js, sorted(js))              # 右へ押している間, 目標は戻らない
        self.assertTrue(log.rows[-1].get("held_previous_target"))

    def test_stall_ends_hold(self):
        arm = LagArm(lag_step=0.0)                    # まったく動かない (当たっている)
        tp, log, out = make_arm(arm)
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
        t = 0.4
        for _ in range(15):
            tp.tick(t); tp.poll()
            t += 0.1
        self.assertIsNone(tp.hold)
        self.assertLessEqual(len(arm.sent), 1 + 12)
        self.assertTrue(any("進まないので止めました" in o for o in out))
        self.assertTrue(all(s[0] <= gt.HOLD_AHEAD_DEG + 1e-9 for s in arm.sent))   # 先へ出るのは 3° まで

    def test_short_press_after_hold_starts_from_command(self):
        tp, arm, log, _ = make()                      # FakeArm は目標へすぐ着く
        tp.press(gt.BTN_RIGHT, 0.0); tp.poll()
        tp.tick(0.4); tp.poll()
        tp.release(gt.BTN_RIGHT, 0.45)
        last = arm.sent[-1][0]
        press(tp, gt.BTN_RIGHT, 1.0)
        self.assertAlmostEqual(arm.sent[-1][0], last + 0.5)
        self.assertEqual(log.rows[-1]["start_source"], "command")


class TestHoldReview(unittest.TestCase):
    """2026-11-03 のレビューの指摘 (A: 受け付けられなかった押し / B: 離したあとの 1 刻み / D: 離した合図の取りこぼし)."""

    def test_press_rejected_while_busy_does_not_become_hold(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_CROSS)                       # 爪の仕事で busy
        self.assertTrue(tp.busy)
        tp.press(gt.BTN_DOWN, 0.0)                    # 受付なし
        self.assertIsNone(tp.hold)
        spawned.pop(0)()                              # 爪の仕事が終わる
        tp.poll()
        for t in (0.4, 0.6, 0.8, 1.0):
            tp.tick(t)
            while spawned:
                spawned.pop(0)()
            tp.poll()
        self.assertEqual(arm.sent, [])

    def test_press_rejected_while_stopped_does_not_become_hold(self):
        tp, arm, log, _ = make()
        tp.set_triggers(0.5, 0.5)
        tp.press(gt.BTN_RIGHT, 0.0)
        self.assertIsNone(tp.hold)

    def test_release_cancels_uncommitted_repeat(self):
        tp, arm, log, spawned = make(sync=False)
        out = []
        tp.out = out.append
        tp.press(gt.BTN_RIGHT, 0.0)
        spawned.pop(0)(); tp.poll()                   # 1 回目 (短い押しの分) は送る
        tp.tick(0.4)                                  # 2 回目の仕事ができた (まだ走っていない)
        tp.release(gt.BTN_RIGHT, 0.45)                # 走る前に離した
        spawned.pop(0)(); tp.poll()
        self.assertEqual(len(arm.sent), 1)
        last = [r for r in log.rows if r["kind"] == "move"][-1]
        self.assertEqual(last["why"], "halted_before_send")
        self.assertTrue(last["released_during_job"])
        self.assertFalse(tp.stopped)
        self.assertFalse(any("停止が入った" in o for o in out))
        tp.press(gt.BTN_RIGHT, 1.0)                   # 次の押しは普通に動く
        tp.release(gt.BTN_RIGHT, 1.05)
        spawned.pop(0)(); tp.poll()
        self.assertEqual(len(arm.sent), 2)

    def test_release_does_not_cancel_first_step(self):
        tp, arm, log, spawned = make(sync=False)
        tp.press(gt.BTN_RIGHT, 0.0)
        tp.release(gt.BTN_RIGHT, 0.05)                # 短い押し: 仕事が走る前に離しても 1 刻みは送る
        spawned.pop(0)(); tp.poll()
        self.assertEqual(len(arm.sent), 1)

    def test_loop_releases_hold_when_button_state_is_up(self):
        import pygame
        pygame.init()
        screen = pygame.display.set_mode((200, 100))
        fonts = {k: pygame.font.SysFont("menlo", 12) for k in ("big", "mono", "small")}
        js = FakeJoystick(0)
        js.held = set()
        tp, arm, log, _ = make()
        frames = {
            0: lambda: pygame.event.post(pygame.event.Event(pygame.JOYDEVICEADDED, device_index=0)),
            2: lambda: (js.held.add(gt.BTN_RIGHT),
                        pygame.event.post(pygame.event.Event(pygame.JOYBUTTONDOWN, instance_id=7, button=gt.BTN_RIGHT, joy=0))),
            4: lambda: js.held.discard(gt.BTN_RIGHT),   # 離した合図 (JOYBUTTONUP) は来ない
            60: lambda: pygame.event.post(pygame.event.Event(pygame.QUIT)),
        }
        seen = {}

        def on_frame(n, t):
            frames.get(n, lambda: None)()
            if n == 3:
                seen["hold_at_3"] = t.hold is not None
        with mock.patch.object(gt.pygame.joystick, "Joystick", lambda i: js):
            gt.run_loop(tp, screen, fonts, "TEST", on_frame=on_frame)
        pygame.quit()
        self.assertTrue(seen["hold_at_3"])            # 押している間は長押しのまま
        self.assertIsNone(tp.hold)                    # 状態が離れたら止まる
        self.assertEqual(len(arm.sent), 1)            # 1 秒近くたっても 1 刻みだけ


class TestCodexR1(unittest.TestCase):
    def test_selected_joint_out_of_window_not_clamped(self):
        # 基準 j1=100 (守りの外) から −0.5 を押しても 90.87 へ 1 回で動かさない
        start = [0.0, 100.0, 0.0, 0.0, 0.0, -30.0]
        p = gt.plan_step(start, 1, -0.5)
        self.assertIsNone(p["target"])
        self.assertEqual(p["refused"][0]["why"], "start_out_of_window")
        tp, arm, log, _ = make(start)
        press(tp, gt.BTN_UP)
        self.assertEqual(arm.sent, [])

    def test_physical_limit_ends(self):
        base = [0.0, 0.0, 170.0, 0.0, 0.0, -30.0]       # j2 の物理可動域は ±177
        p = gt.plan_step(base, 2, 20.0)
        self.assertAlmostEqual(p["target"][2], 177.0)
        self.assertEqual(p["clip"][0]["limit"], "PHYS")

    def test_gap_between_command_and_measured(self):
        tp, arm, log, _ = make()
        press(tp, gt.BTN_RIGHT)                         # 目標 j0=0.5 に届いた
        arm.q[0] = 10.0                                 # 手で動かされた
        press(tp, gt.BTN_RIGHT)
        self.assertAlmostEqual(arm.sent[-1][0], 10.5)   # 今読んだ角度から 0.5
        self.assertEqual(log.rows[-1]["start_source"], "measured")
        arm.q[0] = -170.0                               # 物理可動域 (-156) の外 → 送らない
        press(tp, gt.BTN_RIGHT)
        self.assertEqual(len(arm.sent), 2)

    def test_home_hold_across_busy_is_dropped(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_RIGHT)                         # 動いている
        tp.press(gt.BTN_HOME, 0.0)                      # busy 中に押し始め
        spawned.pop()()
        tp.poll()                                       # 0.5 秒で空く
        tp.tick(1.5)
        self.assertEqual(spawned, [])
        self.assertIn(("home", False, "busy"), [(r["kind"], r.get("accepted"), r.get("reason")) for r in log.rows])

    def test_home_hold_dropped_when_other_op_starts(self):
        tp, arm, log, spawned = make(sync=False)
        tp.press(gt.BTN_HOME, 0.0)
        press(tp, gt.BTN_RIGHT)                         # 長押しの途中で j0 を動かした
        tp.tick(0.2)
        spawned.pop()()
        tp.poll()
        tp.tick(1.5)
        self.assertEqual(spawned, [])
        self.assertIn("hold_cancelled", [r.get("reason") for r in log.rows])

    def test_home_hold_dropped_by_stop_and_disconnect(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_HOME, 0.0)
        tp.set_triggers(1, 1)
        tp.set_triggers(-1, -1)
        press(tp, gt.BTN_OPTIONS)
        tp.tick(1.5)
        self.assertEqual(arm.sent, [])
        tp.r1 = True
        tp.press(gt.BTN_HOME, 2.0)
        tp.controller_lost("controller_disconnected")
        self.assertFalse(tp.r1)
        press(tp, gt.BTN_OPTIONS)
        tp.tick(5.0)
        self.assertEqual(arm.sent, [])

    def test_resume_does_not_revive_old_job(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_RIGHT)
        tp.set_triggers(1, 1)
        tp.set_triggers(-1, -1)
        press(tp, gt.BTN_OPTIONS)                       # すぐ再開
        self.assertFalse(tp.stopped)
        spawned.pop()()                                 # 止める前の仕事が走る
        tp.poll()
        self.assertEqual(arm.sent, [])

    def test_home_read_failure_does_not_send(self):
        tp, arm, log, _ = make([5.0, 0, 0, 0, 0, -30])
        reads = iter([None, np.array(HOME)])
        arm.read = lambda: next(reads)
        tp.press(gt.BTN_HOME, 0.0)
        tp.tick(1.0)
        tp.poll()
        self.assertEqual(arm.sent, [])
        self.assertTrue(tp.stopped)

    def test_log_failure_blocks_resume(self):
        tp, arm, log, _ = make()

        def bad(rec):
            raise OSError("disk gone")
        log.write = bad
        press(tp, gt.BTN_TRIANGLE)
        self.assertTrue(tp.stopped)
        press(tp, gt.BTN_OPTIONS)
        self.assertTrue(tp.stopped)
        press(tp, gt.BTN_RIGHT)
        self.assertEqual(arm.sent, [])

    def test_loop_reads_triggers_before_buttons(self):
        import pygame
        pygame.init()
        screen = pygame.display.set_mode((200, 100))
        fonts = {k: pygame.font.SysFont("menlo", 12) for k in ("big", "mono", "small")}
        js = FakeJoystick(0)
        tp, arm, log, _ = make()
        frames = {
            0: lambda: pygame.event.post(pygame.event.Event(pygame.JOYDEVICEADDED, device_index=0)),
            2: lambda: (js.axes.__setitem__(slice(4, 6), [1.0, 1.0]),
                        pygame.event.post(pygame.event.Event(pygame.JOYBUTTONDOWN, instance_id=7, button=gt.BTN_RIGHT, joy=0))),
            4: lambda: pygame.event.post(pygame.event.Event(pygame.QUIT)),
        }
        with mock.patch.object(gt.pygame.joystick, "Joystick", lambda i: js):
            gt.run_loop(tp, screen, fonts, "TEST", on_frame=lambda n, t: frames.get(n, lambda: None)())
        self.assertEqual(arm.sent, [])
        self.assertTrue(tp.stopped)
        # 読み取りに失敗したコマのボタンも処理しない
        js2 = FakeJoystick(0)
        js2.get_axis = lambda a: (_ for _ in ()).throw(pygame.error("gone"))
        tp2, arm2, log2, _ = make()
        frames2 = {
            0: lambda: pygame.event.post(pygame.event.Event(pygame.JOYDEVICEADDED, device_index=0)),
            2: lambda: pygame.event.post(pygame.event.Event(pygame.JOYBUTTONDOWN, instance_id=7, button=gt.BTN_RIGHT, joy=0)),
            4: lambda: pygame.event.post(pygame.event.Event(pygame.QUIT)),
        }
        with mock.patch.object(gt.pygame.joystick, "Joystick", lambda i: js2):
            gt.run_loop(tp2, screen, fonts, "TEST", on_frame=lambda n, t: frames2.get(n, lambda: None)())
        self.assertEqual(arm2.sent, [])
        self.assertTrue(tp2.stopped)
        pygame.quit()


class TestShutdown(unittest.TestCase):
    def test_uncommitted_job_is_not_sent_at_exit(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_RIGHT)
        tp.shutdown()                                # 仕事はまだ走っていない
        spawned.pop()()                              # 終了のあとに走っても送らない
        self.assertEqual(arm.sent, [])
        last = [r for r in log.rows if r["kind"] == "move"][0]
        self.assertIs(last["send_committed_before_exit"], False)
        self.assertTrue(last["interrupted_at_exit"])

    def test_committed_send_is_waited_and_recorded(self):
        tp, arm, log, _ = make(sync=False)
        release = threading.Event()
        entered = threading.Event()
        orig = arm.send_and_check

        def slow(target, gate, quitting):
            def fn():
                entered.set()
                release.wait(2.0)
                arm.sent.append([float(v) for v in target])
            if not gate.run(fn):
                return {"sent": False, "why": "halted_before_send"}
            return {"sent": True, "reached": None, "interrupted": True}
        arm.send_and_check = slow
        tp.spawn = tp._spawn_thread
        press(tp, gt.BTN_RIGHT)
        entered.wait(1.0)
        threading.Timer(0.2, release.set).start()
        done = tp.shutdown()                          # 送ると決めた送信が戻るまで待つ
        self.assertTrue(done)
        self.assertEqual(len(arm.sent), 1)
        move = [r for r in log.rows if r["kind"] == "move"][0]
        self.assertIs(move["send_committed_before_exit"], True)

    def test_worker_not_done_returns_false(self):
        tp, arm, log, _ = make(sync=False)
        entered = threading.Event()

        def stuck(target, gate, quitting):
            gate.run(lambda: (entered.set(), threading.Event().wait(1.0)))
            return {"sent": True}
        arm.send_and_check = stuck
        tp.spawn = tp._spawn_thread
        press(tp, gt.BTN_RIGHT)
        entered.wait(1.0)
        with mock.patch.object(gt, "WORKER_JOIN_SEC", 0.1):
            self.assertFalse(tp.shutdown())           # 戻らない → main はソケットを閉じない


class TestStop(unittest.TestCase):
    def test_both_triggers(self):
        tp, arm, log, _ = make()
        tp.set_triggers(0.5, -1.0)
        self.assertFalse(tp.stopped)
        tp.set_triggers(-1.0, 0.9)
        self.assertFalse(tp.stopped)
        tp.set_triggers(0.0, 0.0)                  # ちょうど 0.0 は超えていない
        self.assertFalse(tp.stopped)
        tp.set_triggers(0.01, 0.01)
        self.assertTrue(tp.stopped)
        self.assertEqual(tp.state, gt.STATE_STOPPED)

    def test_stopped_rejects_and_options_resumes(self):
        tp, arm, log, _ = make()
        tp.set_triggers(1.0, 1.0)
        for b in (gt.BTN_RIGHT, gt.BTN_DOWN, gt.BTN_CROSS, gt.BTN_CIRCLE):
            press(tp, b)
        tp.press(gt.BTN_HOME, 0.0)
        tp.tick(2.0)
        tp.release(gt.BTN_HOME, 2.0)
        self.assertEqual(arm.sent, [])
        self.assertEqual(arm.grips, [])
        self.assertTrue(all(r.get("reason") == "stopped" for r in log.rows
                            if r["kind"] in ("move", "grip_close", "grip_open", "home")))
        press(tp, gt.BTN_OPTIONS)                  # まだ L2+R2 を押している → 戻らない
        self.assertTrue(tp.stopped)
        tp.set_triggers(-1.0, -1.0)
        press(tp, gt.BTN_OPTIONS)
        self.assertFalse(tp.stopped)
        press(tp, gt.BTN_RIGHT)
        self.assertEqual(len(arm.sent), 1)

    def test_disconnect_and_read_error(self):
        tp, arm, log, _ = make()
        tp.controller_lost("controller_disconnected")
        self.assertTrue(tp.stopped)
        self.assertEqual(log.rows[-1]["kind"], "controller_lost")
        tp2, arm2, log2, _ = make()
        tp2.controller_read_failed("x")
        tp2.controller_read_failed("x")
        self.assertTrue(tp2.stopped)
        self.assertEqual(sum(r["kind"] == "read_error" for r in log2.rows), 1)
        press(tp2, gt.BTN_OPTIONS)                 # 読めないうちは戻らない
        self.assertTrue(tp2.stopped)
        tp2.controller_read_ok()
        press(tp2, gt.BTN_OPTIONS)
        self.assertFalse(tp2.stopped)

    def test_stop_while_moving_blocks_send(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_RIGHT)                    # 仕事を作ったが, まだ走らせていない
        self.assertTrue(tp.busy)
        tp.set_triggers(1.0, 1.0)                  # 動いている間でも停止は受け付ける
        self.assertTrue(tp.stopped)
        spawned.pop()()                            # 仕事が走る: 送る直前に停止を見て送らない
        tp.poll()
        self.assertEqual(arm.sent, [])
        self.assertFalse(tp.busy)
        move = [r for r in log.rows if r["kind"] == "move"][0]
        self.assertEqual(move["why"], "halted_before_send")


class TestHomeHold(unittest.TestCase):
    def test_short_press_does_not_send(self):
        tp, arm, log, _ = make()
        tp.press(gt.BTN_HOME, 10.0)
        tp.tick(10.5)
        tp.tick(10.99)
        tp.release(gt.BTN_HOME, 10.99)
        tp.poll()
        self.assertEqual(arm.sent, [])
        self.assertEqual(log.rows[-1]["kind"], "home_short")

    def test_hold_sends_once(self):
        tp, arm, log, _ = make([5.0, 0, 0, 0, 0, -30])
        tp.press(gt.BTN_HOME, 0.0)
        for t in (0.5, 1.0, 1.5, 3.0, 5.0):
            tp.tick(t)
            tp.poll()
        tp.release(gt.BTN_HOME, 5.0)
        self.assertEqual(arm.sent, [HOME])
        self.assertEqual(sum(r["kind"] == "home" for r in log.rows), 1)
        self.assertFalse(any(r["kind"] == "home_short" for r in log.rows))
        tp.press(gt.BTN_HOME, 6.0)                 # 押し直せば, また 1 回
        tp.tick(7.0)
        tp.poll()
        self.assertEqual(len(arm.sent), 2)


class TestBusy(unittest.TestCase):
    def test_presses_while_moving_are_dropped(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_RIGHT)
        for b in (gt.BTN_RIGHT, gt.BTN_DOWN, gt.BTN_CROSS):
            press(tp, b)
        tp.press(gt.BTN_HOME, 0.0)
        tp.tick(1.5)
        self.assertEqual(len(spawned), 1)           # 仕事は 1 つだけ
        spawned.pop()()
        tp.poll()
        tp.tick(3.0)                                # 長押しのまま空いても, ためた HOME は出ない
        self.assertEqual(spawned, [])
        self.assertEqual(arm.sent, [[0.5, 0, 0, 0, 0, -30]])
        busy = [r for r in log.rows if r.get("reason") == "busy"]
        self.assertEqual(len(busy), 4)


class TestDaemonArm(unittest.TestCase):
    def _arm(self, reads):
        it = iter(reads)
        last = [None]

        def read():
            try:
                last[0] = next(it)
            except StopIteration:
                pass
            return None if last[0] is None else np.asarray(last[0], dtype=float)
        return read

    def test_halt_blocks_send(self):
        sends = []
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME])), \
                mock.patch.object(gt, "daemon_send_angles", lambda *a, **k: sends.append(a)):
            gate, quit_ = gt.SendGate(), threading.Event()
            gate.cancel_now()
            r = gt.DaemonArm().send_and_check(np.array(HOME), gate, quit_)
        self.assertEqual(sends, [])
        self.assertFalse(r["sent"])

    def test_single_send_no_retry(self):
        sends = []
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME])), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: sends.append((a, k))), \
                mock.patch.object(gt, "REACH_TIMEOUT_SEC", 0.3), \
                mock.patch.object(gt.wr, "_compute_arrival_timeout", lambda d: 0.1), \
                mock.patch.object(gt, "POLL_SLEEP", 0.05):
            r = gt.DaemonArm().send_and_check(np.array([5.0, 0, 0, 0, 0, -30]),
                                              gt.SendGate(), threading.Event())
        self.assertEqual(len(sends), 1)
        self.assertEqual(sends[0][1]["speed"], 20)
        self.assertFalse(r["reached"])
        self.assertTrue(r["sent"])

    def test_ignored_send_is_resent(self):
        # 送っても動かない (無視された) → 0.5 秒後に同じ目標を送り直す → 動いて届く (2026-11-03)
        sends = []
        state = {"q": np.array(HOME, dtype=float)}

        def send(a, **k):
            sends.append(list(a))
            if len(sends) >= 2:                          # 2 回目で通る
                state["q"] = np.array(a, dtype=float)

        target = [5.0, 0, 0, 0, 0, -30]
        with mock.patch.object(gt.rpc, "read_angles", lambda: state["q"].copy()), \
                mock.patch.object(gt, "daemon_send_angles", send), \
                mock.patch.object(gt, "IGNORED_CHECK_SEC", 0.05), \
                mock.patch.object(gt, "POLL_SLEEP", 0.02):
            r = gt.DaemonArm().send_and_check(np.array(target), gt.SendGate(), threading.Event())
        self.assertEqual(len(sends), 2)
        self.assertEqual(sends[1], target)
        self.assertTrue(r["reached"])
        self.assertEqual(len(r["resends"]), 1)

    def test_resend_limited_and_not_when_moving(self):
        sends = []
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME])), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: sends.append(a)), \
                mock.patch.object(gt, "IGNORED_CHECK_SEC", 0.02), \
                mock.patch.object(gt, "REACH_TIMEOUT_SEC", 0.5), \
                mock.patch.object(gt.wr, "_compute_arrival_timeout", lambda d: 0.1), \
                mock.patch.object(gt, "POLL_SLEEP", 0.01):
            r = gt.DaemonArm().send_and_check(np.array([5.0, 0, 0, 0, 0, -30]), gt.SendGate(), threading.Event())
        self.assertEqual(len(sends), 1 + gt.IGNORED_MAX_RESENDS)
        self.assertFalse(r["reached"])
        # 動いている (届いていないが 0.3° 以上動いた) なら送り直さない
        sends.clear()
        moving = [HOME] + [[0.5 * (i + 1), 0, 0, 0, 0, -30] for i in range(6)]
        with mock.patch.object(gt.rpc, "read_angles", self._arm(moving)), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: sends.append(a)), \
                mock.patch.object(gt, "IGNORED_CHECK_SEC", 0.0), \
                mock.patch.object(gt, "REACH_TIMEOUT_SEC", 0.2), \
                mock.patch.object(gt.wr, "_compute_arrival_timeout", lambda d: 0.1), \
                mock.patch.object(gt, "POLL_SLEEP", 0.01):
            gt.DaemonArm().send_and_check(np.array([9.0, 0, 0, 0, 0, -30]), gt.SendGate(), threading.Event())
        self.assertEqual(len(sends), 1)

    def test_no_resend_after_stop(self):
        sends = []
        gate = gt.SendGate()
        reads = {"n": 0}

        def read():
            reads["n"] += 1
            if reads["n"] == 2:
                gate.cancel_now()                         # 確かめる途中で L2+R2
            return np.array(HOME, dtype=float)
        with mock.patch.object(gt.rpc, "read_angles", read), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: sends.append(a)), \
                mock.patch.object(gt, "IGNORED_CHECK_SEC", 0.0), \
                mock.patch.object(gt, "POLL_SLEEP", 0.01):
            r = gt.DaemonArm().send_and_check(np.array([5.0, 0, 0, 0, 0, -30]), gate, threading.Event())
        self.assertEqual(len(sends), 1)
        self.assertTrue(r["halted_during_check"])

    def test_reached(self):
        target = [1.0, 0, 0, 0, 0, -30]
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME, [0.5, 0, 0, 0, 0, -30]])), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: None):
            r = gt.DaemonArm().send_and_check(np.array(target), gt.SendGate(), threading.Event())
        self.assertTrue(r["reached"])
        self.assertEqual(r["reach_err"], 0.5)

    def test_reach_uses_unrounded_error(self):
        target = [3.004, 0, 0, 0, 0, -30]
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME])), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: None), \
                mock.patch.object(gt, "REACH_TIMEOUT_SEC", 0.2), \
                mock.patch.object(gt.wr, "_compute_arrival_timeout", lambda d: 0.1), \
                mock.patch.object(gt, "POLL_SLEEP", 0.05):
            r = gt.DaemonArm().send_and_check(np.array(target), gt.SendGate(), threading.Event())
        self.assertFalse(r["reached"])

    def test_read_none_during_check_is_error(self):
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME, None])), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: None):
            r = gt.DaemonArm().send_and_check(np.array([5.0, 0, 0, 0, 0, -30]), gt.SendGate(), threading.Event())
        self.assertTrue(r["sent"])
        self.assertEqual(r["error"], "read_failed_during_check")
        self.assertIsNone(r["reached"])

    def test_stop_does_not_wait_and_reports_commit(self):
        # 送ると決めて送信 (通信) の最中に停止が来ても, 停止は待たない. 決めていたことを返す.
        # 停止のあとに「送ると決める」ことはない
        gate = gt.SendGate()
        entered, release = threading.Event(), threading.Event()

        def slow_send():
            entered.set()
            release.wait(2.0)
        t = threading.Thread(target=lambda: gate.run(slow_send))
        t.start()
        entered.wait(1.0)
        got = []
        stopper = threading.Thread(target=lambda: got.append(gate.cancel_now()))
        stopper.start()
        stopper.join(0.5)
        self.assertFalse(stopper.is_alive())         # 待たされない
        self.assertEqual(got, [True])                # 停止より前に送ると決めていた
        release.set()
        t.join(2.0)
        self.assertFalse(gate.run(lambda: self.fail("取り消しのあとに送った")))
        g2 = gt.SendGate()
        self.assertFalse(g2.cancel_now())            # まだ決めていない仕事は送らない
        self.assertFalse(g2.run(lambda: self.fail("取り消しのあとに送った")))

    def test_send_uses_rpc_timeout(self):
        seen = []
        with mock.patch.object(gt.rpc, "read_angles", self._arm([HOME])), \
                mock.patch.object(gt, "daemon_send_angles", lambda a, **k: seen.append(k)):
            gt.DaemonArm().send_and_check(np.array(HOME), gt.SendGate(), threading.Event())
        self.assertEqual(seen[0]["timeout_override"], gt.SEND_RPC_TIMEOUT_SEC)

    def test_stop_log_says_whether_send_was_committed(self):
        tp, arm, log, spawned = make(sync=False)
        press(tp, gt.BTN_RIGHT)
        tp.set_triggers(1, 1)                       # まだ送ると決めていない
        stop = [r for r in log.rows if r["kind"] == "stop"][0]
        self.assertIs(stop["send_committed_before_stop"], False)

    def test_gripper_gate(self):
        calls = []
        with mock.patch.object(gt, "daemon_set_gripper_value", lambda v: calls.append(("close", v))), \
                mock.patch.object(gt, "daemon_set_gripper", lambda s, wait: calls.append(("open", s, wait))), \
                mock.patch.object(gt.rpc, "GRIPPER_SLEEP", 0.0):
            arm = gt.DaemonArm()
            self.assertTrue(arm.gripper(1, gt.SendGate()))
            self.assertTrue(arm.gripper(0, gt.SendGate()))
            g = gt.SendGate()
            g.cancel_now()
            self.assertFalse(arm.gripper(1, g))
        self.assertEqual(calls, [("close", 20), ("open", 0, gt.rpc.GRIP_OPEN_DAEMON_WAIT)])


class FakeJoystick:
    def __init__(self, idx):
        self.axes = [0.0, 0.0, 0.0, 0.0, -1.0, -1.0]

    def get_instance_id(self):
        return 7

    def get_name(self):
        return "PS4 Controller"

    def get_guid(self):
        return "fake-guid"

    def get_numaxes(self):
        return 6

    def get_numbuttons(self):
        return 16

    def get_numhats(self):
        return 0

    def get_axis(self, a):
        return self.axes[a]

    def get_button(self, b):
        return 1 if b in getattr(self, "held", set()) else 0


class TestDryRunMain(unittest.TestCase):
    def test_flow(self):
        import pygame
        js_holder = {}

        def make_js(idx):
            js_holder["js"] = FakeJoystick(idx)
            return js_holder["js"]

        def btn(b, down=True):
            t = pygame.JOYBUTTONDOWN if down else pygame.JOYBUTTONUP
            pygame.event.post(pygame.event.Event(t, instance_id=7, button=b, joy=0))

        # フレームごとの台本 (ドライランは 1 回 0.3 秒動いている扱い = 60fps で 18 コマ程度)
        script = {
            1: lambda: pygame.event.post(pygame.event.Event(pygame.JOYDEVICEADDED, device_index=0)),
            3: lambda: (btn(gt.BTN_RIGHT), btn(gt.BTN_RIGHT, False)),
            5: lambda: (btn(gt.BTN_RIGHT), btn(gt.BTN_RIGHT, False)),       # 動いている間 → 受け付けない
            40: lambda: btn(gt.BTN_TRIANGLE),
            42: lambda: (btn(gt.BTN_DOWN), btn(gt.BTN_DOWN, False)),
            80: lambda: btn(gt.BTN_CROSS),
            82: lambda: js_holder["js"].axes.__setitem__(slice(4, 6), [0.5, 0.5]),   # 停止
            85: lambda: (btn(gt.BTN_LEFT), btn(gt.BTN_LEFT, False)),
            86: lambda: js_holder["js"].axes.__setitem__(slice(4, 6), [-1.0, -1.0]),
            88: lambda: btn(gt.BTN_OPTIONS),
            150: lambda: btn(gt.BTN_HOME),
            230: lambda: btn(gt.BTN_HOME, False),
            300: lambda: pygame.event.post(pygame.event.Event(pygame.QUIT)),
        }

        def on_frame(n, tp):
            if n in script:
                script[n]()

        logs = []

        class SpyNullLog(gt.NullLog):         # 書かないことは変えずに, 渡された行だけ見る
            def __init__(self):
                self.rows = []
                logs.append(self)

            def write(self, rec):
                json.dumps(rec, ensure_ascii=False)
                self.rows.append(rec)

        out = []
        with tempfile.TemporaryDirectory() as td, \
                mock.patch.object(gt, "LOG_ROOT", Path(td)), \
                mock.patch.object(gt, "ensure_ssd_mounted", side_effect=AssertionError("KIOXIA を確かめた")), \
                mock.patch.object(gt, "load_daemon_modules", side_effect=AssertionError("daemon の送り口を読んだ")), \
                mock.patch.object(gt, "JsonlLog", side_effect=AssertionError("log.jsonl を開いた")), \
                mock.patch.object(gt, "write_json_atomic", side_effect=AssertionError("meta.json を書いた")), \
                mock.patch.object(gt.shutil, "copy2", side_effect=AssertionError("スクリプトを写した")), \
                mock.patch.object(gt, "NullLog", SpyNullLog), \
                mock.patch.object(gt.pygame.joystick, "Joystick", make_js), \
                mock.patch.object(gt, "GRIPPER_SLEEP", 0.2), \
                mock.patch.object(gt, "get_daemon_socket", side_effect=AssertionError("daemon に触った")), \
                mock.patch.object(gt, "daemon_send_angles", side_effect=AssertionError("daemon に送った")), \
                mock.patch("builtins.print", lambda *a, **k: out.append(" ".join(str(x) for x in a))):
            gt.main([], on_frame=on_frame)
            self.assertEqual(list(Path(td).iterdir()), [])        # フォルダも作らない
        self.assertEqual(len(logs), 1)
        rows = logs[0].rows
        self.assertIn("[記録] ドライランなので記録しません", out)
        self.assertIn("[終了] アームは動かしていません。記録なし（ドライラン）", out)
        kinds = [(r["kind"], r.get("accepted"), r.get("reason")) for r in rows]
        # 受け付けた 1 回目の行は届いてから書くので, 動いている間に断った行 (busy) が先に来る
        self.assertEqual(kinds[0], ("move", False, "busy"))
        self.assertEqual(kinds[1][:2], ("move", True))
        self.assertIn(("move", False, "busy"), kinds)
        self.assertIn(("select_joint", True, None), kinds)
        self.assertIn(("stop", True, "L2+R2"), kinds)
        self.assertIn(("move", False, "stopped"), kinds)
        self.assertIn(("resume", True, None), kinds)
        home = [r for r in rows if r["kind"] == "home"]
        self.assertEqual(len(home), 1)
        self.assertEqual(home[0]["command"], HOME)
        moves = [r for r in rows if r["kind"] == "move" and r.get("sent") is True]
        self.assertEqual(moves[0]["command"], [0.5, 0, 0, 0, 0, -30])
        self.assertEqual(moves[1]["command"], [0.5, 0.0, 0.5, 0, 0, -30])    # △ で j2 にしてから下
        for r in moves:
            for key in ("t", "button", "kind", "selected_joint", "step_deg", "measured_before",
                        "command", "reached_angles", "reached", "grip_state", "clip", "stopped"):
                self.assertIn(key, r)
        self.assertTrue(all(r["execute"] is False for r in rows))


class TestExecuteMainRecords(unittest.TestCase):
    """--execute は今までどおり KIOXIA (ここでは一時フォルダ) に log.jsonl・meta.json・写しを書く."""

    def test_execute_writes(self):
        import pygame
        script = {
            1: lambda: pygame.event.post(pygame.event.Event(pygame.JOYDEVICEADDED, device_index=0)),
            3: lambda: (pygame.event.post(pygame.event.Event(pygame.JOYBUTTONDOWN, instance_id=7,
                                                             button=gt.BTN_RIGHT, joy=0)),
                        pygame.event.post(pygame.event.Event(pygame.JOYBUTTONUP, instance_id=7,
                                                             button=gt.BTN_RIGHT, joy=0))),
            60: lambda: pygame.event.post(pygame.event.Event(pygame.QUIT)),
        }
        sends = []
        q = {"now": list(HOME)}

        def send(a, **k):
            sends.append(list(a))
            q["now"] = list(a)

        with tempfile.TemporaryDirectory() as td, \
                mock.patch.object(gt, "LOG_ROOT", Path(td)), \
                mock.patch.object(gt, "ensure_ssd_mounted", lambda: None), \
                mock.patch.object(gt.pygame.joystick, "Joystick", FakeJoystick), \
                mock.patch.object(gt, "get_daemon_socket", lambda: None), \
                mock.patch.object(gt, "close_daemon_socket", lambda: None), \
                mock.patch.object(gt.rpc, "install_daemon_lock", lambda: None), \
                mock.patch.object(gt.rpc, "read_angles", lambda: np.array(q["now"], dtype=float)), \
                mock.patch.object(gt, "daemon_send_angles", send), \
                mock.patch("builtins.print", lambda *a, **k: None):
            gt.main(["--execute"], on_frame=lambda n, tp: script[n]() if n in script else None)
            runs = list(Path(td).iterdir())
            self.assertEqual(len(runs), 1)
            run = runs[0]
            self.assertFalse(run.name.endswith("_dry"))
            rows = [json.loads(x) for x in (run / "log.jsonl").read_text().splitlines()]
            meta = json.loads((run / "meta.json").read_text())
            self.assertTrue((run / "gamepad_teleop.py").exists())
        self.assertEqual(sends, [[0.5, 0.0, 0.0, 0.0, 0.0, -30.0]])
        self.assertEqual([(r["kind"], r.get("sent")) for r in rows], [("move", True)])
        self.assertTrue(rows[0]["execute"])
        self.assertEqual(meta["controllers"][0]["name"], "PS4 Controller")
        self.assertEqual(meta["controllers"][0]["guid"], "fake-guid")
        self.assertTrue(meta["execute"])
        self.assertEqual(meta["end_reason"], "window_closed")
        self.assertEqual(meta["n_sent"], 1)
        self.assertEqual(meta["guards"]["J1_MAX_DEG"], 90.87)
        self.assertEqual(meta["motion"]["speed"], 20)
        for key in ("python", "pygame", "sdl", "start_pose", "git"):
            self.assertIn(key, meta)


class TestNoCv2InDryRun(unittest.TestCase):
    """依頼 69: ドライランは cv2 (cv2/.dylibs/libSDL2) を読まず, objc の重複の警告が出ない.
    このプロセスはもう load_daemon_modules() を呼んでいるので, 別のプロセスで main([]) を回す."""

    CHILD = r'''
import os, sys, tempfile
os.environ["SDL_VIDEODRIVER"] = "dummy"; os.environ["SDL_AUDIODRIVER"] = "dummy"
sys.path.insert(0, sys.argv[1])
from pathlib import Path
import gamepad_teleop as gt
import pygame
td = tempfile.mkdtemp()
gt.LOG_ROOT = Path(td)
gt.SSD_MOUNT = "/nonexistent_kioxia_for_test"     # KIOXIA がなくても動く
gt.main([], on_frame=lambda n, tp: pygame.event.post(pygame.event.Event(pygame.QUIT)) if n == 5 else None)
assert os.listdir(td) == [], os.listdir(td)
bad = [m for m in ("cv2", "run_policy_client", "visual_servo_pick", "j0_sweep_scan") if m in sys.modules]
assert not bad, bad
assert gt.rpc is None and gt.daemon_send_angles is None
print("CHILD_OK")
'''

    def test_dry_run_in_fresh_process(self):
        r = subprocess.run([sys.executable, "-c", self.CHILD, str(Path(gt.__file__).parent)],
                           capture_output=True, text=True, timeout=60)
        self.assertEqual(r.returncode, 0, r.stdout + r.stderr)
        self.assertIn("CHILD_OK", r.stdout)
        self.assertNotIn("is implemented in both", r.stderr)


class TestConstantsMatchModules(unittest.TestCase):
    """読み込まずに読んだ値が, 読み込んだモジュールの値と同じ."""

    def test_same(self):
        self.assertEqual(gt.HOME, [float(v) for v in gt.rpc.HOME])
        self.assertEqual(gt.J4_SAFE, tuple(float(v) for v in gt.rpc.J4_SAFE))
        self.assertEqual(gt.GRIPPER_SLEEP, gt.rpc.GRIPPER_SLEEP)
        self.assertEqual(gt.JOINT_LIMITS, [tuple(float(v) for v in x) for x in gt.wr.JOINT_LIMITS])
        self.assertEqual((gt.SPEED, gt.POLL_SLEEP, gt.REACH_TIMEOUT_SEC), (20, 0.3, 8.0))

    def test_read_constants_rejects_double_assignment(self):
        with tempfile.TemporaryDirectory() as td:
            f = Path(td) / "m.py"
            f.write_text("A = 1\nA = 2\n")
            with self.assertRaises(RuntimeError):
                gt.read_constants(f, ("A",))
            with self.assertRaises(RuntimeError):
                gt.read_constants(f, ("B",))
            for src in ("A = 1\nA += 1\n", "A = 1\nA: int = 2\n", "A = 1\nB = A = 2\n",
                        "A = 1\nfor A in []:\n    pass\n", "A = 1\ndef f():\n    global A\n    A = 2\n"):
                f.write_text(src)
                with self.assertRaises(RuntimeError, msg=src):
                    gt.read_constants(f, ("A",))
            f.write_text("A = 1\ndef f():\n    return A\n")
            self.assertEqual(gt.read_constants(f, ("A",)), {"A": 1})


class TestExecuteLoadGuards(unittest.TestCase):
    def test_no_load_when_ssd_missing(self):
        with mock.patch.object(gt, "ensure_ssd_mounted", side_effect=SystemExit("no ssd")), \
                mock.patch.object(gt, "load_daemon_modules") as load:
            with self.assertRaises(SystemExit) as cm:
                gt.main(["--execute"])
        self.assertEqual(str(cm.exception), "no ssd")
        load.assert_not_called()

    def test_load_failure_aborts_before_record(self):
        with tempfile.TemporaryDirectory() as td, \
                mock.patch.object(gt, "LOG_ROOT", Path(td)), \
                mock.patch.object(gt, "ensure_ssd_mounted", lambda: None), \
                mock.patch.object(gt, "load_daemon_modules", side_effect=ImportError("x")), \
                mock.patch.object(gt, "get_daemon_socket", side_effect=AssertionError("daemon に触った")):
            with self.assertRaises(SystemExit) as cm:
                gt.main(["--execute"])
            self.assertIn("[ABORT]", str(cm.exception))
            self.assertEqual(list(Path(td).iterdir()), [])

    def test_mismatch_aborts_in_fresh_process(self):
        """ファイルから読んだ値と読み込んだ値が違えば, daemon の送り口を入れずに止める (別のプロセス)."""
        child = r'''
import os, sys, tempfile
os.environ["SDL_VIDEODRIVER"] = "dummy"
sys.path.insert(0, sys.argv[1])
from pathlib import Path
import gamepad_teleop as gt
gt.HOME = [1.0, 0.0, 0.0, 0.0, 0.0, -30.0]
td = tempfile.mkdtemp()
gt.LOG_ROOT = Path(td)
gt.ensure_ssd_mounted = lambda: None
try:
    gt.main(["--execute"])
except SystemExit as e:
    assert "HOME" in str(e), e
else:
    raise AssertionError("止まらなかった")
assert os.listdir(td) == [], os.listdir(td)
assert gt.rpc is None and gt.daemon_send_angles is None and gt.get_daemon_socket is None
print("CHILD_OK")
'''
        r = subprocess.run([sys.executable, "-c", child, str(Path(gt.__file__).parent)],
                           capture_output=True, text=True, timeout=60)
        self.assertEqual(r.returncode, 0, r.stdout + r.stderr)
        self.assertIn("CHILD_OK", r.stdout)


if __name__ == "__main__":
    unittest.main()
```

#### test_gamepad_teleop.py の出力（73件）

```text
test_presses_while_moving_are_dropped (test_gamepad_teleop.TestBusy) ... ok
test_dpad_left_right_always_j0 (test_gamepad_teleop.TestButtonMap) ... ok
test_gripper (test_gamepad_teleop.TestButtonMap) ... ok
test_numbers (test_gamepad_teleop.TestButtonMap) ... ok
test_r1_coarse_step (test_gamepad_teleop.TestButtonMap) ... ok
test_triangle_cycles (test_gamepad_teleop.TestButtonMap) ... ok
test_unassigned_do_nothing (test_gamepad_teleop.TestButtonMap) ... ok
test_up_minus_down_plus_starts_j1 (test_gamepad_teleop.TestButtonMap) ... ok
test_gap_between_command_and_measured (test_gamepad_teleop.TestCodexR1) ... ok
test_home_hold_across_busy_is_dropped (test_gamepad_teleop.TestCodexR1) ... ok
test_home_hold_dropped_by_stop_and_disconnect (test_gamepad_teleop.TestCodexR1) ... ok
test_home_hold_dropped_when_other_op_starts (test_gamepad_teleop.TestCodexR1) ... ok
test_home_read_failure_does_not_send (test_gamepad_teleop.TestCodexR1) ... ok
test_log_failure_blocks_resume (test_gamepad_teleop.TestCodexR1) ... ok
test_loop_reads_triggers_before_buttons (test_gamepad_teleop.TestCodexR1) ... ok
test_physical_limit_ends (test_gamepad_teleop.TestCodexR1) ... ok
test_resume_does_not_revive_old_job (test_gamepad_teleop.TestCodexR1) ... ok
test_selected_joint_out_of_window_not_clamped (test_gamepad_teleop.TestCodexR1) ... ok
test_read_constants_rejects_double_assignment (test_gamepad_teleop.TestConstantsMatchModules) ... ok
test_same (test_gamepad_teleop.TestConstantsMatchModules) ... ok
test_gripper_gate (test_gamepad_teleop.TestDaemonArm) ... ok
test_halt_blocks_send (test_gamepad_teleop.TestDaemonArm) ... ok
test_ignored_send_is_resent (test_gamepad_teleop.TestDaemonArm) ... ok
test_no_resend_after_stop (test_gamepad_teleop.TestDaemonArm) ... ok
test_reach_uses_unrounded_error (test_gamepad_teleop.TestDaemonArm) ... ok
test_reached (test_gamepad_teleop.TestDaemonArm) ... ok
test_read_none_during_check_is_error (test_gamepad_teleop.TestDaemonArm) ... ok
test_resend_limited_and_not_when_moving (test_gamepad_teleop.TestDaemonArm) ... ok
test_send_uses_rpc_timeout (test_gamepad_teleop.TestDaemonArm) ... ok
test_single_send_no_retry (test_gamepad_teleop.TestDaemonArm) ... ok
test_stop_does_not_wait_and_reports_commit (test_gamepad_teleop.TestDaemonArm) ... ok
test_stop_log_says_whether_send_was_committed (test_gamepad_teleop.TestDaemonArm) ... ok
test_flow (test_gamepad_teleop.TestDryRunMain) ... ok
test_load_failure_aborts_before_record (test_gamepad_teleop.TestExecuteLoadGuards) ... ok
test_mismatch_aborts_in_fresh_process (test_gamepad_teleop.TestExecuteLoadGuards)
ファイルから読んだ値と読み込んだ値が違えば, daemon の送り口を入れずに止める (別のプロセス). ... ok
test_no_load_when_ssd_missing (test_gamepad_teleop.TestExecuteLoadGuards) ... ok
test_execute_writes (test_gamepad_teleop.TestExecuteMainRecords) ... ok
test_home_bypasses_range (test_gamepad_teleop.TestGuards) ... ok
test_home_then_continue (test_gamepad_teleop.TestGuards) ... ok
test_home_to_pick_height (test_gamepad_teleop.TestGuards) ... ok
test_j1_never_above_9087 (test_gamepad_teleop.TestGuards) ... ok
test_j4_safe (test_gamepad_teleop.TestGuards) ... ok
test_no_compensation_other_joints (test_gamepad_teleop.TestGuards) ... ok
test_out_of_window_start_refuses (test_gamepad_teleop.TestGuards) ... ok
test_start_from_measured_when_not_reached (test_gamepad_teleop.TestGuards) ... ok
test_window_function (test_gamepad_teleop.TestGuards) ... ok
test_disconnect_ends_hold (test_gamepad_teleop.TestHold) ... ok
test_hold_direction_and_selected_joint (test_gamepad_teleop.TestHold) ... ok
test_hold_keeps_other_joints_at_command (test_gamepad_teleop.TestHold) ... ok
test_hold_sends_ahead_of_measured_without_waiting (test_gamepad_teleop.TestHold) ... ok
test_hold_target_never_goes_back (test_gamepad_teleop.TestHold) ... ok
test_limit_ends_hold_without_repeating_lines (test_gamepad_teleop.TestHold) ... ok
test_short_press_after_hold_starts_from_command (test_gamepad_teleop.TestHold) ... ok
test_short_press_is_one_step (test_gamepad_teleop.TestHold) ... ok
test_stall_ends_hold (test_gamepad_teleop.TestHold) ... ok
test_stop_ends_hold_and_resume_does_not_revive (test_gamepad_teleop.TestHold) ... ok
test_triangle_and_other_buttons_end_hold (test_gamepad_teleop.TestHold) ... ok
test_loop_releases_hold_when_button_state_is_up (test_gamepad_teleop.TestHoldReview) ... ok
test_press_rejected_while_busy_does_not_become_hold (test_gamepad_teleop.TestHoldReview) ... ok
test_press_rejected_while_stopped_does_not_become_hold (test_gamepad_teleop.TestHoldReview) ... ok
test_release_cancels_uncommitted_repeat (test_gamepad_teleop.TestHoldReview) ... ok
test_release_does_not_cancel_first_step (test_gamepad_teleop.TestHoldReview) ... ok
test_hold_sends_once (test_gamepad_teleop.TestHomeHold) ... ok
test_short_press_does_not_send (test_gamepad_teleop.TestHomeHold) ... ok
test_dry_run_in_fresh_process (test_gamepad_teleop.TestNoCv2InDryRun) ... ok
test_committed_send_is_waited_and_recorded (test_gamepad_teleop.TestShutdown) ... ok
test_uncommitted_job_is_not_sent_at_exit (test_gamepad_teleop.TestShutdown) ... ok
test_worker_not_done_returns_false (test_gamepad_teleop.TestShutdown) ... ok
test_real_steps (test_gamepad_teleop.TestStepValue) ... ok
test_both_triggers (test_gamepad_teleop.TestStop) ... ok
test_disconnect_and_read_error (test_gamepad_teleop.TestStop) ... ok
test_stop_while_moving_blocks_send (test_gamepad_teleop.TestStop) ... ok
test_stopped_rejects_and_options_resumes (test_gamepad_teleop.TestStop) ... ok

----------------------------------------------------------------------
Ran 73 tests in 12.779s

OK
[接続] PS4 Controller  GUID=fake-guid  軸=6  ボタン=16
[受付なし] 前の操作が終わっていません（ためません）
[送信] j0 +0.5° → +0.50 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.0°）  届いた角度 +0.50 +0.00 +0.00 +0.00 +0.00 -30.00
[関節] 上下で動かす関節を j2 にしました
[送信] j2 +0.5° → +0.50 +0.00 +0.50 +0.00 +0.00 -30.00  届いた（ずれ 0.0°）  届いた角度 +0.50 +0.00 +0.50 +0.00 +0.00 -30.00
[停止] L2+R2。新しい指令は送りません（OPTIONS で再開）。止める前に送った動きは止まらずに最後まで行きます
[受付なし] 停止中です（OPTIONS で再開）
[再開] 操作を受け付けます
[爪] 爪を閉じる（待ち 0.2 秒のあと受付）
[送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.0°）  届いた角度 +0.00 +0.00 +0.00 +0.00 +0.00 -30.00
[接続] PS4 Controller  GUID=fake-guid  軸=6  ボタン=16
[送信] j0 +0.5° → +0.50 +0.00 +0.00 +0.00 +0.00 -30.00  届いた（ずれ 0.0°）  届いた角度 +0.50 +0.00 +0.00 +0.00 +0.00 -30.00
```


## この回の実機の記録（全量）

### 7:14 の記録 runs/experiments/gamepad_teleop/teleop_20261103_071424/meta.json

```json
{
  "run_stem": "teleop_20261103_071424",
  "started_at": "2026-11-03T07:14:26",
  "execute": true,
  "argv": [
    "tools/gamepad_teleop.py",
    "--execute"
  ],
  "controllers": [
    {
      "name": "PS4 Controller",
      "guid": "03008fe54c050000cc09000000016800",
      "instance_id": 0,
      "axes": 6,
      "buttons": 16,
      "hats": 0,
      "connected_at": "2026-11-03T07:14:31"
    }
  ],
  "python": "3.12.12 | packaged by conda-forge | (main, Oct 22 2025, 23:34:53) [Clang 19.1.7 ]",
  "pygame": "2.6.1",
  "sdl": "2.28.4",
  "platform": "macOS-26.6.2-arm64-arm-64bit",
  "start_pose": [
    23.29,
    109.77,
    -62.4,
    0.79,
    -49.3,
    -30.93
  ],
  "guards": {
    "J1_MAX_DEG": 90.87,
    "J0_RANGE_DEG": 15.0,
    "JOINT_RANGE_DEG": 10.0,
    "J4_SAFE": [
      -90.0,
      60.0
    ],
    "JOINT_LIMITS": [
      [
        -156.0,
        161.0
      ],
      [
        -79.0,
        123.0
      ],
      [
        -177.0,
        177.0
      ],
      [
        -156.0,
        162.0
      ],
      [
        -118.0,
        118.0
      ],
      [
        -177.0,
        178.0
      ]
    ],
    "window_at_start": {
      "lo": [
        8.29,
        99.77,
        -72.4,
        -9.21,
        -59.3,
        -40.93
      ],
      "hi": [
        38.29,
        90.87,
        -52.4,
        10.79,
        -39.3,
        -20.93
      ]
    },
    "home_bypasses_range_check": true
  },
  "motion": {
    "speed": 20,
    "step_fine_deg": 0.5,
    "step_coarse_deg": 2.0,
    "reach_tol_deg": 3.0,
    "reach_timeout_min_sec": 8.0,
    "poll_sec": 0.3,
    "gripper_sleep_sec": 0.8,
    "grip_close_value": 20,
    "send_wait": 0.0,
    "home": [
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      -30.0
    ],
    "home_hold_sec": 1.0,
    "trigger_stop_above": 0.0,
    "j0_left_sign": -1.0,
    "up_sign": -1.0,
    "select_order": [
      1,
      2,
      3,
      4,
      5
    ]
  },
  "button_map": {
    "0": "cross",
    "1": "circle",
    "2": "square",
    "3": "triangle",
    "4": "share",
    "5": "home",
    "6": "options",
    "7": "l3",
    "8": "r3",
    "9": "l1",
    "10": "r1",
    "11": "dpad_up",
    "12": "dpad_down",
    "13": "dpad_left",
    "14": "dpad_right",
    "15": "touchpad"
  },
  "git": {
    "commit": "f061d54a87d17ff5dd027bf928addc0dee59f212",
    "script_status": "clean"
  },
  "script_copy": "gamepad_teleop.py",
  "script_sha256": "ad49623b481286a962e8d05da2525022fa5fb49d11bc75f4e62170db73f9e70d",
  "ended_at": "2026-11-03T07:49:31",
  "end_reason": "ctrl_c",
  "n_sent": 48
}
```

### 7:14 の記録 runs/experiments/gamepad_teleop/teleop_20261103_071424/log.jsonl（121行）

```json
{"seq": 1, "t": "2026-11-03T07:14:37.221", "t_unix": 1793657677.222, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 1, "step_deg": 0.5, "execute": true, "held_sec": 1.007, "accepted": true, "measured_before": [23.29, 109.77, -62.4, 0.79, -49.3, -30.93], "command": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0], "range_check": "skipped_for_home", "sent": true, "timeout_sec": 18.47, "t_send": 1793657677.26519, "measured_before_send": [23.29, 109.77, -62.4, 0.79, -49.3, -30.93], "reached": true, "reached_angles": [-0.17, 1.4, 0.43, 0.35, 1.05, -30.58], "reach_err": 1.4, "elapsed_sec": 1.15, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 2, "t": "2026-11-03T07:14:44.061", "t_unix": 1793657684.062, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "accepted": true, "measured_before": [0.0, 1.31, 0.87, 0.26, 1.23, -30.41], "start_source": "command", "cmd_gap_deg": 1.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.5, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657684.113447, "measured_before_send": [0.0, 1.31, 0.87, 0.26, 1.23, -30.41], "reached": true, "reached_angles": [0.0, 1.31, 0.87, 0.26, 1.23, -30.32], "reach_err": 1.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 3, "t": "2026-11-03T07:14:46.378", "t_unix": 1793657686.379, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "accepted": true, "measured_before": [0.0, 1.31, 0.87, 0.26, 1.23, -30.32], "start_source": "command", "cmd_gap_deg": 1.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657686.4208698, "measured_before_send": [0.0, 1.31, 0.87, 0.26, 1.23, -30.32], "reached": true, "reached_angles": [-0.96, 1.31, 0.87, 0.26, 0.61, -30.23], "reach_err": 1.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 4, "t": "2026-11-03T07:14:50.080", "t_unix": 1793657690.081, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 5, "t": "2026-11-03T07:14:51.636", "t_unix": 1793657691.636, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 6, "t": "2026-11-03T07:14:52.069", "t_unix": 1793657692.07, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 7, "t": "2026-11-03T07:14:52.740", "t_unix": 1793657692.74, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 8, "t": "2026-11-03T07:14:53.174", "t_unix": 1793657693.175, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 9, "t": "2026-11-03T07:14:54.179", "t_unix": 1793657694.179, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "accepted": true, "measured_before": [-0.96, 1.31, 0.87, 0.26, 0.52, -30.23], "start_source": "command", "cmd_gap_deg": 1.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.5, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657694.490599, "measured_before_send": [-0.96, 1.31, 0.87, 0.26, 0.52, -30.23], "reached": true, "reached_angles": [-0.96, 1.31, 0.87, 0.26, 0.52, -30.23], "reach_err": 1.31, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 11, "t": "2026-11-03T07:14:57.326", "t_unix": 1793657697.326, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 12, "t": "2026-11-03T07:15:00.438", "t_unix": 1793657700.439, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 10, "t": "2026-11-03T07:14:56.119", "t_unix": 1793657696.12, "button": 1, "button_name": "circle", "kind": "grip_open", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 0, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 13, "t": "2026-11-03T07:15:01.759", "t_unix": 1793657701.76, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "accepted": true, "measured_before": [-1.05, 1.31, 0.87, 0.26, -1.23, -30.23], "start_source": "command", "cmd_gap_deg": 1.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657701.8292632, "measured_before_send": [-1.05, 1.31, 0.87, 0.26, -1.23, -30.23], "reached": true, "reached_angles": [-1.05, 1.31, 0.87, 0.26, -1.23, -30.23], "reach_err": 1.31, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 15, "t": "2026-11-03T07:15:06.579", "t_unix": 1793657706.58, "button": 0, "button_name": "cross", "kind": "grip_close", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 1, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 14, "t": "2026-11-03T07:15:04.568", "t_unix": 1793657704.569, "button": 0, "button_name": "cross", "kind": "grip_close", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 1, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 16, "t": "2026-11-03T07:15:09.033", "t_unix": 1793657709.034, "button": 0, "button_name": "cross", "kind": "grip_close", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 1, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 18, "t": "2026-11-03T07:15:14.693", "t_unix": 1793657714.694, "button": 2, "button_name": "square", "kind": "ignored", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": false, "reason": "unassigned", "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 17, "t": "2026-11-03T07:15:12.411", "t_unix": 1793657712.412, "button": 1, "button_name": "circle", "kind": "grip_open", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 0, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 19, "t": "2026-11-03T07:15:18.170", "t_unix": 1793657718.17, "button": 0, "button_name": "cross", "kind": "grip_close", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 1, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 20, "t": "2026-11-03T07:15:21.267", "t_unix": 1793657721.268, "button": 2, "button_name": "square", "kind": "ignored", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": false, "reason": "unassigned", "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 21, "t": "2026-11-03T07:15:25.378", "t_unix": 1793657725.379, "button": 2, "button_name": "square", "kind": "ignored", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": false, "reason": "unassigned", "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 22, "t": "2026-11-03T07:15:26.080", "t_unix": 1793657726.081, "button": 2, "button_name": "square", "kind": "ignored", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": false, "reason": "unassigned", "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 23, "t": "2026-11-03T07:15:26.748", "t_unix": 1793657726.749, "button": 2, "button_name": "square", "kind": "ignored", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": false, "reason": "unassigned", "grip_state": "closed", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 24, "t": "2026-11-03T07:15:27.368", "t_unix": 1793657727.369, "button": 1, "button_name": "circle", "kind": "grip_open", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 0, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 26, "t": "2026-11-03T07:15:36.217", "t_unix": 1793657736.217, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": -0.5, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 27, "t": "2026-11-03T07:15:36.918", "t_unix": 1793657736.919, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 25, "t": "2026-11-03T07:15:35.322", "t_unix": 1793657735.323, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": -0.5, "accepted": true, "measured_before": [-1.14, 1.31, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 1.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, -0.5, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657735.3636649, "measured_before_send": [-1.14, 1.31, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [-1.14, 0.79, 0.87, 0.26, -0.26, -30.23], "reach_err": 1.29, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 29, "t": "2026-11-03T07:15:39.526", "t_unix": 1793657739.526, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 28, "t": "2026-11-03T07:15:38.425", "t_unix": 1793657738.425, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "accepted": true, "measured_before": [-1.14, 0.79, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 1.29, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657738.498988, "measured_before_send": [-1.14, 0.79, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [-1.14, 0.79, 0.87, 0.26, -0.26, -30.23], "reach_err": 0.87, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 30, "t": "2026-11-03T07:15:40.751", "t_unix": 1793657740.751, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 31, "t": "2026-11-03T07:15:41.573", "t_unix": 1793657741.573, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 33, "t": "2026-11-03T07:15:43.518", "t_unix": 1793657743.518, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 32, "t": "2026-11-03T07:15:42.817", "t_unix": 1793657742.817, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 0.79, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657742.849691, "measured_before_send": [-1.14, 0.79, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [1.31, 0.79, 0.87, 0.26, -0.26, -30.23], "reach_err": 0.87, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 34, "t": "2026-11-03T07:15:45.191", "t_unix": 1793657745.191, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "accepted": true, "measured_before": [1.31, 0.79, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657745.227872, "measured_before_send": [1.31, 0.79, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [3.16, 0.79, 0.87, 0.26, -0.26, -30.23], "reach_err": 0.87, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 35, "t": "2026-11-03T07:15:47.369", "t_unix": 1793657747.37, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "accepted": true, "measured_before": [3.16, 0.79, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [5.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657747.416037, "measured_before_send": [3.16, 0.79, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [5.18, 0.79, 0.87, 0.26, -0.26, -30.23], "reach_err": 0.87, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 36, "t": "2026-11-03T07:15:49.557", "t_unix": 1793657749.557, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "accepted": true, "measured_before": [5.18, 0.79, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657749.6173499, "measured_before_send": [5.18, 0.79, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [2.81, 0.79, 0.87, 0.26, -0.26, -30.23], "reach_err": 0.87, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 37, "t": "2026-11-03T07:15:51.567", "t_unix": 1793657751.567, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "accepted": true, "measured_before": [2.81, 0.79, 0.87, 0.26, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657751.601231, "measured_before_send": [2.81, 0.79, 0.87, 0.26, -0.26, -30.23], "reached": true, "reached_angles": [0.87, 0.79, 0.87, 0.17, -0.26, -30.23], "reach_err": 0.87, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 38, "t": "2026-11-03T07:15:53.490", "t_unix": 1793657753.49, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "accepted": true, "measured_before": [0.87, 0.79, 0.87, 0.17, -0.26, -30.23], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.0, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657753.529836, "measured_before_send": [0.87, 0.79, 0.87, 0.17, -0.26, -30.23], "reached": true, "reached_angles": [-1.14, 0.79, 0.87, 0.17, -0.26, -30.14], "reach_err": 0.87, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 39, "t": "2026-11-03T07:15:56.323", "t_unix": 1793657756.323, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "accepted": true, "measured_before": [-1.14, 0.79, 0.87, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657756.36744, "measured_before_send": [-1.14, 0.79, 0.87, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 0.87, 0.17, -0.26, -30.14], "reach_err": 0.87, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 41, "t": "2026-11-03T07:16:00.077", "t_unix": 1793657760.077, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 42, "t": "2026-11-03T07:16:01.984", "t_unix": 1793657761.986, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 43, "t": "2026-11-03T07:16:02.573", "t_unix": 1793657762.573, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 40, "t": "2026-11-03T07:15:58.420", "t_unix": 1793657758.421, "button": 1, "button_name": "circle", "kind": "grip_open", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 0, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 44, "t": "2026-11-03T07:16:03.848", "t_unix": 1793657763.849, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 0.87, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, -2.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657763.895814, "measured_before_send": [-1.14, 1.23, 0.87, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, -0.52, 0.17, -0.26, -30.14], "reach_err": 1.48, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 46, "t": "2026-11-03T07:16:07.223", "t_unix": 1793657767.224, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 45, "t": "2026-11-03T07:16:05.809", "t_unix": 1793657765.81, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, -0.52, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 1.48, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, -4.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657765.852776, "measured_before_send": [-1.14, 1.23, -0.52, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, -2.63, 0.17, -0.26, -30.14], "reach_err": 1.37, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 47, "t": "2026-11-03T07:16:09.676", "t_unix": 1793657769.677, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, -2.63, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 1.37, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, -2.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657769.7209861, "measured_before_send": [-1.14, 1.23, -2.63, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, -1.05, 0.17, -0.26, -30.14], "reach_err": 0.95, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 48, "t": "2026-11-03T07:16:11.871", "t_unix": 1793657771.872, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, -1.05, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 0.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657771.898526, "measured_before_send": [-1.14, 1.23, -1.05, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 0.96, 0.17, -0.26, -30.14], "reach_err": 0.96, "elapsed_sec": 0.04, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 49, "t": "2026-11-03T07:16:14.066", "t_unix": 1793657774.066, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 0.96, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 2.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657774.0984042, "measured_before_send": [-1.14, 1.23, 0.96, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 2.81, 0.17, -0.26, -30.14], "reach_err": 0.81, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 50, "t": "2026-11-03T07:16:16.115", "t_unix": 1793657776.116, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 2.81, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.81, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 4.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657776.154207, "measured_before_send": [-1.14, 1.23, 2.81, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 4.92, 0.17, -0.26, -30.14], "reach_err": 0.92, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 51, "t": "2026-11-03T07:16:18.259", "t_unix": 1793657778.26, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 4.92, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.92, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657778.2933528, "measured_before_send": [-1.14, 1.23, 4.92, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, 0.17, -0.26, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 52, "t": "2026-11-03T07:16:23.222", "t_unix": 1793657783.222, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 53, "t": "2026-11-03T07:16:24.045", "t_unix": 1793657784.046, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 54, "t": "2026-11-03T07:16:24.514", "t_unix": 1793657784.515, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, 0.17, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, 2.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657784.5499961, "measured_before_send": [-1.14, 1.23, 6.85, 0.17, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, 1.31, -0.26, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 55, "t": "2026-11-03T07:16:26.727", "t_unix": 1793657786.727, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, 1.4, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, 0.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657786.759913, "measured_before_send": [-1.14, 1.23, 6.85, 1.4, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, 0.7, -0.26, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 56, "t": "2026-11-03T07:16:28.621", "t_unix": 1793657788.622, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, 0.7, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657788.667475, "measured_before_send": [-1.14, 1.23, 6.85, 0.7, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.31, -0.26, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 57, "t": "2026-11-03T07:16:32.422", "t_unix": 1793657792.423, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 58, "t": "2026-11-03T07:16:33.408", "t_unix": 1793657793.409, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 60, "t": "2026-11-03T07:16:35.252", "t_unix": 1793657795.253, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 59, "t": "2026-11-03T07:16:33.976", "t_unix": 1793657793.977, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.58, -0.26, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, 2.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657794.013491, "measured_before_send": [-1.14, 1.23, 6.85, -1.58, -0.26, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.58, 1.75, -30.14], "reach_err": 0.85, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 62, "t": "2026-11-03T07:16:38.527", "t_unix": 1793657798.527, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 61, "t": "2026-11-03T07:16:37.337", "t_unix": 1793657797.337, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.66, 1.75, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, 0.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657797.400424, "measured_before_send": [-1.14, 1.23, 6.85, -1.66, 1.75, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.66, 1.66, -30.14], "reach_err": 1.66, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 63, "t": "2026-11-03T07:16:39.718", "t_unix": 1793657799.718, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.66, 1.58, -30.14], "start_source": "command", "cmd_gap_deg": 1.58, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -2.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657799.749374, "measured_before_send": [-1.14, 1.23, 6.85, -1.66, 1.58, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.66, -1.84, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 64, "t": "2026-11-03T07:16:42.269", "t_unix": 1793657802.27, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.66, -1.84, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -4.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657802.3074539, "measured_before_send": [-1.14, 1.23, 6.85, -1.66, -1.84, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.66, -3.33, -30.14], "reach_err": 0.85, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 65, "t": "2026-11-03T07:16:45.176", "t_unix": 1793657805.177, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.66, -3.33, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -6.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657805.225366, "measured_before_send": [-1.14, 1.23, 6.85, -1.66, -3.33, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.66, -6.41, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 66, "t": "2026-11-03T07:16:47.366", "t_unix": 1793657807.366, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.66, -6.41, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -8.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657807.4059782, "measured_before_send": [-1.14, 1.23, 6.85, -1.66, -6.41, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.75, -7.99, -30.14], "reach_err": 0.85, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 67, "t": "2026-11-03T07:16:49.577", "t_unix": 1793657809.578, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.75, -7.99, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -10.0, -30.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657809.612223, "measured_before_send": [-1.14, 1.23, 6.85, -1.75, -7.99, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.75, -9.93, -30.14], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 68, "t": "2026-11-03T07:16:51.857", "t_unix": 1793657811.858, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.75, -9.93, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [{"joint": 4, "want": -12.0, "cmd": -10.0, "limit": "BASE", "bound": -10.0}], "refused": [{"joint": 4, "why": "at_limit", "value": -12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j4 を -12.00° → -10.00° に切った（基準の姿勢からの範囲 -10.00°） / j4 -12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j4 clipped -12.00->-10.00 (BASE -10.00) / j4 refused at_limit -12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 69, "t": "2026-11-03T07:16:53.582", "t_unix": 1793657813.583, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 70, "t": "2026-11-03T07:16:55.714", "t_unix": 1793657815.714, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 72, "t": "2026-11-03T07:16:57.454", "t_unix": 1793657817.455, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 71, "t": "2026-11-03T07:16:56.486", "t_unix": 1793657816.487, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.75, -9.93, -30.14], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -10.0, -28.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657816.521379, "measured_before_send": [-1.14, 1.23, 6.85, -1.75, -9.93, -30.14], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.75, -9.93, -28.21], "reach_err": 0.85, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 73, "t": "2026-11-03T07:16:58.689", "t_unix": 1793657818.689, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.75, -9.93, -28.21], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657818.718755, "measured_before_send": [-1.14, 1.23, 6.85, -1.75, -9.93, -28.21], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.75, -9.93, -26.19], "reach_err": 0.85, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 74, "t": "2026-11-03T07:17:02.267", "t_unix": 1793657822.268, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 75, "t": "2026-11-03T07:17:03.188", "t_unix": 1793657823.189, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 76, "t": "2026-11-03T07:17:03.993", "t_unix": 1793657823.994, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.75, -9.93, -26.19], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, -1.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657824.037812, "measured_before_send": [-1.14, 1.23, 6.85, -1.75, -9.93, -26.19], "reached": true, "reached_angles": [-1.14, -0.43, 6.85, -1.75, -10.1, -26.19], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 77, "t": "2026-11-03T07:17:06.268", "t_unix": 1793657826.268, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, -0.43, 6.85, -1.75, -10.1, -26.19], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 0.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657826.32715, "measured_before_send": [-1.14, -0.43, 6.85, -1.75, -10.1, -26.19], "reached": true, "reached_angles": [-1.14, 1.23, 6.85, -1.84, -10.1, -26.19], "reach_err": 0.85, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 78, "t": "2026-11-03T07:17:08.372", "t_unix": 1793657828.372, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 1.23, 6.85, -1.84, -10.1, -26.19], "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 2.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657828.4157991, "measured_before_send": [-1.14, 1.23, 6.85, -1.84, -10.1, -26.19], "reached": true, "reached_angles": [-1.14, 3.42, 6.85, -1.84, -10.1, -26.19], "reach_err": 0.92, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 79, "t": "2026-11-03T07:17:10.522", "t_unix": 1793657830.522, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 3.42, 6.85, -1.84, -10.1, -26.19], "start_source": "command", "cmd_gap_deg": 0.92, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 4.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657830.5612118, "measured_before_send": [-1.14, 3.42, 6.85, -1.84, -10.1, -26.19], "reached": true, "reached_angles": [-1.14, 5.36, 6.85, -1.93, -10.19, -26.19], "reach_err": 0.86, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 80, "t": "2026-11-03T07:17:12.771", "t_unix": 1793657832.772, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 5.36, 6.85, -1.93, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 6.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657832.80897, "measured_before_send": [-1.14, 5.36, 6.85, -1.93, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 7.38, 6.85, -1.93, -10.19, -26.19], "reach_err": 0.88, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 81, "t": "2026-11-03T07:17:15.235", "t_unix": 1793657835.235, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 7.38, 6.85, -1.93, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 8.5, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657835.2769542, "measured_before_send": [-1.14, 7.38, 6.85, -1.93, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 9.4, 6.85, -2.02, -10.19, -26.19], "reach_err": 0.9, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 82, "t": "2026-11-03T07:17:17.967", "t_unix": 1793657837.968, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 9.4, 6.85, -2.02, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.9, "clip": [{"joint": 1, "want": 10.5, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [], "limit_ja": "j1 を +10.50° → +10.00° に切った（基準の姿勢からの範囲 +10.00°）", "limit_ascii": "j1 clipped +10.50->+10.00 (BASE +10.00)", "command": [-1.0, 10.0, 6.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657838.037159, "measured_before_send": [-1.14, 9.4, 6.85, -2.02, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "reach_err": 0.89, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 83, "t": "2026-11-03T07:17:20.374", "t_unix": 1793657840.375, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 84, "t": "2026-11-03T07:17:21.772", "t_unix": 1793657841.773, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 85, "t": "2026-11-03T07:17:22.227", "t_unix": 1793657842.227, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 86, "t": "2026-11-03T07:17:23.091", "t_unix": 1793657843.092, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 87, "t": "2026-11-03T07:17:23.614", "t_unix": 1793657843.614, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 88, "t": "2026-11-03T07:17:25.829", "t_unix": 1793657845.829, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 89, "t": "2026-11-03T07:17:26.634", "t_unix": 1793657846.635, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 90, "t": "2026-11-03T07:17:27.324", "t_unix": 1793657847.324, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 10.0, 8.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657847.362695, "measured_before_send": [-1.14, 10.89, 6.85, -2.1, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 10.89, 8.87, -2.1, -10.19, -26.19], "reach_err": 0.89, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 91, "t": "2026-11-03T07:17:29.514", "t_unix": 1793657849.515, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 8.87, -2.1, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 10.0, 10.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657849.567411, "measured_before_send": [-1.14, 10.89, 8.87, -2.1, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "reach_err": 0.89, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 92, "t": "2026-11-03T07:17:32.836", "t_unix": 1793657852.837, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 93, "t": "2026-11-03T07:17:34.318", "t_unix": 1793657854.319, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 94, "t": "2026-11-03T07:17:35.168", "t_unix": 1793657855.168, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 95, "t": "2026-11-03T07:17:35.867", "t_unix": 1793657855.868, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 96, "t": "2026-11-03T07:17:36.390", "t_unix": 1793657856.39, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 97, "t": "2026-11-03T07:17:37.619", "t_unix": 1793657857.619, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 98, "t": "2026-11-03T07:17:38.776", "t_unix": 1793657858.776, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 99, "t": "2026-11-03T07:17:39.865", "t_unix": 1793657859.866, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 100, "t": "2026-11-03T07:17:40.406", "t_unix": 1793657860.406, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 101, "t": "2026-11-03T07:17:40.867", "t_unix": 1793657860.868, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [{"joint": 1, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 1, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j1 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j1 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j1 clipped +12.00->+10.00 (BASE +10.00) / j1 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 102, "t": "2026-11-03T07:17:41.523", "t_unix": 1793657861.523, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 8.0, 10.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657861.58612, "measured_before_send": [-1.14, 10.89, 10.81, -2.19, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 9.22, 10.81, -2.28, -10.19, -26.19], "reach_err": 1.22, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 103, "t": "2026-11-03T07:17:43.454", "t_unix": 1793657863.455, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 9.22, 10.81, -2.28, -10.19, -26.19], "start_source": "command", "cmd_gap_deg": 1.22, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 6.0, 10.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657863.4917061, "measured_before_send": [-1.14, 9.22, 10.81, -2.28, -10.19, -26.19], "reached": true, "reached_angles": [-1.14, 7.11, 10.81, -2.28, -10.54, -26.19], "reach_err": 1.11, "elapsed_sec": 0.04, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 105, "t": "2026-11-03T07:17:47.103", "t_unix": 1793657867.104, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 104, "t": "2026-11-03T07:17:45.640", "t_unix": 1793657865.64, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 7.11, 10.81, -2.28, -10.54, -26.19], "start_source": "command", "cmd_gap_deg": 1.11, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 8.0, 10.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657865.6721652, "measured_before_send": [-1.14, 7.11, 10.81, -2.28, -10.54, -26.19], "reached": true, "reached_angles": [-1.14, 8.96, 10.81, -2.28, -10.54, -26.19], "reach_err": 0.96, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 106, "t": "2026-11-03T07:17:49.144", "t_unix": 1793657869.144, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 107, "t": "2026-11-03T07:17:49.778", "t_unix": 1793657869.778, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 108, "t": "2026-11-03T07:17:50.518", "t_unix": 1793657870.518, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 8.96, 10.81, -2.28, -10.54, -26.19], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [{"joint": 2, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 2, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j2 clipped +12.00->+10.00 (BASE +10.00) / j2 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 110, "t": "2026-11-03T07:17:52.522", "t_unix": 1793657872.522, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 109, "t": "2026-11-03T07:17:51.668", "t_unix": 1793657871.668, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "accepted": true, "measured_before": [-1.14, 8.96, 10.81, -2.28, -10.54, -26.19], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 8.0, 8.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657871.699438, "measured_before_send": [-1.14, 8.96, 10.81, -2.28, -10.54, -26.19], "reached": true, "reached_angles": [-1.14, 8.96, 9.66, -2.28, -10.54, -26.19], "reach_err": 1.66, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 111, "t": "2026-11-03T07:17:53.766", "t_unix": 1793657873.767, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 8.96, 9.66, -2.28, -10.54, -26.19], "start_source": "command", "cmd_gap_deg": 1.66, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.0, 8.0, 10.0, -2.0, -10.0, -26.0], "sent": true, "timeout_sec": 8.0, "t_send": 1793657873.8375008, "measured_before_send": [-1.14, 8.96, 9.66, -2.28, -10.54, -26.19], "reached": true, "reached_angles": [-1.14, 8.96, 10.72, -2.28, -10.54, -26.19], "reach_err": 0.96, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 112, "t": "2026-11-03T07:17:55.830", "t_unix": 1793657875.831, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 8.96, 10.72, -2.28, -10.54, -26.19], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [{"joint": 2, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 2, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j2 clipped +12.00->+10.00 (BASE +10.00) / j2 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 113, "t": "2026-11-03T07:17:56.470", "t_unix": 1793657876.471, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 8.96, 10.81, -2.28, -10.54, -26.19], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [{"joint": 2, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 2, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j2 clipped +12.00->+10.00 (BASE +10.00) / j2 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 114, "t": "2026-11-03T07:17:58.716", "t_unix": 1793657878.717, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "accepted": true, "measured_before": [-1.14, 8.96, 10.81, -2.28, -10.45, -26.19], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [{"joint": 2, "want": 12.0, "cmd": 10.0, "limit": "BASE", "bound": 10.0}], "refused": [{"joint": 2, "why": "at_limit", "value": 12.0, "lo": -10.0, "hi": 10.0, "limit": "BASE"}], "limit_ja": "j2 を +12.00° → +10.00° に切った（基準の姿勢からの範囲 +10.00°） / j2 +12.00° は送らない：範囲の端にいて、押した向きに進めない（範囲 [-10.00, +10.00]・基準の姿勢からの範囲）", "limit_ascii": "j2 clipped +12.00->+10.00 (BASE +10.00) / j2 refused at_limit +12.00 [-10.00, +10.00] (BASE)", "sent": false, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 115, "t": "2026-11-03T07:18:13.517", "t_unix": 1793657893.518, "button": "L2+R2", "button_name": "L2+R2", "kind": "stop", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "reason": "L2+R2", "already_stopped": false, "busy": false, "send_committed_before_stop": null, "triggers": [1.0, 1.0], "grip_state": "open", "stopped": true, "stop_reason": "L2+R2", "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 116, "t": "2026-11-03T07:18:21.865", "t_unix": 1793657901.865, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": false, "reason": "stopped", "grip_state": "open", "stopped": true, "stop_reason": "L2+R2", "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 117, "t": "2026-11-03T07:18:22.976", "t_unix": 1793657902.977, "button": 0, "button_name": "cross", "kind": "grip_close", "selected_joint": 2, "step_deg": 0.5, "execute": true, "grip_cmd": 1, "accepted": false, "reason": "stopped", "grip_state": "open", "stopped": true, "stop_reason": "L2+R2", "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 118, "t": "2026-11-03T07:18:24.067", "t_unix": 1793657904.067, "button": "L2+R2", "button_name": "L2+R2", "kind": "stop", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "reason": "L2+R2", "already_stopped": true, "busy": false, "send_committed_before_stop": null, "triggers": [1.0, 0.004], "grip_state": "open", "stopped": true, "stop_reason": "L2+R2", "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 119, "t": "2026-11-03T07:18:29.840", "t_unix": 1793657909.841, "button": 6, "button_name": "options", "kind": "resume", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 120, "t": "2026-11-03T07:18:33.023", "t_unix": 1793657913.024, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 2, "step_deg": 0.5, "execute": true, "held_sec": 1.004, "accepted": true, "measured_before": [-1.14, 8.96, 10.81, -2.19, -10.28, -26.19], "command": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0], "range_check": "skipped_for_home", "sent": true, "timeout_sec": 8.0, "t_send": 1793657913.049948, "measured_before_send": [-1.14, 8.96, 10.81, -2.19, -10.28, -26.19], "reached": true, "reached_angles": [-0.26, 1.23, 1.4, -0.35, -0.17, -29.0], "reach_err": 1.4, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null, "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
{"seq": 121, "t": "2026-11-03T07:33:36.825", "t_unix": 1793658816.826, "button": null, "button_name": null, "kind": "controller_lost", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "reason": "controller_disconnected", "already_stopped": false, "busy": false, "send_committed_before_stop": null, "triggers": [-1.0, -1.0], "grip_state": "open", "stopped": true, "stop_reason": "controller_disconnected", "base_pose": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0]}
```

### 7:49 の記録 runs/experiments/gamepad_teleop/teleop_20261103_074936/meta.json

```json
{
  "run_stem": "teleop_20261103_074936",
  "started_at": "2026-11-03T07:49:37",
  "execute": true,
  "argv": [
    "tools/gamepad_teleop.py",
    "--execute"
  ],
  "controllers": [
    {
      "name": "PS4 Controller",
      "guid": "03008fe54c050000cc09000000016800",
      "instance_id": 0,
      "axes": 6,
      "buttons": 16,
      "hats": 0,
      "connected_at": "2026-11-03T07:50:02"
    }
  ],
  "python": "3.12.12 | packaged by conda-forge | (main, Oct 22 2025, 23:34:53) [Clang 19.1.7 ]",
  "pygame": "2.6.1",
  "sdl": "2.28.4",
  "platform": "macOS-26.6.2-arm64-arm-64bit",
  "start_pose": [
    -0.43,
    1.23,
    1.31,
    -0.26,
    -0.17,
    -29.7
  ],
  "guards": {
    "J1_MAX_DEG": 90.87,
    "range": "physical_limits (no base window. 2026-11-03)",
    "J4_SAFE": [
      -90.0,
      60.0
    ],
    "JOINT_LIMITS": [
      [
        -156.0,
        161.0
      ],
      [
        -79.0,
        123.0
      ],
      [
        -177.0,
        177.0
      ],
      [
        -156.0,
        162.0
      ],
      [
        -118.0,
        118.0
      ],
      [
        -177.0,
        178.0
      ]
    ],
    "window": {
      "lo": [
        -156.0,
        -79.0,
        -177.0,
        -156.0,
        -90.0,
        -177.0
      ],
      "hi": [
        161.0,
        90.87,
        177.0,
        162.0,
        60.0,
        178.0
      ]
    },
    "home_bypasses_range_check": true
  },
  "motion": {
    "speed": 20,
    "step_fine_deg": 0.5,
    "step_coarse_deg": 2.0,
    "reach_tol_deg": 3.0,
    "reach_timeout_min_sec": 8.0,
    "poll_sec": 0.3,
    "gripper_sleep_sec": 0.8,
    "grip_close_value": 20,
    "send_wait": 0.0,
    "home": [
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      -30.0
    ],
    "home_hold_sec": 1.0,
    "trigger_stop_above": 0.0,
    "hold_start_sec": 0.4,
    "hold_interval_sec": 0.2,
    "hold_lead_max_deg": 3.0,
    "hold_wait_max_sec": 3.0,
    "j0_left_sign": -1.0,
    "up_sign": -1.0,
    "select_order": [
      1,
      2,
      3,
      4,
      5
    ]
  },
  "button_map": {
    "0": "cross",
    "1": "circle",
    "2": "square",
    "3": "triangle",
    "4": "share",
    "5": "home",
    "6": "options",
    "7": "l3",
    "8": "r3",
    "9": "l1",
    "10": "r1",
    "11": "dpad_up",
    "12": "dpad_down",
    "13": "dpad_left",
    "14": "dpad_right",
    "15": "touchpad"
  },
  "git": {
    "commit": "36def3cc1216f2bcaa937994a99968e38366009c",
    "script_status": "clean"
  },
  "script_copy": "gamepad_teleop.py",
  "script_sha256": "87c4c644aea9f43d8b891b95adf9bb603f62f47e9b59165a999f863f02e54918",
  "ended_at": "2026-11-03T07:56:27",
  "end_reason": "ctrl_c",
  "n_sent": 33
}
```

### 7:49 の記録 runs/experiments/gamepad_teleop/teleop_20261103_074936/log.jsonl（50行）

```json
{"seq": 1, "t": "2026-11-03T07:50:06.353", "t_unix": 1793659806.353, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "hold_id": 1, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 1.23, 1.31, -0.26, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.93, 1.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659806.430069, "measured_before_send": [-0.43, 1.23, 1.31, -0.26, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.02, -0.26, -0.17, -29.7], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 2, "t": "2026-11-03T07:50:10.543", "t_unix": 1793659810.544, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": -0.5, "hold_id": 2, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 2.02, 2.02, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.93, 0.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659810.589694, "measured_before_send": [-0.43, 2.02, 2.02, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.02, -0.17, -0.17, -29.7], "reach_err": 1.29, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 4, "t": "2026-11-03T07:50:13.833", "t_unix": 1793659813.833, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "hold_id": 4, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 3, "t": "2026-11-03T07:50:12.427", "t_unix": 1793659812.427, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 3, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 2.02, 2.02, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 1.29, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.93, 1.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659812.458703, "measured_before_send": [-0.43, 2.02, 2.02, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.02, -0.17, -0.17, -29.7], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 5, "t": "2026-11-03T07:50:18.426", "t_unix": 1793659818.427, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "hold_id": 5, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.43, 1.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659818.474234, "measured_before_send": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 6, "t": "2026-11-03T07:50:20.072", "t_unix": 1793659820.072, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "hold_id": 5, "hold_n": 1, "held_sec": 1.646, "accepted": true, "measured_before": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 1.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659820.1020741, "measured_before_send": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 7, "t": "2026-11-03T07:50:21.709", "t_unix": 1793659821.709, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "hold_id": 5, "hold_n": 2, "held_sec": 3.283, "accepted": true, "released_during_job": true, "measured_before": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.57, 1.23, 1.31, -0.26, -0.17, -29.7], "sent": false, "why": "halted_before_send", "measured_before_send": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 8, "t": "2026-11-03T07:50:22.232", "t_unix": 1793659822.232, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "hold_id": 6, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.43, 1.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659822.2657962, "measured_before_send": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 10, "t": "2026-11-03T07:50:45.818", "t_unix": 1793659845.819, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 11, "t": "2026-11-03T07:50:46.588", "t_unix": 1793659846.589, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 12, "t": "2026-11-03T07:50:47.039", "t_unix": 1793659847.04, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 13, "t": "2026-11-03T07:50:47.423", "t_unix": 1793659847.424, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 14, "t": "2026-11-03T07:50:48.025", "t_unix": 1793659848.025, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 0.5, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 9, "t": "2026-11-03T07:50:44.373", "t_unix": 1793659844.374, "button": 1, "button_name": "circle", "kind": "grip_open", "selected_joint": 1, "step_deg": 0.5, "execute": true, "grip_cmd": 0, "accepted": true, "measured_before": null, "sent": true, "reached": null, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 16, "t": "2026-11-03T07:50:51.351", "t_unix": 1793659851.352, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 8, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 15, "t": "2026-11-03T07:50:49.924", "t_unix": 1793659849.925, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": -0.5, "hold_id": 7, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.43, 0.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659849.971359, "measured_before_send": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reach_err": 1.29, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 17, "t": "2026-11-03T07:50:56.654", "t_unix": 1793659856.655, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 19, "t": "2026-11-03T07:50:58.741", "t_unix": 1793659858.742, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 10, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 18, "t": "2026-11-03T07:50:57.172", "t_unix": 1793659857.173, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 9, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 1.29, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.43, 2.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659857.218709, "measured_before_send": [-0.43, 2.02, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 3.69, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.96, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 21, "t": "2026-11-03T07:51:00.797", "t_unix": 1793659860.798, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "hold_id": 12, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 20, "t": "2026-11-03T07:50:59.524", "t_unix": 1793659859.525, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 11, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 3.69, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.43, 4.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659859.556826, "measured_before_send": [-0.43, 3.69, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.8, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 22, "t": "2026-11-03T07:51:03.171", "t_unix": 1793659863.171, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "hold_id": 13, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.93, 4.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659863.214829, "measured_before_send": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.8, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 23, "t": "2026-11-03T07:51:04.872", "t_unix": 1793659864.873, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "hold_id": 14, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.43, 4.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659864.90269, "measured_before_send": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.8, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 24, "t": "2026-11-03T07:51:07.481", "t_unix": 1793659867.481, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "hold_id": 15, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 4.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659867.521116, "measured_before_send": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reached": true, "reached_angles": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.7], "reach_err": 0.8, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 25, "t": "2026-11-03T07:51:45.044", "t_unix": 1793659905.045, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 26, "t": "2026-11-03T07:51:45.947", "t_unix": 1793659905.948, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.79], "start_source": "command", "cmd_gap_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 5.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659905.998413, "measured_before_send": [-0.43, 5.53, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 6.06, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.83, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 27, "t": "2026-11-03T07:51:47.594", "t_unix": 1793659907.595, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 1, "held_sec": 1.647, "accepted": true, "measured_before": [-0.43, 6.06, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.83, "start_source": "command", "cmd_gap_deg": 0.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 5.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659907.627962, "measured_before_send": [-0.43, 6.06, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 6.59, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.86, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 28, "t": "2026-11-03T07:51:49.202", "t_unix": 1793659909.203, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 2, "held_sec": 3.255, "accepted": true, "measured_before": [-0.43, 6.59, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.86, "start_source": "command", "cmd_gap_deg": 0.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 6.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659909.24387, "measured_before_send": [-0.43, 6.59, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 7.03, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.8, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 29, "t": "2026-11-03T07:51:50.822", "t_unix": 1793659910.823, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 3, "held_sec": 4.876, "accepted": true, "measured_before": [-0.43, 7.03, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.8, "start_source": "command", "cmd_gap_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 6.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659910.867606, "measured_before_send": [-0.43, 7.03, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 7.55, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.82, "elapsed_sec": 0.05, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 30, "t": "2026-11-03T07:51:52.479", "t_unix": 1793659912.48, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 4, "held_sec": 6.532, "accepted": true, "measured_before": [-0.43, 7.55, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.003, "hold_lead_deg": 0.82, "start_source": "command", "cmd_gap_deg": 0.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 7.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659912.5231428, "measured_before_send": [-0.43, 7.55, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 8.17, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.94, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 31, "t": "2026-11-03T07:51:54.117", "t_unix": 1793659914.117, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 5, "held_sec": 8.17, "accepted": true, "measured_before": [-0.43, 8.17, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.94, "start_source": "command", "cmd_gap_deg": 0.94, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 7.73, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659914.14732, "measured_before_send": [-0.43, 8.17, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 8.52, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 33, "t": "2026-11-03T07:51:56.219", "t_unix": 1793659916.219, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 32, "t": "2026-11-03T07:51:55.719", "t_unix": 1793659915.72, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 1, "delta": 0.5, "hold_id": 16, "hold_n": 6, "held_sec": 9.773, "accepted": true, "measured_before": [-0.43, 8.52, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 8.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659915.746007, "measured_before_send": [-0.43, 8.52, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 9.05, 2.1, -0.17, -0.17, -29.79], "reach_err": 0.82, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 34, "t": "2026-11-03T07:51:57.337", "t_unix": 1793659917.338, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 16, "hold_n": 7, "held_sec": 11.391, "accepted": true, "measured_before": [-0.43, 9.05, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.82, "start_source": "command", "cmd_gap_deg": 0.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 10.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659917.384862, "measured_before_send": [-0.43, 9.05, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 11.25, 2.1, -0.17, -0.17, -29.79], "reach_err": 1.02, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 35, "t": "2026-11-03T07:51:58.990", "t_unix": 1793659918.99, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 16, "hold_n": 8, "held_sec": 13.043, "accepted": true, "measured_before": [-0.43, 11.25, 2.1, -0.17, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.02, "start_source": "command", "cmd_gap_deg": 1.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 12.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659919.042486, "measured_before_send": [-0.43, 11.25, 2.1, -0.17, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 13.27, 2.1, -0.08, -0.17, -29.79], "reach_err": 1.04, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 36, "t": "2026-11-03T07:52:00.626", "t_unix": 1793659920.626, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 16, "hold_n": 9, "held_sec": 14.68, "accepted": true, "measured_before": [-0.43, 13.27, 2.1, -0.08, -0.17, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.04, "start_source": "command", "cmd_gap_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 14.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659920.659002, "measured_before_send": [-0.43, 13.27, 2.1, -0.08, -0.17, -29.79], "reached": true, "reached_angles": [-0.43, 15.2, 2.1, -0.08, -0.08, -29.79], "reach_err": 0.97, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 37, "t": "2026-11-03T07:52:02.251", "t_unix": 1793659922.251, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 16, "hold_n": 10, "held_sec": 16.304, "accepted": true, "measured_before": [-0.43, 15.2, 2.1, -0.08, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.97, "start_source": "command", "cmd_gap_deg": 0.97, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 16.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659922.304827, "measured_before_send": [-0.43, 15.2, 2.1, -0.08, -0.08, -29.79], "reached": true, "reached_angles": [-0.43, 17.22, 2.1, 0.0, -0.08, -29.79], "reach_err": 0.99, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 39, "t": "2026-11-03T07:52:04.808", "t_unix": 1793659924.808, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": -0.5, "hold_id": 17, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 40, "t": "2026-11-03T07:52:05.427", "t_unix": 1793659925.427, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 38, "t": "2026-11-03T07:52:03.891", "t_unix": 1793659923.892, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 16, "hold_n": 11, "held_sec": 17.945, "accepted": true, "released_during_job": true, "measured_before": [-0.43, 17.22, 2.1, 0.0, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.99, "start_source": "command", "cmd_gap_deg": 0.99, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.07, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659923.9347231, "measured_before_send": [-0.43, 17.22, 2.1, 0.0, -0.08, -29.79], "reached": true, "reached_angles": [-0.43, 19.33, 2.1, 0.0, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 42, "t": "2026-11-03T07:52:10.013", "t_unix": 1793659930.013, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 41, "t": "2026-11-03T07:52:09.361", "t_unix": 1793659929.361, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 0.5, "execute": true, "joint": 0, "delta": 0.5, "hold_id": 18, "hold_n": 0, "accepted": true, "measured_before": [-0.43, 19.33, 2.1, 0.0, -0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659929.414172, "measured_before_send": [-0.43, 19.33, 2.1, 0.0, -0.08, -29.79], "reached": true, "reached_angles": [0.43, 19.33, 2.1, 0.0, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.04, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 43, "t": "2026-11-03T07:52:11.030", "t_unix": 1793659931.031, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 1, "held_sec": 1.669, "accepted": true, "measured_before": [0.43, 19.33, 2.1, 0.0, -0.08, -29.79], "hold_wait_sec": 0.001, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [2.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659931.0830898, "measured_before_send": [0.43, 19.33, 2.1, 0.0, -0.08, -29.79], "reached": true, "reached_angles": [2.63, 19.33, 2.1, 0.08, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 44, "t": "2026-11-03T07:52:12.657", "t_unix": 1793659932.657, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 2, "held_sec": 3.296, "accepted": true, "measured_before": [2.63, 19.33, 2.1, 0.08, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [4.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659932.688569, "measured_before_send": [2.63, 19.33, 2.1, 0.08, -0.08, -29.79], "reached": true, "reached_angles": [4.74, 19.33, 2.1, 0.08, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 45, "t": "2026-11-03T07:52:14.275", "t_unix": 1793659934.275, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 3, "held_sec": 4.914, "accepted": true, "measured_before": [4.74, 19.33, 2.1, 0.08, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659934.318569, "measured_before_send": [4.74, 19.33, 2.1, 0.08, -0.08, -29.79], "reached": true, "reached_angles": [6.67, 19.33, 2.1, 0.08, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 46, "t": "2026-11-03T07:52:15.922", "t_unix": 1793659935.923, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 4, "held_sec": 6.562, "accepted": true, "measured_before": [6.67, 19.33, 2.1, 0.08, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [8.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659935.954588, "measured_before_send": [6.67, 19.33, 2.1, 0.08, -0.08, -29.79], "reached": true, "reached_angles": [8.52, 19.33, 2.1, 0.17, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 47, "t": "2026-11-03T07:52:17.523", "t_unix": 1793659937.524, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 5, "held_sec": 8.163, "accepted": true, "measured_before": [8.52, 19.33, 2.1, 0.17, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659937.562735, "measured_before_send": [8.52, 19.33, 2.1, 0.17, -0.08, -29.79], "reached": true, "reached_angles": [10.63, 19.33, 2.1, 0.17, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 48, "t": "2026-11-03T07:52:19.144", "t_unix": 1793659939.145, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 6, "held_sec": 9.784, "accepted": true, "measured_before": [10.63, 19.33, 2.1, 0.17, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659939.172077, "measured_before_send": [10.63, 19.33, 2.1, 0.17, -0.08, -29.79], "reached": true, "reached_angles": [12.83, 19.33, 2.1, 0.08, -0.08, -29.79], "reach_err": 1.1, "elapsed_sec": 0.02, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 49, "t": "2026-11-03T07:52:20.781", "t_unix": 1793659940.781, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 18, "hold_n": 7, "held_sec": 11.418, "accepted": true, "released_during_job": true, "measured_before": [12.83, 19.33, 2.1, 0.08, -0.08, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [14.57, 18.23, 1.31, -0.26, -0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793659940.817589, "measured_before_send": [12.83, 19.33, 2.1, 0.08, -0.08, -29.79], "reached": true, "reached_angles": [14.85, 19.33, 2.1, 0.08, -0.08, -29.88], "reach_err": 1.1, "elapsed_sec": 0.03, "grip_state": "open", "stopped": false, "stop_reason": null}
{"seq": 50, "t": "2026-11-03T07:53:49.760", "t_unix": 1793660029.76, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 1, "step_deg": 0.5, "execute": true, "held_sec": 1.009, "accepted": true, "measured_before": [14.67, 19.33, 2.1, 0.08, -0.08, -29.88], "command": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0], "range_check": "skipped_for_home", "sent": true, "timeout_sec": 8.0, "t_send": 1793660029.817137, "measured_before_send": [14.67, 19.33, 2.1, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [0.0, 1.31, 2.02, 0.08, -0.08, -29.88], "reach_err": 2.02, "elapsed_sec": 0.01, "grip_state": "open", "stopped": false, "stop_reason": null}
```

### 7:57 の記録 runs/experiments/gamepad_teleop/teleop_20261103_075657/meta.json

```json
{
  "run_stem": "teleop_20261103_075657",
  "started_at": "2026-11-03T07:56:58",
  "execute": true,
  "argv": [
    "tools/gamepad_teleop.py",
    "--execute"
  ],
  "controllers": [
    {
      "name": "PS4 Controller",
      "guid": "03008fe54c050000cc09000000016800",
      "instance_id": 0,
      "axes": 6,
      "buttons": 16,
      "hats": 0,
      "connected_at": "2026-11-03T07:57:03"
    }
  ],
  "python": "3.12.12 | packaged by conda-forge | (main, Oct 22 2025, 23:34:53) [Clang 19.1.7 ]",
  "pygame": "2.6.1",
  "sdl": "2.28.4",
  "platform": "macOS-26.6.2-arm64-arm-64bit",
  "start_pose": [
    -0.26,
    1.31,
    2.02,
    0.08,
    -0.08,
    -29.88
  ],
  "guards": {
    "J1_MAX_DEG": 90.87,
    "range": "physical_limits (no base window. 2026-11-03)",
    "J4_SAFE": [
      -90.0,
      60.0
    ],
    "JOINT_LIMITS": [
      [
        -156.0,
        161.0
      ],
      [
        -79.0,
        123.0
      ],
      [
        -177.0,
        177.0
      ],
      [
        -156.0,
        162.0
      ],
      [
        -118.0,
        118.0
      ],
      [
        -177.0,
        178.0
      ]
    ],
    "window": {
      "lo": [
        -156.0,
        -79.0,
        -177.0,
        -156.0,
        -90.0,
        -177.0
      ],
      "hi": [
        161.0,
        90.87,
        177.0,
        162.0,
        60.0,
        178.0
      ]
    },
    "home_bypasses_range_check": true
  },
  "motion": {
    "speed": 20,
    "step_fine_deg": 1.0,
    "step_coarse_deg": 2.0,
    "reach_tol_deg": 3.0,
    "reach_timeout_min_sec": 8.0,
    "poll_sec": 0.3,
    "gripper_sleep_sec": 0.8,
    "grip_close_value": 20,
    "send_wait": 0.0,
    "home": [
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      -30.0
    ],
    "home_hold_sec": 1.0,
    "trigger_stop_above": 0.0,
    "hold_start_sec": 0.4,
    "hold_interval_sec": 0.2,
    "hold_lead_max_deg": 3.0,
    "hold_wait_max_sec": 3.0,
    "j0_left_sign": -1.0,
    "up_sign": -1.0,
    "select_order": [
      1,
      2,
      3,
      4,
      5
    ]
  },
  "button_map": {
    "0": "cross",
    "1": "circle",
    "2": "square",
    "3": "triangle",
    "4": "share",
    "5": "home",
    "6": "options",
    "7": "l3",
    "8": "r3",
    "9": "l1",
    "10": "r1",
    "11": "dpad_up",
    "12": "dpad_down",
    "13": "dpad_left",
    "14": "dpad_right",
    "15": "touchpad"
  },
  "git": {
    "commit": "36def3cc1216f2bcaa937994a99968e38366009c",
    "script_status": "M tools/gamepad_teleop.py"
  },
  "script_copy": "gamepad_teleop.py",
  "script_sha256": "cfa6f4108c9658c7a7d770d36a9c15261a9f057a8307eabd832883bff1bb090c",
  "ended_at": "2026-11-03T08:06:44",
  "end_reason": "ctrl_c",
  "n_sent": 371
}
```

### 7:57 の記録 runs/experiments/gamepad_teleop/teleop_20261103_075657/log.jsonl（437行）

```json
{"seq": 1, "t": "2026-11-03T07:57:15.566", "t_unix": 1793660235.567, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 0, "accepted": true, "measured_before": [-0.26, 1.31, 2.02, 0.08, -0.08, -29.88], "start_source": "command", "cmd_gap_deg": 0.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660235.644908, "measured_before_send": [-0.26, 1.31, 2.02, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-0.26, 1.31, 2.02, 0.08, -0.08, -29.88], "reach_err": 1.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 2, "t": "2026-11-03T07:57:15.977", "t_unix": 1793660235.977, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 1, "held_sec": 0.412, "accepted": true, "measured_before": [-1.05, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660236.023721, "measured_before_send": [-0.96, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-1.05, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 1.21, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 3, "t": "2026-11-03T07:57:16.178", "t_unix": 1793660236.179, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 2, "held_sec": 0.613, "accepted": true, "measured_before": [-1.66, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.001, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660236.2086022, "measured_before_send": [-1.75, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-2.54, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 4, "t": "2026-11-03T07:57:16.382", "t_unix": 1793660236.383, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 3, "held_sec": 0.817, "accepted": true, "measured_before": [-2.1, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.16, "start_source": "command", "cmd_gap_deg": 1.16, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660236.414411, "measured_before_send": [-2.02, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-3.95, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 5, "t": "2026-11-03T07:57:16.786", "t_unix": 1793660236.787, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 4, "held_sec": 1.221, "accepted": true, "measured_before": [-4.57, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-5.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660236.839932, "measured_before_send": [-4.65, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-4.57, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 6, "t": "2026-11-03T07:57:16.987", "t_unix": 1793660236.988, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 5, "held_sec": 1.422, "accepted": true, "measured_before": [-4.65, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660237.027798, "measured_before_send": [-4.92, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-5.53, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 7, "t": "2026-11-03T07:57:17.189", "t_unix": 1793660237.19, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 6, "held_sec": 1.624, "accepted": true, "measured_before": [-5.88, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-7.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660237.23727, "measured_before_send": [-6.5, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-6.24, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 1.02, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 8, "t": "2026-11-03T07:57:17.391", "t_unix": 1793660237.392, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 7, "held_sec": 1.826, "accepted": true, "measured_before": [-5.97, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.29, "start_source": "command", "cmd_gap_deg": 1.29, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660237.437109, "measured_before_send": [-6.06, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-7.91, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 9, "t": "2026-11-03T07:57:17.824", "t_unix": 1793660237.825, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 8, "held_sec": 2.259, "accepted": true, "measured_before": [-8.34, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660237.866845, "measured_before_send": [-8.52, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-8.52, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 10, "t": "2026-11-03T07:57:18.026", "t_unix": 1793660238.026, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 9, "held_sec": 2.46, "accepted": true, "measured_before": [-8.7, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.002, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660238.080099, "measured_before_send": [-9.14, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-9.66, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 11, "t": "2026-11-03T07:57:18.242", "t_unix": 1793660238.243, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 10, "held_sec": 2.677, "accepted": true, "measured_before": [-9.66, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-11.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660238.294791, "measured_before_send": [-10.19, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-10.28, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 12, "t": "2026-11-03T07:57:18.444", "t_unix": 1793660238.444, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 11, "held_sec": 2.878, "accepted": true, "measured_before": [-9.84, 2.19, 2.81, 0.08, -0.08, -29.88], "hold_wait_sec": 0.001, "hold_lead_deg": 1.42, "start_source": "command", "cmd_gap_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-12.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660238.490706, "measured_before_send": [-9.84, 2.19, 2.81, 0.08, -0.08, -29.88], "reached": true, "reached_angles": [-10.01, 2.19, 2.81, 0.08, -0.08, -29.88], "reach_err": 2.25, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 13, "t": "2026-11-03T07:57:18.648", "t_unix": 1793660238.649, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 12, "held_sec": 3.083, "accepted": true, "measured_before": [-11.95, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660238.698723, "measured_before_send": [-12.65, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-12.65, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 0.88, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 14, "t": "2026-11-03T07:57:18.850", "t_unix": 1793660238.85, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 13, "held_sec": 3.284, "accepted": true, "measured_before": [-13.18, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660238.893207, "measured_before_send": [-13.62, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-14.06, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 15, "t": "2026-11-03T07:57:19.285", "t_unix": 1793660239.285, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 14, "held_sec": 3.719, "accepted": true, "measured_before": [-14.23, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-15.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660239.316937, "measured_before_send": [-14.32, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-14.5, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 16, "t": "2026-11-03T07:57:19.486", "t_unix": 1793660239.486, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 15, "held_sec": 3.92, "accepted": true, "measured_before": [-14.58, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-16.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660239.5197709, "measured_before_send": [-14.58, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-14.58, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 1.68, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 17, "t": "2026-11-03T07:57:19.688", "t_unix": 1793660239.688, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 16, "held_sec": 4.123, "accepted": true, "released_during_job": true, "measured_before": [-15.73, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-17.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660239.732013, "measured_before_send": [-16.52, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-16.78, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 18, "t": "2026-11-03T07:57:20.590", "t_unix": 1793660240.59, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 19, "t": "2026-11-03T07:57:21.010", "t_unix": 1793660241.011, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 0, "accepted": true, "measured_before": [-17.05, 2.19, 2.81, 0.08, -0.08, -29.97], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-19.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660241.057855, "measured_before_send": [-17.05, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-19.07, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 20, "t": "2026-11-03T07:57:21.444", "t_unix": 1793660241.444, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 1, "held_sec": 0.433, "accepted": true, "measured_before": [-19.51, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-21.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660241.4838898, "measured_before_send": [-19.59, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-19.68, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 1.58, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 21, "t": "2026-11-03T07:57:21.644", "t_unix": 1793660241.644, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 2, "held_sec": 0.633, "accepted": true, "measured_before": [-20.56, 2.19, 2.81, 0.08, -0.08, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-23.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660241.684182, "measured_before_send": [-21.18, 2.19, 2.81, 0.08, -0.08, -29.97], "reached": true, "reached_angles": [-21.88, 2.19, 2.81, 0.08, -0.08, -29.97], "reach_err": 1.38, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 22, "t": "2026-11-03T07:57:21.845", "t_unix": 1793660241.845, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 3, "held_sec": 0.835, "accepted": true, "measured_before": [-22.5, 2.19, 2.81, 0.08, -0.08, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-25.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660241.887035, "measured_before_send": [-23.46, 2.19, 2.81, 0.08, -0.08, -30.05], "reached": true, "reached_angles": [-23.9, 2.19, 2.81, 0.08, -0.08, -30.05], "reach_err": 1.36, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 23, "t": "2026-11-03T07:57:22.061", "t_unix": 1793660242.061, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 4, "held_sec": 1.051, "accepted": true, "measured_before": [-25.04, 2.19, 2.81, 0.08, -0.08, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-27.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660242.107905, "measured_before_send": [-25.75, 2.19, 2.81, 0.08, -0.08, -30.05], "reached": true, "reached_angles": [-25.83, 2.19, 2.81, 0.08, -0.08, -30.05], "reach_err": 1.43, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 24, "t": "2026-11-03T07:57:22.264", "t_unix": 1793660242.264, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 5, "held_sec": 1.254, "accepted": true, "measured_before": [-26.36, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.9, "start_source": "command", "cmd_gap_deg": 0.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-29.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660242.303458, "measured_before_send": [-27.33, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-27.94, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.32, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 25, "t": "2026-11-03T07:57:22.465", "t_unix": 1793660242.466, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 6, "held_sec": 1.455, "accepted": true, "measured_before": [-28.47, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-31.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660242.504035, "measured_before_send": [-29.0, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-29.88, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.38, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 26, "t": "2026-11-03T07:57:22.679", "t_unix": 1793660242.679, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 7, "held_sec": 1.669, "accepted": true, "measured_before": [-31.2, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-33.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660242.723691, "measured_before_send": [-31.9, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-31.81, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.45, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 27, "t": "2026-11-03T07:57:22.880", "t_unix": 1793660242.88, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 8, "held_sec": 1.869, "accepted": true, "measured_before": [-33.22, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-35.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660242.924792, "measured_before_send": [-33.83, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-33.83, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.43, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 28, "t": "2026-11-03T07:57:23.082", "t_unix": 1793660243.083, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 9, "held_sec": 2.072, "accepted": true, "measured_before": [-34.45, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-37.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660243.1275651, "measured_before_send": [-35.33, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-35.85, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.41, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 29, "t": "2026-11-03T07:57:23.298", "t_unix": 1793660243.299, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 10, "held_sec": 2.288, "accepted": true, "measured_before": [-36.91, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-39.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660243.343561, "measured_before_send": [-37.61, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-37.7, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.56, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 30, "t": "2026-11-03T07:57:23.501", "t_unix": 1793660243.501, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 11, "held_sec": 2.49, "accepted": true, "measured_before": [-38.75, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-41.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660243.5457861, "measured_before_send": [-39.55, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-39.9, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.36, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 31, "t": "2026-11-03T07:57:23.702", "t_unix": 1793660243.703, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 12, "held_sec": 2.692, "accepted": true, "measured_before": [-40.69, 2.19, 2.81, 0.08, -0.08, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-43.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660243.744169, "measured_before_send": [-41.57, 2.19, 2.81, 0.08, -0.08, -30.14], "reached": true, "reached_angles": [-41.83, 2.19, 2.81, 0.08, -0.08, -30.14], "reach_err": 1.43, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 32, "t": "2026-11-03T07:57:23.905", "t_unix": 1793660243.905, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 2, "hold_n": 13, "held_sec": 2.895, "accepted": true, "released_during_job": true, "measured_before": [-42.71, 2.19, 2.81, 0.08, -0.08, -30.23], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 1.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660243.9566112, "measured_before_send": [-43.68, 2.19, 2.81, 0.08, -0.08, -30.23], "reached": true, "reached_angles": [-45.0, 2.19, 2.81, 0.08, -0.08, -30.32], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 33, "t": "2026-11-03T07:57:30.009", "t_unix": 1793660250.009, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -1.0, "hold_id": 3, "hold_n": 0, "accepted": true, "measured_before": [-45.08, 2.19, 2.81, 0.08, -0.08, -30.32], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 0.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660250.080199, "measured_before_send": [-45.08, 2.19, 2.81, 0.08, -0.08, -30.32], "reached": true, "reached_angles": [-45.08, 2.19, 2.81, 0.08, -0.08, -30.32], "reach_err": 1.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 34, "t": "2026-11-03T07:57:31.222", "t_unix": 1793660251.223, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 35, "t": "2026-11-03T07:57:31.561", "t_unix": 1793660251.561, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 0, "accepted": true, "measured_before": [-45.08, 1.75, 2.81, 0.08, -0.08, -30.32], "start_source": "command", "cmd_gap_deg": 1.44, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -1.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660251.5998, "measured_before_send": [-45.08, 1.75, 2.81, 0.08, -0.08, -30.32], "reached": true, "reached_angles": [-45.35, -0.79, 2.81, 0.08, 0.0, -30.23], "reach_err": 0.9, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 36, "t": "2026-11-03T07:57:32.001", "t_unix": 1793660252.002, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 1, "held_sec": 0.44, "accepted": true, "measured_before": [-45.43, -0.79, 2.81, 0.08, 0.0, -30.23], "hold_wait_sec": 0.001, "hold_lead_deg": 0.9, "start_source": "command", "cmd_gap_deg": 0.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -3.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660252.047081, "measured_before_send": [-45.43, -0.79, 2.81, 0.08, 0.0, -30.23], "reached": true, "reached_angles": [-45.43, -0.79, 2.81, 0.08, 0.0, -30.23], "reach_err": 2.9, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 37, "t": "2026-11-03T07:57:32.216", "t_unix": 1793660252.216, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 2, "held_sec": 0.655, "accepted": true, "measured_before": [-45.52, -2.63, 2.81, 0.08, 0.17, -30.23], "hold_wait_sec": 0.0, "hold_lead_deg": 1.06, "start_source": "command", "cmd_gap_deg": 1.06, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -5.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660252.255449, "measured_before_send": [-45.52, -2.63, 2.81, 0.08, 0.17, -30.23], "reached": true, "reached_angles": [-45.35, -4.74, 2.81, 0.08, 0.26, -30.23], "reach_err": 0.95, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 38, "t": "2026-11-03T07:57:32.651", "t_unix": 1793660252.652, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 3, "held_sec": 1.09, "accepted": true, "measured_before": [-45.35, -4.74, 2.81, 0.08, 0.26, -30.23], "hold_wait_sec": 0.0, "hold_lead_deg": 0.95, "start_source": "command", "cmd_gap_deg": 0.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -7.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660252.695699, "measured_before_send": [-45.35, -4.74, 2.81, 0.08, 0.26, -30.23], "reached": true, "reached_angles": [-45.35, -4.74, 2.81, 0.08, 0.26, -30.23], "reach_err": 2.95, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 39, "t": "2026-11-03T07:57:32.852", "t_unix": 1793660252.853, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 4, "held_sec": 1.291, "accepted": true, "measured_before": [-45.35, -4.74, 2.81, 0.08, 0.26, -30.23], "hold_wait_sec": 0.0, "hold_lead_deg": 2.95, "start_source": "command", "cmd_gap_deg": 2.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -9.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660252.895089, "measured_before_send": [-45.35, -4.74, 2.81, 0.08, 0.26, -30.23], "reached": true, "reached_angles": [-45.35, -8.87, 2.81, 0.08, 0.35, -30.23], "reach_err": 0.82, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 40, "t": "2026-11-03T07:57:33.290", "t_unix": 1793660253.29, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 5, "held_sec": 1.729, "accepted": true, "measured_before": [-45.26, -8.87, 2.81, 0.08, 0.35, -30.23], "hold_wait_sec": 0.0, "hold_lead_deg": 0.82, "start_source": "command", "cmd_gap_deg": 0.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -11.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660253.331087, "measured_before_send": [-45.35, -8.87, 2.81, 0.08, 0.35, -30.23], "reached": true, "reached_angles": [-45.43, -10.89, 2.81, 0.08, 0.35, -30.23], "reach_err": 0.8, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 41, "t": "2026-11-03T07:57:33.724", "t_unix": 1793660253.724, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 6, "held_sec": 2.163, "accepted": true, "measured_before": [-45.43, -10.89, 2.81, 0.08, 0.35, -30.23], "hold_wait_sec": 0.005, "hold_lead_deg": 0.8, "start_source": "command", "cmd_gap_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -13.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660253.768179, "measured_before_send": [-45.43, -10.89, 2.81, 0.08, 0.35, -30.23], "reached": true, "reached_angles": [-45.43, -10.89, 2.81, 0.08, 0.35, -30.23], "reach_err": 2.8, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 42, "t": "2026-11-03T07:57:33.938", "t_unix": 1793660253.938, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 7, "held_sec": 2.377, "accepted": true, "measured_before": [-45.61, -12.91, 2.81, 0.08, 0.35, -30.23], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -15.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660253.9760058, "measured_before_send": [-45.52, -12.91, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.52, -12.83, 2.81, 0.08, 0.35, -30.14], "reach_err": 2.86, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 43, "t": "2026-11-03T07:57:34.154", "t_unix": 1793660254.155, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 8, "held_sec": 2.593, "accepted": true, "measured_before": [-45.52, -12.83, 2.81, 0.08, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 2.86, "start_source": "command", "cmd_gap_deg": 2.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -17.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660254.19135, "measured_before_send": [-45.52, -12.83, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.17, -17.05, 2.81, 0.08, 0.35, -30.14], "reach_err": 0.79, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 44, "t": "2026-11-03T07:57:34.590", "t_unix": 1793660254.59, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 9, "held_sec": 3.029, "accepted": true, "measured_before": [-45.17, -17.05, 2.81, 0.08, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -19.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660254.635597, "measured_before_send": [-45.17, -17.05, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.26, -18.98, 2.81, 0.08, 0.35, -30.14], "reach_err": 0.79, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 45, "t": "2026-11-03T07:57:35.052", "t_unix": 1793660255.053, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 10, "held_sec": 3.492, "accepted": true, "measured_before": [-45.26, -18.98, 2.81, 0.08, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -21.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660255.096569, "measured_before_send": [-45.26, -18.98, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.43, -21.09, 2.81, 0.08, 0.35, -30.14], "reach_err": 0.79, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 46, "t": "2026-11-03T07:57:35.505", "t_unix": 1793660255.505, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 11, "held_sec": 3.944, "accepted": true, "measured_before": [-45.43, -21.09, 2.81, 0.08, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -23.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660255.55174, "measured_before_send": [-45.43, -21.09, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.43, -23.2, 2.81, 0.08, 0.35, -30.14], "reach_err": 0.79, "elapsed_sec": 0.04, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 47, "t": "2026-11-03T07:57:35.963", "t_unix": 1793660255.964, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 12, "held_sec": 4.403, "accepted": true, "measured_before": [-45.43, -23.2, 2.81, 0.08, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -25.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660256.0094998, "measured_before_send": [-45.43, -23.2, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.43, -23.2, 2.81, 0.08, 0.35, -30.14], "reach_err": 2.49, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 48, "t": "2026-11-03T07:57:36.167", "t_unix": 1793660256.167, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 13, "held_sec": 4.606, "accepted": true, "measured_before": [-45.43, -23.2, 2.81, 0.08, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 2.49, "start_source": "command", "cmd_gap_deg": 2.49, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -27.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660256.2084181, "measured_before_send": [-45.43, -23.2, 2.81, 0.08, 0.35, -30.14], "reached": true, "reached_angles": [-45.17, -27.24, 2.81, 0.17, 0.35, -30.14], "reach_err": 0.79, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 49, "t": "2026-11-03T07:57:36.605", "t_unix": 1793660256.606, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 4, "hold_n": 14, "held_sec": 5.045, "accepted": true, "released_during_job": true, "measured_before": [-45.17, -27.24, 2.81, 0.17, 0.35, -30.14], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -29.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660256.6524632, "measured_before_send": [-45.17, -27.24, 2.81, 0.17, 0.35, -30.14], "reached": true, "reached_angles": [-45.17, -27.24, 2.81, 0.17, 0.35, -30.14], "reach_err": 2.45, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 50, "t": "2026-11-03T07:57:41.568", "t_unix": 1793660261.568, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 51, "t": "2026-11-03T07:57:41.767", "t_unix": 1793660261.768, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 0, "accepted": true, "measured_before": [-45.17, -29.26, 2.81, 0.17, 0.35, -30.05], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -27.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660261.821514, "measured_before_send": [-45.17, -29.26, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.17, -29.26, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.57, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 52, "t": "2026-11-03T07:57:42.171", "t_unix": 1793660262.172, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [-45.17, -27.42, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -25.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660262.228776, "measured_before_send": [-45.17, -27.33, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.17, -25.22, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.79, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 53, "t": "2026-11-03T07:57:42.622", "t_unix": 1793660262.622, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 2, "held_sec": 0.855, "accepted": true, "measured_before": [-45.17, -25.22, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -23.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660262.666371, "measured_before_send": [-45.17, -25.22, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.17, -25.22, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.53, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 54, "t": "2026-11-03T07:57:42.822", "t_unix": 1793660262.822, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 3, "held_sec": 1.055, "accepted": true, "measured_before": [-45.17, -25.22, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 1.53, "start_source": "command", "cmd_gap_deg": 1.53, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -21.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660262.862019, "measured_before_send": [-45.17, -25.22, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -21.0, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.79, "elapsed_sec": 0.33, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 55, "t": "2026-11-03T07:57:43.257", "t_unix": 1793660263.258, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 4, "held_sec": 1.491, "accepted": true, "measured_before": [-45.52, -21.0, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -19.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660263.2987049, "measured_before_send": [-45.52, -21.0, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -21.0, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 56, "t": "2026-11-03T07:57:43.457", "t_unix": 1793660263.458, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 5, "held_sec": 1.691, "accepted": true, "measured_before": [-45.52, -19.33, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -17.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660263.498792, "measured_before_send": [-45.52, -19.33, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -19.16, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.47, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 57, "t": "2026-11-03T07:57:43.660", "t_unix": 1793660263.661, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 6, "held_sec": 1.894, "accepted": true, "measured_before": [-45.52, -17.31, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -15.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660263.706743, "measured_before_send": [-45.52, -17.31, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -17.22, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.53, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 58, "t": "2026-11-03T07:57:43.876", "t_unix": 1793660263.877, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 7, "held_sec": 2.109, "accepted": true, "measured_before": [-45.52, -15.2, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -13.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660263.922875, "measured_before_send": [-45.52, -15.11, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.61, -15.11, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.42, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 59, "t": "2026-11-03T07:57:44.093", "t_unix": 1793660264.093, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 8, "held_sec": 2.326, "accepted": true, "measured_before": [-45.61, -13.0, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -11.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660264.136607, "measured_before_send": [-45.61, -13.0, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -13.0, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 60, "t": "2026-11-03T07:57:44.294", "t_unix": 1793660264.295, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 9, "held_sec": 2.527, "accepted": true, "measured_before": [-45.52, -11.16, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -9.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660264.3361568, "measured_before_send": [-45.52, -11.07, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.61, -8.96, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 61, "t": "2026-11-03T07:57:44.728", "t_unix": 1793660264.728, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 10, "held_sec": 2.961, "accepted": true, "measured_before": [-45.61, -8.96, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -7.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660264.759752, "measured_before_send": [-45.61, -8.96, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.61, -8.96, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.27, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 62, "t": "2026-11-03T07:57:44.929", "t_unix": 1793660264.929, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 11, "held_sec": 3.162, "accepted": true, "measured_before": [-45.52, -6.94, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -5.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660264.9723892, "measured_before_send": [-45.61, -6.94, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -4.92, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 63, "t": "2026-11-03T07:57:45.363", "t_unix": 1793660265.364, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 12, "held_sec": 3.597, "accepted": true, "measured_before": [-45.52, -4.92, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -3.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660265.402714, "measured_before_send": [-45.52, -4.92, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -4.92, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.23, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 64, "t": "2026-11-03T07:57:45.564", "t_unix": 1793660265.565, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 13, "held_sec": 3.797, "accepted": true, "measured_before": [-45.52, -2.98, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, -1.69, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660265.5936809, "measured_before_send": [-45.52, -2.98, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -0.87, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.82, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 65, "t": "2026-11-03T07:57:45.966", "t_unix": 1793660265.967, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 14, "held_sec": 4.199, "accepted": true, "measured_before": [-45.52, -0.87, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.001, "hold_lead_deg": 0.82, "start_source": "command", "cmd_gap_deg": 0.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 0.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660266.0113769, "measured_before_send": [-45.52, -0.87, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, -0.87, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.18, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 66, "t": "2026-11-03T07:57:46.182", "t_unix": 1793660266.183, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 15, "held_sec": 4.415, "accepted": true, "measured_before": [-45.52, 1.14, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.83, "start_source": "command", "cmd_gap_deg": 0.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 2.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660266.230478, "measured_before_send": [-45.52, 1.14, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, 3.25, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.94, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 67, "t": "2026-11-03T07:57:46.617", "t_unix": 1793660266.618, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 16, "held_sec": 4.851, "accepted": true, "measured_before": [-45.52, 3.25, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.94, "start_source": "command", "cmd_gap_deg": 0.94, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 4.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660266.659737, "measured_before_send": [-45.52, 3.25, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, 3.25, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.06, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 68, "t": "2026-11-03T07:57:46.820", "t_unix": 1793660266.821, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 17, "held_sec": 5.053, "accepted": true, "measured_before": [-45.52, 5.09, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 6.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660266.8509068, "measured_before_send": [-45.52, 5.18, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.61, 5.27, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.04, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 69, "t": "2026-11-03T07:57:47.023", "t_unix": 1793660267.023, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 18, "held_sec": 5.256, "accepted": true, "measured_before": [-45.52, 5.27, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 1.04, "start_source": "command", "cmd_gap_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 8.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660267.063049, "measured_before_send": [-45.52, 5.27, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.61, 9.4, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.09, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 70, "t": "2026-11-03T07:57:47.460", "t_unix": 1793660267.461, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 19, "held_sec": 5.693, "accepted": true, "measured_before": [-45.61, 9.4, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 1.09, "start_source": "command", "cmd_gap_deg": 1.09, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 10.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660267.5043352, "measured_before_send": [-45.61, 9.4, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.61, 9.4, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.91, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 71, "t": "2026-11-03T07:57:47.661", "t_unix": 1793660267.661, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 20, "held_sec": 5.894, "accepted": true, "measured_before": [-45.52, 11.16, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.85, "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 12.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660267.7081358, "measured_before_send": [-45.52, 11.25, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, 11.25, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.06, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 72, "t": "2026-11-03T07:57:47.861", "t_unix": 1793660267.862, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 5, "hold_n": 21, "held_sec": 6.094, "accepted": true, "released_during_job": true, "measured_before": [-45.52, 13.27, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.96, "start_source": "command", "cmd_gap_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-45.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660267.910586, "measured_before_send": [-45.52, 13.35, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 74, "t": "2026-11-03T07:57:49.681", "t_unix": 1793660269.682, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 73, "t": "2026-11-03T07:57:49.680", "t_unix": 1793660269.681, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 6, "hold_n": 0, "accepted": true, "measured_before": [-45.52, 15.29, 2.81, 0.17, 0.35, -30.05], "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-44.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660269.71542, "measured_before_send": [-45.52, 15.29, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-45.52, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.26, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 75, "t": "2026-11-03T07:57:50.082", "t_unix": 1793660270.083, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [-45.52, 15.29, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 1.26, "start_source": "command", "cmd_gap_deg": 1.26, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-42.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660270.122644, "measured_before_send": [-45.52, 15.29, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-42.45, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.98, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 76, "t": "2026-11-03T07:57:50.519", "t_unix": 1793660270.52, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 2, "held_sec": 0.839, "accepted": true, "measured_before": [-42.09, 15.29, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-40.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660270.56414, "measured_before_send": [-41.92, 15.29, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-41.83, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.57, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 77, "t": "2026-11-03T07:57:50.720", "t_unix": 1793660270.72, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 3, "held_sec": 1.04, "accepted": true, "measured_before": [-41.39, 15.29, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 1.13, "start_source": "command", "cmd_gap_deg": 1.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-38.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660270.754963, "measured_before_send": [-41.13, 15.29, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-38.49, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 78, "t": "2026-11-03T07:57:51.139", "t_unix": 1793660271.139, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 4, "held_sec": 1.459, "accepted": true, "measured_before": [-38.49, 15.29, 2.81, 0.17, 0.35, -30.05], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-36.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660271.182635, "measured_before_send": [-38.4, 15.29, 2.81, 0.17, 0.35, -30.05], "reached": true, "reached_angles": [-38.23, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.97, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 79, "t": "2026-11-03T07:57:51.339", "t_unix": 1793660271.34, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 5, "held_sec": 1.659, "accepted": true, "measured_before": [-37.08, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-34.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660271.368198, "measured_before_send": [-36.73, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-35.77, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.51, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 80, "t": "2026-11-03T07:57:51.540", "t_unix": 1793660271.541, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 6, "held_sec": 1.86, "accepted": true, "measured_before": [-36.56, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 2.3, "start_source": "command", "cmd_gap_deg": 2.3, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-32.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660271.571816, "measured_before_send": [-36.47, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-32.69, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 0.98, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 81, "t": "2026-11-03T07:57:51.957", "t_unix": 1793660271.958, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 7, "held_sec": 2.278, "accepted": true, "measured_before": [-32.25, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-30.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660271.998917, "measured_before_send": [-31.99, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-31.72, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.46, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 82, "t": "2026-11-03T07:57:52.158", "t_unix": 1793660272.158, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 8, "held_sec": 2.478, "accepted": true, "measured_before": [-30.84, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-28.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660272.199142, "measured_before_send": [-30.23, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-29.44, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.18, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 83, "t": "2026-11-03T07:57:52.358", "t_unix": 1793660272.358, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 9, "held_sec": 2.678, "accepted": true, "measured_before": [-28.82, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-26.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660272.3983512, "measured_before_send": [-28.03, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-27.5, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.24, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 84, "t": "2026-11-03T07:57:52.560", "t_unix": 1793660272.561, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 10, "held_sec": 2.88, "accepted": true, "measured_before": [-26.71, 15.29, 2.81, 0.17, 0.35, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-24.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660272.598171, "measured_before_send": [-25.83, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-25.48, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.22, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 85, "t": "2026-11-03T07:57:52.761", "t_unix": 1793660272.761, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 11, "held_sec": 3.081, "accepted": true, "measured_before": [-24.34, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660272.8136792, "measured_before_send": [-23.55, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-22.14, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 0.98, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 86, "t": "2026-11-03T07:57:53.214", "t_unix": 1793660273.215, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 12, "held_sec": 3.534, "accepted": true, "measured_before": [-21.7, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-20.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660273.262235, "measured_before_send": [-21.62, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-21.88, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.62, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 87, "t": "2026-11-03T07:57:53.415", "t_unix": 1793660273.415, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 13, "held_sec": 3.735, "accepted": true, "measured_before": [-20.91, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-18.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660273.454481, "measured_before_send": [-20.21, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-18.36, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 88, "t": "2026-11-03T07:57:53.836", "t_unix": 1793660273.836, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 14, "held_sec": 4.156, "accepted": true, "measured_before": [-17.84, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-16.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660273.884904, "measured_before_send": [-17.66, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-17.66, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.4, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 89, "t": "2026-11-03T07:57:54.040", "t_unix": 1793660274.04, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 15, "held_sec": 4.36, "accepted": true, "measured_before": [-17.4, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 1.14, "start_source": "command", "cmd_gap_deg": 1.14, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660274.082322, "measured_before_send": [-16.78, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-15.46, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.2, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 90, "t": "2026-11-03T07:57:54.244", "t_unix": 1793660274.245, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 16, "held_sec": 4.564, "accepted": true, "measured_before": [-14.76, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-12.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660274.2874298, "measured_before_send": [-13.97, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-13.62, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.36, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 91, "t": "2026-11-03T07:57:54.461", "t_unix": 1793660274.462, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 17, "held_sec": 4.782, "accepted": true, "measured_before": [-11.95, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660274.491233, "measured_before_send": [-11.68, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-11.51, 15.29, 2.81, 0.17, 0.35, -30.05], "reach_err": 1.25, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 92, "t": "2026-11-03T07:57:54.663", "t_unix": 1793660274.664, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 18, "held_sec": 4.983, "accepted": true, "measured_before": [-9.93, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660274.691243, "measured_before_send": [-9.75, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-8.08, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 0.98, "elapsed_sec": 0.04, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 93, "t": "2026-11-03T07:57:55.109", "t_unix": 1793660275.11, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 19, "held_sec": 5.43, "accepted": true, "measured_before": [-7.82, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660275.187287, "measured_before_send": [-8.08, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-6.32, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 94, "t": "2026-11-03T07:57:55.581", "t_unix": 1793660275.581, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 20, "held_sec": 5.901, "accepted": true, "measured_before": [-5.88, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660275.622123, "measured_before_send": [-5.8, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-5.97, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.71, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 95, "t": "2026-11-03T07:57:55.797", "t_unix": 1793660275.797, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 21, "held_sec": 6.117, "accepted": true, "measured_before": [-3.86, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660275.843201, "measured_before_send": [-3.6, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-4.3, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 2.04, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 96, "t": "2026-11-03T07:57:56.014", "t_unix": 1793660276.014, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 22, "held_sec": 6.334, "accepted": true, "measured_before": [-1.75, 15.29, 2.81, 0.17, 0.35, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.26, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660276.0550761, "measured_before_send": [-1.58, 15.29, 2.81, 0.17, 0.35, -29.97], "reached": true, "reached_angles": [-0.35, 15.29, 2.81, 0.17, 0.35, -29.88], "reach_err": 0.98, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 97, "t": "2026-11-03T07:57:56.449", "t_unix": 1793660276.449, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 23, "held_sec": 6.769, "accepted": true, "measured_before": [0.17, 15.29, 2.81, 0.17, 0.35, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.74, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660276.492535, "measured_before_send": [0.26, 15.29, 2.81, 0.17, 0.35, -29.88], "reached": true, "reached_angles": [1.49, 15.29, 2.81, 0.17, 0.35, -29.88], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 98, "t": "2026-11-03T07:57:56.867", "t_unix": 1793660276.868, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 24, "held_sec": 7.188, "accepted": true, "measured_before": [1.66, 15.29, 2.81, 0.17, 0.35, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.74, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660276.918798, "measured_before_send": [1.93, 15.29, 2.81, 0.17, 0.35, -29.88], "reached": true, "reached_angles": [2.1, 15.29, 2.81, 0.17, 0.35, -29.88], "reach_err": 1.64, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 99, "t": "2026-11-03T07:57:57.082", "t_unix": 1793660277.083, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 25, "held_sec": 7.402, "accepted": true, "measured_before": [2.72, 15.29, 2.81, 0.17, 0.35, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.02, "start_source": "command", "cmd_gap_deg": 1.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [5.74, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660277.126474, "measured_before_send": [2.98, 15.29, 2.81, 0.17, 0.35, -29.88], "reached": true, "reached_angles": [4.39, 15.29, 2.81, 0.17, 0.35, -29.97], "reach_err": 1.35, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 100, "t": "2026-11-03T07:57:57.299", "t_unix": 1793660277.299, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 6, "hold_n": 26, "held_sec": 7.619, "accepted": true, "released_during_job": true, "measured_before": [5.71, 15.29, 2.81, 0.17, 0.35, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 2.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660277.33318, "measured_before_send": [6.15, 15.29, 2.81, 0.17, 0.35, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 2.81, 0.17, 0.35, -29.88], "reach_err": 0.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 101, "t": "2026-11-03T07:57:59.765", "t_unix": 1793660279.765, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 102, "t": "2026-11-03T07:58:00.767", "t_unix": 1793660280.767, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 103, "t": "2026-11-03T07:58:00.849", "t_unix": 1793660280.849, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 0, "accepted": true, "measured_before": [7.82, 15.29, 2.81, 0.17, 0.35, -29.88], "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 4.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660280.891107, "measured_before_send": [7.82, 15.29, 2.81, 0.17, 0.35, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 2.81, 0.17, 0.35, -29.88], "reach_err": 1.21, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 104, "t": "2026-11-03T07:58:01.252", "t_unix": 1793660281.252, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [7.82, 15.29, 4.83, 0.17, 0.0, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 6.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660281.285989, "measured_before_send": [7.82, 15.29, 4.83, 0.17, 0.0, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 4.83, 0.17, 0.0, -29.88], "reach_err": 1.19, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 105, "t": "2026-11-03T07:58:01.454", "t_unix": 1793660281.455, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 2, "held_sec": 0.605, "accepted": true, "measured_before": [7.82, 15.29, 6.24, 0.17, -0.08, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 8.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660281.498336, "measured_before_send": [7.82, 15.29, 6.59, 0.17, -0.08, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 6.85, 0.17, -0.08, -29.88], "reach_err": 1.17, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 106, "t": "2026-11-03T07:58:01.670", "t_unix": 1793660281.671, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 3, "held_sec": 0.821, "accepted": true, "measured_before": [7.82, 15.29, 8.43, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 10.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660281.710088, "measured_before_send": [7.82, 15.29, 8.7, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 8.96, 0.17, -0.43, -29.88], "reach_err": 1.06, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 107, "t": "2026-11-03T07:58:01.871", "t_unix": 1793660281.872, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 4, "held_sec": 1.022, "accepted": true, "measured_before": [7.82, 15.29, 8.96, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.06, "start_source": "command", "cmd_gap_deg": 1.06, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 12.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660281.910748, "measured_before_send": [7.82, 15.29, 8.96, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 12.91, 0.17, -0.96, -29.88], "reach_err": 0.98, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 108, "t": "2026-11-03T07:58:02.305", "t_unix": 1793660282.306, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 5, "held_sec": 1.457, "accepted": true, "released_during_job": true, "measured_before": [7.82, 15.29, 13.0, 0.17, -0.96, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.98, "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 14.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660282.345958, "measured_before_send": [7.82, 15.29, 13.0, 0.17, -0.96, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 13.0, 0.17, -0.96, -29.88], "reach_err": 1.02, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 109, "t": "2026-11-03T07:58:03.210", "t_unix": 1793660283.211, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 8, "hold_n": 0, "accepted": true, "measured_before": [7.82, 15.29, 14.76, 0.17, -0.96, -29.88], "start_source": "command", "cmd_gap_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 12.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660283.2492428, "measured_before_send": [7.82, 15.29, 14.76, 0.17, -0.96, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 13.79, 0.17, -0.96, -29.88], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 110, "t": "2026-11-03T07:58:03.628", "t_unix": 1793660283.628, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 8, "hold_n": 1, "held_sec": 0.418, "accepted": true, "measured_before": [7.82, 15.29, 13.79, 0.17, -0.96, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.77, "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 10.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660283.669873, "measured_before_send": [7.82, 15.29, 13.79, 0.17, -0.96, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 11.51, 0.17, -0.96, -29.88], "reach_err": 1.49, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 111, "t": "2026-11-03T07:58:04.060", "t_unix": 1793660284.061, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 8, "hold_n": 2, "held_sec": 0.85, "accepted": true, "measured_before": [7.82, 15.29, 11.51, 0.17, -0.96, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.49, "start_source": "command", "cmd_gap_deg": 1.49, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 8.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660284.105587, "measured_before_send": [7.82, 15.29, 11.51, 0.17, -0.96, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 9.58, 0.17, -0.96, -29.88], "reach_err": 1.56, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 113, "t": "2026-11-03T07:58:06.970", "t_unix": 1793660286.97, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 114, "t": "2026-11-03T07:58:07.418", "t_unix": 1793660287.418, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 9, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 115, "t": "2026-11-03T07:58:09.360", "t_unix": 1793660289.36, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 116, "t": "2026-11-03T07:58:09.827", "t_unix": 1793660289.828, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 10, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 117, "t": "2026-11-03T07:58:11.773", "t_unix": 1793660291.774, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 118, "t": "2026-11-03T07:58:12.405", "t_unix": 1793660292.406, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 119, "t": "2026-11-03T07:58:12.659", "t_unix": 1793660292.66, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 11, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 112, "t": "2026-11-03T07:58:04.510", "t_unix": 1793660284.51, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 8, "hold_n": 3, "held_sec": 1.3, "accepted": true, "released_during_job": true, "measured_before": [7.82, 15.29, 9.58, 0.17, -0.96, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.56, "start_source": "command", "cmd_gap_deg": 1.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.74, 14.31, 6.02, 0.08, -0.08, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660284.5546088, "measured_before_send": [7.82, 15.29, 9.58, 0.17, -0.96, -29.88], "reached": false, "reached_angles": [7.82, 15.29, 9.49, 0.17, -0.52, -29.88], "reach_err": 3.47, "elapsed_sec": 8.08, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 121, "t": "2026-11-03T07:58:14.929", "t_unix": 1793660294.93, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 120, "t": "2026-11-03T07:58:14.831", "t_unix": 1793660294.832, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 12, "hold_n": 0, "accepted": true, "measured_before": [7.82, 15.29, 9.49, 0.17, -0.43, -29.88], "start_source": "measured", "cmd_gap_deg": 3.47, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [8.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660294.90182, "measured_before_send": [7.82, 15.29, 9.49, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [7.82, 15.29, 9.49, 0.17, -0.43, -29.88], "reach_err": 1.0, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 122, "t": "2026-11-03T07:58:15.245", "t_unix": 1793660295.246, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 1, "held_sec": 0.415, "accepted": true, "measured_before": [8.96, 16.08, 10.1, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660295.299039, "measured_before_send": [8.78, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [8.61, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 2.21, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 123, "t": "2026-11-03T07:58:15.448", "t_unix": 1793660295.449, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 2, "held_sec": 0.618, "accepted": true, "measured_before": [9.93, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.89, "start_source": "command", "cmd_gap_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660295.484555, "measured_before_send": [10.72, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [11.51, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 124, "t": "2026-11-03T07:58:15.664", "t_unix": 1793660295.664, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 3, "held_sec": 0.833, "accepted": true, "measured_before": [13.09, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [14.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660295.705355, "measured_before_send": [13.27, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [12.91, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.91, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 125, "t": "2026-11-03T07:58:15.864", "t_unix": 1793660295.865, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 4, "held_sec": 1.034, "accepted": true, "measured_before": [14.32, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660295.905005, "measured_before_send": [14.94, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [15.38, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.44, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 126, "t": "2026-11-03T07:58:16.065", "t_unix": 1793660296.065, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 5, "held_sec": 1.235, "accepted": true, "measured_before": [16.17, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [18.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660296.105154, "measured_before_send": [16.96, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [17.4, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.42, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 127, "t": "2026-11-03T07:58:16.266", "t_unix": 1793660296.267, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 6, "held_sec": 1.436, "accepted": true, "measured_before": [18.45, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660296.306135, "measured_before_send": [18.89, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [19.42, 16.08, 10.19, 0.17, -0.43, -29.97], "reach_err": 1.4, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 128, "t": "2026-11-03T07:58:16.470", "t_unix": 1793660296.47, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 7, "held_sec": 1.64, "accepted": true, "measured_before": [20.3, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [22.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660296.514248, "measured_before_send": [21.0, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [20.91, 16.08, 10.19, 0.17, -0.43, -29.97], "reach_err": 1.91, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 129, "t": "2026-11-03T07:58:16.670", "t_unix": 1793660296.67, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 12, "hold_n": 8, "held_sec": 1.84, "accepted": true, "released_during_job": true, "measured_before": [20.83, 16.08, 10.19, 0.17, -0.43, -29.97], "hold_wait_sec": 0.0, "hold_lead_deg": 1.99, "start_source": "command", "cmd_gap_deg": 1.99, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [24.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660296.719158, "measured_before_send": [20.83, 16.08, 10.19, 0.17, -0.43, -29.97], "reached": true, "reached_angles": [24.69, 16.08, 10.19, 0.17, -0.43, -29.97], "reach_err": 0.79, "elapsed_sec": 0.36, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 131, "t": "2026-11-03T07:58:17.560", "t_unix": 1793660297.56, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 130, "t": "2026-11-03T07:58:17.559", "t_unix": 1793660297.559, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 13, "hold_n": 0, "accepted": true, "measured_before": [24.96, 16.08, 10.19, 0.17, -0.43, -29.97], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [23.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660297.6013162, "measured_before_send": [24.96, 16.08, 10.19, 0.17, -0.43, -29.97], "reached": true, "reached_angles": [24.96, 16.08, 10.19, 0.17, -0.43, -29.97], "reach_err": 1.14, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 132, "t": "2026-11-03T07:58:17.962", "t_unix": 1793660297.963, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [24.08, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [21.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660298.008842, "measured_before_send": [24.08, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [22.06, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 133, "t": "2026-11-03T07:58:18.395", "t_unix": 1793660298.396, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 2, "held_sec": 0.837, "accepted": true, "measured_before": [21.79, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [19.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660298.44534, "measured_before_send": [21.7, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [21.62, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.8, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 134, "t": "2026-11-03T07:58:18.596", "t_unix": 1793660298.596, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 3, "held_sec": 1.037, "accepted": true, "measured_before": [21.0, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.18, "start_source": "command", "cmd_gap_deg": 1.18, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [17.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660298.6367848, "measured_before_send": [20.39, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [19.24, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.42, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 135, "t": "2026-11-03T07:58:18.812", "t_unix": 1793660298.812, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 4, "held_sec": 1.253, "accepted": true, "measured_before": [18.01, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [15.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660298.853267, "measured_before_send": [17.49, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [17.31, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.49, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 136, "t": "2026-11-03T07:58:19.014", "t_unix": 1793660299.014, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 5, "held_sec": 1.455, "accepted": true, "measured_before": [16.25, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [13.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660299.05326, "measured_before_send": [15.55, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [13.88, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 137, "t": "2026-11-03T07:58:19.431", "t_unix": 1793660299.432, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 6, "held_sec": 1.873, "accepted": true, "measured_before": [13.71, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [11.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660299.474314, "measured_before_send": [13.62, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [12.04, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 138, "t": "2026-11-03T07:58:19.865", "t_unix": 1793660299.866, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 7, "held_sec": 2.307, "accepted": true, "measured_before": [11.6, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.001, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660299.906579, "measured_before_send": [11.51, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [10.01, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 139, "t": "2026-11-03T07:58:20.301", "t_unix": 1793660300.302, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 8, "held_sec": 2.742, "accepted": true, "measured_before": [9.49, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660300.3438568, "measured_before_send": [9.4, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [9.66, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.84, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 140, "t": "2026-11-03T07:58:20.504", "t_unix": 1793660300.504, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 9, "held_sec": 2.945, "accepted": true, "measured_before": [7.91, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [5.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660300.544645, "measured_before_send": [7.38, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [7.47, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.65, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 141, "t": "2026-11-03T07:58:20.707", "t_unix": 1793660300.708, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 10, "held_sec": 3.148, "accepted": true, "measured_before": [6.24, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660300.740536, "measured_before_send": [5.88, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [5.27, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.45, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 142, "t": "2026-11-03T07:58:20.910", "t_unix": 1793660300.911, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 11, "held_sec": 3.352, "accepted": true, "measured_before": [3.77, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.82, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660300.9387589, "measured_before_send": [3.51, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [3.25, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.43, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 143, "t": "2026-11-03T07:58:21.125", "t_unix": 1793660301.126, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 12, "held_sec": 3.567, "accepted": true, "measured_before": [1.23, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.18, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660301.1670341, "measured_before_send": [1.14, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [0.08, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 144, "t": "2026-11-03T07:58:21.561", "t_unix": 1793660301.561, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 13, "held_sec": 4.002, "accepted": true, "measured_before": [-0.43, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.18, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660301.601652, "measured_before_send": [-0.43, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [-0.43, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.75, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 145, "t": "2026-11-03T07:58:21.765", "t_unix": 1793660301.765, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 14, "held_sec": 4.206, "accepted": true, "measured_before": [-1.93, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.18, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660301.805223, "measured_before_send": [-2.54, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [-2.54, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.64, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 146, "t": "2026-11-03T07:58:21.965", "t_unix": 1793660301.966, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 13, "hold_n": 15, "held_sec": 4.406, "accepted": true, "measured_before": [-3.51, 16.08, 10.19, 0.17, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660302.0048692, "measured_before_send": [-4.21, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [-4.83, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 1.35, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 147, "t": "2026-11-03T07:58:22.669", "t_unix": 1793660302.67, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 148, "t": "2026-11-03T07:58:22.969", "t_unix": 1793660302.969, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 14, "hold_n": 0, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 0.17, -0.43, -29.88], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 2.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660303.015115, "measured_before_send": [-6.41, 16.08, 10.19, 0.17, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 0.17, -0.43, -29.88], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 149, "t": "2026-11-03T07:58:23.371", "t_unix": 1793660303.371, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 14, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 1.84, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 4.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660303.427147, "measured_before_send": [-6.41, 16.08, 10.19, 1.84, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 3.86, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 150, "t": "2026-11-03T07:58:23.824", "t_unix": 1793660303.825, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 14, "hold_n": 2, "held_sec": 0.856, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 3.86, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 6.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660303.86488, "measured_before_send": [-6.41, 16.08, 10.19, 3.86, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 3.86, -0.43, -29.88], "reach_err": 2.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 151, "t": "2026-11-03T07:58:24.041", "t_unix": 1793660304.042, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 14, "hold_n": 3, "held_sec": 1.073, "accepted": true, "released_during_job": true, "measured_before": [-6.41, 16.08, 10.19, 3.86, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 2.31, "start_source": "command", "cmd_gap_deg": 2.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 8.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660304.0805829, "measured_before_send": [-6.41, 16.08, 10.19, 3.86, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 7.82, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.33, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 152, "t": "2026-11-03T07:58:24.696", "t_unix": 1793660304.697, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 0, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 7.82, -0.43, -29.88], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 6.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660304.7407942, "measured_before_send": [-6.41, 16.08, 10.19, 7.82, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 7.82, -0.43, -29.88], "reach_err": 1.65, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 153, "t": "2026-11-03T07:58:25.112", "t_unix": 1793660305.113, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 1, "held_sec": 0.417, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 7.2, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.03, "start_source": "command", "cmd_gap_deg": 1.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 4.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660305.15249, "measured_before_send": [-6.41, 16.08, 10.19, 7.2, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 5.0, -0.43, -29.88], "reach_err": 0.83, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 154, "t": "2026-11-03T07:58:25.545", "t_unix": 1793660305.545, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 2, "held_sec": 0.849, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 5.0, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.83, "start_source": "command", "cmd_gap_deg": 0.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 2.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660305.585922, "measured_before_send": [-6.41, 16.08, 10.19, 5.0, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 5.0, -0.43, -29.88], "reach_err": 2.83, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 155, "t": "2026-11-03T07:58:25.745", "t_unix": 1793660305.745, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 3, "held_sec": 1.049, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 2.9, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, 0.17, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660305.774976, "measured_before_send": [-6.41, 16.08, 10.19, 2.9, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 2.9, -0.43, -29.88], "reach_err": 2.73, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 156, "t": "2026-11-03T07:58:25.947", "t_unix": 1793660305.948, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 4, "held_sec": 1.252, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, 0.96, -0.43, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -1.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660305.988775, "measured_before_send": [-6.41, 16.08, 10.19, 0.96, -0.43, -29.79], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, 0.96, -0.43, -29.79], "reach_err": 2.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 157, "t": "2026-11-03T07:58:26.148", "t_unix": 1793660306.148, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 5, "held_sec": 1.452, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -0.7, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.13, "start_source": "command", "cmd_gap_deg": 1.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -3.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660306.193459, "measured_before_send": [-6.41, 16.08, 10.19, -0.7, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -2.81, -0.43, -29.88], "reach_err": 1.02, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 158, "t": "2026-11-03T07:58:26.580", "t_unix": 1793660306.581, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 6, "held_sec": 1.885, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -2.81, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.02, "start_source": "command", "cmd_gap_deg": 1.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -5.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660306.6273448, "measured_before_send": [-6.41, 16.08, 10.19, -2.81, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -4.83, -0.43, -29.88], "reach_err": 1.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 159, "t": "2026-11-03T07:58:27.019", "t_unix": 1793660307.02, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 7, "held_sec": 2.324, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -4.83, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.0, "start_source": "command", "cmd_gap_deg": 1.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -7.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660307.0563352, "measured_before_send": [-6.41, 16.08, 10.19, -4.83, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -5.0, -0.43, -29.88], "reach_err": 2.83, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 160, "t": "2026-11-03T07:58:27.221", "t_unix": 1793660307.222, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 8, "held_sec": 2.526, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -6.94, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.89, "start_source": "command", "cmd_gap_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -9.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660307.268466, "measured_before_send": [-6.41, 16.08, 10.19, -6.94, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -6.94, -0.43, -29.88], "reach_err": 2.89, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 161, "t": "2026-11-03T07:58:27.423", "t_unix": 1793660307.424, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 9, "held_sec": 2.728, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -6.94, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 2.89, "start_source": "command", "cmd_gap_deg": 2.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -11.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660307.464525, "measured_before_send": [-6.41, 16.08, 10.19, -6.94, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -10.98, -0.43, -29.88], "reach_err": 0.85, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 162, "t": "2026-11-03T07:58:27.872", "t_unix": 1793660307.872, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 10, "held_sec": 3.176, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -10.98, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.85, "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -13.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660307.914779, "measured_before_send": [-6.41, 16.08, 10.19, -10.98, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -13.0, -0.43, -29.88], "reach_err": 0.83, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 163, "t": "2026-11-03T07:58:28.308", "t_unix": 1793660308.309, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 11, "held_sec": 3.612, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -13.0, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.83, "start_source": "command", "cmd_gap_deg": 0.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -15.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660308.353423, "measured_before_send": [-6.41, 16.08, 10.19, -13.0, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -15.02, -0.43, -29.88], "reach_err": 0.81, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 164, "t": "2026-11-03T07:58:28.746", "t_unix": 1793660308.747, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 12, "held_sec": 4.051, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -15.02, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.81, "start_source": "command", "cmd_gap_deg": 0.81, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -17.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660308.7926369, "measured_before_send": [-6.41, 16.08, 10.19, -15.02, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -16.96, -0.43, -29.88], "reach_err": 0.87, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 165, "t": "2026-11-03T07:58:29.200", "t_unix": 1793660309.203, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 13, "held_sec": 4.504, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -16.96, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.87, "start_source": "command", "cmd_gap_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -19.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660309.249179, "measured_before_send": [-6.41, 16.08, 10.19, -16.96, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -17.05, -0.43, -29.88], "reach_err": 2.78, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 166, "t": "2026-11-03T07:58:29.400", "t_unix": 1793660309.401, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 15, "hold_n": 14, "held_sec": 4.705, "accepted": true, "released_during_job": true, "measured_before": [-6.41, 16.08, 10.19, -17.05, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 2.78, "start_source": "command", "cmd_gap_deg": 2.78, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -21.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660309.446528, "measured_before_send": [-6.41, 16.08, 10.19, -17.05, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -21.09, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 168, "t": "2026-11-03T07:58:30.138", "t_unix": 1793660310.139, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 167, "t": "2026-11-03T07:58:30.136", "t_unix": 1793660310.137, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 1.0, "hold_id": 16, "hold_n": 0, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -21.09, -0.43, -29.88], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -20.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660310.178657, "measured_before_send": [-6.41, 16.08, 10.19, -21.09, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -21.18, -0.43, -29.88], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 169, "t": "2026-11-03T07:58:30.536", "t_unix": 1793660310.537, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -21.18, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -18.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660310.5761878, "measured_before_send": [-6.41, 16.08, 10.19, -21.18, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -21.18, -0.43, -29.88], "reach_err": 2.35, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 170, "t": "2026-11-03T07:58:30.739", "t_unix": 1793660310.739, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 2, "held_sec": 0.604, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -19.86, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.03, "start_source": "command", "cmd_gap_deg": 1.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -16.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660310.785012, "measured_before_send": [-6.41, 16.08, 10.19, -19.86, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -17.84, -0.43, -29.88], "reach_err": 1.01, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 171, "t": "2026-11-03T07:58:31.189", "t_unix": 1793660311.189, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 3, "held_sec": 1.054, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -17.84, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 1.01, "start_source": "command", "cmd_gap_deg": 1.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -14.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660311.228378, "measured_before_send": [-6.41, 16.08, 10.19, -17.84, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -15.64, -0.43, -29.88], "reach_err": 0.81, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 172, "t": "2026-11-03T07:58:31.624", "t_unix": 1793660311.625, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 4, "held_sec": 1.489, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -15.64, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.81, "start_source": "command", "cmd_gap_deg": 0.81, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -12.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660311.667872, "measured_before_send": [-6.41, 16.08, 10.19, -15.64, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -15.64, -0.43, -29.88], "reach_err": 2.81, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 173, "t": "2026-11-03T07:58:31.826", "t_unix": 1793660311.826, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 5, "held_sec": 1.691, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -15.64, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 2.81, "start_source": "command", "cmd_gap_deg": 2.81, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -10.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660311.8649302, "measured_before_send": [-6.41, 16.08, 10.19, -15.64, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -11.68, -0.43, -29.88], "reach_err": 0.85, "elapsed_sec": 0.33, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 174, "t": "2026-11-03T07:58:32.260", "t_unix": 1793660312.26, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 6, "held_sec": 2.125, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -11.68, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.85, "start_source": "command", "cmd_gap_deg": 0.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -8.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660312.301153, "measured_before_send": [-6.41, 16.08, 10.19, -11.68, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -11.42, -0.43, -29.88], "reach_err": 2.59, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 175, "t": "2026-11-03T07:58:32.464", "t_unix": 1793660312.465, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 7, "held_sec": 2.329, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -9.58, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -6.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660312.4976902, "measured_before_send": [-6.41, 16.08, 10.19, -9.58, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -9.49, -0.43, -29.88], "reach_err": 2.66, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 176, "t": "2026-11-03T07:58:32.667", "t_unix": 1793660312.667, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 8, "held_sec": 2.532, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -7.47, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -4.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660312.69649, "measured_before_send": [-6.41, 16.08, 10.19, -7.47, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -7.47, -0.43, -29.88], "reach_err": 2.64, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 177, "t": "2026-11-03T07:58:32.869", "t_unix": 1793660312.869, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 9, "held_sec": 2.734, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -5.44, -0.43, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -2.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660312.904862, "measured_before_send": [-6.41, 16.08, 10.19, -5.44, -0.43, -29.79], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -5.44, -0.43, -29.88], "reach_err": 2.61, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 178, "t": "2026-11-03T07:58:33.083", "t_unix": 1793660313.083, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 16, "hold_n": 10, "held_sec": 2.948, "accepted": true, "released_during_job": true, "measured_before": [-6.41, 16.08, 10.19, -3.51, -0.43, -29.79], "hold_wait_sec": 0.0, "hold_lead_deg": 0.79, "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -0.83, -0.43, -29.88], "sent": false, "why": "halted_before_send", "measured_before_send": [-6.41, 16.08, 10.19, -3.51, -0.43, -29.79], "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 179, "t": "2026-11-03T07:58:33.521", "t_unix": 1793660313.521, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 181, "t": "2026-11-03T07:58:34.224", "t_unix": 1793660314.224, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 18, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 180, "t": "2026-11-03T07:58:33.921", "t_unix": 1793660313.922, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 17, "hold_n": 0, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -3.42, -0.43, -29.88], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -0.83, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660313.966215, "measured_before_send": [-6.41, 16.08, 10.19, -3.42, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -1.31, -0.43, -29.79], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 182, "t": "2026-11-03T07:58:35.564", "t_unix": 1793660315.565, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 183, "t": "2026-11-03T07:58:36.171", "t_unix": 1793660316.171, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 184, "t": "2026-11-03T07:58:36.254", "t_unix": 1793660316.254, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 19, "hold_n": 0, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -1.23, -0.43, -29.88], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -0.83, -2.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660316.293802, "measured_before_send": [-6.41, 16.08, 10.19, -1.23, -0.43, -29.88], "reached": true, "reached_angles": [-6.41, 16.08, 10.19, -1.23, -0.43, -29.88], "reach_err": 2.0, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 186, "t": "2026-11-03T07:58:38.105", "t_unix": 1793660318.106, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 187, "t": "2026-11-03T07:58:38.374", "t_unix": 1793660318.375, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 20, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 188, "t": "2026-11-03T07:58:42.197", "t_unix": 1793660322.198, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 189, "t": "2026-11-03T07:58:42.283", "t_unix": 1793660322.283, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 21, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 185, "t": "2026-11-03T07:58:36.656", "t_unix": 1793660316.656, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 19, "hold_n": 1, "held_sec": 0.402, "accepted": true, "released_during_job": true, "measured_before": [-6.41, 16.08, 10.19, -1.23, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 2.0, "start_source": "command", "cmd_gap_deg": 2.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.18, 15.29, 9.49, -0.83, -4.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660316.695947, "measured_before_send": [-6.41, 16.08, 10.19, -1.23, -0.43, -29.88], "reached": false, "reached_angles": [-6.41, 16.08, 10.19, -1.05, -0.43, -29.88], "reach_err": 4.0, "elapsed_sec": 8.09, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 190, "t": "2026-11-03T07:58:45.923", "t_unix": 1793660325.923, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 191, "t": "2026-11-03T07:58:46.427", "t_unix": 1793660326.427, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 192, "t": "2026-11-03T07:58:47.231", "t_unix": 1793660327.231, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 22, "hold_n": 0, "accepted": true, "measured_before": [-6.41, 16.08, 10.19, -1.05, -0.43, -29.88], "start_source": "measured", "cmd_gap_deg": 4.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.41, 16.08, 10.19, -1.05, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660327.301569, "measured_before_send": [-6.41, 16.08, 10.19, -1.05, -0.43, -29.88], "reached": true, "reached_angles": [-4.65, 16.96, 10.89, -1.05, -0.43, -29.88], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 193, "t": "2026-11-03T07:58:47.700", "t_unix": 1793660327.7, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 22, "hold_n": 1, "held_sec": 0.469, "accepted": true, "measured_before": [-4.57, 16.96, 10.89, -1.05, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.41, 16.08, 10.19, -1.05, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660327.734216, "measured_before_send": [-4.39, 16.96, 10.89, -1.05, -0.43, -29.88], "reached": true, "reached_angles": [-4.13, 16.96, 10.89, -1.05, -0.43, -29.88], "reach_err": 1.72, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 194, "t": "2026-11-03T07:58:47.901", "t_unix": 1793660327.901, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 22, "hold_n": 2, "held_sec": 0.67, "accepted": true, "measured_before": [-2.81, 16.96, 10.89, -0.96, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.41, 16.08, 10.19, -1.05, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660327.939639, "measured_before_send": [-2.28, 16.96, 10.89, -0.96, -0.43, -29.88], "reached": true, "reached_angles": [-1.75, 16.96, 10.89, -0.96, -0.43, -29.88], "reach_err": 1.34, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 195, "t": "2026-11-03T07:58:48.117", "t_unix": 1793660328.117, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 22, "hold_n": 3, "held_sec": 0.886, "accepted": true, "measured_before": [0.17, 16.96, 10.89, -0.96, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.59, 16.08, 10.19, -1.05, -0.43, -29.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660328.157973, "measured_before_send": [0.17, 16.96, 10.89, -0.96, -0.43, -29.88], "reached": true, "reached_angles": [-0.26, 16.96, 10.89, -0.96, -0.43, -29.88], "reach_err": 1.85, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 196, "t": "2026-11-03T07:58:48.816", "t_unix": 1793660328.817, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 23, "hold_n": 0, "accepted": true, "measured_before": [1.75, 16.96, 10.89, -0.87, -0.43, -29.88], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.59, 16.08, 10.19, -1.05, -0.43, -27.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660328.856802, "measured_before_send": [1.75, 16.96, 10.89, -0.87, -0.43, -29.88], "reached": true, "reached_angles": [1.49, 16.96, 10.89, -0.87, -0.43, -29.88], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 197, "t": "2026-11-03T07:58:49.250", "t_unix": 1793660329.251, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 23, "hold_n": 1, "held_sec": 0.434, "accepted": true, "measured_before": [1.49, 16.96, 10.89, -0.87, -0.43, -29.88], "hold_wait_sec": 0.0, "hold_lead_deg": 2.0, "start_source": "command", "cmd_gap_deg": 2.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.59, 16.08, 10.19, -1.05, -0.43, -25.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660329.292091, "measured_before_send": [1.49, 16.96, 10.89, -0.87, -0.43, -29.88], "reached": true, "reached_angles": [1.49, 16.96, 10.89, -0.87, -0.43, -26.19], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 198, "t": "2026-11-03T07:58:49.687", "t_unix": 1793660329.688, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 23, "hold_n": 2, "held_sec": 0.871, "accepted": true, "measured_before": [1.49, 16.96, 10.89, -0.87, -0.43, -26.19], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.59, 16.08, 10.19, -1.05, -0.43, -23.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660329.727376, "measured_before_send": [1.49, 16.96, 10.89, -0.87, -0.43, -26.19], "reached": true, "reached_angles": [1.49, 16.96, 10.89, -0.87, -0.43, -26.19], "reach_err": 2.31, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 200, "t": "2026-11-03T07:58:50.867", "t_unix": 1793660330.868, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 24, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 201, "t": "2026-11-03T07:58:54.171", "t_unix": 1793660334.171, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 25, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 202, "t": "2026-11-03T07:58:56.531", "t_unix": 1793660336.532, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 5, "delta": -1.0, "hold_id": 26, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 199, "t": "2026-11-03T07:58:49.890", "t_unix": 1793660329.89, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 23, "hold_n": 3, "held_sec": 1.074, "accepted": true, "released_during_job": true, "measured_before": [1.49, 16.96, 10.89, -0.87, -0.43, -26.19], "hold_wait_sec": 0.0, "hold_lead_deg": 2.31, "start_source": "command", "cmd_gap_deg": 2.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.59, 16.08, 10.19, -1.05, -0.43, -21.88], "sent": true, "timeout_sec": 8.0, "t_send": 1793660329.935411, "measured_before_send": [1.49, 16.96, 10.89, -0.87, -0.43, -26.19], "reached": false, "reached_angles": [1.49, 16.96, 10.89, -0.87, -0.43, -26.1], "reach_err": 4.22, "elapsed_sec": 8.12, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 203, "t": "2026-11-03T07:58:59.758", "t_unix": 1793660339.758, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 204, "t": "2026-11-03T07:59:00.072", "t_unix": 1793660340.072, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 0, "accepted": true, "measured_before": [1.49, 16.96, 10.89, -0.87, -0.43, -26.1], "start_source": "measured", "cmd_gap_deg": 4.22, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -28.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660340.122713, "measured_before_send": [1.49, 16.96, 10.89, -0.87, -0.43, -26.1], "reached": true, "reached_angles": [1.49, 16.96, 10.89, -0.87, -0.43, -26.1], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 205, "t": "2026-11-03T07:59:00.473", "t_unix": 1793660340.473, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [1.49, 17.84, 11.16, -0.79, -0.43, -26.71], "hold_wait_sec": 0.0, "hold_lead_deg": 1.39, "start_source": "command", "cmd_gap_deg": 1.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -30.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660340.544039, "measured_before_send": [1.49, 17.84, 11.42, -0.79, -0.43, -26.71], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -28.82], "reach_err": 1.28, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 206, "t": "2026-11-03T07:59:00.942", "t_unix": 1793660340.943, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 2, "held_sec": 0.87, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -28.91], "hold_wait_sec": 0.0, "hold_lead_deg": 1.19, "start_source": "command", "cmd_gap_deg": 1.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -32.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660340.991959, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -28.91], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -30.93], "reach_err": 1.17, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 207, "t": "2026-11-03T07:59:01.378", "t_unix": 1793660341.379, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 3, "held_sec": 1.307, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -30.93], "hold_wait_sec": 0.0, "hold_lead_deg": 1.17, "start_source": "command", "cmd_gap_deg": 1.17, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -34.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660341.419602, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -30.93], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -32.95], "reach_err": 1.15, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 208, "t": "2026-11-03T07:59:01.817", "t_unix": 1793660341.818, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 4, "held_sec": 1.746, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -32.95], "hold_wait_sec": 0.0, "hold_lead_deg": 1.15, "start_source": "command", "cmd_gap_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -36.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660341.858724, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -32.95], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -35.06], "reach_err": 1.04, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 209, "t": "2026-11-03T07:59:02.257", "t_unix": 1793660342.257, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 5, "held_sec": 2.185, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -35.06], "hold_wait_sec": 0.0, "hold_lead_deg": 1.04, "start_source": "command", "cmd_gap_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -38.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660342.291797, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -35.06], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -37.17], "reach_err": 0.93, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 210, "t": "2026-11-03T07:59:02.676", "t_unix": 1793660342.677, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 6, "held_sec": 2.605, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -37.17], "hold_wait_sec": 0.003, "hold_lead_deg": 0.93, "start_source": "command", "cmd_gap_deg": 0.93, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -40.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660342.727416, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -37.17], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -37.17], "reach_err": 2.93, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 211, "t": "2026-11-03T07:59:02.877", "t_unix": 1793660342.878, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 7, "held_sec": 2.806, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -39.19], "hold_wait_sec": 0.0, "hold_lead_deg": 0.91, "start_source": "command", "cmd_gap_deg": 0.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -42.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660342.923738, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -39.19], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -39.19], "reach_err": 2.91, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 212, "t": "2026-11-03T07:59:03.078", "t_unix": 1793660343.079, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 27, "hold_n": 8, "held_sec": 3.007, "accepted": true, "released_during_job": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -41.22], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -44.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660343.134194, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -41.22], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -43.24], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 213, "t": "2026-11-03T07:59:03.712", "t_unix": 1793660343.713, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 214, "t": "2026-11-03T07:59:03.963", "t_unix": 1793660343.963, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 0, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -43.33], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -42.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660344.030858, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -43.33], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -42.89], "reach_err": 0.88, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 215, "t": "2026-11-03T07:59:04.429", "t_unix": 1793660344.43, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 1, "held_sec": 0.467, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -42.89], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -40.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660344.47254, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -42.89], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -42.89], "reach_err": 2.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 216, "t": "2026-11-03T07:59:04.633", "t_unix": 1793660344.634, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 2, "held_sec": 0.671, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -42.89], "hold_wait_sec": 0.0, "hold_lead_deg": 2.79, "start_source": "command", "cmd_gap_deg": 2.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -38.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660344.659515, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -42.89], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -38.84], "reach_err": 0.88, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 217, "t": "2026-11-03T07:59:05.054", "t_unix": 1793660345.054, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 3, "held_sec": 1.09, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -38.84], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -36.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660345.089757, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -38.84], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -36.73], "reach_err": 0.88, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 218, "t": "2026-11-03T07:59:05.471", "t_unix": 1793660345.472, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 4, "held_sec": 1.509, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.79, -0.43, -36.73], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -34.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660345.510669, "measured_before_send": [1.49, 17.84, 11.51, -0.79, -0.43, -36.73], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.79, -0.43, -34.71], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 219, "t": "2026-11-03T07:59:05.892", "t_unix": 1793660345.893, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 5, "held_sec": 1.93, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -0.43, -34.71], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -32.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660345.935015, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -0.43, -34.71], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -0.43, -32.6], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 220, "t": "2026-11-03T07:59:06.331", "t_unix": 1793660346.331, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 6, "held_sec": 2.368, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -0.43, -32.6], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -30.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660346.374609, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -0.43, -32.6], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -0.43, -30.58], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 221, "t": "2026-11-03T07:59:06.770", "t_unix": 1793660346.771, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 7, "held_sec": 2.808, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -0.43, -30.58], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -28.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660346.8121002, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -0.43, -30.58], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -0.43, -30.58], "reach_err": 2.48, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 222, "t": "2026-11-03T07:59:06.971", "t_unix": 1793660346.972, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 28, "hold_n": 8, "held_sec": 3.009, "accepted": true, "released_during_job": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -0.43, -28.56], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -0.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660347.011073, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -0.43, -28.56], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -0.43, -26.54], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 223, "t": "2026-11-03T07:59:08.662", "t_unix": 1793660348.663, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 224, "t": "2026-11-03T07:59:08.864", "t_unix": 1793660348.864, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 225, "t": "2026-11-03T07:59:09.110", "t_unix": 1793660349.111, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 226, "t": "2026-11-03T07:59:09.567", "t_unix": 1793660349.567, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 227, "t": "2026-11-03T07:59:10.404", "t_unix": 1793660350.404, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 228, "t": "2026-11-03T07:59:10.855", "t_unix": 1793660350.856, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 0, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -0.43, -26.45], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -2.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660350.899272, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -0.43, -26.45], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -0.43, -26.45], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 229, "t": "2026-11-03T07:59:11.257", "t_unix": 1793660351.258, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -0.61, -26.45], "hold_wait_sec": 0.001, "hold_lead_deg": 1.82, "start_source": "command", "cmd_gap_deg": 1.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -4.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660351.298898, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -0.61, -26.45], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -3.16, -26.45], "reach_err": 1.27, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 230, "t": "2026-11-03T07:59:11.696", "t_unix": 1793660351.697, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 2, "held_sec": 0.841, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -3.16, -26.45], "hold_wait_sec": 0.0, "hold_lead_deg": 1.27, "start_source": "command", "cmd_gap_deg": 1.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -6.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660351.738185, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -3.16, -26.45], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -5.36, -26.45], "reach_err": 1.07, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 231, "t": "2026-11-03T07:59:12.148", "t_unix": 1793660352.148, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 3, "held_sec": 1.292, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -5.36, -26.45], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -8.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660352.194895, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -5.36, -26.45], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -7.29, -26.45], "reach_err": 1.14, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 232, "t": "2026-11-03T07:59:12.583", "t_unix": 1793660352.583, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 4, "held_sec": 1.728, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -7.29, -26.45], "hold_wait_sec": 0.0, "hold_lead_deg": 1.14, "start_source": "command", "cmd_gap_deg": 1.14, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -10.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660352.6221719, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -7.29, -26.45], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -9.49, -26.36], "reach_err": 0.94, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 233, "t": "2026-11-03T07:59:13.019", "t_unix": 1793660353.02, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 5, "held_sec": 2.164, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.7, -9.49, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 0.94, "start_source": "command", "cmd_gap_deg": 0.94, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -12.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660353.057997, "measured_before_send": [1.49, 17.84, 11.51, -0.7, -9.49, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.7, -9.49, -26.36], "reach_err": 2.94, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 234, "t": "2026-11-03T07:59:13.222", "t_unix": 1793660353.223, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 6, "held_sec": 2.367, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -11.42, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 1.01, "start_source": "command", "cmd_gap_deg": 1.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -14.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660353.26241, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -11.42, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.61, -13.44, -26.36], "reach_err": 0.99, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 235, "t": "2026-11-03T07:59:13.658", "t_unix": 1793660353.658, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 7, "held_sec": 2.802, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -13.44, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 0.99, "start_source": "command", "cmd_gap_deg": 0.99, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -16.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660353.699199, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -13.44, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.61, -13.44, -26.36], "reach_err": 2.99, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 236, "t": "2026-11-03T07:59:13.861", "t_unix": 1793660353.861, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 8, "held_sec": 3.006, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -15.38, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 1.05, "start_source": "command", "cmd_gap_deg": 1.05, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -18.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660353.891066, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -15.38, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.61, -17.57, -26.36], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 237, "t": "2026-11-03T07:59:14.265", "t_unix": 1793660354.266, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 9, "held_sec": 3.41, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -17.57, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -20.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660354.306706, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -17.57, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.61, -17.57, -26.36], "reach_err": 2.86, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 238, "t": "2026-11-03T07:59:14.468", "t_unix": 1793660354.469, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 10, "held_sec": 3.613, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -19.51, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 0.92, "start_source": "command", "cmd_gap_deg": 0.92, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -22.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660354.510849, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -19.51, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.61, -21.62, -26.36], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 239, "t": "2026-11-03T07:59:14.902", "t_unix": 1793660354.902, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 11, "held_sec": 4.046, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -21.62, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -24.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660354.944399, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -21.62, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.61, -21.62, -26.36], "reach_err": 2.81, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 240, "t": "2026-11-03T07:59:15.103", "t_unix": 1793660355.104, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 12, "held_sec": 4.248, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.61, -21.62, -26.36], "hold_wait_sec": 0.0, "hold_lead_deg": 2.81, "start_source": "command", "cmd_gap_deg": 2.81, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -26.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660355.14708, "measured_before_send": [1.49, 17.84, 11.51, -0.61, -21.62, -26.36], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.52, -25.92, -26.27], "reach_err": 0.88, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 241, "t": "2026-11-03T07:59:15.536", "t_unix": 1793660355.536, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 13, "held_sec": 4.681, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.52, -25.92, -26.27], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -28.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660355.5819058, "measured_before_send": [1.49, 17.84, 11.51, -0.52, -25.92, -26.27], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.52, -25.92, -26.27], "reach_err": 2.51, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 242, "t": "2026-11-03T07:59:15.736", "t_unix": 1793660355.736, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 14, "held_sec": 4.881, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.52, -27.24, -26.27], "hold_wait_sec": 0.0, "hold_lead_deg": 1.19, "start_source": "command", "cmd_gap_deg": 1.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660355.7780962, "measured_before_send": [1.49, 17.84, 11.51, -0.52, -27.33, -26.27], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.52, -29.79, -26.27], "reach_err": 0.88, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 243, "t": "2026-11-03T07:59:16.187", "t_unix": 1793660356.188, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 29, "hold_n": 15, "held_sec": 5.332, "accepted": true, "released_during_job": true, "measured_before": [1.49, 17.84, 11.51, -0.52, -29.79, -26.27], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -32.43, -26.1], "sent": false, "why": "halted_before_send", "measured_before_send": [1.49, 17.84, 11.51, -0.52, -29.79, -26.27], "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 244, "t": "2026-11-03T08:01:46.212", "t_unix": 1793660506.213, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 0, "accepted": true, "measured_before": [1.49, 17.84, 11.51, -0.52, -30.58, -26.27], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660506.293783, "measured_before_send": [1.49, 17.84, 11.51, -0.52, -30.58, -26.27], "reached": true, "reached_angles": [1.49, 17.84, 11.51, -0.52, -30.58, -26.27], "reach_err": 1.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 245, "t": "2026-11-03T08:01:46.624", "t_unix": 1793660506.625, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 1, "held_sec": 0.414, "accepted": true, "measured_before": [0.35, 17.84, 11.51, -0.17, -30.58, -26.27], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660506.675235, "measured_before_send": [0.52, 17.84, 11.51, -0.17, -30.58, -26.27], "reached": true, "reached_angles": [0.61, 17.84, 11.51, -0.17, -30.58, -26.27], "reach_err": 1.12, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 246, "t": "2026-11-03T08:01:46.826", "t_unix": 1793660506.827, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 2, "held_sec": 0.617, "accepted": true, "measured_before": [-0.52, 17.84, 11.51, -0.43, -30.58, -26.27], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660506.8633971, "measured_before_send": [-0.7, 17.84, 11.51, -0.43, -30.58, -26.27], "reached": true, "reached_angles": [-1.4, 17.84, 11.51, 0.08, -30.58, -26.27], "reach_err": 0.95, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 247, "t": "2026-11-03T08:01:47.253", "t_unix": 1793660507.253, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 3, "held_sec": 1.043, "accepted": true, "measured_before": [-1.31, 17.84, 11.51, 0.0, -30.58, -26.19], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660507.299157, "measured_before_send": [-1.31, 17.84, 11.51, 0.0, -30.58, -26.19], "reached": true, "reached_angles": [-1.4, 17.84, 11.51, 0.0, -30.58, -26.19], "reach_err": 1.11, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 248, "t": "2026-11-03T08:01:47.455", "t_unix": 1793660507.455, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 4, "held_sec": 1.245, "accepted": true, "measured_before": [-2.1, 17.84, 11.51, -0.26, -30.58, -26.19], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660507.5002828, "measured_before_send": [-2.37, 17.84, 11.51, -0.26, -30.58, -26.19], "reached": true, "reached_angles": [-2.72, 17.84, 11.51, 0.26, -30.58, -26.19], "reach_err": 1.13, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 249, "t": "2026-11-03T08:01:47.655", "t_unix": 1793660507.656, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 5, "held_sec": 1.445, "accepted": true, "measured_before": [-2.37, 17.84, 11.51, 0.17, -30.58, -26.19], "hold_wait_sec": 0.0, "hold_lead_deg": 1.14, "start_source": "command", "cmd_gap_deg": 1.14, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660507.69473, "measured_before_send": [-2.28, 17.84, 11.51, 0.17, -30.58, -26.19], "reached": true, "reached_angles": [-2.28, 17.84, 11.51, 0.17, -30.58, -26.19], "reach_err": 2.23, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 250, "t": "2026-11-03T08:01:47.856", "t_unix": 1793660507.857, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 6, "held_sec": 1.647, "accepted": true, "measured_before": [-4.74, 17.84, 11.51, -0.52, -30.58, -26.19], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-5.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660507.901718, "measured_before_send": [-5.0, 17.84, 11.51, -0.26, -30.58, -26.19], "reached": true, "reached_angles": [-5.0, 17.84, 11.51, 0.52, -30.58, -26.1], "reach_err": 1.39, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 251, "t": "2026-11-03T08:01:48.058", "t_unix": 1793660508.059, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 7, "held_sec": 1.849, "accepted": true, "measured_before": [-5.18, 17.84, 11.51, -0.43, -30.58, -26.01], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660508.106257, "measured_before_send": [-5.62, 17.84, 11.51, -0.43, -30.58, -26.01], "reached": true, "reached_angles": [-6.5, 17.84, 11.51, 0.08, -30.58, -25.83], "reach_err": 0.95, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 252, "t": "2026-11-03T08:01:48.492", "t_unix": 1793660508.493, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 8, "held_sec": 2.283, "accepted": true, "measured_before": [-6.32, 17.84, 11.51, 0.08, -30.58, -25.83], "hold_wait_sec": 0.0, "hold_lead_deg": 0.95, "start_source": "command", "cmd_gap_deg": 0.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-7.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660508.538771, "measured_before_send": [-6.32, 17.84, 11.51, 0.08, -30.58, -25.83], "reached": true, "reached_angles": [-6.32, 17.84, 11.51, 0.08, -30.58, -25.75], "reach_err": 1.19, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 253, "t": "2026-11-03T08:01:48.696", "t_unix": 1793660508.696, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 9, "held_sec": 2.486, "accepted": true, "measured_before": [-7.64, 17.84, 11.51, -0.35, -30.58, -25.75], "hold_wait_sec": 0.001, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660508.7552278, "measured_before_send": [-7.91, 17.84, 11.51, -0.17, -30.58, -25.75], "reached": true, "reached_angles": [-7.91, 17.84, 11.51, 0.17, -30.58, -25.75], "reach_err": 1.04, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 254, "t": "2026-11-03T08:01:48.897", "t_unix": 1793660508.898, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 10, "held_sec": 2.687, "accepted": true, "measured_before": [-7.73, 17.84, 11.51, -0.26, -30.58, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660508.940454, "measured_before_send": [-7.91, 17.84, 11.51, -0.35, -30.58, -25.75], "reached": true, "reached_angles": [-8.61, 17.84, 11.51, -0.35, -30.58, -25.75], "reach_err": 0.9, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 255, "t": "2026-11-03T08:01:49.098", "t_unix": 1793660509.099, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 30, "hold_n": 11, "held_sec": 2.889, "accepted": true, "released_during_job": true, "measured_before": [-8.7, 17.84, 11.51, 0.08, -30.58, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.95, "start_source": "command", "cmd_gap_deg": 0.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660509.139372, "measured_before_send": [-8.7, 17.84, 11.51, 0.0, -30.58, -25.75], "reached": true, "reached_angles": [-9.14, 17.84, 11.51, -0.43, -30.58, -25.75], "reach_err": 1.37, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 256, "t": "2026-11-03T08:01:49.567", "t_unix": 1793660509.567, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 0, "accepted": true, "measured_before": [-10.1, 17.84, 11.51, -0.26, -30.58, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660509.611615, "measured_before_send": [-10.1, 17.84, 11.51, -0.26, -30.58, -25.75], "reached": true, "reached_angles": [-10.1, 17.84, 11.51, -0.26, -30.58, -25.75], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 257, "t": "2026-11-03T08:01:49.968", "t_unix": 1793660509.969, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [-9.22, 17.84, 11.51, -0.43, -30.58, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660510.006434, "measured_before_send": [-9.22, 17.84, 11.51, -0.43, -30.58, -25.75], "reached": true, "reached_angles": [-9.31, 17.84, 11.51, -0.43, -30.58, -25.75], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 258, "t": "2026-11-03T08:01:50.184", "t_unix": 1793660510.185, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 2, "held_sec": 0.618, "accepted": true, "measured_before": [-9.31, 17.84, 11.51, -0.43, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-7.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660510.230158, "measured_before_send": [-9.31, 17.84, 11.51, -0.43, -30.58, -25.66], "reached": true, "reached_angles": [-9.31, 17.84, 11.51, -0.43, -30.58, -25.66], "reach_err": 1.8, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 259, "t": "2026-11-03T08:01:50.621", "t_unix": 1793660510.622, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 3, "held_sec": 1.054, "accepted": true, "measured_before": [-9.31, 17.84, 11.51, -0.43, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 1.8, "start_source": "command", "cmd_gap_deg": 1.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660510.666446, "measured_before_send": [-9.31, 17.84, 11.51, -0.43, -30.58, -25.66], "reached": true, "reached_angles": [-6.94, 17.84, 11.51, -0.43, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 260, "t": "2026-11-03T08:01:51.073", "t_unix": 1793660511.074, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 4, "held_sec": 1.507, "accepted": true, "measured_before": [-6.5, 17.84, 11.51, -0.43, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-5.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660511.1184971, "measured_before_send": [-6.32, 17.84, 11.51, -0.43, -30.58, -25.66], "reached": true, "reached_angles": [-6.24, 17.84, 11.51, -0.7, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 261, "t": "2026-11-03T08:01:51.277", "t_unix": 1793660511.277, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 5, "held_sec": 1.71, "accepted": true, "measured_before": [-6.24, 17.84, 11.51, -0.43, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660511.322129, "measured_before_send": [-5.97, 17.84, 11.51, -0.35, -30.58, -25.66], "reached": true, "reached_angles": [-5.09, 17.84, 11.51, -0.87, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 262, "t": "2026-11-03T08:01:51.481", "t_unix": 1793660511.481, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 6, "held_sec": 1.914, "accepted": true, "measured_before": [-5.44, 17.84, 11.51, -0.96, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.93, "start_source": "command", "cmd_gap_deg": 0.93, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660511.530443, "measured_before_send": [-5.62, 17.84, 11.51, -0.96, -30.58, -25.66], "reached": true, "reached_angles": [-5.8, 17.84, 11.51, -0.96, -30.58, -25.66], "reach_err": 2.29, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 263, "t": "2026-11-03T08:01:51.698", "t_unix": 1793660511.698, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 7, "held_sec": 2.131, "accepted": true, "measured_before": [-3.25, 17.84, 11.51, -0.35, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660511.738867, "measured_before_send": [-2.9, 17.84, 11.51, -0.79, -30.58, -25.66], "reached": true, "reached_angles": [-2.9, 17.84, 11.51, -1.31, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 264, "t": "2026-11-03T08:01:51.899", "t_unix": 1793660511.9, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 8, "held_sec": 2.332, "accepted": true, "measured_before": [-2.72, 17.84, 11.51, -0.43, -30.58, -25.57], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660511.941472, "measured_before_send": [-2.46, 17.84, 11.51, -0.52, -30.58, -25.57], "reached": true, "reached_angles": [-1.23, 17.84, 11.51, -1.05, -30.58, -25.57], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 265, "t": "2026-11-03T08:01:52.336", "t_unix": 1793660512.337, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 9, "held_sec": 2.77, "accepted": true, "measured_before": [-1.49, 17.84, 11.51, -1.05, -30.58, -25.57], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.51, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660512.3803542, "measured_before_send": [-1.58, 17.84, 11.51, -1.05, -30.58, -25.57], "reached": true, "reached_angles": [-1.75, 17.84, 11.51, -1.05, -30.58, -25.57], "reach_err": 1.24, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 266, "t": "2026-11-03T08:01:52.539", "t_unix": 1793660512.539, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 10, "held_sec": 2.972, "accepted": true, "measured_before": [-1.75, 17.84, 11.51, -1.05, -30.58, -25.57], "hold_wait_sec": 0.0, "hold_lead_deg": 1.24, "start_source": "command", "cmd_gap_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660512.580972, "measured_before_send": [-1.75, 17.84, 11.51, -1.05, -30.58, -25.57], "reached": true, "reached_angles": [-1.75, 17.84, 11.51, -1.05, -30.58, -25.57], "reach_err": 2.24, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 267, "t": "2026-11-03T08:01:52.743", "t_unix": 1793660512.744, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 11, "held_sec": 3.177, "accepted": true, "measured_before": [0.26, 17.84, 11.51, -0.43, -30.58, -25.57], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660512.7847319, "measured_before_send": [0.87, 17.84, 11.51, -0.52, -30.58, -25.57], "reached": true, "reached_angles": [1.4, 17.84, 11.51, -1.05, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 268, "t": "2026-11-03T08:01:53.185", "t_unix": 1793660513.185, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 12, "held_sec": 3.617, "accepted": true, "measured_before": [1.31, 17.84, 11.51, -1.05, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [2.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660513.246148, "measured_before_send": [1.31, 17.84, 11.51, -1.05, -30.58, -25.66], "reached": true, "reached_angles": [2.46, 17.84, 11.51, -1.14, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 269, "t": "2026-11-03T08:01:53.639", "t_unix": 1793660513.64, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 13, "held_sec": 4.073, "accepted": true, "measured_before": [2.37, 17.84, 11.51, -1.14, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660513.682036, "measured_before_send": [2.37, 17.84, 11.51, -1.14, -30.58, -25.66], "reached": true, "reached_angles": [2.46, 17.84, 11.51, -1.14, -30.58, -25.66], "reach_err": 1.03, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 270, "t": "2026-11-03T08:01:53.853", "t_unix": 1793660513.854, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 14, "held_sec": 4.287, "accepted": true, "measured_before": [2.46, 17.84, 11.51, -1.14, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 1.03, "start_source": "command", "cmd_gap_deg": 1.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [4.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660513.8944168, "measured_before_send": [2.46, 17.84, 11.51, -1.14, -30.58, -25.66], "reached": true, "reached_angles": [2.37, 17.84, 11.51, -1.14, -30.58, -25.66], "reach_err": 2.12, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 271, "t": "2026-11-03T08:01:54.054", "t_unix": 1793660514.055, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 15, "held_sec": 4.487, "accepted": true, "measured_before": [4.57, 17.84, 11.51, -0.52, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [5.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660514.093992, "measured_before_send": [5.0, 17.84, 11.51, -0.96, -30.58, -25.66], "reached": true, "reached_angles": [5.0, 17.84, 11.51, -1.31, -30.58, -25.66], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 272, "t": "2026-11-03T08:01:54.256", "t_unix": 1793660514.257, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 31, "hold_n": 16, "held_sec": 4.69, "accepted": true, "released_during_job": true, "measured_before": [5.09, 17.84, 11.51, -0.43, -30.58, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660514.306412, "measured_before_send": [5.71, 17.84, 11.51, -0.61, -30.58, -25.66], "reached": true, "reached_angles": [6.41, 17.84, 11.51, -1.14, -30.58, -25.75], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 274, "t": "2026-11-03T08:01:55.208", "t_unix": 1793660515.208, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 33, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 273, "t": "2026-11-03T08:01:55.205", "t_unix": 1793660515.205, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 32, "hold_n": 0, "accepted": true, "measured_before": [6.24, 17.84, 11.51, -1.14, -30.58, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.49, 16.96, 10.89, -0.87, -31.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660515.26954, "measured_before_send": [6.24, 17.84, 11.51, -1.14, -30.58, -25.75], "reached": true, "reached_angles": [6.24, 17.84, 11.51, -1.14, -30.58, -25.75], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 275, "t": "2026-11-03T08:01:56.348", "t_unix": 1793660516.349, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 34, "hold_n": 0, "accepted": true, "measured_before": [6.24, 17.84, 11.51, -1.14, -30.58, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -31.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660516.4065511, "measured_before_send": [6.24, 17.84, 11.51, -1.14, -30.58, -25.75], "reached": true, "reached_angles": [6.24, 17.84, 11.51, -1.14, -30.58, -25.75], "reach_err": 1.25, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 276, "t": "2026-11-03T08:01:57.019", "t_unix": 1793660517.02, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 0, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -30.58, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -32.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660517.066724, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -30.58, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -30.67, -25.75], "reach_err": 1.76, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 277, "t": "2026-11-03T08:01:57.459", "t_unix": 1793660517.46, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 1, "held_sec": 0.441, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -30.67, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.76, "start_source": "command", "cmd_gap_deg": 1.76, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -33.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660517.501898, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -30.67, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -32.08, -25.75], "reach_err": 1.35, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 278, "t": "2026-11-03T08:01:57.880", "t_unix": 1793660517.881, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 2, "held_sec": 0.861, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -32.08, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.35, "start_source": "command", "cmd_gap_deg": 1.35, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -34.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660517.922137, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -32.08, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -33.22, -25.75], "reach_err": 1.21, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 279, "t": "2026-11-03T08:01:58.314", "t_unix": 1793660518.315, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 3, "held_sec": 1.295, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -33.22, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.21, "start_source": "command", "cmd_gap_deg": 1.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -35.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660518.3658419, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -33.22, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -33.22, -25.75], "reach_err": 2.21, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 280, "t": "2026-11-03T08:01:58.519", "t_unix": 1793660518.519, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 4, "held_sec": 1.5, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -33.22, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.21, "start_source": "command", "cmd_gap_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -36.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660518.5656168, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -33.22, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -35.41, -25.75], "reach_err": 1.02, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 281, "t": "2026-11-03T08:01:58.937", "t_unix": 1793660518.938, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 5, "held_sec": 1.917, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -35.41, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.02, "start_source": "command", "cmd_gap_deg": 1.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -37.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660518.9840908, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -35.41, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -35.68, -25.75], "reach_err": 1.75, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 282, "t": "2026-11-03T08:01:59.371", "t_unix": 1793660519.372, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 35, "hold_n": 6, "held_sec": 2.352, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -35.68, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.75, "start_source": "command", "cmd_gap_deg": 1.75, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -38.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660519.415802, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -35.68, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -35.68, -25.75], "reach_err": 2.75, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 283, "t": "2026-11-03T08:02:00.463", "t_unix": 1793660520.464, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 284, "t": "2026-11-03T08:02:01.202", "t_unix": 1793660521.203, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 36, "hold_n": 0, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -37.79, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -36.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660521.2729259, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -37.79, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -37.79, -25.75], "reach_err": 1.36, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 285, "t": "2026-11-03T08:02:01.604", "t_unix": 1793660521.605, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 36, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -37.79, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.36, "start_source": "command", "cmd_gap_deg": 1.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -34.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660521.6469219, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -37.79, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -35.77, -25.75], "reach_err": 1.34, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 286, "t": "2026-11-03T08:02:02.027", "t_unix": 1793660522.028, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 36, "hold_n": 2, "held_sec": 0.825, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -35.77, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.34, "start_source": "command", "cmd_gap_deg": 1.34, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -32.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660522.0718741, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -35.77, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -35.33, -25.75], "reach_err": 2.9, "elapsed_sec": 1.66, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 287, "t": "2026-11-03T08:02:04.111", "t_unix": 1793660524.111, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 36, "hold_n": 3, "held_sec": 2.909, "accepted": true, "released_during_job": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -35.33, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.9, "start_source": "command", "cmd_gap_deg": 2.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660524.157383, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -35.33, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -31.02, -25.75], "reach_err": 0.88, "elapsed_sec": 0.39, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 289, "t": "2026-11-03T08:02:04.947", "t_unix": 1793660524.948, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 288, "t": "2026-11-03T08:02:04.896", "t_unix": 1793660524.897, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 1.0, "hold_id": 37, "hold_n": 0, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -31.02, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -29.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660524.942206, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -31.02, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -31.02, -25.75], "reach_err": 1.59, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 290, "t": "2026-11-03T08:02:05.302", "t_unix": 1793660525.303, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 37, "hold_n": 1, "held_sec": 0.406, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -29.97, -25.75], "hold_wait_sec": 0.003, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -27.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660525.361424, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -29.97, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -27.94, -25.75], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 291, "t": "2026-11-03T08:02:05.757", "t_unix": 1793660525.757, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 37, "hold_n": 2, "held_sec": 0.86, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -27.94, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -25.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660525.806846, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -27.94, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -27.94, -25.75], "reach_err": 2.51, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 292, "t": "2026-11-03T08:02:05.959", "t_unix": 1793660525.959, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 37, "hold_n": 3, "held_sec": 1.062, "accepted": true, "released_during_job": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -27.94, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.51, "start_source": "command", "cmd_gap_deg": 2.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660526.007672, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -27.94, -25.75], "reached": true, "reached_angles": [7.47, 17.84, 11.51, -0.96, -23.9, -25.75], "reach_err": 0.88, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 293, "t": "2026-11-03T08:02:07.407", "t_unix": 1793660527.407, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 294, "t": "2026-11-03T08:02:08.505", "t_unix": 1793660528.505, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 295, "t": "2026-11-03T08:02:09.118", "t_unix": 1793660529.119, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 38, "hold_n": 0, "accepted": true, "measured_before": [7.47, 17.84, 11.51, -0.96, -23.9, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660529.167041, "measured_before_send": [7.47, 17.84, 11.51, -0.96, -23.9, -25.75], "reached": true, "reached_angles": [9.22, 17.84, 11.51, -0.61, -23.9, -25.75], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 296, "t": "2026-11-03T08:02:09.555", "t_unix": 1793660529.556, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 38, "hold_n": 1, "held_sec": 0.437, "accepted": true, "measured_before": [9.49, 17.84, 11.51, -0.79, -23.9, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [11.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660529.599602, "measured_before_send": [9.49, 17.84, 11.51, -0.79, -23.9, -25.75], "reached": true, "reached_angles": [9.66, 17.84, 11.51, -0.79, -23.9, -25.75], "reach_err": 1.83, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 297, "t": "2026-11-03T08:02:09.760", "t_unix": 1793660529.76, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 38, "hold_n": 2, "held_sec": 0.641, "accepted": true, "measured_before": [10.72, 17.84, 11.51, -0.35, -23.9, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [13.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660529.805419, "measured_before_send": [11.51, 17.84, 11.51, -0.43, -23.9, -25.75], "reached": true, "reached_angles": [13.44, 17.84, 11.51, -0.7, -23.9, -25.66], "reach_err": 0.88, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 298, "t": "2026-11-03T08:02:10.185", "t_unix": 1793660530.186, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 38, "hold_n": 3, "held_sec": 1.066, "accepted": true, "released_during_job": true, "measured_before": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [15.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660530.221646, "measured_before_send": [13.62, 17.84, 11.51, -0.79, -23.9, -25.66], "reached": true, "reached_angles": [13.62, 17.84, 11.51, -0.79, -23.9, -25.66], "reach_err": 1.87, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 300, "t": "2026-11-03T08:02:10.838", "t_unix": 1793660530.839, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 299, "t": "2026-11-03T08:02:10.837", "t_unix": 1793660530.838, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 39, "hold_n": 0, "accepted": true, "measured_before": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "start_source": "command", "cmd_gap_deg": 1.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [14.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660530.880482, "measured_before_send": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "reached": true, "reached_angles": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "reach_err": 0.96, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 301, "t": "2026-11-03T08:02:11.274", "t_unix": 1793660531.274, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 39, "hold_n": 1, "held_sec": 0.437, "accepted": true, "measured_before": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.96, "start_source": "command", "cmd_gap_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660531.321406, "measured_before_send": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "reached": true, "reached_angles": [13.53, 17.84, 11.51, -0.79, -23.9, -25.66], "reach_err": 1.04, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 302, "t": "2026-11-03T08:02:11.476", "t_unix": 1793660531.477, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 39, "hold_n": 2, "held_sec": 0.639, "accepted": true, "measured_before": [13.09, 17.84, 11.51, -1.05, -23.9, -25.66], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660531.5181801, "measured_before_send": [12.91, 17.84, 11.51, -1.05, -23.9, -25.66], "reached": true, "reached_angles": [12.3, 17.84, 11.51, -0.52, -23.9, -25.66], "reach_err": 1.81, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 303, "t": "2026-11-03T08:02:11.677", "t_unix": 1793660531.677, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 39, "hold_n": 3, "held_sec": 0.84, "accepted": true, "measured_before": [11.42, 17.84, 11.51, -1.31, -23.9, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.93, "start_source": "command", "cmd_gap_deg": 0.93, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [8.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660531.71749, "measured_before_send": [11.07, 17.84, 11.51, -1.23, -23.9, -25.75], "reached": true, "reached_angles": [9.93, 17.84, 11.51, -0.26, -23.9, -25.66], "reach_err": 1.44, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 304, "t": "2026-11-03T08:02:11.879", "t_unix": 1793660531.88, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 39, "hold_n": 4, "held_sec": 1.042, "accepted": true, "measured_before": [8.61, 17.84, 11.51, -1.05, -23.9, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660531.9252422, "measured_before_send": [8.26, 17.84, 11.51, -0.96, -23.9, -25.75], "reached": true, "reached_angles": [7.99, 17.84, 11.51, -0.17, -23.9, -25.66], "reach_err": 1.5, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 305, "t": "2026-11-03T08:02:12.082", "t_unix": 1793660532.082, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 39, "hold_n": 5, "held_sec": 1.245, "accepted": true, "released_during_job": true, "measured_before": [7.03, 17.84, 11.51, -1.14, -23.9, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [4.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": false, "why": "halted_before_send", "measured_before_send": [6.5, 17.84, 11.51, -1.14, -23.9, -25.75], "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 306, "t": "2026-11-03T08:02:12.940", "t_unix": 1793660532.94, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 307, "t": "2026-11-03T08:02:13.679", "t_unix": 1793660533.679, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 308, "t": "2026-11-03T08:02:14.178", "t_unix": 1793660534.178, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 40, "hold_n": 0, "accepted": true, "measured_before": [6.24, 17.84, 11.51, -0.87, -23.9, -25.75], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [8.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660534.2341251, "measured_before_send": [6.24, 17.84, 11.51, -0.87, -23.9, -25.75], "reached": true, "reached_angles": [6.24, 17.84, 11.51, -0.87, -23.73, -25.75], "reach_err": 2.25, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 309, "t": "2026-11-03T08:02:14.579", "t_unix": 1793660534.579, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 40, "hold_n": 1, "held_sec": 0.401, "accepted": true, "released_during_job": true, "measured_before": [8.52, 17.84, 11.51, -0.61, -23.73, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.88, "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660534.628458, "measured_before_send": [8.61, 17.84, 11.51, -0.61, -23.73, -25.75], "reached": true, "reached_angles": [8.78, 17.84, 11.51, -0.7, -23.73, -25.75], "reach_err": 1.71, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 310, "t": "2026-11-03T08:02:15.172", "t_unix": 1793660535.173, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 41, "hold_n": 0, "accepted": true, "measured_before": [8.7, 17.84, 11.51, -0.7, -23.73, -25.75], "start_source": "command", "cmd_gap_deg": 1.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 14.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660535.220151, "measured_before_send": [8.7, 17.84, 11.51, -0.7, -23.73, -25.75], "reached": true, "reached_angles": [8.7, 17.84, 11.51, -0.7, -23.73, -25.75], "reach_err": 2.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 311, "t": "2026-11-03T08:02:15.576", "t_unix": 1793660535.576, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 41, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [10.28, 16.34, 11.51, -0.61, -23.2, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.38, "start_source": "command", "cmd_gap_deg": 1.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 12.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660535.6187499, "measured_before_send": [10.37, 16.34, 11.51, -0.7, -23.2, -25.75], "reached": true, "reached_angles": [10.72, 14.23, 11.51, -0.79, -22.93, -25.75], "reach_err": 1.27, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 312, "t": "2026-11-03T08:02:16.017", "t_unix": 1793660536.018, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 41, "hold_n": 2, "held_sec": 0.845, "accepted": true, "measured_before": [10.72, 14.23, 11.51, -0.79, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.27, "start_source": "command", "cmd_gap_deg": 1.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 10.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660536.052022, "measured_before_send": [10.72, 14.23, 11.51, -0.79, -22.93, -25.75], "reached": true, "reached_angles": [10.63, 12.21, 11.51, -0.79, -22.93, -25.75], "reach_err": 1.25, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 313, "t": "2026-11-03T08:02:16.450", "t_unix": 1793660536.451, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -2.0, "hold_id": 41, "hold_n": 3, "held_sec": 1.278, "accepted": true, "released_during_job": true, "measured_before": [10.63, 12.21, 11.51, -0.79, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.25, "start_source": "command", "cmd_gap_deg": 1.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 8.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660536.493063, "measured_before_send": [10.63, 12.21, 11.51, -0.79, -22.93, -25.75], "reached": true, "reached_angles": [10.63, 10.19, 11.51, -0.79, -22.93, -25.75], "reach_err": 1.23, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 314, "t": "2026-11-03T08:02:17.051", "t_unix": 1793660537.051, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 315, "t": "2026-11-03T08:02:17.238", "t_unix": 1793660537.238, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 42, "hold_n": 0, "accepted": true, "measured_before": [10.63, 10.19, 11.51, -0.79, -22.93, -25.75], "start_source": "command", "cmd_gap_deg": 1.23, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 10.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660537.28209, "measured_before_send": [10.63, 10.19, 11.51, -0.79, -22.93, -25.75], "reached": true, "reached_angles": [10.63, 10.19, 11.51, -0.79, -22.93, -25.75], "reach_err": 0.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 316, "t": "2026-11-03T08:02:17.640", "t_unix": 1793660537.641, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 42, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [10.63, 11.86, 11.51, -0.79, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.9, "start_source": "command", "cmd_gap_deg": 0.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 12.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660537.685041, "measured_before_send": [10.63, 11.86, 11.51, -0.79, -22.93, -25.75], "reached": true, "reached_angles": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "reach_err": 1.01, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 317, "t": "2026-11-03T08:02:18.076", "t_unix": 1793660538.077, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 42, "hold_n": 2, "held_sec": 0.838, "accepted": true, "measured_before": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.01, "start_source": "command", "cmd_gap_deg": 1.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 14.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660538.143966, "measured_before_send": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "reached": true, "reached_angles": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "reach_err": 0.99, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 318, "t": "2026-11-03T08:02:18.284", "t_unix": 1793660538.285, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 42, "hold_n": 3, "held_sec": 1.047, "accepted": true, "measured_before": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.99, "start_source": "command", "cmd_gap_deg": 0.99, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 16.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660538.3325021, "measured_before_send": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "reached": true, "reached_angles": [10.63, 13.97, 11.51, -0.79, -22.93, -25.75], "reach_err": 2.99, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 319, "t": "2026-11-03T08:02:18.485", "t_unix": 1793660538.486, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 42, "hold_n": 4, "held_sec": 1.248, "accepted": true, "measured_before": [10.63, 17.92, 11.51, -0.79, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 0.96, "start_source": "command", "cmd_gap_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660538.533344, "measured_before_send": [10.63, 18.01, 11.51, -0.79, -22.85, -25.75], "reached": true, "reached_angles": [10.63, 18.01, 11.51, -0.79, -22.85, -25.75], "reach_err": 0.95, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 320, "t": "2026-11-03T08:02:18.688", "t_unix": 1793660538.689, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 42, "hold_n": 5, "held_sec": 1.451, "accepted": true, "released_during_job": true, "measured_before": [10.63, 19.86, 11.51, -0.87, -22.85, -25.75], "hold_wait_sec": 0.001, "hold_lead_deg": 0.9, "start_source": "command", "cmd_gap_deg": 0.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.49, 20.96, 10.89, -0.87, -23.43, -26.1], "sent": false, "why": "halted_before_send", "measured_before_send": [10.63, 20.03, 11.51, -0.87, -22.85, -25.75], "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 321, "t": "2026-11-03T08:02:19.358", "t_unix": 1793660539.358, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 322, "t": "2026-11-03T08:02:21.642", "t_unix": 1793660541.642, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 323, "t": "2026-11-03T08:02:22.193", "t_unix": 1793660542.193, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 43, "hold_n": 0, "accepted": true, "measured_before": [10.63, 20.03, 11.51, -0.87, -22.85, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660542.233461, "measured_before_send": [10.63, 20.03, 11.51, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [10.63, 20.03, 11.51, -0.87, -22.85, -25.75], "reach_err": 1.86, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 324, "t": "2026-11-03T08:02:22.607", "t_unix": 1793660542.608, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 43, "hold_n": 1, "held_sec": 0.414, "accepted": true, "measured_before": [12.65, 20.03, 11.51, -0.7, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [14.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660542.6498182, "measured_before_send": [12.65, 20.03, 11.51, -0.7, -22.85, -25.75], "reached": true, "reached_angles": [12.83, 20.03, 11.51, -0.7, -22.85, -25.75], "reach_err": 1.66, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 325, "t": "2026-11-03T08:02:22.823", "t_unix": 1793660542.824, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 43, "hold_n": 2, "held_sec": 0.63, "accepted": true, "released_during_job": true, "measured_before": [13.71, 20.03, 11.51, -0.35, -22.85, -25.75], "hold_wait_sec": 0.001, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660542.864494, "measured_before_send": [14.41, 20.03, 11.51, -0.43, -22.85, -25.75], "reached": true, "reached_angles": [16.34, 20.03, 11.51, -0.79, -22.85, -25.75], "reach_err": 1.07, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 326, "t": "2026-11-03T08:02:23.400", "t_unix": 1793660543.401, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 327, "t": "2026-11-03T08:02:23.483", "t_unix": 1793660543.484, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 44, "hold_n": 0, "accepted": true, "measured_before": [16.52, 20.03, 11.51, -0.87, -22.85, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 8.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660543.5297742, "measured_before_send": [16.52, 20.03, 11.51, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 10.72, -0.87, -22.85, -25.75], "reach_err": 1.83, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 328, "t": "2026-11-03T08:02:23.937", "t_unix": 1793660543.938, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 44, "hold_n": 1, "held_sec": 0.454, "accepted": true, "measured_before": [16.52, 20.03, 10.72, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.83, "start_source": "command", "cmd_gap_deg": 1.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 6.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660543.990876, "measured_before_send": [16.52, 20.03, 10.72, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 8.34, -0.87, -22.85, -25.75], "reach_err": 1.45, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 329, "t": "2026-11-03T08:02:24.407", "t_unix": 1793660544.408, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -2.0, "hold_id": 44, "hold_n": 2, "held_sec": 0.924, "accepted": true, "released_during_job": true, "measured_before": [16.52, 20.03, 8.34, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.45, "start_source": "command", "cmd_gap_deg": 1.45, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 4.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660544.462372, "measured_before_send": [16.52, 20.03, 8.34, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 6.32, -0.87, -22.85, -25.75], "reach_err": 1.43, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 330, "t": "2026-11-03T08:02:25.198", "t_unix": 1793660545.198, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 0, "accepted": true, "measured_before": [16.52, 20.03, 6.32, -0.87, -22.85, -25.75], "start_source": "command", "cmd_gap_deg": 1.43, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 5.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660545.236792, "measured_before_send": [16.52, 20.03, 6.32, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 6.32, -0.87, -22.85, -25.75], "reach_err": 1.07, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 331, "t": "2026-11-03T08:02:25.606", "t_unix": 1793660545.607, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 1, "held_sec": 0.409, "accepted": true, "measured_before": [16.52, 20.03, 6.41, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 6.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660545.6453152, "measured_before_send": [16.52, 20.03, 6.41, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 6.41, -0.87, -22.85, -25.75], "reach_err": 1.07, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 332, "t": "2026-11-03T08:02:25.810", "t_unix": 1793660545.81, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 2, "held_sec": 0.612, "accepted": true, "measured_before": [16.52, 20.03, 7.47, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 7.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660545.848622, "measured_before_send": [16.52, 20.03, 7.55, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 8.61, -0.87, -22.85, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 333, "t": "2026-11-03T08:02:26.237", "t_unix": 1793660546.237, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 3, "held_sec": 1.039, "accepted": true, "measured_before": [16.52, 20.03, 8.61, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 8.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660546.285834, "measured_before_send": [16.52, 20.03, 8.61, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "reach_err": 1.07, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 334, "t": "2026-11-03T08:02:26.674", "t_unix": 1793660546.675, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 4, "held_sec": 1.477, "accepted": true, "measured_before": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 9.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660546.704391, "measured_before_send": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 335, "t": "2026-11-03T08:02:26.876", "t_unix": 1793660546.876, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 5, "held_sec": 1.678, "accepted": true, "measured_before": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660546.916478, "measured_before_send": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [16.52, 20.03, 9.66, -0.87, -22.85, -25.75], "reach_err": 1.23, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 336, "t": "2026-11-03T08:02:27.078", "t_unix": 1793660547.079, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 45, "hold_n": 6, "held_sec": 1.881, "accepted": true, "released_during_job": true, "measured_before": [16.52, 20.03, 10.98, -0.87, -22.85, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.49, 18.96, 11.89, -0.87, -23.43, -26.1], "sent": false, "why": "halted_before_send", "measured_before_send": [16.52, 20.03, 11.16, -0.87, -22.85, -25.75], "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 337, "t": "2026-11-03T08:02:27.685", "t_unix": 1793660547.685, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 338, "t": "2026-11-03T08:02:30.401", "t_unix": 1793660550.402, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 339, "t": "2026-11-03T08:02:32.390", "t_unix": 1793660552.391, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 46, "hold_n": 0, "accepted": true, "measured_before": [16.52, 20.03, 11.6, -0.87, -22.85, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [14.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660552.449027, "measured_before_send": [16.52, 20.03, 11.6, -0.87, -22.85, -25.75], "reached": true, "reached_angles": [14.67, 20.03, 11.6, -0.87, -22.93, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 340, "t": "2026-11-03T08:02:32.848", "t_unix": 1793660552.849, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 46, "hold_n": 1, "held_sec": 0.459, "accepted": true, "released_during_job": true, "measured_before": [14.32, 20.03, 11.6, -0.87, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -0.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660552.889264, "measured_before_send": [14.23, 20.03, 11.6, -0.87, -22.93, -25.75], "reached": true, "reached_angles": [12.74, 20.03, 11.6, -0.87, -22.93, -25.66], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 341, "t": "2026-11-03T08:02:33.698", "t_unix": 1793660553.698, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 47, "hold_n": 0, "accepted": true, "measured_before": [12.3, 20.03, 11.6, -0.87, -22.93, -25.66], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -2.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660553.7524438, "measured_before_send": [12.3, 20.03, 11.6, -0.87, -22.93, -25.66], "reached": true, "reached_angles": [12.3, 20.03, 11.6, -0.87, -22.93, -25.66], "reach_err": 2.0, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 342, "t": "2026-11-03T08:02:34.099", "t_unix": 1793660554.1, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 47, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -1.75, -22.93, -25.75], "hold_wait_sec": 0.001, "hold_lead_deg": 1.12, "start_source": "command", "cmd_gap_deg": 1.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -4.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660554.150066, "measured_before_send": [12.39, 20.03, 11.6, -1.75, -22.93, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -1.93, -22.93, -25.75], "reach_err": 2.94, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 343, "t": "2026-11-03T08:02:34.300", "t_unix": 1793660554.301, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 47, "hold_n": 2, "held_sec": 0.603, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -3.86, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -6.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660554.34033, "measured_before_send": [12.48, 20.03, 11.6, -3.86, -22.93, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -3.95, -22.93, -25.75], "reach_err": 2.92, "elapsed_sec": 0.99, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 344, "t": "2026-11-03T08:02:35.440", "t_unix": 1793660555.441, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 47, "hold_n": 3, "held_sec": 1.743, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -3.95, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.92, "start_source": "command", "cmd_gap_deg": 2.92, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -8.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660555.4802518, "measured_before_send": [12.39, 20.03, 11.6, -3.95, -22.93, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -8.43, -22.93, -25.75], "reach_err": 1.07, "elapsed_sec": 0.36, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 345, "t": "2026-11-03T08:02:35.891", "t_unix": 1793660555.892, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 47, "hold_n": 4, "held_sec": 2.194, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -8.43, -22.93, -25.75], "hold_wait_sec": 0.001, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -10.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660555.951848, "measured_before_send": [12.48, 20.03, 11.6, -8.43, -22.93, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -8.43, -22.93, -25.75], "reach_err": 2.44, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 346, "t": "2026-11-03T08:02:36.107", "t_unix": 1793660556.108, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 47, "hold_n": 5, "held_sec": 2.41, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -10.19, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -12.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660556.1441941, "measured_before_send": [12.39, 20.03, 11.6, -10.19, -22.93, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -10.28, -22.93, -25.75], "reach_err": 2.59, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 347, "t": "2026-11-03T08:02:36.309", "t_unix": 1793660556.31, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -1.0, "hold_id": 47, "hold_n": 6, "held_sec": 2.612, "accepted": true, "released_during_job": true, "measured_before": [12.48, 20.03, 11.6, -10.28, -22.93, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.59, "start_source": "command", "cmd_gap_deg": 2.59, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -13.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660556.356065, "measured_before_send": [12.48, 20.03, 11.6, -10.28, -22.93, -25.75], "reached": true, "reached_angles": [12.65, 20.03, 11.6, -13.18, -23.11, -25.75], "reach_err": 1.07, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 349, "t": "2026-11-03T08:02:37.567", "t_unix": 1793660557.567, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 348, "t": "2026-11-03T08:02:37.556", "t_unix": 1793660557.557, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -1.0, "hold_id": 48, "hold_n": 0, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -13.27, -23.11, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -14.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660557.6119978, "measured_before_send": [12.56, 20.03, 11.6, -13.27, -23.11, -25.75], "reached": true, "reached_angles": [12.56, 20.03, 11.6, -13.27, -23.11, -25.75], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 350, "t": "2026-11-03T08:02:37.973", "t_unix": 1793660557.973, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 1, "held_sec": 0.417, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -14.32, -23.11, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -16.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660558.020284, "measured_before_send": [12.56, 20.03, 11.6, -14.32, -23.11, -25.75], "reached": true, "reached_angles": [12.56, 20.03, 11.6, -14.32, -23.11, -25.75], "reach_err": 2.55, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 351, "t": "2026-11-03T08:02:38.175", "t_unix": 1793660558.176, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 2, "held_sec": 0.619, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -16.25, -23.11, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -18.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660558.215817, "measured_before_send": [12.48, 20.03, 11.6, -16.25, -23.11, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -16.25, -23.11, -25.75], "reach_err": 2.62, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 352, "t": "2026-11-03T08:02:38.377", "t_unix": 1793660558.377, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 3, "held_sec": 0.821, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -18.36, -23.11, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -20.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660558.423845, "measured_before_send": [12.39, 20.03, 11.6, -18.36, -23.11, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -18.36, -23.11, -25.75], "reach_err": 2.51, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 353, "t": "2026-11-03T08:02:38.577", "t_unix": 1793660558.578, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 4, "held_sec": 1.021, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -18.36, -23.11, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.51, "start_source": "command", "cmd_gap_deg": 2.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -22.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660558.620023, "measured_before_send": [12.39, 20.03, 11.6, -18.36, -23.11, -25.75], "reached": true, "reached_angles": [12.56, 20.03, 11.6, -22.67, -23.11, -25.75], "reach_err": 1.07, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 354, "t": "2026-11-03T08:02:39.014", "t_unix": 1793660559.014, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 5, "held_sec": 1.458, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -22.67, -23.11, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -24.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660559.056007, "measured_before_send": [12.56, 20.03, 11.6, -22.67, -23.11, -25.75], "reached": true, "reached_angles": [12.56, 20.03, 11.6, -22.67, -23.11, -25.75], "reach_err": 2.2, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 355, "t": "2026-11-03T08:02:39.214", "t_unix": 1793660559.215, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 6, "held_sec": 1.659, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -24.43, -23.2, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -26.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660559.266613, "measured_before_send": [12.39, 20.03, 11.6, -24.43, -23.29, -25.75], "reached": true, "reached_angles": [12.56, 20.03, 11.6, -26.54, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 356, "t": "2026-11-03T08:02:39.656", "t_unix": 1793660559.657, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 7, "held_sec": 2.1, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -26.54, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -28.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660559.6916108, "measured_before_send": [12.56, 20.03, 11.6, -26.54, -24.16, -25.75], "reached": true, "reached_angles": [12.56, 20.03, 11.6, -26.54, -24.16, -25.75], "reach_err": 2.33, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 357, "t": "2026-11-03T08:02:39.860", "t_unix": 1793660559.86, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 8, "held_sec": 2.304, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -28.56, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -30.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660559.8898938, "measured_before_send": [12.39, 20.03, 11.6, -28.56, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -30.58, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 358, "t": "2026-11-03T08:02:40.282", "t_unix": 1793660560.282, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 48, "hold_n": 9, "held_sec": 2.726, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -30.58, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -32.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660560.323503, "measured_before_send": [12.39, 20.03, 11.6, -30.58, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -30.58, -24.16, -25.75], "reach_err": 2.29, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 360, "t": "2026-11-03T08:02:40.960", "t_unix": 1793660560.961, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 359, "t": "2026-11-03T08:02:40.951", "t_unix": 1793660560.952, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 1.0, "hold_id": 49, "hold_n": 0, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -32.43, -24.16, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -31.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660561.0210361, "measured_before_send": [12.39, 20.03, 11.6, -32.43, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -32.51, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 361, "t": "2026-11-03T08:02:41.355", "t_unix": 1793660561.355, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -32.51, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -29.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660561.399884, "measured_before_send": [12.39, 20.03, 11.6, -32.51, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -32.51, -24.16, -25.75], "reach_err": 2.64, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 362, "t": "2026-11-03T08:02:41.557", "t_unix": 1793660561.558, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 2, "held_sec": 0.607, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -31.11, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.24, "start_source": "command", "cmd_gap_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -27.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660561.5998971, "measured_before_send": [12.48, 20.03, 11.6, -31.11, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -29.17, -24.16, -25.75], "reach_err": 1.3, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 363, "t": "2026-11-03T08:02:41.993", "t_unix": 1793660561.994, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 3, "held_sec": 1.042, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -29.17, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.3, "start_source": "command", "cmd_gap_deg": 1.3, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -25.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660562.05264, "measured_before_send": [12.39, 20.03, 11.6, -29.17, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -26.98, -24.16, -25.75], "reach_err": 1.11, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 364, "t": "2026-11-03T08:02:42.449", "t_unix": 1793660562.45, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 4, "held_sec": 1.499, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -26.98, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.11, "start_source": "command", "cmd_gap_deg": 1.11, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -23.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660562.479715, "measured_before_send": [12.39, 20.03, 11.6, -26.98, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -24.87, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.33, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 365, "t": "2026-11-03T08:02:42.867", "t_unix": 1793660562.867, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 5, "held_sec": 1.916, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -24.87, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -21.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660562.911669, "measured_before_send": [12.39, 20.03, 11.6, -24.87, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -24.87, -24.16, -25.75], "reach_err": 3.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 366, "t": "2026-11-03T08:02:43.070", "t_unix": 1793660563.07, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 6, "held_sec": 2.119, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -22.76, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -19.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660563.11233, "measured_before_send": [12.39, 20.03, 11.6, -22.76, -24.16, -25.75], "reached": true, "reached_angles": [12.3, 20.03, 11.6, -22.67, -24.16, -25.75], "reach_err": 2.8, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 367, "t": "2026-11-03T08:02:43.274", "t_unix": 1793660563.275, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 7, "held_sec": 2.324, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -20.74, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -17.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660563.315868, "measured_before_send": [12.39, 20.03, 11.6, -20.74, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -20.56, -24.16, -25.75], "reach_err": 2.69, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 368, "t": "2026-11-03T08:02:43.491", "t_unix": 1793660563.492, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 8, "held_sec": 2.54, "accepted": true, "measured_before": [12.39, 20.03, 11.6, -18.72, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -15.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660563.5317278, "measured_before_send": [12.39, 20.03, 11.6, -18.72, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -18.63, -24.16, -25.75], "reach_err": 2.76, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 369, "t": "2026-11-03T08:02:43.693", "t_unix": 1793660563.693, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 9, "held_sec": 2.742, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -16.61, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -13.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660563.740266, "measured_before_send": [12.39, 20.03, 11.6, -16.61, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -16.61, -24.16, -25.75], "reach_err": 2.74, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 370, "t": "2026-11-03T08:02:43.910", "t_unix": 1793660563.91, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 10, "held_sec": 2.959, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -14.5, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -11.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660563.9514198, "measured_before_send": [12.48, 20.03, 11.6, -14.5, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -14.5, -24.16, -25.75], "reach_err": 2.63, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 371, "t": "2026-11-03T08:02:44.112", "t_unix": 1793660564.113, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 11, "held_sec": 3.162, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -12.56, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -9.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660564.1557472, "measured_before_send": [12.48, 20.03, 11.6, -12.56, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -12.48, -24.16, -25.75], "reach_err": 2.61, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 372, "t": "2026-11-03T08:02:44.315", "t_unix": 1793660564.316, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 12, "held_sec": 3.365, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -10.54, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -7.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660564.36364, "measured_before_send": [12.48, 20.03, 11.6, -10.54, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -10.54, -24.16, -25.75], "reach_err": 2.67, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 373, "t": "2026-11-03T08:02:44.517", "t_unix": 1793660564.518, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 13, "held_sec": 3.567, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -8.43, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -5.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660564.5595572, "measured_before_send": [12.56, 20.03, 11.6, -8.43, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -8.43, -24.16, -25.75], "reach_err": 2.56, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 374, "t": "2026-11-03T08:02:44.719", "t_unix": 1793660564.72, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 14, "held_sec": 3.769, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -6.32, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -3.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660564.764221, "measured_before_send": [12.48, 20.03, 11.6, -6.32, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -4.39, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 375, "t": "2026-11-03T08:02:45.154", "t_unix": 1793660565.155, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 15, "held_sec": 4.204, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -4.39, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, -1.87, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660565.195315, "measured_before_send": [12.48, 20.03, 11.6, -4.39, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -4.39, -24.16, -25.75], "reach_err": 2.52, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 376, "t": "2026-11-03T08:02:45.356", "t_unix": 1793660565.356, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 16, "held_sec": 4.405, "accepted": true, "measured_before": [12.56, 20.03, 11.6, -2.28, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660565.3884978, "measured_before_send": [12.48, 20.03, 11.6, -2.28, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, -2.28, -24.16, -25.75], "reach_err": 2.41, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 377, "t": "2026-11-03T08:02:45.557", "t_unix": 1793660565.558, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 17, "held_sec": 4.607, "accepted": true, "measured_before": [12.48, 20.03, 11.6, -0.26, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 2.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660565.595754, "measured_before_send": [12.48, 20.03, 11.6, -0.26, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, -0.26, -24.16, -25.75], "reach_err": 2.39, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 378, "t": "2026-11-03T08:02:45.774", "t_unix": 1793660565.774, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 18, "held_sec": 4.823, "accepted": true, "measured_before": [12.48, 20.03, 11.6, 1.75, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 4.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660565.803755, "measured_before_send": [12.48, 20.03, 11.6, 1.75, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, 1.84, -24.16, -25.75], "reach_err": 2.29, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 379, "t": "2026-11-03T08:02:45.977", "t_unix": 1793660565.977, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 49, "hold_n": 19, "held_sec": 5.026, "accepted": true, "released_during_job": true, "measured_before": [12.56, 20.03, 11.6, 3.69, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 6.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660566.020745, "measured_before_send": [12.48, 20.03, 11.6, 3.69, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, 3.69, -24.16, -25.75], "reach_err": 2.44, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 380, "t": "2026-11-03T08:02:46.466", "t_unix": 1793660566.466, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 381, "t": "2026-11-03T08:02:46.515", "t_unix": 1793660566.516, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 50, "hold_n": 0, "accepted": true, "measured_before": [12.48, 20.03, 11.6, 5.8, -24.16, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 4.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660566.581121, "measured_before_send": [12.48, 20.03, 11.6, 5.8, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 5.09, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 382, "t": "2026-11-03T08:02:46.992", "t_unix": 1793660566.992, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 50, "hold_n": 1, "held_sec": 0.477, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 5.09, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 2.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660567.037045, "measured_before_send": [12.39, 20.03, 11.6, 5.09, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 5.09, -24.16, -25.75], "reach_err": 2.96, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 383, "t": "2026-11-03T08:02:47.192", "t_unix": 1793660567.193, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 50, "hold_n": 2, "held_sec": 0.677, "accepted": true, "released_during_job": true, "measured_before": [12.39, 20.03, 11.6, 3.16, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -23.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660567.239819, "measured_before_send": [12.39, 20.03, 11.6, 3.16, -24.16, -25.75], "reached": true, "reached_angles": [12.48, 20.03, 11.6, 1.14, -24.16, -25.75], "reach_err": 1.07, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 384, "t": "2026-11-03T08:02:48.564", "t_unix": 1793660568.565, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 385, "t": "2026-11-03T08:02:49.197", "t_unix": 1793660569.197, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 386, "t": "2026-11-03T08:02:50.058", "t_unix": 1793660570.059, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 51, "hold_n": 0, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.79, -24.16, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -25.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660570.119714, "measured_before_send": [12.39, 20.03, 11.6, 0.79, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.79, -24.16, -25.75], "reach_err": 1.27, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 387, "t": "2026-11-03T08:02:50.457", "t_unix": 1793660570.457, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 51, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.7, -24.16, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.27, "start_source": "command", "cmd_gap_deg": 1.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -27.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660570.5037498, "measured_before_send": [12.39, 20.03, 11.6, 0.7, -24.16, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.7, -26.63, -25.75], "reach_err": 1.07, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 388, "t": "2026-11-03T08:02:50.911", "t_unix": 1793660570.911, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 51, "hold_n": 2, "held_sec": 0.855, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.7, -26.63, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -29.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660570.955308, "measured_before_send": [12.39, 20.03, 11.6, 0.7, -26.63, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.7, -26.63, -25.75], "reach_err": 2.8, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 389, "t": "2026-11-03T08:02:51.111", "t_unix": 1793660571.112, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 51, "hold_n": 3, "held_sec": 1.056, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.7, -28.38, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -31.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660571.151238, "measured_before_send": [12.39, 20.03, 11.6, 0.7, -28.56, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.7, -28.56, -25.75], "reach_err": 2.87, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 390, "t": "2026-11-03T08:02:51.313", "t_unix": 1793660571.314, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 51, "hold_n": 4, "held_sec": 1.257, "accepted": true, "released_during_job": true, "measured_before": [12.39, 20.03, 11.6, 0.61, -30.67, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -33.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660571.340517, "measured_before_send": [12.39, 20.03, 11.6, 0.61, -30.67, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 392, "t": "2026-11-03T08:02:51.966", "t_unix": 1793660571.966, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 391, "t": "2026-11-03T08:02:51.964", "t_unix": 1793660571.965, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 1.0, "hold_id": 52, "hold_n": 0, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -32.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660572.0032132, "measured_before_send": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 393, "t": "2026-11-03T08:02:52.366", "t_unix": 1793660572.367, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -30.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660572.4110029, "measured_before_send": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.61, -32.69, -25.75], "reach_err": 2.26, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 394, "t": "2026-11-03T08:02:52.569", "t_unix": 1793660572.57, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 2, "held_sec": 0.605, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.61, -31.72, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.29, "start_source": "command", "cmd_gap_deg": 1.29, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -28.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660572.616479, "measured_before_send": [12.39, 20.03, 11.6, 0.61, -31.72, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.52, -29.53, -25.75], "reach_err": 1.1, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 395, "t": "2026-11-03T08:02:53.023", "t_unix": 1793660573.023, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 3, "held_sec": 1.059, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.52, -29.53, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.1, "start_source": "command", "cmd_gap_deg": 1.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -26.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660573.066925, "measured_before_send": [12.39, 20.03, 11.6, 0.52, -29.53, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.52, -27.42, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 396, "t": "2026-11-03T08:02:53.457", "t_unix": 1793660573.457, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 4, "held_sec": 1.493, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.52, -27.42, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -24.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660573.499472, "measured_before_send": [12.39, 20.03, 11.6, 0.52, -27.42, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.52, -27.42, -25.75], "reach_err": 2.99, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 397, "t": "2026-11-03T08:02:53.658", "t_unix": 1793660573.658, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 5, "held_sec": 1.694, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.52, -25.4, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -22.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660573.7030442, "measured_before_send": [12.39, 20.03, 11.6, 0.52, -25.4, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.52, -25.4, -25.75], "reach_err": 2.97, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 398, "t": "2026-11-03T08:02:53.862", "t_unix": 1793660573.863, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 6, "held_sec": 1.898, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.52, -25.4, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 2.97, "start_source": "command", "cmd_gap_deg": 2.97, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -20.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660573.89921, "measured_before_send": [12.39, 20.03, 11.6, 0.52, -25.4, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.52, -21.26, -25.75], "reach_err": 1.07, "elapsed_sec": 0.34, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 399, "t": "2026-11-03T08:02:54.299", "t_unix": 1793660574.299, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 7, "held_sec": 2.334, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.52, -21.26, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -18.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660574.324898, "measured_before_send": [12.39, 20.03, 11.6, 0.52, -21.26, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.52, -19.24, -25.75], "reach_err": 1.07, "elapsed_sec": 0.04, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 400, "t": "2026-11-03T08:02:54.721", "t_unix": 1793660574.721, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 52, "hold_n": 8, "held_sec": 2.757, "accepted": true, "released_during_job": true, "measured_before": [12.39, 20.03, 11.6, 0.52, -19.24, -25.75], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660574.765759, "measured_before_send": [12.39, 20.03, 11.6, 0.52, -19.24, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -17.22, -25.75], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 401, "t": "2026-11-03T08:02:56.461", "t_unix": 1793660576.461, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 402, "t": "2026-11-03T08:02:57.999", "t_unix": 1793660577.999, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 403, "t": "2026-11-03T08:02:58.132", "t_unix": 1793660578.132, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 53, "hold_n": 0, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.96, -25.75], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -28.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660578.198286, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.96, -25.75], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.96, -26.89], "reach_err": 1.21, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 404, "t": "2026-11-03T08:02:58.594", "t_unix": 1793660578.594, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 53, "hold_n": 1, "held_sec": 0.462, "accepted": true, "released_during_job": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.96, -26.89], "hold_wait_sec": 0.0, "hold_lead_deg": 1.21, "start_source": "command", "cmd_gap_deg": 1.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -30.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660578.641305, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.96, -26.89], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.87, -27.15], "reach_err": 2.95, "elapsed_sec": 1.36, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 406, "t": "2026-11-03T08:03:00.260", "t_unix": 1793660580.26, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 405, "t": "2026-11-03T08:03:00.259", "t_unix": 1793660580.26, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 5, "delta": -1.0, "hold_id": 54, "hold_n": 0, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.87, -27.24], "start_source": "command", "cmd_gap_deg": 2.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -31.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660580.301428, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.87, -27.24], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.87, -30.32], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 407, "t": "2026-11-03T08:03:00.696", "t_unix": 1793660580.696, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 1, "held_sec": 0.437, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.87, -30.32], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -33.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660580.734499, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.87, -30.32], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.87, -30.32], "reach_err": 2.78, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 408, "t": "2026-11-03T08:03:00.896", "t_unix": 1793660580.896, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 2, "held_sec": 0.637, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.87, -32.34], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -35.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660580.957102, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.87, -32.34], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -32.69], "reach_err": 2.41, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 409, "t": "2026-11-03T08:03:01.111", "t_unix": 1793660581.112, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 3, "held_sec": 0.852, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -34.36], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -37.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660581.155134, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -34.36], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -34.71], "reach_err": 2.39, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 410, "t": "2026-11-03T08:03:01.315", "t_unix": 1793660581.316, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 4, "held_sec": 1.056, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -36.38], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -39.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660581.354781, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -36.38], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -36.38], "reach_err": 2.72, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 411, "t": "2026-11-03T08:03:01.517", "t_unix": 1793660581.517, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 5, "held_sec": 1.258, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -38.32], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -41.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660581.560148, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -38.32], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -38.32], "reach_err": 2.78, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 412, "t": "2026-11-03T08:03:01.718", "t_unix": 1793660581.718, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 6, "held_sec": 1.459, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -40.42], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -43.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660581.7589939, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -40.42], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -40.42], "reach_err": 2.68, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 413, "t": "2026-11-03T08:03:01.920", "t_unix": 1793660581.921, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 7, "held_sec": 1.662, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -42.45], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -45.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660581.965833, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -42.45], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -42.45], "reach_err": 2.65, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 414, "t": "2026-11-03T08:03:02.123", "t_unix": 1793660582.123, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 8, "held_sec": 1.864, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -42.45], "hold_wait_sec": 0.0, "hold_lead_deg": 2.65, "start_source": "command", "cmd_gap_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -47.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660582.159051, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -42.45], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -46.49], "reach_err": 1.07, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 415, "t": "2026-11-03T08:03:02.556", "t_unix": 1793660582.557, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 9, "held_sec": 2.298, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -46.49], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -49.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660582.602966, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -46.49], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -46.49], "reach_err": 2.61, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 416, "t": "2026-11-03T08:03:02.774", "t_unix": 1793660582.774, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 10, "held_sec": 2.515, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -48.51], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -51.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660582.814698, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -48.51], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -48.51], "reach_err": 2.59, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 417, "t": "2026-11-03T08:03:02.976", "t_unix": 1793660582.977, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 11, "held_sec": 2.718, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -50.44], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -53.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660583.010262, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -50.44], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -50.44], "reach_err": 2.66, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 418, "t": "2026-11-03T08:03:03.192", "t_unix": 1793660583.192, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -2.0, "hold_id": 54, "hold_n": 12, "held_sec": 2.933, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -52.55], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -55.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660583.22808, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -52.55], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.78, -54.49], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 420, "t": "2026-11-03T08:03:04.002", "t_unix": 1793660584.002, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 419, "t": "2026-11-03T08:03:03.951", "t_unix": 1793660583.952, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 5, "delta": 1.0, "hold_id": 55, "hold_n": 0, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.78, -54.49], "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -54.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660584.000876, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.78, -54.49], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -54.49], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 421, "t": "2026-11-03T08:03:04.357", "t_unix": 1793660584.357, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 1, "held_sec": 0.406, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -54.49], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -52.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660584.396023, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -54.49], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -54.49], "reach_err": 2.39, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 422, "t": "2026-11-03T08:03:04.572", "t_unix": 1793660584.573, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 2, "held_sec": 0.621, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -53.08], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -50.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660584.61101, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -53.08], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -53.08], "reach_err": 2.98, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 423, "t": "2026-11-03T08:03:04.772", "t_unix": 1793660584.773, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 3, "held_sec": 0.821, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -51.15], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -48.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660584.819236, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -51.15], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -49.04], "reach_err": 1.07, "elapsed_sec": 0.36, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 424, "t": "2026-11-03T08:03:05.240", "t_unix": 1793660585.241, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 4, "held_sec": 1.289, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -49.04], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -46.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660585.304197, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -49.04], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -46.93], "reach_err": 1.07, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 425, "t": "2026-11-03T08:03:05.715", "t_unix": 1793660585.716, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 5, "held_sec": 1.763, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -46.93], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -44.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660585.772316, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -46.93], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -46.75], "reach_err": 2.65, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 426, "t": "2026-11-03T08:03:05.918", "t_unix": 1793660585.919, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 6, "held_sec": 1.967, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -44.82], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -42.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660585.946639, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -44.82], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -42.8], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 427, "t": "2026-11-03T08:03:06.320", "t_unix": 1793660586.321, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 7, "held_sec": 2.369, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -42.8], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -40.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660586.3529868, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -42.8], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -42.62], "reach_err": 2.52, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 428, "t": "2026-11-03T08:03:06.536", "t_unix": 1793660586.536, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 8, "held_sec": 2.585, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -40.86], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -38.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660586.574347, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -40.86], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -40.86], "reach_err": 2.76, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 429, "t": "2026-11-03T08:03:06.737", "t_unix": 1793660586.738, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 9, "held_sec": 2.786, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -38.84], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -36.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660586.7789109, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -38.84], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -38.84], "reach_err": 2.74, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 430, "t": "2026-11-03T08:03:06.938", "t_unix": 1793660586.939, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 10, "held_sec": 2.987, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -36.73], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -34.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660586.978262, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -36.73], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -36.38], "reach_err": 2.28, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 431, "t": "2026-11-03T08:03:07.140", "t_unix": 1793660587.14, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 11, "held_sec": 3.189, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -34.71], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -32.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660587.1830752, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -34.71], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -34.71], "reach_err": 2.61, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 432, "t": "2026-11-03T08:03:07.341", "t_unix": 1793660587.341, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 12, "held_sec": 3.39, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -32.69], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -30.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660587.382493, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -32.69], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -32.69], "reach_err": 2.59, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 433, "t": "2026-11-03T08:03:07.544", "t_unix": 1793660587.545, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 13, "held_sec": 3.593, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -30.67], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -28.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660587.586325, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -30.67], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -28.65], "reach_err": 1.07, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 434, "t": "2026-11-03T08:03:07.983", "t_unix": 1793660587.984, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 14, "held_sec": 4.032, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -28.65], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -26.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660588.032313, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -28.65], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -28.65], "reach_err": 2.55, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 435, "t": "2026-11-03T08:03:08.187", "t_unix": 1793660588.187, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 15, "held_sec": 4.236, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -26.63], "hold_wait_sec": 0.0, "hold_lead_deg": 1.07, "start_source": "command", "cmd_gap_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -24.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660588.223375, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -26.63], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -26.63], "reach_err": 2.53, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 436, "t": "2026-11-03T08:03:08.393", "t_unix": 1793660588.393, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 55, "hold_n": 16, "held_sec": 4.442, "accepted": true, "released_during_job": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -26.63], "hold_wait_sec": 0.0, "hold_lead_deg": 2.53, "start_source": "command", "cmd_gap_deg": 2.53, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.49, 18.96, 10.89, 0.13, -16.43, -22.1], "sent": true, "timeout_sec": 8.0, "t_send": 1793660588.43103, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -26.63], "reached": true, "reached_angles": [12.39, 20.03, 11.6, 0.43, -16.69, -22.58], "reach_err": 1.07, "elapsed_sec": 0.35, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 437, "t": "2026-11-03T08:03:10.579", "t_unix": 1793660590.58, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 5, "step_deg": 1.0, "execute": true, "held_sec": 1.011, "accepted": true, "measured_before": [12.39, 20.03, 11.6, 0.43, -16.69, -22.58], "command": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0], "range_check": "skipped_for_home", "sent": true, "timeout_sec": 8.0, "t_send": 1793660590.634482, "measured_before_send": [12.39, 20.03, 11.6, 0.43, -16.69, -22.58], "reached": true, "reached_angles": [0.7, 1.14, 1.4, 0.0, 0.08, -28.82], "reach_err": 1.4, "elapsed_sec": 0.74, "grip_state": "unknown", "stopped": false, "stop_reason": null}
```

### 8:06 の記録 runs/experiments/gamepad_teleop/teleop_20261103_080648/meta.json

```json
{
  "run_stem": "teleop_20261103_080648",
  "started_at": "2026-11-03T08:06:49",
  "execute": true,
  "argv": [
    "tools/gamepad_teleop.py",
    "--execute"
  ],
  "controllers": [
    {
      "name": "PS4 Controller",
      "guid": "03008fe54c050000cc09000000016800",
      "instance_id": 0,
      "axes": 6,
      "buttons": 16,
      "hats": 0,
      "connected_at": "2026-11-03T08:06:54"
    }
  ],
  "python": "3.12.12 | packaged by conda-forge | (main, Oct 22 2025, 23:34:53) [Clang 19.1.7 ]",
  "pygame": "2.6.1",
  "sdl": "2.28.4",
  "platform": "macOS-26.6.2-arm64-arm-64bit",
  "start_pose": [
    -0.26,
    1.14,
    1.4,
    0.0,
    0.17,
    -29.7
  ],
  "guards": {
    "J1_MAX_DEG": 90.87,
    "range": "physical_limits (no base window. 2026-11-03)",
    "J4_SAFE": [
      -90.0,
      60.0
    ],
    "JOINT_LIMITS": [
      [
        -156.0,
        161.0
      ],
      [
        -79.0,
        123.0
      ],
      [
        -177.0,
        177.0
      ],
      [
        -156.0,
        162.0
      ],
      [
        -118.0,
        118.0
      ],
      [
        -177.0,
        178.0
      ]
    ],
    "window": {
      "lo": [
        -156.0,
        -79.0,
        -177.0,
        -156.0,
        -90.0,
        -177.0
      ],
      "hi": [
        161.0,
        90.87,
        177.0,
        162.0,
        60.0,
        178.0
      ]
    },
    "home_bypasses_range_check": true
  },
  "motion": {
    "speed": 20,
    "step_fine_deg": 1.0,
    "step_coarse_deg": 2.0,
    "reach_tol_deg": 3.0,
    "reach_timeout_min_sec": 8.0,
    "poll_sec": 0.3,
    "gripper_sleep_sec": 0.8,
    "grip_close_value": 20,
    "send_wait": 0.0,
    "home": [
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      -30.0
    ],
    "home_hold_sec": 1.0,
    "trigger_stop_above": 0.0,
    "hold_start_sec": 0.4,
    "hold_interval_sec": 0.1,
    "hold_ahead_deg": 3.0,
    "hold_stall_sec": 1.0,
    "ignored_check_sec": 0.5,
    "ignored_max_resends": 3,
    "j0_left_sign": -1.0,
    "up_sign": -1.0,
    "select_order": [
      1,
      2,
      3,
      4,
      5
    ]
  },
  "button_map": {
    "0": "cross",
    "1": "circle",
    "2": "square",
    "3": "triangle",
    "4": "share",
    "5": "home",
    "6": "options",
    "7": "l3",
    "8": "r3",
    "9": "l1",
    "10": "r1",
    "11": "dpad_up",
    "12": "dpad_down",
    "13": "dpad_left",
    "14": "dpad_right",
    "15": "touchpad"
  },
  "git": {
    "commit": "15ca6a4ce359b5770531bc9e43f709a15ad12910",
    "script_status": "clean"
  },
  "script_copy": "gamepad_teleop.py",
  "script_sha256": "b8662a3ecfb2f20243c25c9819b325ab86ddfd3f1f3a446cc821cd9c4aeb41f3",
  "ended_at": "2026-11-03T08:09:26",
  "end_reason": "ctrl_c",
  "n_sent": 210
}
```

### 8:06 の記録 runs/experiments/gamepad_teleop/teleop_20261103_080648/log.jsonl（228行）

```json
{"seq": 1, "t": "2026-11-03T08:07:10.868", "t_unix": 1793660830.868, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 0, "accepted": true, "measured_before": [-0.26, 1.14, 1.4, 0.0, 0.17, -29.7], "start_source": "command", "cmd_gap_deg": 0.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.26, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660830.910841, "measured_before_send": [-0.26, 1.14, 1.4, 0.0, 0.17, -29.7], "resends": [], "reached": true, "reached_angles": [-0.26, 1.14, 1.4, 0.0, 0.17, -29.7], "reach_err": 1.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 2, "t": "2026-11-03T08:07:11.281", "t_unix": 1793660831.281, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 1, "held_sec": 0.414, "accepted": true, "measured_before": [-0.96, 1.93, 2.1, 0.0, 0.17, -29.7], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.3, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.96, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660831.302738, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 3, "t": "2026-11-03T08:07:11.679", "t_unix": 1793660831.679, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 2, "held_sec": 0.812, "accepted": true, "measured_before": [-3.95, 1.93, 2.1, 0.0, 0.17, -29.7], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.95, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660831.698498, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 4, "t": "2026-11-03T08:07:11.794", "t_unix": 1793660831.794, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 3, "held_sec": 0.927, "accepted": true, "measured_before": [-4.39, 1.93, 2.1, 0.0, 0.17, -29.7], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-7.39, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660831.825438, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 5, "t": "2026-11-03T08:07:11.894", "t_unix": 1793660831.894, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 4, "held_sec": 1.027, "accepted": true, "measured_before": [-5.36, 1.93, 2.1, -0.08, 0.17, -29.7], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.36, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660831.9236102, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 6, "t": "2026-11-03T08:07:12.275", "t_unix": 1793660832.276, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 5, "held_sec": 1.408, "accepted": true, "measured_before": [-7.38, 1.93, 2.1, -0.08, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.38, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660832.294986, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 7, "t": "2026-11-03T08:07:12.393", "t_unix": 1793660832.393, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 6, "held_sec": 1.526, "accepted": true, "measured_before": [-7.29, 1.93, 2.1, -0.08, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 3.09, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.29, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660832.4133902, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 8, "t": "2026-11-03T08:07:12.779", "t_unix": 1793660832.779, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 7, "held_sec": 1.912, "accepted": true, "measured_before": [-10.19, 1.93, 2.1, -0.17, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.19, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660832.798008, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 9, "t": "2026-11-03T08:07:13.149", "t_unix": 1793660833.15, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 8, "held_sec": 2.283, "accepted": true, "measured_before": [-12.83, 1.93, 2.1, -0.17, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-15.83, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660833.173121, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 10, "t": "2026-11-03T08:07:13.265", "t_unix": 1793660833.266, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 9, "held_sec": 2.399, "accepted": true, "measured_before": [-13.44, 1.93, 2.1, -0.17, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-16.44, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660833.325675, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 11, "t": "2026-11-03T08:07:13.382", "t_unix": 1793660833.382, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 10, "held_sec": 2.515, "accepted": true, "measured_before": [-14.58, 1.93, 2.1, -0.17, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-17.58, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660833.4051461, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 12, "t": "2026-11-03T08:07:13.482", "t_unix": 1793660833.483, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 11, "held_sec": 2.616, "accepted": true, "measured_before": [-17.13, 1.93, 2.1, -0.17, 0.17, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.45, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-20.13, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660833.506743, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 13, "t": "2026-11-03T08:07:13.583", "t_unix": 1793660833.584, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 12, "held_sec": 2.717, "accepted": true, "measured_before": [-17.05, 1.93, 2.1, -0.17, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 3.08, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-20.05, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660833.645623, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 14, "t": "2026-11-03T08:07:13.717", "t_unix": 1793660833.717, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 13, "held_sec": 2.85, "accepted": true, "measured_before": [-19.86, 1.93, 2.1, -0.17, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.86, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660833.73579, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 15, "t": "2026-11-03T08:07:14.122", "t_unix": 1793660834.122, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 14, "held_sec": 3.255, "accepted": true, "released_during_job": true, "measured_before": [-22.5, 1.93, 2.1, -0.26, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-25.5, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660834.142308, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 16, "t": "2026-11-03T08:07:14.839", "t_unix": 1793660834.839, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 2, "hold_n": 0, "accepted": true, "measured_before": [-25.83, 1.93, 2.1, -0.26, 0.17, -29.97], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-24.5, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660834.873781, "measured_before_send": [-25.83, 1.93, 2.1, -0.26, 0.17, -29.97], "resends": [], "reached": true, "reached_angles": [-25.83, 1.93, 2.1, -0.26, 0.17, -29.97], "reach_err": 1.33, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 17, "t": "2026-11-03T08:07:15.242", "t_unix": 1793660835.242, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [-24.52, 1.93, 2.1, -0.26, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-21.52, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660835.260261, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 18, "t": "2026-11-03T08:07:15.358", "t_unix": 1793660835.359, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 2, "held_sec": 0.52, "accepted": true, "measured_before": [-24.34, 1.93, 2.1, -0.26, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-21.34, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660835.427687, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 19, "t": "2026-11-03T08:07:15.493", "t_unix": 1793660835.493, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 3, "held_sec": 0.654, "accepted": true, "measured_before": [-21.44, 1.93, 2.1, -0.26, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-18.44, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660835.516136, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 20, "t": "2026-11-03T08:07:15.891", "t_unix": 1793660835.892, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 4, "held_sec": 1.052, "accepted": true, "measured_before": [-18.54, 1.93, 2.1, -0.26, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-15.54, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660835.9092321, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 21, "t": "2026-11-03T08:07:15.992", "t_unix": 1793660835.993, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 5, "held_sec": 1.153, "accepted": true, "measured_before": [-15.29, 1.93, 2.1, -0.35, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-12.29, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660836.396679, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 22, "t": "2026-11-03T08:07:16.780", "t_unix": 1793660836.781, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 6, "held_sec": 1.941, "accepted": true, "measured_before": [-12.39, 1.93, 2.1, -0.35, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.39, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660836.8025038, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 23, "t": "2026-11-03T08:07:17.197", "t_unix": 1793660837.198, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 7, "held_sec": 2.359, "accepted": true, "measured_before": [-9.49, 1.93, 2.1, -0.35, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.49, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660837.220511, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 24, "t": "2026-11-03T08:07:17.613", "t_unix": 1793660837.614, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 8, "held_sec": 2.775, "accepted": true, "measured_before": [-6.32, 1.93, 2.1, -0.43, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.17, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.32, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660837.647719, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 25, "t": "2026-11-03T08:07:17.714", "t_unix": 1793660837.715, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 9, "held_sec": 2.876, "accepted": true, "measured_before": [-5.88, 1.93, 2.1, -0.43, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.88, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660837.7412758, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 26, "t": "2026-11-03T08:07:18.212", "t_unix": 1793660838.212, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 10, "held_sec": 3.373, "accepted": true, "measured_before": [-2.54, 1.93, 2.1, -0.43, 0.17, -29.97], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.34, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.46, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660838.238909, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 27, "t": "2026-11-03T08:07:18.611", "t_unix": 1793660838.612, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 11, "held_sec": 3.772, "accepted": true, "measured_before": [0.26, 1.93, 2.1, -0.43, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.2, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.26, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660838.637516, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 28, "t": "2026-11-03T08:07:18.997", "t_unix": 1793660838.997, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 12, "held_sec": 4.158, "accepted": true, "measured_before": [2.98, 1.93, 2.1, -0.43, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.28, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [5.98, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660839.0100322, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 29, "t": "2026-11-03T08:07:19.098", "t_unix": 1793660839.099, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 13, "held_sec": 4.259, "accepted": true, "measured_before": [3.6, 1.93, 2.1, -0.43, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.6, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660839.126186, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 30, "t": "2026-11-03T08:07:19.200", "t_unix": 1793660839.201, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 14, "held_sec": 4.362, "accepted": true, "measured_before": [5.44, 1.93, 2.1, -0.43, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 1.16, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [8.44, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660839.224819, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 31, "t": "2026-11-03T08:07:19.315", "t_unix": 1793660839.316, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 2, "hold_n": 15, "held_sec": 4.477, "accepted": true, "released_during_job": true, "measured_before": [6.06, 1.93, 2.1, -0.43, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 1.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660839.34221, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 32, "t": "2026-11-03T08:07:20.170", "t_unix": 1793660840.171, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -1.0, "hold_id": 3, "hold_n": 0, "accepted": true, "measured_before": [8.78, 1.93, 2.1, -0.43, 0.17, -29.88], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 0.14, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660840.207687, "measured_before_send": [8.78, 1.93, 2.1, -0.43, 0.17, -29.88], "resends": [], "reached": true, "reached_angles": [8.78, 1.93, 2.1, -0.43, 0.17, -29.88], "reach_err": 1.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 33, "t": "2026-11-03T08:07:20.574", "t_unix": 1793660840.575, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 3, "hold_n": 1, "held_sec": 0.405, "accepted": true, "measured_before": [8.78, 1.66, 2.1, -0.43, 0.17, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.52, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, -1.34, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660840.59645, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 34, "t": "2026-11-03T08:07:20.959", "t_unix": 1793660840.959, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 3, "hold_n": 2, "held_sec": 0.789, "accepted": true, "measured_before": [8.78, -0.35, 2.1, -0.43, 0.35, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.99, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, -3.35, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660840.9856231, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 35, "t": "2026-11-03T08:07:21.076", "t_unix": 1793660841.076, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 3, "hold_n": 3, "held_sec": 0.906, "accepted": true, "released_during_job": true, "measured_before": [8.78, -1.23, 2.1, -0.43, 0.43, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, -4.23, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660841.0978482, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 36, "t": "2026-11-03T08:07:21.584", "t_unix": 1793660841.585, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 1.0, "hold_id": 4, "hold_n": 0, "accepted": true, "measured_before": [8.78, -2.98, 2.1, -0.43, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, -3.23, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660841.6285188, "measured_before_send": [8.78, -2.98, 2.1, -0.43, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [8.78, -2.98, 2.1, -0.43, 0.52, -29.88], "reach_err": 0.7, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 37, "t": "2026-11-03T08:07:21.986", "t_unix": 1793660841.986, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [8.78, -2.54, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.69, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 0.46, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.004904, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 38, "t": "2026-11-03T08:07:22.086", "t_unix": 1793660842.086, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 2, "held_sec": 0.502, "accepted": true, "measured_before": [8.78, -2.37, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 0.63, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.112096, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 39, "t": "2026-11-03T08:07:22.202", "t_unix": 1793660842.203, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 3, "held_sec": 0.618, "accepted": true, "measured_before": [8.78, 0.52, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.11, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 3.52, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.2305331, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 40, "t": "2026-11-03T08:07:22.303", "t_unix": 1793660842.304, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 4, "held_sec": 0.719, "accepted": true, "measured_before": [8.78, 1.31, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 4.31, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.329917, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 41, "t": "2026-11-03T08:07:22.419", "t_unix": 1793660842.419, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 5, "held_sec": 0.834, "accepted": true, "measured_before": [8.78, 3.6, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.71, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 6.6, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.44661, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 42, "t": "2026-11-03T08:07:22.521", "t_unix": 1793660842.521, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 6, "held_sec": 0.936, "accepted": true, "measured_before": [8.78, 4.57, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 7.57, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.548373, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 43, "t": "2026-11-03T08:07:22.621", "t_unix": 1793660842.621, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 7, "held_sec": 1.036, "accepted": true, "measured_before": [8.78, 6.5, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 9.5, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.6485891, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 44, "t": "2026-11-03T08:07:22.738", "t_unix": 1793660842.738, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 8, "held_sec": 1.154, "accepted": true, "measured_before": [8.78, 8.08, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 11.08, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660842.772227, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 45, "t": "2026-11-03T08:07:23.141", "t_unix": 1793660843.142, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 9, "held_sec": 1.557, "accepted": true, "measured_before": [8.78, 10.45, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 13.45, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660843.1616929, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 46, "t": "2026-11-03T08:07:23.547", "t_unix": 1793660843.547, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 10, "held_sec": 1.962, "accepted": true, "measured_before": [8.78, 14.5, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.05, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 17.5, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660843.576587, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 47, "t": "2026-11-03T08:07:23.666", "t_unix": 1793660843.666, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 11, "held_sec": 2.082, "accepted": true, "measured_before": [8.78, 14.67, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 17.67, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660843.72586, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 48, "t": "2026-11-03T08:07:23.785", "t_unix": 1793660843.785, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 12, "held_sec": 2.2, "accepted": true, "measured_before": [8.78, 18.63, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.96, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 21.63, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660844.1435819, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 49, "t": "2026-11-03T08:07:24.203", "t_unix": 1793660844.204, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 13, "held_sec": 2.619, "accepted": true, "measured_before": [8.78, 18.63, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 21.63, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660844.233363, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 50, "t": "2026-11-03T08:07:24.321", "t_unix": 1793660844.321, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 14, "held_sec": 2.736, "accepted": true, "measured_before": [8.78, 21.44, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 24.44, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660844.3858619, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 51, "t": "2026-11-03T08:07:24.452", "t_unix": 1793660844.453, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 15, "held_sec": 2.868, "accepted": true, "measured_before": [8.78, 22.76, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 25.76, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660844.482559, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 52, "t": "2026-11-03T08:07:24.568", "t_unix": 1793660844.569, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 16, "held_sec": 2.984, "accepted": true, "measured_before": [8.78, 25.4, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 28.4, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660844.589346, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 53, "t": "2026-11-03T08:07:24.671", "t_unix": 1793660844.671, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 4, "hold_n": 17, "held_sec": 3.086, "accepted": true, "released_during_job": true, "measured_before": [8.78, 29.53, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 32.53, 1.4, 0.0, 0.17, -29.7], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 54, "t": "2026-11-03T08:07:25.377", "t_unix": 1793660845.377, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -1.0, "hold_id": 5, "hold_n": 0, "accepted": true, "measured_before": [8.78, 29.53, 2.1, -0.43, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 27.4, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660845.424011, "measured_before_send": [8.78, 29.53, 2.1, -0.43, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [8.78, 29.53, 2.1, -0.43, 0.52, -29.88], "reach_err": 2.13, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 55, "t": "2026-11-03T08:07:25.811", "t_unix": 1793660845.812, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 1, "held_sec": 0.434, "accepted": true, "measured_before": [8.78, 29.53, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 26.53, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660845.837319, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 56, "t": "2026-11-03T08:07:26.197", "t_unix": 1793660846.198, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 2, "held_sec": 0.821, "accepted": true, "measured_before": [8.78, 28.12, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.59, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 25.12, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660846.2174249, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 57, "t": "2026-11-03T08:07:26.581", "t_unix": 1793660846.582, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 3, "held_sec": 1.205, "accepted": true, "measured_before": [8.78, 26.71, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.59, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 23.71, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660846.6021812, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 58, "t": "2026-11-03T08:07:26.967", "t_unix": 1793660846.968, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 4, "held_sec": 1.591, "accepted": true, "measured_before": [8.78, 25.31, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 22.31, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660847.004771, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 59, "t": "2026-11-03T08:07:27.070", "t_unix": 1793660847.07, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 5, "held_sec": 1.693, "accepted": true, "measured_before": [8.78, 25.22, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 22.22, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660847.091501, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 60, "t": "2026-11-03T08:07:27.187", "t_unix": 1793660847.187, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 6, "held_sec": 1.81, "accepted": true, "measured_before": [8.78, 23.81, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.59, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 20.81, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660847.211338, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 61, "t": "2026-11-03T08:07:27.572", "t_unix": 1793660847.573, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 7, "held_sec": 2.196, "accepted": true, "measured_before": [8.78, 22.41, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 19.41, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660847.586532, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 62, "t": "2026-11-03T08:07:27.673", "t_unix": 1793660847.674, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 8, "held_sec": 2.297, "accepted": true, "measured_before": [8.78, 21.62, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 18.62, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660847.690123, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 63, "t": "2026-11-03T08:07:27.775", "t_unix": 1793660847.776, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 9, "held_sec": 2.399, "accepted": true, "measured_before": [8.78, 20.47, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 17.47, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660847.7975092, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 64, "t": "2026-11-03T08:07:28.164", "t_unix": 1793660848.165, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 10, "held_sec": 2.788, "accepted": true, "measured_before": [8.78, 18.98, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 15.98, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660848.186547, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 65, "t": "2026-11-03T08:07:28.265", "t_unix": 1793660848.265, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 11, "held_sec": 2.888, "accepted": true, "measured_before": [8.78, 18.45, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.47, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 15.45, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660848.2861161, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 66, "t": "2026-11-03T08:07:28.367", "t_unix": 1793660848.367, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 12, "held_sec": 2.99, "accepted": true, "measured_before": [8.78, 17.22, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 14.22, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660848.3881788, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 67, "t": "2026-11-03T08:07:28.482", "t_unix": 1793660848.483, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 13, "held_sec": 3.106, "accepted": true, "measured_before": [8.78, 16.43, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 13.43, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660848.503468, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 68, "t": "2026-11-03T08:07:28.867", "t_unix": 1793660848.867, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 14, "held_sec": 3.49, "accepted": true, "measured_before": [8.78, 15.11, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 12.11, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660848.8934028, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 69, "t": "2026-11-03T08:07:28.968", "t_unix": 1793660848.968, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 5, "hold_n": 15, "held_sec": 3.591, "accepted": true, "measured_before": [8.78, 14.58, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 0.7, "hold_lead_deg": 2.47, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660848.993649, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 70, "t": "2026-11-03T08:07:29.456", "t_unix": 1793660849.456, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 71, "t": "2026-11-03T08:07:29.845", "t_unix": 1793660849.845, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -2.0, "hold_id": 6, "hold_n": 0, "accepted": true, "measured_before": [8.78, 13.18, 2.1, -0.43, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.06, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660849.915589, "measured_before_send": [8.78, 13.18, 2.1, -0.43, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [7.47, 13.18, 2.1, -0.43, 0.52, -29.88], "reach_err": 1.6, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 72, "t": "2026-11-03T08:07:30.300", "t_unix": 1793660850.3, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 6, "hold_n": 1, "held_sec": 0.455, "accepted": true, "measured_before": [7.03, 13.18, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [4.03, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660850.321601, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 73, "t": "2026-11-03T08:07:30.698", "t_unix": 1793660850.699, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 6, "hold_n": 2, "held_sec": 0.853, "accepted": true, "measured_before": [4.39, 13.18, 2.1, -0.43, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.39, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660850.714634, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 74, "t": "2026-11-03T08:07:31.082", "t_unix": 1793660851.082, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 6, "hold_n": 3, "held_sec": 1.237, "accepted": true, "measured_before": [1.66, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.34, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660851.1092942, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 75, "t": "2026-11-03T08:07:31.198", "t_unix": 1793660851.199, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 6, "hold_n": 4, "held_sec": 1.353, "accepted": true, "measured_before": [0.79, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.21, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660851.232048, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 76, "t": "2026-11-03T08:07:31.603", "t_unix": 1793660851.604, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 6, "hold_n": 5, "held_sec": 1.758, "accepted": true, "released_during_job": true, "measured_before": [-1.4, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.81, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.4, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 78, "t": "2026-11-03T08:07:32.088", "t_unix": 1793660852.089, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 77, "t": "2026-11-03T08:07:32.087", "t_unix": 1793660852.087, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 7, "hold_n": 0, "accepted": true, "measured_before": [-1.75, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.21, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660852.13085, "measured_before_send": [-1.75, 13.18, 2.1, -0.35, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [-1.75, 13.18, 2.1, -0.35, 0.52, -29.88], "reach_err": 1.6, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 79, "t": "2026-11-03T08:07:32.490", "t_unix": 1793660852.491, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [-3.07, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.14, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.07, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660852.505611, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 80, "t": "2026-11-03T08:07:32.592", "t_unix": 1793660852.593, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 2, "held_sec": 0.506, "accepted": true, "measured_before": [-3.51, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.51, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660852.624844, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 81, "t": "2026-11-03T08:07:32.694", "t_unix": 1793660852.694, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 3, "held_sec": 0.607, "accepted": true, "measured_before": [-5.09, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.09, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660852.725502, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 82, "t": "2026-11-03T08:07:32.794", "t_unix": 1793660852.794, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 4, "held_sec": 0.707, "accepted": true, "measured_before": [-7.2, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.2, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660852.813208, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 83, "t": "2026-11-03T08:07:32.910", "t_unix": 1793660852.911, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 5, "held_sec": 0.824, "accepted": true, "measured_before": [-8.43, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-11.43, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660852.93217, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 84, "t": "2026-11-03T08:07:33.298", "t_unix": 1793660853.299, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 6, "held_sec": 1.212, "accepted": true, "measured_before": [-11.16, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.16, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660853.326344, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 85, "t": "2026-11-03T08:07:33.400", "t_unix": 1793660853.401, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 7, "held_sec": 1.314, "accepted": true, "measured_before": [-11.68, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.48, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.68, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660853.420224, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 86, "t": "2026-11-03T08:07:33.853", "t_unix": 1793660853.854, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 7, "hold_n": 8, "held_sec": 1.766, "accepted": true, "measured_before": [-15.11, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.43, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-18.11, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660853.873159, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 88, "t": "2026-11-03T08:07:34.408", "t_unix": 1793660854.408, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 87, "t": "2026-11-03T08:07:34.405", "t_unix": 1793660854.406, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 8, "hold_n": 0, "accepted": true, "measured_before": [-18.28, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-17.11, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660854.469059, "measured_before_send": [-18.01, 13.18, 2.1, -0.26, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [-17.75, 13.18, 2.1, -0.26, 0.52, -29.88], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 89, "t": "2026-11-03T08:07:34.806", "t_unix": 1793660854.806, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [-16.69, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.69, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660854.8259242, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 90, "t": "2026-11-03T08:07:34.907", "t_unix": 1793660854.907, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 2, "held_sec": 0.502, "accepted": true, "measured_before": [-17.05, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.05, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660854.9355001, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 91, "t": "2026-11-03T08:07:35.025", "t_unix": 1793660855.026, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 3, "held_sec": 0.62, "accepted": true, "measured_before": [-14.58, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.53, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-11.58, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660855.086284, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 92, "t": "2026-11-03T08:07:35.143", "t_unix": 1793660855.144, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 4, "held_sec": 0.738, "accepted": true, "measured_before": [-11.07, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.07, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660855.567945, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 93, "t": "2026-11-03T08:07:35.625", "t_unix": 1793660855.626, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 5, "held_sec": 1.22, "accepted": true, "measured_before": [-8.34, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-5.34, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660855.959651, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 94, "t": "2026-11-03T08:07:36.331", "t_unix": 1793660856.332, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 6, "held_sec": 1.927, "accepted": true, "measured_before": [-5.8, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.46, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.8, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660856.351744, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 95, "t": "2026-11-03T08:07:36.715", "t_unix": 1793660856.716, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 7, "held_sec": 2.31, "accepted": true, "measured_before": [-3.16, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.16, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660856.743117, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 96, "t": "2026-11-03T08:07:37.119", "t_unix": 1793660857.12, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 8, "held_sec": 2.715, "accepted": true, "measured_before": [-0.08, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.08, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [2.92, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660857.14093, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 97, "t": "2026-11-03T08:07:37.521", "t_unix": 1793660857.522, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 9, "held_sec": 3.116, "accepted": true, "measured_before": [2.54, 13.18, 2.1, -0.35, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [5.54, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660857.541088, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 98, "t": "2026-11-03T08:07:37.923", "t_unix": 1793660857.924, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 10, "held_sec": 3.519, "accepted": true, "measured_before": [5.71, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.17, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [8.71, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660857.947812, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 99, "t": "2026-11-03T08:07:38.024", "t_unix": 1793660858.025, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 11, "held_sec": 3.62, "accepted": true, "measured_before": [6.15, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.15, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.086533, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 100, "t": "2026-11-03T08:07:38.142", "t_unix": 1793660858.142, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 12, "held_sec": 3.737, "accepted": true, "measured_before": [7.2, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.2, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.1647758, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 101, "t": "2026-11-03T08:07:38.242", "t_unix": 1793660858.242, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 13, "held_sec": 3.837, "accepted": true, "measured_before": [9.75, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.45, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.75, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.257649, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 102, "t": "2026-11-03T08:07:38.343", "t_unix": 1793660858.344, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 14, "held_sec": 3.938, "accepted": true, "measured_before": [9.93, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.93, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.40479, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 103, "t": "2026-11-03T08:07:38.462", "t_unix": 1793660858.463, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 15, "held_sec": 4.058, "accepted": true, "measured_before": [12.39, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [15.39, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.487027, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 104, "t": "2026-11-03T08:07:38.578", "t_unix": 1793660858.579, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 16, "held_sec": 4.173, "accepted": true, "measured_before": [13.27, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.27, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.609119, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 105, "t": "2026-11-03T08:07:38.681", "t_unix": 1793660858.681, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 17, "held_sec": 4.276, "accepted": true, "measured_before": [14.58, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.69, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [17.58, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660858.707788, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 106, "t": "2026-11-03T08:07:39.086", "t_unix": 1793660859.086, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 8, "hold_n": 18, "held_sec": 4.681, "accepted": true, "released_during_job": true, "measured_before": [17.31, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.0, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660859.1070411, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 107, "t": "2026-11-03T08:07:40.604", "t_unix": 1793660860.604, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 108, "t": "2026-11-03T08:07:43.045", "t_unix": 1793660863.046, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 109, "t": "2026-11-03T08:07:43.803", "t_unix": 1793660863.803, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 110, "t": "2026-11-03T08:07:43.854", "t_unix": 1793660863.854, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -2.0, "hold_id": 9, "hold_n": 0, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -0.26, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -2.0, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660863.900316, "measured_before_send": [20.56, 13.18, 2.1, -0.26, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [20.56, 13.18, 2.1, -0.79, 0.52, -29.88], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 111, "t": "2026-11-03T08:07:44.286", "t_unix": 1793660864.287, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 1, "held_sec": 0.433, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -0.79, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -3.79, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660864.305791, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 112, "t": "2026-11-03T08:07:44.402", "t_unix": 1793660864.402, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 2, "held_sec": 0.548, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -2.63, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.16, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -5.63, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660864.4242718, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 113, "t": "2026-11-03T08:07:44.518", "t_unix": 1793660864.518, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 3, "held_sec": 0.664, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -4.13, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -7.13, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660864.539606, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 114, "t": "2026-11-03T08:07:44.904", "t_unix": 1793660864.904, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 4, "held_sec": 1.05, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -6.06, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -9.06, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660864.9270751, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 115, "t": "2026-11-03T08:07:45.004", "t_unix": 1793660865.005, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 5, "held_sec": 1.151, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -7.73, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -10.73, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660865.025408, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 116, "t": "2026-11-03T08:07:45.105", "t_unix": 1793660865.106, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 6, "held_sec": 1.252, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -8.7, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -11.7, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660865.1309068, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 117, "t": "2026-11-03T08:07:45.207", "t_unix": 1793660865.207, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 7, "held_sec": 1.353, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -10.45, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -13.45, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660865.221913, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 118, "t": "2026-11-03T08:07:45.576", "t_unix": 1793660865.576, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 9, "hold_n": 8, "held_sec": 1.722, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -12.48, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.97, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -15.48, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660865.595209, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 120, "t": "2026-11-03T08:07:46.107", "t_unix": 1793660866.108, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 119, "t": "2026-11-03T08:07:46.040", "t_unix": 1793660866.041, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 1.0, "hold_id": 10, "hold_n": 0, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -14.5, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -14.48, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660866.085001, "measured_before_send": [20.56, 13.18, 2.1, -14.5, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [20.56, 13.18, 2.1, -14.5, 0.52, -29.88], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 121, "t": "2026-11-03T08:07:46.442", "t_unix": 1793660866.443, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -14.5, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -11.5, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660866.457189, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 122, "t": "2026-11-03T08:07:46.543", "t_unix": 1793660866.544, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 2, "held_sec": 0.503, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -14.5, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -11.5, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660866.6055171, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 123, "t": "2026-11-03T08:07:46.661", "t_unix": 1793660866.661, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 3, "held_sec": 0.62, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -12.21, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.71, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -9.21, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660866.6825118, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 124, "t": "2026-11-03T08:07:47.062", "t_unix": 1793660867.062, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 4, "held_sec": 1.021, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -9.84, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -6.84, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660867.0845718, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 125, "t": "2026-11-03T08:07:47.163", "t_unix": 1793660867.163, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 5, "held_sec": 1.122, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -9.84, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -6.84, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660867.2244742, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 126, "t": "2026-11-03T08:07:47.280", "t_unix": 1793660867.281, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 6, "held_sec": 1.24, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -7.47, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -4.47, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660867.299989, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 127, "t": "2026-11-03T08:07:47.682", "t_unix": 1793660867.683, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 10, "hold_n": 7, "held_sec": 1.642, "accepted": true, "released_during_job": true, "measured_before": [20.56, 13.18, 2.1, -5.0, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.53, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -2.0, 0.17, -29.7], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 128, "t": "2026-11-03T08:07:48.136", "t_unix": 1793660868.137, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 3, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 129, "t": "2026-11-03T08:07:48.255", "t_unix": 1793660868.256, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 2.0, "execute": true, "joint": 3, "delta": 2.0, "hold_id": 11, "hold_n": 0, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -5.0, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, -2.47, 0.17, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660868.294626, "measured_before_send": [20.56, 13.18, 2.1, -5.0, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [20.56, 13.18, 2.1, -2.9, 0.52, -29.88], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 130, "t": "2026-11-03T08:07:48.679", "t_unix": 1793660868.68, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 11, "hold_n": 1, "held_sec": 0.424, "accepted": true, "released_during_job": true, "measured_before": [20.56, 13.18, 2.1, -2.9, 0.52, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.43, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 0.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660868.7023559, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 131, "t": "2026-11-03T08:07:51.999", "t_unix": 1793660871.999, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 132, "t": "2026-11-03T08:07:53.674", "t_unix": 1793660873.674, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 133, "t": "2026-11-03T08:07:53.911", "t_unix": 1793660873.911, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -2.0, "hold_id": 12, "hold_n": 0, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -0.17, 0.52, -29.88], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -1.83, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660873.995327, "measured_before_send": [20.56, 13.18, 2.1, -0.17, 0.52, -29.88], "resends": [], "reached": true, "reached_angles": [20.56, 13.18, 2.1, -0.17, -2.28, -29.88], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 134, "t": "2026-11-03T08:07:54.382", "t_unix": 1793660874.383, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 1, "held_sec": 0.472, "accepted": true, "measured_before": [20.56, 13.18, 2.1, -0.17, -2.28, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.45, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -5.28, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660874.399913, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 135, "t": "2026-11-03T08:07:54.765", "t_unix": 1793660874.766, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 2, "held_sec": 0.855, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.17, -5.8, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.52, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -8.8, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660874.78476, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 136, "t": "2026-11-03T08:07:54.882", "t_unix": 1793660874.882, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 3, "held_sec": 0.971, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.17, -5.8, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -8.8, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660874.91522, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 137, "t": "2026-11-03T08:07:54.999", "t_unix": 1793660874.999, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 4, "held_sec": 1.089, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.17, -8.78, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -11.78, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660875.0264032, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 138, "t": "2026-11-03T08:07:55.114", "t_unix": 1793660875.114, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 5, "held_sec": 1.204, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -9.4, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -12.4, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660875.1461918, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 139, "t": "2026-11-03T08:07:55.216", "t_unix": 1793660875.216, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 6, "held_sec": 1.306, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -10.89, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -13.89, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660875.243191, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 140, "t": "2026-11-03T08:07:55.318", "t_unix": 1793660875.318, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 7, "held_sec": 1.407, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -13.27, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.62, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -16.27, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660875.3346581, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 141, "t": "2026-11-03T08:07:55.419", "t_unix": 1793660875.419, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 8, "held_sec": 1.508, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -14.32, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -17.32, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660875.448122, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 142, "t": "2026-11-03T08:07:55.519", "t_unix": 1793660875.52, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 12, "hold_n": 9, "held_sec": 1.609, "accepted": true, "released_during_job": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -16.69, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -19.69, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660875.541575, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 143, "t": "2026-11-03T08:07:56.037", "t_unix": 1793660876.037, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 2.0, "hold_id": 13, "hold_n": 0, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -20.21, -29.79], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -17.69, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660876.084088, "measured_before_send": [20.47, 13.18, 2.1, -0.08, -20.21, -29.79], "resends": [], "reached": true, "reached_angles": [20.47, 13.18, 2.1, -0.08, -20.21, -29.79], "reach_err": 2.52, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 144, "t": "2026-11-03T08:07:56.440", "t_unix": 1793660876.441, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -19.59, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -16.59, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660876.453367, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 145, "t": "2026-11-03T08:07:56.541", "t_unix": 1793660876.542, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 2, "held_sec": 0.504, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -18.72, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.13, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -15.72, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660876.561943, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 146, "t": "2026-11-03T08:07:56.926", "t_unix": 1793660876.926, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 3, "held_sec": 0.889, "accepted": true, "measured_before": [20.47, 13.18, 2.1, -0.08, -17.49, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -14.49, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660876.948226, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 147, "t": "2026-11-03T08:07:57.311", "t_unix": 1793660877.311, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 4, "held_sec": 1.274, "accepted": true, "measured_before": [20.47, 13.18, 2.1, 0.0, -15.99, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -12.99, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660877.32612, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 148, "t": "2026-11-03T08:07:57.412", "t_unix": 1793660877.413, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 5, "held_sec": 1.376, "accepted": true, "measured_before": [20.47, 13.18, 2.1, 0.0, -14.76, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -11.76, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660877.42945, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 149, "t": "2026-11-03T08:07:57.530", "t_unix": 1793660877.53, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 6, "held_sec": 1.493, "accepted": true, "measured_before": [20.47, 13.18, 2.1, 0.0, -13.27, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -10.27, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660877.555829, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 150, "t": "2026-11-03T08:07:57.930", "t_unix": 1793660877.931, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 7, "held_sec": 1.893, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -11.6, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -8.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660877.952823, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 151, "t": "2026-11-03T08:07:58.031", "t_unix": 1793660878.031, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 8, "held_sec": 1.994, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -10.98, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -7.98, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660878.054026, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 152, "t": "2026-11-03T08:07:58.418", "t_unix": 1793660878.419, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 9, "held_sec": 2.381, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -9.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -6.4, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660878.4411361, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 153, "t": "2026-11-03T08:07:58.534", "t_unix": 1793660878.534, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 10, "held_sec": 2.497, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -8.26, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -5.26, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660878.5660539, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 154, "t": "2026-11-03T08:07:58.634", "t_unix": 1793660878.635, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 11, "held_sec": 2.597, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -6.94, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -3.94, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660878.6569338, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 155, "t": "2026-11-03T08:07:59.024", "t_unix": 1793660879.025, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 12, "held_sec": 2.987, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -5.09, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -2.09, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.0479202, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 156, "t": "2026-11-03T08:07:59.125", "t_unix": 1793660879.126, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 13, "held_sec": 3.088, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -4.74, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -1.74, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.148593, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 157, "t": "2026-11-03T08:07:59.225", "t_unix": 1793660879.226, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 14, "held_sec": 3.189, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.0, -2.98, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 0.02, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.2516391, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 158, "t": "2026-11-03T08:07:59.325", "t_unix": 1793660879.326, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 15, "held_sec": 3.289, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, -2.46, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.48, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 0.54, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.346205, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 159, "t": "2026-11-03T08:07:59.426", "t_unix": 1793660879.427, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 16, "held_sec": 3.389, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, -0.61, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 2.39, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.451414, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 160, "t": "2026-11-03T08:07:59.542", "t_unix": 1793660879.543, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 17, "held_sec": 3.506, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.31, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 3.08, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.563964, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 161, "t": "2026-11-03T08:07:59.660", "t_unix": 1793660879.66, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 18, "held_sec": 3.623, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 4.84, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.68607, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 162, "t": "2026-11-03T08:07:59.775", "t_unix": 1793660879.775, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 19, "held_sec": 3.738, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 2.63, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 5.63, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.801962, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 163, "t": "2026-11-03T08:07:59.875", "t_unix": 1793660879.876, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 20, "held_sec": 3.839, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 4.39, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 7.39, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660879.9021142, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 164, "t": "2026-11-03T08:08:00.259", "t_unix": 1793660880.259, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 21, "held_sec": 4.222, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 6.41, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 9.41, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660880.273677, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 165, "t": "2026-11-03T08:08:00.360", "t_unix": 1793660880.36, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 22, "held_sec": 4.323, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 7.03, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 10.03, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660880.378315, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 166, "t": "2026-11-03T08:08:00.476", "t_unix": 1793660880.477, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 23, "held_sec": 4.44, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 8.96, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 11.96, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660880.4976552, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 167, "t": "2026-11-03T08:08:00.863", "t_unix": 1793660880.863, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 24, "held_sec": 4.826, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 10.89, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 13.89, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660880.884914, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 168, "t": "2026-11-03T08:08:00.964", "t_unix": 1793660880.964, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 25, "held_sec": 4.927, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 11.51, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 14.51, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660880.98404, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 169, "t": "2026-11-03T08:08:01.079", "t_unix": 1793660881.079, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 13, "hold_n": 26, "held_sec": 5.042, "accepted": true, "released_during_job": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 13.53, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 16.53, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660881.102015, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 171, "t": "2026-11-03T08:08:01.528", "t_unix": 1793660881.528, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 170, "t": "2026-11-03T08:08:01.527", "t_unix": 1793660881.528, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 14, "hold_n": 0, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 15.55, -29.79], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 15.53, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660881.5674381, "measured_before_send": [20.39, 13.18, 2.1, 0.08, 15.55, -29.79], "resends": [], "reached": true, "reached_angles": [20.39, 13.18, 2.1, 0.08, 15.55, -29.79], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 172, "t": "2026-11-03T08:08:01.930", "t_unix": 1793660881.931, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 15.55, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 12.55, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660881.954144, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 173, "t": "2026-11-03T08:08:02.347", "t_unix": 1793660882.348, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 2, "held_sec": 0.82, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 13.18, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 10.18, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660882.3703759, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 174, "t": "2026-11-03T08:08:02.466", "t_unix": 1793660882.467, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 3, "held_sec": 0.939, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.08, 11.68, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 8.68, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660882.524114, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 175, "t": "2026-11-03T08:08:02.585", "t_unix": 1793660882.585, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 4, "held_sec": 1.058, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 10.54, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 7.54, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660882.604244, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 176, "t": "2026-11-03T08:08:02.685", "t_unix": 1793660882.686, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 5, "held_sec": 1.158, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 8.61, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 5.61, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660882.714912, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 177, "t": "2026-11-03T08:08:02.786", "t_unix": 1793660882.786, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 6, "held_sec": 1.258, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 8.17, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 5.17, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660882.800813, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 178, "t": "2026-11-03T08:08:03.155", "t_unix": 1793660883.155, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 7, "held_sec": 1.627, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 6.06, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 3.06, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660883.177116, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 179, "t": "2026-11-03T08:08:03.540", "t_unix": 1793660883.541, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 8, "held_sec": 2.012, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 3.6, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660883.563781, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 180, "t": "2026-11-03T08:08:03.641", "t_unix": 1793660883.641, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 14, "hold_n": 9, "held_sec": 2.113, "accepted": true, "released_during_job": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.31, 11.58, 1.4, 0.1, -1.77, -29.7], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 182, "t": "2026-11-03T08:08:04.266", "t_unix": 1793660884.267, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 181, "t": "2026-11-03T08:08:04.266", "t_unix": 1793660884.266, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 15, "hold_n": 0, "accepted": true, "measured_before": [20.39, 13.18, 2.1, 0.17, 1.23, -29.79], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [19.31, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660884.307901, "measured_before_send": [20.39, 13.18, 2.1, 0.17, 1.23, -29.79], "resends": [], "reached": true, "reached_angles": [20.39, 13.18, 2.1, 0.17, 1.23, -29.79], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 183, "t": "2026-11-03T08:08:04.668", "t_unix": 1793660884.668, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 1, "held_sec": 0.402, "accepted": true, "measured_before": [19.51, 13.18, 2.1, 0.17, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.2, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [16.51, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660884.693839, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 184, "t": "2026-11-03T08:08:05.093", "t_unix": 1793660885.093, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 2, "held_sec": 0.827, "accepted": true, "measured_before": [16.52, 13.18, 2.1, 0.17, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [13.52, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660885.118508, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 185, "t": "2026-11-03T08:08:05.479", "t_unix": 1793660885.479, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 3, "held_sec": 1.213, "accepted": true, "measured_before": [13.71, 13.18, 2.1, 0.26, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [10.71, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660885.5010529, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 186, "t": "2026-11-03T08:08:05.879", "t_unix": 1793660885.88, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 4, "held_sec": 1.613, "accepted": true, "measured_before": [10.89, 13.18, 2.1, 0.35, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.18, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [7.89, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660885.895381, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 187, "t": "2026-11-03T08:08:06.261", "t_unix": 1793660886.262, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 5, "held_sec": 1.995, "accepted": true, "measured_before": [7.99, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [4.99, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.279375, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 188, "t": "2026-11-03T08:08:06.364", "t_unix": 1793660886.365, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 6, "held_sec": 2.098, "accepted": true, "measured_before": [7.29, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.3, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [4.29, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.424345, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 189, "t": "2026-11-03T08:08:06.483", "t_unix": 1793660886.483, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 7, "held_sec": 2.217, "accepted": true, "measured_before": [5.97, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [2.97, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.505773, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 190, "t": "2026-11-03T08:08:06.600", "t_unix": 1793660886.6, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 8, "held_sec": 2.334, "accepted": true, "measured_before": [3.95, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [0.95, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.625227, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 191, "t": "2026-11-03T08:08:06.700", "t_unix": 1793660886.7, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 9, "held_sec": 2.434, "accepted": true, "measured_before": [2.72, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.28, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.720604, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 192, "t": "2026-11-03T08:08:06.800", "t_unix": 1793660886.801, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 10, "held_sec": 2.535, "accepted": true, "measured_before": [0.61, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.39, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.8228061, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 193, "t": "2026-11-03T08:08:06.900", "t_unix": 1793660886.901, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 11, "held_sec": 2.635, "accepted": true, "measured_before": [0.0, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.0, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660886.920135, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 194, "t": "2026-11-03T08:08:07.001", "t_unix": 1793660887.002, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 12, "held_sec": 2.735, "accepted": true, "measured_before": [-3.07, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.07, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660887.0231428, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 195, "t": "2026-11-03T08:08:07.102", "t_unix": 1793660887.102, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 13, "held_sec": 2.836, "accepted": true, "measured_before": [-6.5, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.43, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.5, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660887.5372522, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 196, "t": "2026-11-03T08:08:07.926", "t_unix": 1793660887.926, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 14, "held_sec": 3.66, "accepted": true, "measured_before": [-9.22, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.28, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-12.22, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660887.950658, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 197, "t": "2026-11-03T08:08:08.058", "t_unix": 1793660888.058, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 15, "held_sec": 3.792, "accepted": true, "measured_before": [-10.01, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.01, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660888.083502, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 198, "t": "2026-11-03T08:08:08.161", "t_unix": 1793660888.161, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 16, "held_sec": 3.895, "accepted": true, "measured_before": [-11.16, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.85, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.16, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660888.181481, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 199, "t": "2026-11-03T08:08:08.547", "t_unix": 1793660888.548, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 17, "held_sec": 4.279, "accepted": true, "measured_before": [-14.06, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-17.06, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660888.5719502, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 200, "t": "2026-11-03T08:08:08.663", "t_unix": 1793660888.664, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 18, "held_sec": 4.398, "accepted": true, "measured_before": [-14.41, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-17.41, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660888.7261891, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 201, "t": "2026-11-03T08:08:08.782", "t_unix": 1793660888.783, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 19, "held_sec": 4.517, "accepted": true, "measured_before": [-16.34, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-19.34, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660888.803252, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 202, "t": "2026-11-03T08:08:08.883", "t_unix": 1793660888.884, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 20, "held_sec": 4.618, "accepted": true, "measured_before": [-18.19, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-21.19, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660888.897784, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 203, "t": "2026-11-03T08:08:08.984", "t_unix": 1793660888.984, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 21, "held_sec": 4.718, "accepted": true, "measured_before": [-19.42, 13.18, 2.1, 0.43, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.42, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660889.0027509, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 204, "t": "2026-11-03T08:08:09.085", "t_unix": 1793660889.085, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 22, "held_sec": 4.819, "accepted": true, "measured_before": [-21.79, 13.18, 2.1, 0.43, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-24.79, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660889.105888, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 205, "t": "2026-11-03T08:08:09.486", "t_unix": 1793660889.487, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 15, "hold_n": 23, "held_sec": 5.221, "accepted": true, "released_during_job": true, "measured_before": [-24.6, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-27.6, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660889.512012, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 207, "t": "2026-11-03T08:08:10.293", "t_unix": 1793660890.293, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 206, "t": "2026-11-03T08:08:10.292", "t_unix": 1793660890.293, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 16, "hold_n": 0, "accepted": true, "measured_before": [-28.03, 13.18, 2.1, 0.43, 1.23, -29.79], "start_source": "command", "cmd_gap_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-26.6, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "timeout_sec": 8.0, "t_send": 1793660890.342338, "measured_before_send": [-28.03, 13.18, 2.1, 0.43, 1.23, -29.79], "resends": [], "reached": true, "reached_angles": [-28.03, 13.18, 2.1, 0.43, 1.23, -29.79], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 208, "t": "2026-11-03T08:08:10.697", "t_unix": 1793660890.698, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 1, "held_sec": 0.406, "accepted": true, "measured_before": [-26.8, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.2, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-23.8, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660890.72479, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 209, "t": "2026-11-03T08:08:10.799", "t_unix": 1793660890.8, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 2, "held_sec": 0.508, "accepted": true, "measured_before": [-26.45, 13.18, 2.1, 0.52, 1.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-23.45, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660890.83726, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 210, "t": "2026-11-03T08:08:11.267", "t_unix": 1793660891.267, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 3, "held_sec": 0.975, "accepted": true, "measured_before": [-23.11, 13.18, 2.1, 0.43, 0.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.34, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-20.11, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660891.297859, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 211, "t": "2026-11-03T08:08:11.384", "t_unix": 1793660891.385, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 4, "held_sec": 1.093, "accepted": true, "measured_before": [-23.2, 13.18, 2.1, 0.43, 0.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.09, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-20.2, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660891.444818, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 212, "t": "2026-11-03T08:08:11.501", "t_unix": 1793660891.502, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 5, "held_sec": 1.21, "accepted": true, "measured_before": [-21.26, 13.18, 2.1, 0.43, 0.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.06, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-18.26, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660891.527476, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 213, "t": "2026-11-03T08:08:11.604", "t_unix": 1793660891.605, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 6, "held_sec": 1.313, "accepted": true, "measured_before": [-19.51, 13.18, 2.1, 0.43, 0.79, -29.88], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-16.51, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660891.63358, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 214, "t": "2026-11-03T08:08:11.721", "t_unix": 1793660891.721, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 7, "held_sec": 1.43, "accepted": true, "measured_before": [-17.75, 13.18, 2.1, 0.43, 0.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-14.75, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660891.741798, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 215, "t": "2026-11-03T08:08:11.822", "t_unix": 1793660891.822, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 8, "held_sec": 1.53, "accepted": true, "measured_before": [-15.73, 13.18, 2.1, 0.52, 0.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-12.73, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660891.8352158, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 216, "t": "2026-11-03T08:08:12.193", "t_unix": 1793660892.193, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 9, "held_sec": 1.902, "accepted": true, "measured_before": [-12.21, 13.18, 2.1, 0.43, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.52, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.21, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660892.217401, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 217, "t": "2026-11-03T08:08:12.310", "t_unix": 1793660892.311, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 10, "held_sec": 2.019, "accepted": true, "measured_before": [-12.83, 13.18, 2.1, 0.43, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.62, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.83, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660892.335722, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 218, "t": "2026-11-03T08:08:12.779", "t_unix": 1793660892.78, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 11, "held_sec": 2.488, "accepted": true, "measured_before": [-9.58, 13.18, 2.1, 0.52, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.58, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660892.808364, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 219, "t": "2026-11-03T08:08:12.880", "t_unix": 1793660892.881, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 12, "held_sec": 2.589, "accepted": true, "measured_before": [-9.93, 13.18, 2.1, 0.52, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.35, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.93, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660892.906052, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 220, "t": "2026-11-03T08:08:12.981", "t_unix": 1793660892.981, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 13, "held_sec": 2.689, "accepted": true, "measured_before": [-8.7, 13.18, 2.1, 0.52, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-5.7, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660892.999562, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 221, "t": "2026-11-03T08:08:13.383", "t_unix": 1793660893.384, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 14, "held_sec": 3.092, "accepted": true, "measured_before": [-5.44, 13.18, 2.1, 0.43, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.26, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.44, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660893.4073532, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 222, "t": "2026-11-03T08:08:13.485", "t_unix": 1793660893.486, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 15, "held_sec": 3.194, "accepted": true, "measured_before": [-5.71, 13.18, 2.1, 0.43, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 3.27, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-2.71, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660893.544184, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 223, "t": "2026-11-03T08:08:13.598", "t_unix": 1793660893.598, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 16, "held_sec": 3.307, "accepted": true, "measured_before": [-3.42, 13.18, 2.1, 0.43, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.71, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.42, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660893.6235461, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 224, "t": "2026-11-03T08:08:13.700", "t_unix": 1793660893.701, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 17, "held_sec": 3.409, "accepted": true, "measured_before": [-1.93, 13.18, 2.1, 0.43, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [1.07, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660893.726015, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 225, "t": "2026-11-03T08:08:13.801", "t_unix": 1793660893.802, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 18, "held_sec": 3.51, "accepted": true, "measured_before": [-0.35, 13.18, 2.1, 0.52, 0.7, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [2.65, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660893.833268, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 226, "t": "2026-11-03T08:08:14.189", "t_unix": 1793660894.189, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 19, "held_sec": 3.897, "accepted": true, "measured_before": [3.16, 13.18, 2.1, 0.43, 0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.16, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": true, "reached": null, "no_check": true, "t_send": 1793660894.213556, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 227, "t": "2026-11-03T08:08:14.290", "t_unix": 1793660894.291, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 16, "hold_n": 20, "held_sec": 3.999, "accepted": true, "released_during_job": true, "measured_before": [6.06, 13.18, 2.1, 0.43, 0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 1.6, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 11.58, 1.4, 0.1, 0.6, -29.7], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 228, "t": "2026-11-03T08:08:19.058", "t_unix": 1793660899.058, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 4, "step_deg": 1.0, "execute": true, "held_sec": 1.004, "accepted": true, "measured_before": [6.24, 13.18, 2.1, 0.43, 0.26, -29.79], "command": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0], "range_check": "skipped_for_home", "sent": true, "timeout_sec": 8.0, "t_send": 1793660899.104776, "measured_before_send": [6.24, 13.18, 2.1, 0.43, 0.26, -29.79], "resends": [], "reached": true, "reached_angles": [-0.35, 1.49, 2.1, 0.43, -0.52, -29.79], "reach_err": 2.1, "elapsed_sec": 0.72, "grip_state": "unknown", "stopped": false, "stop_reason": null}
```

### 8:09 の記録 runs/experiments/gamepad_teleop/teleop_20261103_080930/meta.json

```json
{
  "run_stem": "teleop_20261103_080930",
  "started_at": "2026-11-03T08:09:31",
  "execute": true,
  "argv": [
    "tools/gamepad_teleop.py",
    "--execute"
  ],
  "controllers": [
    {
      "name": "PS4 Controller",
      "guid": "03008fe54c050000cc09000000016800",
      "instance_id": 0,
      "axes": 6,
      "buttons": 16,
      "hats": 0,
      "connected_at": "2026-11-03T08:09:36"
    }
  ],
  "python": "3.12.12 | packaged by conda-forge | (main, Oct 22 2025, 23:34:53) [Clang 19.1.7 ]",
  "pygame": "2.6.1",
  "sdl": "2.28.4",
  "platform": "macOS-26.6.2-arm64-arm-64bit",
  "start_pose": [
    -0.26,
    1.49,
    2.1,
    0.26,
    -0.26,
    -29.79
  ],
  "guards": {
    "J1_MAX_DEG": 90.87,
    "range": "physical_limits (no base window. 2026-11-03)",
    "J4_SAFE": [
      -90.0,
      60.0
    ],
    "JOINT_LIMITS": [
      [
        -156.0,
        161.0
      ],
      [
        -79.0,
        123.0
      ],
      [
        -177.0,
        177.0
      ],
      [
        -156.0,
        162.0
      ],
      [
        -118.0,
        118.0
      ],
      [
        -177.0,
        178.0
      ]
    ],
    "window": {
      "lo": [
        -156.0,
        -79.0,
        -177.0,
        -156.0,
        -90.0,
        -177.0
      ],
      "hi": [
        161.0,
        90.87,
        177.0,
        162.0,
        60.0,
        178.0
      ]
    },
    "home_bypasses_range_check": true
  },
  "motion": {
    "speed": 20,
    "step_fine_deg": 1.0,
    "step_coarse_deg": 2.0,
    "reach_tol_deg": 3.0,
    "reach_timeout_min_sec": 8.0,
    "poll_sec": 0.3,
    "gripper_sleep_sec": 0.8,
    "grip_close_value": 20,
    "send_wait": 0.0,
    "home": [
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      -30.0
    ],
    "home_hold_sec": 1.0,
    "trigger_stop_above": 0.0,
    "hold_start_sec": 0.4,
    "hold_interval_sec": 0.1,
    "hold_ahead_deg": 3.0,
    "hold_stall_sec": 1.0,
    "ignored_check_sec": 0.5,
    "ignored_max_resends": 3,
    "j0_left_sign": -1.0,
    "up_sign": -1.0,
    "select_order": [
      1,
      2,
      3,
      4,
      5
    ]
  },
  "button_map": {
    "0": "cross",
    "1": "circle",
    "2": "square",
    "3": "triangle",
    "4": "share",
    "5": "home",
    "6": "options",
    "7": "l3",
    "8": "r3",
    "9": "l1",
    "10": "r1",
    "11": "dpad_up",
    "12": "dpad_down",
    "13": "dpad_left",
    "14": "dpad_right",
    "15": "touchpad"
  },
  "git": {
    "commit": "413f7e111fcd58b991b790ddd6bb3a220d1c3479",
    "script_status": "clean"
  },
  "script_copy": "gamepad_teleop.py",
  "script_sha256": "6d14e322e4560c6aa66d8172776874b204d1c28867cb73c5805527255d2ac29f",
  "ended_at": "2026-11-03T08:11:33",
  "end_reason": "ctrl_c",
  "n_sent": 275
}
```

### 8:09 の記録 runs/experiments/gamepad_teleop/teleop_20261103_080930/log.jsonl（307行）

```json
{"seq": 1, "t": "2026-11-03T08:09:45.936", "t_unix": 1793660985.937, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 1, "hold_n": 0, "accepted": true, "measured_before": [-0.26, 1.49, 2.1, 0.26, -0.26, -29.79], "start_source": "command", "cmd_gap_deg": 0.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-1.26, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793660986.018062, "measured_before_send": [-0.26, 1.49, 2.1, 0.26, -0.26, -29.79], "resends": [], "reached": true, "reached_angles": [-0.26, 1.49, 2.1, 0.26, -0.26, -29.79], "reach_err": 1.0, "elapsed_sec": 0.01, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 2, "t": "2026-11-03T08:09:46.336", "t_unix": 1793660986.337, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [-1.05, 2.28, 2.81, 0.26, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.05, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660986.363437, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 3, "t": "2026-11-03T08:09:46.437", "t_unix": 1793660986.437, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 2, "held_sec": 0.501, "accepted": true, "measured_before": [-1.05, 2.28, 2.81, 0.26, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-4.05, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660986.465986, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 4, "t": "2026-11-03T08:09:46.537", "t_unix": 1793660986.538, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 3, "held_sec": 0.602, "accepted": true, "measured_before": [-2.37, 2.28, 2.81, 0.26, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-5.37, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660986.565394, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 5, "t": "2026-11-03T08:09:46.646", "t_unix": 1793660986.647, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 4, "held_sec": 0.711, "accepted": true, "measured_before": [-4.74, 2.28, 2.81, 0.26, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-7.74, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660986.666309, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 6, "t": "2026-11-03T08:09:46.763", "t_unix": 1793660986.763, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 5, "held_sec": 0.827, "accepted": true, "measured_before": [-7.64, 2.28, 2.81, 0.17, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.1, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.64, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660987.151343, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 7, "t": "2026-11-03T08:09:47.213", "t_unix": 1793660987.213, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 6, "held_sec": 1.277, "accepted": true, "measured_before": [-7.82, 2.28, 2.81, 0.17, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-10.82, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660987.2410161, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 8, "t": "2026-11-03T08:09:47.664", "t_unix": 1793660987.665, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 7, "held_sec": 1.729, "accepted": true, "measured_before": [-10.98, 2.28, 2.81, 0.08, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.16, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.98, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660987.6829162, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 9, "t": "2026-11-03T08:09:47.764", "t_unix": 1793660987.765, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 8, "held_sec": 1.829, "accepted": true, "measured_before": [-10.81, 2.28, 2.81, 0.08, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 3.17, "held_previous_target": true, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.98, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660987.7927659, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 10, "t": "2026-11-03T08:09:47.884", "t_unix": 1793660987.885, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 9, "held_sec": 1.949, "accepted": true, "measured_before": [-13.18, 2.28, 2.81, 0.08, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-16.18, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660987.898239, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 11, "t": "2026-11-03T08:09:48.272", "t_unix": 1793660988.273, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 10, "held_sec": 2.337, "accepted": true, "measured_before": [-15.9, 2.28, 2.81, -0.08, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.28, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-18.9, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660988.292361, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 12, "t": "2026-11-03T08:09:48.374", "t_unix": 1793660988.375, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 11, "held_sec": 2.439, "accepted": true, "measured_before": [-16.52, 2.28, 2.81, -0.08, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.38, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-19.52, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660988.406552, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 13, "t": "2026-11-03T08:09:48.476", "t_unix": 1793660988.477, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 12, "held_sec": 2.541, "accepted": true, "measured_before": [-17.13, 2.28, 2.81, -0.17, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-20.13, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660988.500304, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 15, "t": "2026-11-03T08:09:49.945", "t_unix": 1793660989.945, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 16, "t": "2026-11-03T08:09:50.012", "t_unix": 1793660990.012, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 2.0, "hold_id": 2, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 17, "t": "2026-11-03T08:09:51.997", "t_unix": 1793660991.998, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 3, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 18, "t": "2026-11-03T08:09:52.048", "t_unix": 1793660992.048, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 14, "t": "2026-11-03T08:09:48.862", "t_unix": 1793660988.863, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 1, "hold_n": 13, "held_sec": 2.927, "accepted": true, "released_during_job": true, "measured_before": [-20.21, 2.28, 2.81, -0.17, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 0.08, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-23.21, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793660988.877511, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 20, "t": "2026-11-03T08:09:54.538", "t_unix": 1793660994.539, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 21, "t": "2026-11-03T08:09:58.409", "t_unix": 1793660998.409, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 2, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 22, "t": "2026-11-03T08:09:59.093", "t_unix": 1793660999.094, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -1.0, "hold_id": 5, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 23, "t": "2026-11-03T08:10:00.889", "t_unix": 1793661000.889, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 6, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 24, "t": "2026-11-03T08:10:01.626", "t_unix": 1793661001.627, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 25, "t": "2026-11-03T08:10:01.845", "t_unix": 1793661001.846, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": 2.0, "hold_id": 7, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 26, "t": "2026-11-03T08:10:03.911", "t_unix": 1793661003.911, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -1.0, "hold_id": 8, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 27, "t": "2026-11-03T08:10:03.913", "t_unix": 1793661003.913, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 9, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 28, "t": "2026-11-03T08:10:03.996", "t_unix": 1793661003.996, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 29, "t": "2026-11-03T08:10:07.148", "t_unix": 1793661007.148, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 10, "hold_n": 0, "accepted": false, "reason": "busy", "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 19, "t": "2026-11-03T08:09:54.505", "t_unix": 1793660994.505, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 4, "hold_n": 0, "accepted": true, "measured_before": [-23.55, 2.28, 2.81, -0.08, -0.26, -29.79], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 2.1, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661007.390603, "measured_before_send": [-23.55, 2.28, 2.81, -0.08, -0.26, -29.79], "resends": [], "reached": true, "reached_angles": [-22.32, 2.28, 2.81, -0.08, -0.26, -29.79], "reach_err": 0.79, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 30, "t": "2026-11-03T08:10:08.856", "t_unix": 1793661008.856, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -1.0, "hold_id": 11, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.28, 2.81, -0.08, -0.26, -29.79], "start_source": "command", "cmd_gap_deg": 0.79, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 1.1, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661008.92799, "measured_before_send": [-21.88, 2.28, 2.81, -0.08, -0.26, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.28, 2.81, -0.08, -0.26, -29.79], "reach_err": 1.71, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 31, "t": "2026-11-03T08:10:09.443", "t_unix": 1793661009.444, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -1.0, "hold_id": 12, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.28, 2.81, -0.08, -0.26, -29.79], "start_source": "command", "cmd_gap_deg": 1.71, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 0.1, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661009.472501, "measured_before_send": [-21.88, 2.28, 2.81, -0.08, -0.26, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.28, 2.1, -0.08, -0.26, -29.79], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 32, "t": "2026-11-03T08:10:09.865", "t_unix": 1793661009.866, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 12, "hold_n": 1, "held_sec": 0.422, "accepted": true, "measured_before": [-21.88, 2.28, 2.1, -0.08, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -0.9, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661009.886506, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 33, "t": "2026-11-03T08:10:09.966", "t_unix": 1793661009.967, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 12, "hold_n": 2, "held_sec": 0.523, "accepted": true, "measured_before": [-21.88, 2.28, 2.02, 0.0, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 2.92, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -0.98, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661009.988081, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 34, "t": "2026-11-03T08:10:10.083", "t_unix": 1793661010.083, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 12, "hold_n": 3, "held_sec": 0.64, "accepted": true, "measured_before": [-21.88, 2.28, 0.79, 0.0, -0.26, -29.79], "start_source": "hold", "cmd_gap_deg": 0.79, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -2.21, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661010.0972428, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 35, "t": "2026-11-03T08:10:10.470", "t_unix": 1793661010.471, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 12, "hold_n": 4, "held_sec": 1.027, "accepted": true, "measured_before": [-21.88, 2.37, -0.61, 0.0, -0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -3.61, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661010.493411, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 36, "t": "2026-11-03T08:10:10.857", "t_unix": 1793661010.857, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 12, "hold_n": 5, "held_sec": 1.414, "accepted": true, "measured_before": [-21.88, 2.37, -1.93, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -4.93, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661010.882755, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 37, "t": "2026-11-03T08:10:10.957", "t_unix": 1793661010.958, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 12, "hold_n": 6, "held_sec": 1.514, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, -2.02, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -5.02, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661010.977678, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 38, "t": "2026-11-03T08:10:11.493", "t_unix": 1793661011.493, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 13, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, -3.33, 0.0, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.69, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -4.02, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661011.534028, "measured_before_send": [-21.88, 2.37, -3.33, 0.0, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, -3.33, 0.0, 0.08, -29.79], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 39, "t": "2026-11-03T08:10:11.908", "t_unix": 1793661011.909, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 13, "hold_n": 1, "held_sec": 0.415, "accepted": true, "measured_before": [-21.88, 2.37, -3.25, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -0.25, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661011.9373848, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 40, "t": "2026-11-03T08:10:12.307", "t_unix": 1793661012.307, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 13, "hold_n": 2, "held_sec": 0.814, "accepted": true, "measured_before": [-21.88, 2.37, 0.79, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 3.79, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661012.325135, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 41, "t": "2026-11-03T08:10:12.408", "t_unix": 1793661012.408, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 13, "hold_n": 3, "held_sec": 0.915, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 0.87, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.92, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 3.87, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661012.4295838, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 42, "t": "2026-11-03T08:10:12.994", "t_unix": 1793661012.994, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 14, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 4.92, 0.0, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.05, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 4.87, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661013.0350442, "measured_before_send": [-21.88, 2.37, 4.92, 0.0, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 4.92, 0.0, 0.08, -29.79], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 43, "t": "2026-11-03T08:10:13.395", "t_unix": 1793661013.395, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 14, "hold_n": 1, "held_sec": 0.401, "accepted": true, "measured_before": [-21.88, 2.37, 5.71, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.84, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 8.71, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661013.417016, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 44, "t": "2026-11-03T08:10:13.795", "t_unix": 1793661013.795, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 14, "hold_n": 2, "held_sec": 0.801, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 9.75, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 12.75, 0.26, -0.26, -29.79], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 46, "t": "2026-11-03T08:10:14.198", "t_unix": 1793661014.199, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 2, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 45, "t": "2026-11-03T08:10:14.198", "t_unix": 1793661014.198, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -1.0, "hold_id": 15, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 9.75, 0.0, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 7.71, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661014.244637, "measured_before_send": [-21.88, 2.37, 9.75, 0.0, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 9.75, 0.0, 0.08, -29.79], "reach_err": 2.04, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 47, "t": "2026-11-03T08:10:14.601", "t_unix": 1793661014.602, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [-21.88, 2.37, 9.66, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 6.66, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661014.6245399, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 48, "t": "2026-11-03T08:10:14.717", "t_unix": 1793661014.718, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 2, "held_sec": 0.52, "accepted": true, "measured_before": [-21.88, 2.37, 9.4, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.74, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 6.4, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661014.7381382, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 49, "t": "2026-11-03T08:10:15.102", "t_unix": 1793661015.103, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 3, "held_sec": 0.905, "accepted": true, "measured_before": [-21.88, 2.37, 8.17, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 5.17, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661015.1225972, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 50, "t": "2026-11-03T08:10:15.204", "t_unix": 1793661015.205, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 4, "held_sec": 1.007, "accepted": true, "measured_before": [-21.88, 2.37, 7.99, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 4.99, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661015.2281191, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 51, "t": "2026-11-03T08:10:15.322", "t_unix": 1793661015.322, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 5, "held_sec": 1.124, "accepted": true, "measured_before": [-21.88, 2.37, 6.94, 0.0, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 3.94, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661015.338104, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 52, "t": "2026-11-03T08:10:15.690", "t_unix": 1793661015.691, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 6, "held_sec": 1.493, "accepted": true, "measured_before": [-21.88, 2.37, 5.71, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 2.71, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661015.7134058, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 53, "t": "2026-11-03T08:10:16.075", "t_unix": 1793661016.075, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 7, "held_sec": 1.877, "accepted": true, "measured_before": [-21.88, 2.37, 4.39, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 1.39, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661016.097976, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 54, "t": "2026-11-03T08:10:16.473", "t_unix": 1793661016.474, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 8, "held_sec": 2.276, "accepted": true, "measured_before": [-21.88, 2.37, 3.07, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 0.07, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661016.493365, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 55, "t": "2026-11-03T08:10:16.858", "t_unix": 1793661016.859, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 9, "held_sec": 2.661, "accepted": true, "measured_before": [-21.88, 2.37, 1.84, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -1.16, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661016.882698, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 56, "t": "2026-11-03T08:10:16.960", "t_unix": 1793661016.961, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 10, "held_sec": 2.763, "accepted": true, "measured_before": [-21.88, 2.37, 1.75, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -1.25, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661016.987434, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 57, "t": "2026-11-03T08:10:17.062", "t_unix": 1793661017.062, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 11, "held_sec": 2.864, "accepted": true, "measured_before": [-21.88, 2.37, 0.52, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -2.48, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661017.083495, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 58, "t": "2026-11-03T08:10:17.164", "t_unix": 1793661017.164, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 12, "held_sec": 2.967, "accepted": true, "measured_before": [-21.88, 2.37, 0.43, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -2.57, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661017.187007, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 59, "t": "2026-11-03T08:10:17.280", "t_unix": 1793661017.281, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 13, "held_sec": 3.083, "accepted": true, "measured_before": [-21.88, 2.37, -0.96, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.61, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -3.96, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661017.3010828, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 60, "t": "2026-11-03T08:10:17.380", "t_unix": 1793661017.381, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 14, "held_sec": 3.183, "accepted": true, "measured_before": [-21.88, 2.37, -0.96, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -3.96, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661017.400782, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 61, "t": "2026-11-03T08:10:17.496", "t_unix": 1793661017.496, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 15, "held_sec": 3.298, "accepted": true, "measured_before": [-21.88, 2.37, -2.28, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -5.28, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661017.51712, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 62, "t": "2026-11-03T08:10:17.883", "t_unix": 1793661017.884, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 16, "held_sec": 3.686, "accepted": true, "measured_before": [-21.88, 2.37, -3.42, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -6.42, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661017.907487, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 63, "t": "2026-11-03T08:10:18.000", "t_unix": 1793661018.0, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 2.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 15, "hold_n": 17, "held_sec": 3.802, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, -3.6, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -6.6, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661018.0164149, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 64, "t": "2026-11-03T08:10:18.790", "t_unix": 1793661018.791, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 1.0, "hold_id": 16, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, -4.83, 0.08, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -5.6, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661018.8289979, "measured_before_send": [-21.88, 2.37, -4.83, 0.08, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, -4.83, 0.08, 0.08, -29.79], "reach_err": 0.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 65, "t": "2026-11-03T08:10:19.193", "t_unix": 1793661019.194, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [-21.88, 2.37, -4.83, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, -1.83, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661019.2180018, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 66, "t": "2026-11-03T08:10:19.612", "t_unix": 1793661019.613, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 2, "held_sec": 0.822, "accepted": true, "measured_before": [-21.88, 2.37, -0.61, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.22, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 2.39, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661019.6405, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 67, "t": "2026-11-03T08:10:19.729", "t_unix": 1793661019.73, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 3, "held_sec": 0.939, "accepted": true, "measured_before": [-21.88, 2.37, -0.61, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 2.39, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661019.750726, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 68, "t": "2026-11-03T08:10:19.845", "t_unix": 1793661019.845, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 4, "held_sec": 1.055, "accepted": true, "measured_before": [-21.88, 2.37, -0.61, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 2.39, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661019.901267, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 69, "t": "2026-11-03T08:10:19.962", "t_unix": 1793661019.963, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 5, "held_sec": 1.172, "accepted": true, "measured_before": [-21.88, 2.37, 3.42, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 6.42, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661019.987149, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 70, "t": "2026-11-03T08:10:20.063", "t_unix": 1793661020.063, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 6, "held_sec": 1.273, "accepted": true, "measured_before": [-21.88, 2.37, 7.47, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.05, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 10.47, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661020.404122, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 71, "t": "2026-11-03T08:10:20.467", "t_unix": 1793661020.467, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 7, "held_sec": 1.677, "accepted": true, "measured_before": [-21.88, 2.37, 7.47, 0.08, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 10.47, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661020.4954538, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 72, "t": "2026-11-03T08:10:20.949", "t_unix": 1793661020.949, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 8, "held_sec": 2.159, "accepted": true, "measured_before": [-21.88, 2.37, 11.51, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 14.51, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661020.964315, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 73, "t": "2026-11-03T08:10:21.050", "t_unix": 1793661021.051, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 9, "held_sec": 2.26, "accepted": true, "measured_before": [-21.88, 2.37, 11.51, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 14.51, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661021.072893, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 74, "t": "2026-11-03T08:10:21.168", "t_unix": 1793661021.168, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 10, "held_sec": 2.378, "accepted": true, "measured_before": [-21.88, 2.37, 12.65, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 15.65, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661021.188925, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 75, "t": "2026-11-03T08:10:21.557", "t_unix": 1793661021.557, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 11, "held_sec": 2.767, "accepted": true, "measured_before": [-21.88, 2.37, 16.52, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 19.52, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661021.577285, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 76, "t": "2026-11-03T08:10:21.959", "t_unix": 1793661021.96, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 12, "held_sec": 3.17, "accepted": true, "measured_before": [-21.88, 2.37, 20.47, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 23.47, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661021.9857962, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 77, "t": "2026-11-03T08:10:22.076", "t_unix": 1793661022.076, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 13, "held_sec": 3.286, "accepted": true, "measured_before": [-21.88, 2.37, 20.47, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 23.47, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661022.1066198, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 78, "t": "2026-11-03T08:10:22.192", "t_unix": 1793661022.193, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 14, "held_sec": 3.402, "accepted": true, "measured_before": [-21.88, 2.37, 23.11, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 26.11, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661022.227722, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 79, "t": "2026-11-03T08:10:22.292", "t_unix": 1793661022.293, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 15, "held_sec": 3.503, "accepted": true, "measured_before": [-21.88, 2.37, 24.34, 0.17, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 27.34, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661022.31882, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 80, "t": "2026-11-03T08:10:22.764", "t_unix": 1793661022.765, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": 3.0, "hold_id": 16, "hold_n": 16, "held_sec": 3.974, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 28.03, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 0.69, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 31.03, 0.26, -0.26, -29.79], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 81, "t": "2026-11-03T08:10:23.151", "t_unix": 1793661023.151, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -1.0, "hold_id": 17, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 28.03, 0.26, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 0.88, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 26.34, 0.26, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661023.196806, "measured_before_send": [-21.88, 2.37, 28.03, 0.26, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 27.94, 0.26, 0.08, -29.79], "reach_err": 1.6, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 82, "t": "2026-11-03T08:10:23.590", "t_unix": 1793661023.59, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 1, "held_sec": 0.439, "accepted": true, "measured_before": [-21.88, 2.37, 27.94, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 24.94, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661023.6083531, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 83, "t": "2026-11-03T08:10:23.691", "t_unix": 1793661023.692, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 2, "held_sec": 0.541, "accepted": true, "measured_before": [-21.88, 2.37, 27.94, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 24.94, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661023.714575, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 84, "t": "2026-11-03T08:10:23.791", "t_unix": 1793661023.792, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 3, "held_sec": 0.641, "accepted": true, "measured_before": [-21.88, 2.37, 26.89, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 23.89, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661023.8105412, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 85, "t": "2026-11-03T08:10:23.892", "t_unix": 1793661023.892, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 4, "held_sec": 0.741, "accepted": true, "measured_before": [-21.88, 2.37, 26.71, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 23.71, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661023.906728, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 86, "t": "2026-11-03T08:10:24.009", "t_unix": 1793661024.01, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 5, "held_sec": 0.858, "accepted": true, "measured_before": [-21.88, 2.37, 25.57, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 22.57, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661024.0281322, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 87, "t": "2026-11-03T08:10:24.392", "t_unix": 1793661024.392, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 6, "held_sec": 1.241, "accepted": true, "measured_before": [-21.88, 2.37, 24.34, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 21.34, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661024.412989, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 88, "t": "2026-11-03T08:10:24.792", "t_unix": 1793661024.792, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 2, "step_deg": 1.0, "execute": true, "joint": 2, "delta": -3.0, "hold_id": 17, "hold_n": 7, "held_sec": 1.641, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 23.11, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 0.88, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, 0.26, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661024.8128462, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 89, "t": "2026-11-03T08:10:25.097", "t_unix": 1793661025.097, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 3, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 90, "t": "2026-11-03T08:10:25.485", "t_unix": 1793661025.485, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -1.0, "hold_id": 18, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 23.11, 0.26, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -0.74, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661025.550714, "measured_before_send": [-21.88, 2.37, 23.11, 0.26, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 21.88, 0.26, 0.08, -29.79], "reach_err": 1.77, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 91, "t": "2026-11-03T08:10:25.959", "t_unix": 1793661025.96, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 18, "hold_n": 1, "held_sec": 0.475, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, 0.26, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.74, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661025.9757252, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 92, "t": "2026-11-03T08:10:26.346", "t_unix": 1793661026.346, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 18, "hold_n": 2, "held_sec": 0.862, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.49, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -4.49, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661026.368329, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 93, "t": "2026-11-03T08:10:26.462", "t_unix": 1793661026.462, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 18, "hold_n": 3, "held_sec": 0.978, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -2.98, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -5.98, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661026.4838662, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 94, "t": "2026-11-03T08:10:26.579", "t_unix": 1793661026.579, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 18, "hold_n": 4, "held_sec": 1.095, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -4.83, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -7.83, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661026.6016681, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 95, "t": "2026-11-03T08:10:26.681", "t_unix": 1793661026.681, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 18, "hold_n": 5, "held_sec": 1.197, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -5.88, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -8.88, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661026.7025018, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 96, "t": "2026-11-03T08:10:26.782", "t_unix": 1793661026.783, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 18, "hold_n": 6, "held_sec": 1.298, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 21.88, -7.38, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -10.38, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661026.796149, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 97, "t": "2026-11-03T08:10:27.808", "t_unix": 1793661027.809, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 1.0, "hold_id": 19, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -9.4, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -9.38, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661027.8488379, "measured_before_send": [-21.88, 2.37, 21.88, -9.4, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 21.88, -9.4, 0.08, -29.79], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 98, "t": "2026-11-03T08:10:28.223", "t_unix": 1793661028.224, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 19, "hold_n": 1, "held_sec": 0.415, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -9.4, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -6.4, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661028.2476811, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 99, "t": "2026-11-03T08:10:28.323", "t_unix": 1793661028.324, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 19, "hold_n": 2, "held_sec": 0.516, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -7.03, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -4.03, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661028.755079, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 100, "t": "2026-11-03T08:10:29.131", "t_unix": 1793661029.132, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 19, "hold_n": 3, "held_sec": 1.323, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -4.57, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -1.57, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661029.157542, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 101, "t": "2026-11-03T08:10:29.534", "t_unix": 1793661029.535, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 19, "hold_n": 4, "held_sec": 1.726, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -2.1, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.53, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, 0.9, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661029.556195, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 102, "t": "2026-11-03T08:10:29.922", "t_unix": 1793661029.923, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 19, "hold_n": 5, "held_sec": 2.115, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, 0.35, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.55, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, 3.35, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661029.947807, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 103, "t": "2026-11-03T08:10:30.025", "t_unix": 1793661030.025, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": 3.0, "hold_id": 19, "hold_n": 6, "held_sec": 2.217, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 21.88, 0.35, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, 3.35, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661030.080894, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 104, "t": "2026-11-03T08:10:30.547", "t_unix": 1793661030.548, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -1.0, "hold_id": 20, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, 2.81, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, 2.35, -0.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661030.5882308, "measured_before_send": [-21.88, 2.37, 21.88, 2.81, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 21.88, 2.81, 0.08, -29.79], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 105, "t": "2026-11-03T08:10:30.950", "t_unix": 1793661030.951, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 20, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, 2.81, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.46, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -0.19, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661030.979282, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 106, "t": "2026-11-03T08:10:31.053", "t_unix": 1793661031.054, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 20, "hold_n": 2, "held_sec": 0.506, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, 2.81, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -0.19, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661031.081881, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 107, "t": "2026-11-03T08:10:31.155", "t_unix": 1793661031.155, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 20, "hold_n": 3, "held_sec": 0.608, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, 0.96, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.04, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661031.18759, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 108, "t": "2026-11-03T08:10:31.288", "t_unix": 1793661031.288, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 3, "step_deg": 1.0, "execute": true, "joint": 3, "delta": -3.0, "hold_id": 20, "hold_n": 4, "held_sec": 0.741, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 21.88, 0.79, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.83, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -0.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661031.312363, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 109, "t": "2026-11-03T08:10:32.268", "t_unix": 1793661032.269, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 4, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 110, "t": "2026-11-03T08:10:33.114", "t_unix": 1793661033.115, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -1.0, "hold_id": 21, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.4, 0.08, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -1.26, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661033.1560042, "measured_before_send": [-21.88, 2.37, 21.88, -1.4, 0.08, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 21.88, -1.49, 0.08, -29.79], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 111, "t": "2026-11-03T08:10:33.549", "t_unix": 1793661033.55, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 1, "held_sec": 0.436, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.49, 0.08, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.34, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -2.92, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661033.572609, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 112, "t": "2026-11-03T08:10:33.936", "t_unix": 1793661033.936, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 2, "held_sec": 0.822, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.58, -2.19, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.73, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -5.19, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661033.956316, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 113, "t": "2026-11-03T08:10:34.323", "t_unix": 1793661034.323, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 3, "held_sec": 1.209, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.58, -4.57, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.62, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -7.57, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661034.3450189, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 114, "t": "2026-11-03T08:10:34.423", "t_unix": 1793661034.424, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 4, "held_sec": 1.31, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.66, -6.94, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -9.94, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661034.833926, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 115, "t": "2026-11-03T08:10:35.207", "t_unix": 1793661035.208, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 5, "held_sec": 2.094, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.66, -9.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -12.4, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661035.23245, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 116, "t": "2026-11-03T08:10:35.326", "t_unix": 1793661035.327, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 6, "held_sec": 2.213, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.66, -9.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -12.4, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661035.381639, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 117, "t": "2026-11-03T08:10:35.443", "t_unix": 1793661035.444, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 7, "held_sec": 2.33, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.66, -11.51, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -14.51, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661035.466687, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 118, "t": "2026-11-03T08:10:35.544", "t_unix": 1793661035.545, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 8, "held_sec": 2.431, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.75, -13.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.72, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -16.79, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661035.92483, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 119, "t": "2026-11-03T08:10:35.983", "t_unix": 1793661035.983, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 9, "held_sec": 2.869, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.75, -13.88, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -16.88, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661036.0409112, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 120, "t": "2026-11-03T08:10:36.100", "t_unix": 1793661036.101, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 10, "held_sec": 2.987, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.75, -16.17, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.71, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -19.17, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661036.129056, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 122, "t": "2026-11-03T08:10:36.485", "t_unix": 1793661036.486, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 121, "t": "2026-11-03T08:10:36.216", "t_unix": 1793661036.217, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 11, "held_sec": 3.103, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.75, -16.87, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.3, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -19.87, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661036.236712, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 123, "t": "2026-11-03T08:10:36.655", "t_unix": 1793661036.655, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 12, "held_sec": 3.541, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.75, -18.63, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -21.63, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661036.6770198, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 124, "t": "2026-11-03T08:10:37.039", "t_unix": 1793661037.039, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 13, "held_sec": 3.925, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -21.26, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.37, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -24.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.065026, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 125, "t": "2026-11-03T08:10:37.141", "t_unix": 1793661037.141, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 14, "held_sec": 4.027, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -21.26, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -24.26, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.165913, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 126, "t": "2026-11-03T08:10:37.258", "t_unix": 1793661037.258, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 15, "held_sec": 4.144, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -23.29, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.97, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -26.29, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.287383, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 127, "t": "2026-11-03T08:10:37.359", "t_unix": 1793661037.359, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 16, "held_sec": 4.245, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -23.81, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.48, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -26.81, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.383115, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 128, "t": "2026-11-03T08:10:37.475", "t_unix": 1793661037.475, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 17, "held_sec": 4.361, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -26.19, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.62, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -29.19, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.500272, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 129, "t": "2026-11-03T08:10:37.591", "t_unix": 1793661037.591, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 18, "held_sec": 4.477, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -26.71, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.48, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -29.71, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.6247182, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 130, "t": "2026-11-03T08:10:37.693", "t_unix": 1793661037.694, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 19, "held_sec": 4.58, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -28.74, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.97, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -31.74, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.72643, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 131, "t": "2026-11-03T08:10:37.795", "t_unix": 1793661037.795, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 20, "held_sec": 4.681, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -28.74, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -31.74, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.826779, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 132, "t": "2026-11-03T08:10:37.897", "t_unix": 1793661037.898, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 21, "held_sec": 4.784, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -31.02, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.72, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -34.02, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661037.921458, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 133, "t": "2026-11-03T08:10:38.013", "t_unix": 1793661038.014, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 22, "held_sec": 4.9, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -32.69, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -35.69, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661038.0804758, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 134, "t": "2026-11-03T08:10:38.132", "t_unix": 1793661038.133, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 23, "held_sec": 5.019, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -33.57, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -36.57, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661038.152079, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 135, "t": "2026-11-03T08:10:38.521", "t_unix": 1793661038.522, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 24, "held_sec": 5.407, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -35.68, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -38.68, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661038.5449998, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 136, "t": "2026-11-03T08:10:38.623", "t_unix": 1793661038.624, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 25, "held_sec": 5.51, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -35.94, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.74, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -38.94, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661038.6835048, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 137, "t": "2026-11-03T08:10:38.740", "t_unix": 1793661038.74, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 26, "held_sec": 5.626, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.84, -38.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -41.4, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661038.7598898, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 138, "t": "2026-11-03T08:10:38.840", "t_unix": 1793661038.841, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 27, "held_sec": 5.727, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -38.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -41.4, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661038.858295, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 139, "t": "2026-11-03T08:10:39.246", "t_unix": 1793661039.247, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 28, "held_sec": 6.133, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -41.04, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -44.04, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661039.2712991, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 140, "t": "2026-11-03T08:10:39.667", "t_unix": 1793661039.667, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 29, "held_sec": 6.553, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -43.76, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.28, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -46.76, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661039.688311, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 141, "t": "2026-11-03T08:10:39.768", "t_unix": 1793661039.769, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 30, "held_sec": 6.655, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -43.76, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -46.76, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661039.795847, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 142, "t": "2026-11-03T08:10:39.885", "t_unix": 1793661039.886, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 31, "held_sec": 6.772, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -46.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.53, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -49.23, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661039.907528, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 143, "t": "2026-11-03T08:10:39.986", "t_unix": 1793661039.987, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 32, "held_sec": 6.873, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -48.77, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.46, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -51.77, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661040.391756, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 144, "t": "2026-11-03T08:10:40.441", "t_unix": 1793661040.441, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": -3.0, "hold_id": 21, "hold_n": 33, "held_sec": 7.327, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -48.77, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -51.77, -29.79], "sent": false, "why": "halted_before_send", "reached": null, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 145, "t": "2026-11-03T08:10:41.096", "t_unix": 1793661041.097, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 1.0, "hold_id": 22, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -51.5, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -50.77, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661041.1443598, "measured_before_send": [-21.88, 2.37, 21.88, -1.93, -51.5, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 21.88, -1.93, -51.5, -29.79], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 146, "t": "2026-11-03T08:10:41.502", "t_unix": 1793661041.503, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 1, "held_sec": 0.406, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -51.5, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.73, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -48.5, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661041.5319822, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 147, "t": "2026-11-03T08:10:41.621", "t_unix": 1793661041.622, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 2, "held_sec": 0.525, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -51.5, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -48.5, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661041.681719, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 148, "t": "2026-11-03T08:10:41.739", "t_unix": 1793661041.74, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 3, "held_sec": 0.643, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -50.18, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -47.18, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661041.7594922, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 149, "t": "2026-11-03T08:10:41.840", "t_unix": 1793661041.841, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 4, "held_sec": 0.744, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -49.39, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -46.39, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661041.8594298, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 150, "t": "2026-11-03T08:10:41.957", "t_unix": 1793661041.957, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 5, "held_sec": 0.861, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -48.16, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -45.16, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661041.977056, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 151, "t": "2026-11-03T08:10:42.343", "t_unix": 1793661042.344, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 6, "held_sec": 1.247, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -46.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.59, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -43.75, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661042.3621702, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 152, "t": "2026-11-03T08:10:42.460", "t_unix": 1793661042.46, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 7, "held_sec": 1.364, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -45.52, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -42.52, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661042.480706, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 153, "t": "2026-11-03T08:10:42.560", "t_unix": 1793661042.56, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 8, "held_sec": 1.464, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -44.38, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -41.38, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661042.579638, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 154, "t": "2026-11-03T08:10:42.645", "t_unix": 1793661042.645, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 155, "t": "2026-11-03T08:10:42.661", "t_unix": 1793661042.662, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 9, "held_sec": 1.565, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -43.24, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -40.24, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661042.6796439, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 156, "t": "2026-11-03T08:10:42.761", "t_unix": 1793661042.762, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 10, "held_sec": 1.666, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -42.01, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -39.01, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661042.783381, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 157, "t": "2026-11-03T08:10:42.877", "t_unix": 1793661042.877, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 11, "held_sec": 1.781, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -40.95, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.94, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -37.95, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661042.9060118, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 158, "t": "2026-11-03T08:10:42.980", "t_unix": 1793661042.98, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 12, "held_sec": 1.884, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -39.99, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.04, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -36.99, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.001207, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 159, "t": "2026-11-03T08:10:43.081", "t_unix": 1793661043.081, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 13, "held_sec": 1.985, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -38.49, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -35.49, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.104191, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 160, "t": "2026-11-03T08:10:43.183", "t_unix": 1793661043.184, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 14, "held_sec": 2.087, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -37.88, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -34.88, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.209273, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 161, "t": "2026-11-03T08:10:43.298", "t_unix": 1793661043.299, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 15, "held_sec": 2.202, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -36.38, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -33.38, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.3227541, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 162, "t": "2026-11-03T08:10:43.415", "t_unix": 1793661043.416, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 16, "held_sec": 2.319, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -35.41, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -32.41, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.436801, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 163, "t": "2026-11-03T08:10:43.815", "t_unix": 1793661043.815, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 17, "held_sec": 2.718, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -33.83, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -30.83, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.845313, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 164, "t": "2026-11-03T08:10:43.916", "t_unix": 1793661043.917, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 18, "held_sec": 2.819, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -33.04, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -30.04, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661043.931325, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 165, "t": "2026-11-03T08:10:44.018", "t_unix": 1793661044.019, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 19, "held_sec": 2.921, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -31.46, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -28.46, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.044053, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 166, "t": "2026-11-03T08:10:44.120", "t_unix": 1793661044.12, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 20, "held_sec": 3.022, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -30.23, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -27.23, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.1427789, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 167, "t": "2026-11-03T08:10:44.221", "t_unix": 1793661044.221, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 21, "held_sec": 3.123, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -29.35, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -26.35, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.2440782, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 168, "t": "2026-11-03T08:10:44.322", "t_unix": 1793661044.322, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 22, "held_sec": 3.224, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -27.68, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -24.68, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.3449159, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 169, "t": "2026-11-03T08:10:44.424", "t_unix": 1793661044.424, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 23, "held_sec": 3.326, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -26.54, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -23.54, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.442239, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 170, "t": "2026-11-03T08:10:44.524", "t_unix": 1793661044.525, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 24, "held_sec": 3.426, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -24.96, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.42, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -21.96, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.546452, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 171, "t": "2026-11-03T08:10:44.626", "t_unix": 1793661044.627, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 25, "held_sec": 3.528, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -23.73, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -20.73, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.646378, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 172, "t": "2026-11-03T08:10:44.729", "t_unix": 1793661044.729, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 26, "held_sec": 3.63, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -22.67, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.94, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -19.67, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.745661, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 173, "t": "2026-11-03T08:10:44.830", "t_unix": 1793661044.831, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 27, "held_sec": 3.731, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -21.35, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -18.35, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.849115, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 174, "t": "2026-11-03T08:10:44.931", "t_unix": 1793661044.932, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 28, "held_sec": 3.832, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -19.68, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -16.68, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661044.952301, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 175, "t": "2026-11-03T08:10:45.033", "t_unix": 1793661045.033, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 29, "held_sec": 3.934, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -18.89, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -15.89, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661045.0593238, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 176, "t": "2026-11-03T08:10:45.418", "t_unix": 1793661045.419, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 30, "held_sec": 4.319, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -17.13, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -14.13, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661045.44016, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 177, "t": "2026-11-03T08:10:45.819", "t_unix": 1793661045.819, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 31, "held_sec": 4.718, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -15.11, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -12.11, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661045.8406348, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 178, "t": "2026-11-03T08:10:46.203", "t_unix": 1793661046.203, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 32, "held_sec": 5.102, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -13.09, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -10.09, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661046.225085, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 179, "t": "2026-11-03T08:10:46.317", "t_unix": 1793661046.317, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 33, "held_sec": 5.216, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -11.95, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -8.95, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661046.3370738, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 180, "t": "2026-11-03T08:10:46.701", "t_unix": 1793661046.702, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 34, "held_sec": 5.6, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -9.93, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -6.93, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661046.721847, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 181, "t": "2026-11-03T08:10:47.084", "t_unix": 1793661047.085, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 35, "held_sec": 5.982, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -7.82, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -4.82, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661047.107615, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 182, "t": "2026-11-03T08:10:47.186", "t_unix": 1793661047.186, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 36, "held_sec": 6.083, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -7.47, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -4.47, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661047.212713, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 183, "t": "2026-11-03T08:10:47.286", "t_unix": 1793661047.287, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 37, "held_sec": 6.183, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -5.62, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.15, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -2.62, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661047.3150668, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 184, "t": "2026-11-03T08:10:47.421", "t_unix": 1793661047.422, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 38, "held_sec": 6.318, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -5.09, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.47, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, -2.09, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661047.4373481, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 185, "t": "2026-11-03T08:10:47.845", "t_unix": 1793661047.846, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 39, "held_sec": 6.742, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -2.98, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, 0.02, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661047.8604002, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 186, "t": "2026-11-03T08:10:47.946", "t_unix": 1793661047.947, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 40, "held_sec": 6.842, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -2.19, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, 0.81, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661047.97582, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 187, "t": "2026-11-03T08:10:48.079", "t_unix": 1793661048.08, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 4, "delta": 3.0, "hold_id": 22, "hold_n": 41, "held_sec": 6.975, "accepted": true, "released_during_job": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, -0.79, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.21, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661048.104099, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 188, "t": "2026-11-03T08:10:48.852", "t_unix": 1793661048.853, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 23, "hold_n": 0, "accepted": true, "measured_before": [-21.88, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-23.21, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661048.8951948, "measured_before_send": [-21.88, 2.37, 21.88, -1.93, 1.4, -29.79], "resends": [], "reached": true, "reached_angles": [-21.88, 2.37, 21.88, -1.93, 1.4, -29.79], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 189, "t": "2026-11-03T08:10:49.256", "t_unix": 1793661049.257, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [-23.02, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-26.02, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661049.293797, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 190, "t": "2026-11-03T08:10:49.361", "t_unix": 1793661049.362, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 2, "held_sec": 0.508, "accepted": true, "measured_before": [-23.2, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.82, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-26.2, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661049.391147, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 191, "t": "2026-11-03T08:10:49.462", "t_unix": 1793661049.463, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 3, "held_sec": 0.61, "accepted": true, "measured_before": [-24.08, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-27.08, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661049.4887302, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 192, "t": "2026-11-03T08:10:49.578", "t_unix": 1793661049.578, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 4, "held_sec": 0.725, "accepted": true, "measured_before": [-26.89, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-29.89, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661049.6005309, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 193, "t": "2026-11-03T08:10:49.678", "t_unix": 1793661049.678, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 5, "held_sec": 0.825, "accepted": true, "measured_before": [-26.54, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.35, "held_previous_target": true, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-29.89, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661049.706039, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 194, "t": "2026-11-03T08:10:49.796", "t_unix": 1793661049.796, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 6, "held_sec": 0.943, "accepted": true, "measured_before": [-29.26, 2.37, 21.88, -1.93, 1.4, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.63, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-32.26, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661049.820919, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 195, "t": "2026-11-03T08:10:50.216", "t_unix": 1793661050.217, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 7, "held_sec": 1.362, "accepted": true, "measured_before": [-32.25, 2.37, 21.88, -2.02, 1.49, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-35.25, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661050.238615, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 196, "t": "2026-11-03T08:10:50.317", "t_unix": 1793661050.317, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -3.0, "hold_id": 23, "hold_n": 8, "held_sec": 1.463, "accepted": true, "released_during_job": true, "measured_before": [-32.6, 2.37, 21.88, -2.02, 1.49, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-35.6, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661050.339647, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 197, "t": "2026-11-03T08:10:50.853", "t_unix": 1793661050.854, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 1.0, "hold_id": 24, "hold_n": 0, "accepted": true, "measured_before": [-35.41, 2.37, 21.88, -2.1, 1.49, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-34.6, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661050.887226, "measured_before_send": [-35.41, 2.37, 21.88, -2.1, 1.49, -29.79], "resends": [], "reached": true, "reached_angles": [-34.45, 2.37, 21.88, -2.1, 1.58, -29.79], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 198, "t": "2026-11-03T08:10:51.274", "t_unix": 1793661051.275, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 1, "held_sec": 0.421, "accepted": true, "measured_before": [-34.54, 2.37, 21.88, -2.1, 1.58, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.06, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-31.54, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661051.2955709, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 199, "t": "2026-11-03T08:10:51.376", "t_unix": 1793661051.376, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 2, "held_sec": 0.522, "accepted": true, "measured_before": [-31.11, 2.37, 21.88, -2.1, 1.66, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.43, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-28.11, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661051.787793, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 201, "t": "2026-11-03T08:10:52.268", "t_unix": 1793661052.268, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 4, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 200, "t": "2026-11-03T08:10:52.166", "t_unix": 1793661052.167, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 3, "held_sec": 1.311, "accepted": true, "measured_before": [-28.3, 2.37, 21.88, -2.1, 1.66, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.19, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-25.3, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661052.1889338, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 202, "t": "2026-11-03T08:10:52.569", "t_unix": 1793661052.57, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 4, "held_sec": 1.714, "accepted": true, "measured_before": [-25.13, 2.37, 21.88, -2.19, 1.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.17, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-22.13, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661052.590731, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 203, "t": "2026-11-03T08:10:52.972", "t_unix": 1793661052.972, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 5, "held_sec": 2.116, "accepted": true, "measured_before": [-22.41, 2.37, 21.88, -2.19, 1.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.28, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-19.41, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.003304, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 204, "t": "2026-11-03T08:10:53.089", "t_unix": 1793661053.089, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 6, "held_sec": 2.233, "accepted": true, "measured_before": [-21.7, 2.37, 21.88, -2.19, 1.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.29, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-18.7, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.118264, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 205, "t": "2026-11-03T08:10:53.203", "t_unix": 1793661053.204, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 7, "held_sec": 2.347, "accepted": true, "measured_before": [-19.95, 2.37, 21.88, -2.19, 1.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.25, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-16.95, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.228665, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 206, "t": "2026-11-03T08:10:53.591", "t_unix": 1793661053.592, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 8, "held_sec": 2.735, "accepted": true, "measured_before": [-16.87, 2.37, 21.88, -2.28, 1.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.08, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.87, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.6078598, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 207, "t": "2026-11-03T08:10:53.693", "t_unix": 1793661053.694, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 9, "held_sec": 2.837, "accepted": true, "measured_before": [-16.52, 2.37, 21.88, -2.28, 1.75, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-13.52, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.755435, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 208, "t": "2026-11-03T08:10:53.811", "t_unix": 1793661053.811, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 10, "held_sec": 2.955, "accepted": true, "measured_before": [-15.2, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.68, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-12.2, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.8347268, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 209, "t": "2026-11-03T08:10:53.913", "t_unix": 1793661053.914, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 11, "held_sec": 3.057, "accepted": true, "measured_before": [-12.91, 2.37, 21.88, -2.28, 1.84, -29.88], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.71, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-9.91, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661053.9281018, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 210, "t": "2026-11-03T08:10:54.015", "t_unix": 1793661054.015, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 12, "held_sec": 3.159, "accepted": true, "measured_before": [-11.68, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-8.68, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.07667, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 211, "t": "2026-11-03T08:10:54.133", "t_unix": 1793661054.134, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 13, "held_sec": 3.277, "accepted": true, "measured_before": [-9.66, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.66, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.156758, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 212, "t": "2026-11-03T08:10:54.233", "t_unix": 1793661054.234, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 14, "held_sec": 3.377, "accepted": true, "measured_before": [-9.14, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.48, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-6.14, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.256994, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 213, "t": "2026-11-03T08:10:54.334", "t_unix": 1793661054.334, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 15, "held_sec": 3.477, "accepted": true, "measured_before": [-6.06, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.08, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.06, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.3553832, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 214, "t": "2026-11-03T08:10:54.451", "t_unix": 1793661054.451, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 16, "held_sec": 3.594, "accepted": true, "measured_before": [-6.5, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.44, "held_previous_target": true, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-3.06, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.4853451, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 215, "t": "2026-11-03T08:10:54.553", "t_unix": 1793661054.554, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 17, "held_sec": 3.696, "accepted": true, "measured_before": [-3.86, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.86, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.58285, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 216, "t": "2026-11-03T08:10:54.688", "t_unix": 1793661054.689, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 18, "held_sec": 3.831, "accepted": true, "measured_before": [-3.07, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [-0.07, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661054.7110982, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 217, "t": "2026-11-03T08:10:55.121", "t_unix": 1793661055.122, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 19, "held_sec": 4.264, "accepted": true, "measured_before": [0.26, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [3.26, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661055.143361, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 218, "t": "2026-11-03T08:10:55.223", "t_unix": 1793661055.223, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 2.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 20, "held_sec": 4.365, "accepted": true, "measured_before": [3.6, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.34, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.6, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661055.648874, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 219, "t": "2026-11-03T08:10:55.744", "t_unix": 1793661055.745, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 21, "held_sec": 4.886, "accepted": true, "measured_before": [3.6, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [6.6, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661055.764908, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 220, "t": "2026-11-03T08:10:55.860", "t_unix": 1793661055.86, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 22, "held_sec": 5.002, "accepted": true, "measured_before": [6.06, 2.37, 21.88, -2.28, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [9.06, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661055.8873658, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 221, "t": "2026-11-03T08:10:55.961", "t_unix": 1793661055.961, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 23, "held_sec": 5.103, "accepted": true, "measured_before": [9.22, 2.37, 21.88, -2.37, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.16, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.22, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661056.364278, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 222, "t": "2026-11-03T08:10:56.464", "t_unix": 1793661056.464, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 24, "held_sec": 5.605, "accepted": true, "measured_before": [9.31, 2.37, 21.88, -2.37, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [12.31, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661056.485099, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 223, "t": "2026-11-03T08:10:56.580", "t_unix": 1793661056.58, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 25, "held_sec": 5.721, "accepted": true, "measured_before": [11.77, 2.37, 21.88, -2.37, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [14.77, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661056.5991192, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 224, "t": "2026-11-03T08:10:56.681", "t_unix": 1793661056.682, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 26, "held_sec": 5.822, "accepted": true, "measured_before": [14.76, 2.37, 21.88, -2.37, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [17.76, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661057.073882, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 225, "t": "2026-11-03T08:10:57.166", "t_unix": 1793661057.167, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 27, "held_sec": 6.307, "accepted": true, "measured_before": [14.76, 2.37, 21.88, -2.37, 1.84, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [17.76, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661057.193258, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 226, "t": "2026-11-03T08:10:57.588", "t_unix": 1793661057.588, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 28, "held_sec": 6.729, "accepted": true, "measured_before": [17.84, 2.37, 21.88, -2.37, 1.93, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.08, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [20.84, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661057.610698, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 227, "t": "2026-11-03T08:10:57.991", "t_unix": 1793661057.991, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 29, "held_sec": 7.131, "accepted": true, "measured_before": [20.83, 2.37, 21.88, -2.37, 1.93, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [23.83, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661058.010261, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 228, "t": "2026-11-03T08:10:58.106", "t_unix": 1793661058.106, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 30, "held_sec": 7.246, "accepted": true, "measured_before": [20.83, 2.37, 21.88, -2.37, 1.93, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [23.83, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661058.1333141, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 229, "t": "2026-11-03T08:10:58.542", "t_unix": 1793661058.543, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 31, "held_sec": 7.682, "accepted": true, "measured_before": [23.81, 2.37, 21.88, -2.37, 2.02, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.02, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [26.81, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661058.5644789, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 230, "t": "2026-11-03T08:10:58.643", "t_unix": 1793661058.644, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 32, "held_sec": 7.783, "accepted": true, "measured_before": [26.8, 2.37, 21.88, -2.37, 2.02, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.01, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [29.8, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661058.9731252, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 231, "t": "2026-11-03T08:10:59.062", "t_unix": 1793661059.063, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 33, "held_sec": 8.202, "accepted": true, "measured_before": [26.8, 2.37, 21.88, -2.37, 2.02, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 3.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [29.8, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661059.1221619, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 232, "t": "2026-11-03T08:10:59.179", "t_unix": 1793661059.179, "button": 14, "button_name": "dpad_right", "kind": "move", "selected_joint": 4, "step_deg": 1.0, "execute": true, "joint": 0, "delta": 3.0, "hold_id": 24, "hold_n": 34, "held_sec": 8.318, "accepted": true, "measured_before": [28.91, 2.37, 21.88, -2.37, 2.02, -29.79], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [31.91, 1.49, 20.11, -2.21, 2.21, -29.79], "sent": true, "reached": null, "no_check": true, "t_send": 1793661059.198473, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 233, "t": "2026-11-03T08:11:00.907", "t_unix": 1793661060.907, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 5, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 234, "t": "2026-11-03T08:11:02.437", "t_unix": 1793661062.438, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 235, "t": "2026-11-03T08:11:02.487", "t_unix": 1793661062.488, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 2.0, "hold_id": 25, "hold_n": 0, "accepted": true, "measured_before": [31.99, 2.37, 21.88, -2.37, 2.1, -29.79], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [31.91, 1.49, 20.11, -2.21, 2.21, -27.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661062.5369248, "measured_before_send": [31.99, 2.37, 21.88, -2.37, 2.1, -29.79], "resends": [], "reached": true, "reached_angles": [31.99, 2.37, 21.88, -2.37, 2.1, -29.79], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 236, "t": "2026-11-03T08:11:03.262", "t_unix": 1793661063.263, "button": 13, "button_name": "dpad_left", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 0, "delta": -1.0, "hold_id": 26, "hold_n": 0, "accepted": true, "measured_before": [31.99, 2.37, 21.88, -2.37, 2.1, -29.79], "start_source": "command", "cmd_gap_deg": 2.0, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -27.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661063.3025799, "measured_before_send": [31.99, 2.37, 21.88, -2.37, 2.1, -29.79], "resends": [], "reached": true, "reached_angles": [31.99, 2.37, 21.88, -2.37, 2.1, -29.79], "reach_err": 2.0, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 238, "t": "2026-11-03T08:11:04.116", "t_unix": 1793661064.117, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 237, "t": "2026-11-03T08:11:03.983", "t_unix": 1793661063.983, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 5, "delta": 1.0, "hold_id": 27, "hold_n": 0, "accepted": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -28.82], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -26.79], "sent": true, "timeout_sec": 8.0, "t_send": 1793661064.032804, "measured_before_send": [30.84, 2.37, 21.88, -2.37, 2.1, -28.82], "resends": [], "reached": true, "reached_angles": [30.84, 2.37, 21.88, -2.37, 2.1, -27.68], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 239, "t": "2026-11-03T08:11:04.419", "t_unix": 1793661064.419, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 3.0, "hold_id": 27, "hold_n": 1, "held_sec": 0.436, "accepted": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -27.68], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -24.68], "sent": true, "reached": null, "no_check": true, "t_send": 1793661064.442571, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 240, "t": "2026-11-03T08:11:04.533", "t_unix": 1793661064.533, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": 3.0, "hold_id": 27, "hold_n": 2, "held_sec": 0.55, "accepted": true, "released_during_job": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -25.48], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -22.48], "sent": true, "reached": null, "no_check": true, "t_send": 1793661064.893068, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 242, "t": "2026-11-03T08:11:05.546", "t_unix": 1793661065.546, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 5, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 241, "t": "2026-11-03T08:11:05.544", "t_unix": 1793661065.545, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 1.0, "execute": true, "joint": 5, "delta": -1.0, "hold_id": 28, "hold_n": 0, "accepted": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -23.2], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -23.48], "sent": true, "timeout_sec": 8.0, "t_send": 1793661065.587035, "measured_before_send": [30.84, 2.37, 21.88, -2.37, 2.1, -23.2], "resends": [], "reached": true, "reached_angles": [30.84, 2.37, 21.88, -2.37, 2.1, -23.2], "reach_err": 1.77, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 243, "t": "2026-11-03T08:11:05.947", "t_unix": 1793661065.947, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -3.0, "hold_id": 28, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -23.2], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.28, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -26.2], "sent": true, "reached": null, "no_check": true, "t_send": 1793661065.9621131, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 244, "t": "2026-11-03T08:11:06.048", "t_unix": 1793661066.049, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -3.0, "hold_id": 28, "hold_n": 2, "held_sec": 0.504, "accepted": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -25.4], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.8, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -28.4], "sent": true, "reached": null, "no_check": true, "t_send": 1793661066.437979, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 245, "t": "2026-11-03T08:11:06.510", "t_unix": 1793661066.511, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 5, "step_deg": 2.0, "execute": true, "joint": 5, "delta": -3.0, "hold_id": 28, "hold_n": 3, "held_sec": 0.966, "accepted": true, "released_during_job": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -26.01], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 1.49, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661066.537257, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 246, "t": "2026-11-03T08:11:07.650", "t_unix": 1793661067.651, "button": 3, "button_name": "triangle", "kind": "select_joint", "selected_joint": 1, "step_deg": 1.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 248, "t": "2026-11-03T08:11:08.466", "t_unix": 1793661068.466, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 247, "t": "2026-11-03T08:11:08.457", "t_unix": 1793661068.457, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -1.0, "hold_id": 29, "hold_n": 0, "accepted": true, "measured_before": [30.84, 2.37, 21.88, -2.37, 2.1, -28.38], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 0.49, 20.11, -2.21, 2.21, -29.01], "sent": true, "timeout_sec": 8.0, "t_send": 1793661068.510876, "measured_before_send": [30.84, 2.37, 21.88, -2.37, 2.1, -28.38], "resends": [], "reached": true, "reached_angles": [30.84, 2.37, 21.88, -2.37, 2.1, -28.38], "reach_err": 1.88, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 249, "t": "2026-11-03T08:11:08.860", "t_unix": 1793661068.86, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 1, "held_sec": 0.403, "accepted": true, "measured_before": [30.84, 1.75, 21.88, -2.37, 2.1, -28.38], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.26, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -1.25, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661068.872915, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 250, "t": "2026-11-03T08:11:08.960", "t_unix": 1793661068.96, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 2, "held_sec": 0.503, "accepted": true, "measured_before": [30.84, 0.96, 21.88, -2.37, 2.28, -28.38], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -2.04, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661068.977484, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 251, "t": "2026-11-03T08:11:09.060", "t_unix": 1793661069.06, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 3, "held_sec": 0.603, "accepted": true, "measured_before": [30.84, -0.7, 21.88, -2.37, 2.37, -28.38], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.34, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -3.7, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661069.085817, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 252, "t": "2026-11-03T08:11:09.177", "t_unix": 1793661069.178, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 4, "held_sec": 0.72, "accepted": true, "measured_before": [30.84, -1.49, 21.88, -2.37, 2.63, -28.38], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.21, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -4.49, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661069.2027452, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 253, "t": "2026-11-03T08:11:09.279", "t_unix": 1793661069.279, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 5, "held_sec": 0.822, "accepted": true, "measured_before": [30.84, -3.16, 21.88, -2.37, 2.63, -28.38], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -6.16, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661069.30125, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 254, "t": "2026-11-03T08:11:09.664", "t_unix": 1793661069.664, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 6, "held_sec": 1.207, "accepted": true, "measured_before": [30.76, -5.27, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -8.27, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661069.6895518, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 255, "t": "2026-11-03T08:11:09.780", "t_unix": 1793661069.781, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 7, "held_sec": 1.323, "accepted": true, "measured_before": [30.76, -5.97, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.3, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -8.97, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661069.807599, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 256, "t": "2026-11-03T08:11:09.881", "t_unix": 1793661069.881, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 8, "held_sec": 1.424, "accepted": true, "measured_before": [30.84, -7.47, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -10.47, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661069.907854, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 257, "t": "2026-11-03T08:11:09.982", "t_unix": 1793661069.983, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 9, "held_sec": 1.525, "accepted": true, "measured_before": [30.84, -8.08, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.39, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -11.08, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.007604, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 258, "t": "2026-11-03T08:11:10.085", "t_unix": 1793661070.085, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 10, "held_sec": 1.628, "accepted": true, "measured_before": [30.76, -9.84, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.24, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -12.84, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.1092212, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 259, "t": "2026-11-03T08:11:10.186", "t_unix": 1793661070.187, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 11, "held_sec": 1.729, "accepted": true, "measured_before": [30.76, -10.89, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -13.89, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.207247, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 260, "t": "2026-11-03T08:11:10.286", "t_unix": 1793661070.287, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 12, "held_sec": 1.829, "accepted": true, "measured_before": [30.84, -12.39, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -15.39, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.3097658, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 261, "t": "2026-11-03T08:11:10.387", "t_unix": 1793661070.388, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 13, "held_sec": 1.93, "accepted": true, "measured_before": [30.84, -13.44, 21.88, -2.37, 2.72, -28.47], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.95, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -16.44, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.410398, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 262, "t": "2026-11-03T08:11:10.488", "t_unix": 1793661070.488, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 14, "held_sec": 2.03, "accepted": true, "measured_before": [30.76, -14.94, 21.88, -2.37, 2.72, -28.56], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.5, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -17.94, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.5097091, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 263, "t": "2026-11-03T08:11:10.589", "t_unix": 1793661070.589, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 15, "held_sec": 2.132, "accepted": true, "measured_before": [30.84, -16.08, 21.88, -2.37, 2.72, -28.56], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.86, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -19.08, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.6103191, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 264, "t": "2026-11-03T08:11:10.689", "t_unix": 1793661070.69, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 16, "held_sec": 2.232, "accepted": true, "measured_before": [30.76, -17.92, 21.88, -2.37, 2.72, -28.56], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.16, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -20.92, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.707422, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 265, "t": "2026-11-03T08:11:10.791", "t_unix": 1793661070.791, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 17, "held_sec": 2.333, "accepted": true, "measured_before": [30.76, -18.72, 21.88, -2.37, 2.72, -28.56], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.2, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -21.72, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.818075, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 266, "t": "2026-11-03T08:11:10.891", "t_unix": 1793661070.892, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 18, "held_sec": 2.434, "accepted": true, "measured_before": [30.76, -20.74, 21.88, -2.37, 2.72, -28.56], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -23.74, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661070.9140952, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 267, "t": "2026-11-03T08:11:11.274", "t_unix": 1793661071.275, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 29, "hold_n": 19, "held_sec": 2.817, "accepted": true, "measured_before": [30.76, -23.2, 21.88, -2.37, 2.72, -28.56], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.54, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -26.2, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661071.296111, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 268, "t": "2026-11-03T08:11:11.711", "t_unix": 1793661071.712, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 269, "t": "2026-11-03T08:11:12.717", "t_unix": 1793661072.718, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 2.0, "hold_id": 30, "hold_n": 0, "accepted": true, "measured_before": [30.76, -25.57, 21.88, -2.37, 2.72, -28.65], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -24.2, 20.11, -2.21, 2.21, -29.01], "sent": true, "timeout_sec": 8.0, "t_send": 1793661072.776723, "measured_before_send": [30.76, -25.57, 21.88, -2.37, 2.72, -28.65], "resends": [], "reached": true, "reached_angles": [30.76, -23.73, 21.88, -2.37, 2.72, -28.65], "reach_err": 1.77, "elapsed_sec": 0.03, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 270, "t": "2026-11-03T08:11:13.168", "t_unix": 1793661073.168, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 1, "held_sec": 0.451, "accepted": true, "measured_before": [30.76, -23.73, 21.88, -2.37, 2.72, -28.65], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.47, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -20.73, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661073.203253, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 271, "t": "2026-11-03T08:11:13.268", "t_unix": 1793661073.269, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 2, "held_sec": 0.552, "accepted": true, "measured_before": [30.76, -23.64, 21.88, -2.37, 2.72, -28.65], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.91, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -20.64, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661073.326547, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 272, "t": "2026-11-03T08:11:13.386", "t_unix": 1793661073.386, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 3, "held_sec": 0.669, "accepted": true, "measured_before": [30.76, -20.21, 21.88, -2.37, 2.72, -28.65], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.43, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -17.21, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661073.748611, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 273, "t": "2026-11-03T08:11:13.808", "t_unix": 1793661073.808, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 4, "held_sec": 1.091, "accepted": true, "measured_before": [30.76, -16.61, 21.88, -2.37, 2.72, -28.65], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.6, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -13.61, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661074.281017, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 274, "t": "2026-11-03T08:11:14.648", "t_unix": 1793661074.648, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 5, "held_sec": 1.931, "accepted": true, "measured_before": [30.76, -13.0, 21.88, -2.37, 2.72, -28.65], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.61, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -10.0, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661074.672971, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 275, "t": "2026-11-03T08:11:14.750", "t_unix": 1793661074.75, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 6, "held_sec": 2.033, "accepted": true, "measured_before": [30.76, -9.31, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.69, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -6.31, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661075.087914, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 277, "t": "2026-11-03T08:11:15.317", "t_unix": 1793661075.318, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 276, "t": "2026-11-03T08:11:15.150", "t_unix": 1793661075.15, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 7, "held_sec": 2.433, "accepted": true, "measured_before": [30.76, -5.53, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.78, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -2.53, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661075.4947672, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 278, "t": "2026-11-03T08:11:15.599", "t_unix": 1793661075.599, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 8, "held_sec": 2.882, "accepted": true, "measured_before": [30.76, -5.18, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.65, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -2.18, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661075.625078, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 279, "t": "2026-11-03T08:11:15.715", "t_unix": 1793661075.715, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 9, "held_sec": 2.998, "accepted": true, "measured_before": [30.76, -2.54, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.36, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 0.46, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661075.743544, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 280, "t": "2026-11-03T08:11:16.119", "t_unix": 1793661076.12, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 10, "held_sec": 3.402, "accepted": true, "measured_before": [30.76, 1.23, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 4.23, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661076.153996, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 281, "t": "2026-11-03T08:11:16.524", "t_unix": 1793661076.524, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 11, "held_sec": 3.806, "accepted": true, "measured_before": [30.76, 5.0, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 8.0, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661076.545002, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 282, "t": "2026-11-03T08:11:16.625", "t_unix": 1793661076.625, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 12, "held_sec": 3.907, "accepted": true, "measured_before": [30.76, 5.27, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.73, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 8.27, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661076.651416, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 283, "t": "2026-11-03T08:11:16.726", "t_unix": 1793661076.726, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 13, "held_sec": 4.008, "accepted": true, "measured_before": [30.76, 7.55, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.72, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 10.55, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661076.787062, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 284, "t": "2026-11-03T08:11:16.845", "t_unix": 1793661076.846, "button": 12, "button_name": "dpad_down", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": 3.0, "hold_id": 30, "hold_n": 14, "held_sec": 4.128, "accepted": true, "released_during_job": true, "measured_before": [30.76, 11.33, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.78, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 14.33, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661077.2562401, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 286, "t": "2026-11-03T08:11:17.887", "t_unix": 1793661077.887, "button": 10, "button_name": "r1", "kind": "modifier", "selected_joint": 1, "step_deg": 2.0, "execute": true, "accepted": true, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 285, "t": "2026-11-03T08:11:17.886", "t_unix": 1793661077.887, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 1.0, "execute": true, "joint": 1, "delta": -1.0, "hold_id": 31, "hold_n": 0, "accepted": true, "measured_before": [30.76, 15.2, 21.88, -2.37, 2.72, -28.74], "start_source": "command", "cmd_gap_deg": 1.77, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 13.33, 20.11, -2.21, 2.21, -29.01], "sent": true, "timeout_sec": 8.0, "t_send": 1793661077.919001, "measured_before_send": [30.76, 15.2, 21.88, -2.37, 2.72, -28.74], "resends": [], "reached": true, "reached_angles": [30.76, 15.2, 21.88, -2.37, 2.72, -28.74], "reach_err": 1.87, "elapsed_sec": 0.02, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 287, "t": "2026-11-03T08:11:18.290", "t_unix": 1793661078.291, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 1, "held_sec": 0.404, "accepted": true, "measured_before": [30.76, 15.2, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.87, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 12.2, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.309062, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 288, "t": "2026-11-03T08:11:18.406", "t_unix": 1793661078.407, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 2, "held_sec": 0.52, "accepted": true, "measured_before": [30.76, 14.76, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.56, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 11.76, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.4338, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 289, "t": "2026-11-03T08:11:18.508", "t_unix": 1793661078.508, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 3, "held_sec": 0.621, "accepted": true, "measured_before": [30.76, 13.27, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 10.27, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.531071, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 290, "t": "2026-11-03T08:11:18.608", "t_unix": 1793661078.609, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 4, "held_sec": 0.722, "accepted": true, "measured_before": [30.76, 12.74, 21.88, -2.37, 2.72, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.47, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 9.74, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.63578, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 291, "t": "2026-11-03T08:11:18.709", "t_unix": 1793661078.709, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 5, "held_sec": 0.823, "accepted": true, "measured_before": [30.76, 11.25, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.51, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 8.25, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.7325099, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 292, "t": "2026-11-03T08:11:18.810", "t_unix": 1793661078.81, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 6, "held_sec": 0.924, "accepted": true, "measured_before": [30.76, 10.19, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.94, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 7.19, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.829296, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 293, "t": "2026-11-03T08:11:18.925", "t_unix": 1793661078.926, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 7, "held_sec": 1.039, "accepted": true, "measured_before": [30.76, 9.22, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.03, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 6.22, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661078.9482932, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 294, "t": "2026-11-03T08:11:19.042", "t_unix": 1793661079.042, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 8, "held_sec": 1.156, "accepted": true, "measured_before": [30.76, 7.55, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.33, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 4.55, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661079.07081, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 295, "t": "2026-11-03T08:11:19.446", "t_unix": 1793661079.446, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 9, "held_sec": 1.559, "accepted": true, "measured_before": [30.76, 5.62, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 2.62, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661079.470977, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 296, "t": "2026-11-03T08:11:19.546", "t_unix": 1793661079.547, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 10, "held_sec": 1.66, "accepted": true, "measured_before": [30.76, 5.36, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.74, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 2.36, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661079.568227, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 297, "t": "2026-11-03T08:11:19.662", "t_unix": 1793661079.663, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 11, "held_sec": 1.776, "accepted": true, "measured_before": [30.76, 3.42, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.06, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, 0.42, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661079.681189, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 298, "t": "2026-11-03T08:11:20.046", "t_unix": 1793661080.047, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 12, "held_sec": 2.16, "accepted": true, "measured_before": [30.84, 1.49, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.07, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -1.51, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661080.0602062, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 299, "t": "2026-11-03T08:11:20.413", "t_unix": 1793661080.413, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 13, "held_sec": 2.526, "accepted": true, "measured_before": [30.76, -0.52, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.99, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -3.52, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661080.435647, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 300, "t": "2026-11-03T08:11:20.796", "t_unix": 1793661080.796, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 14, "held_sec": 2.91, "accepted": true, "measured_before": [30.76, -2.54, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -5.54, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661080.839196, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 301, "t": "2026-11-03T08:11:20.901", "t_unix": 1793661080.902, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 15, "held_sec": 3.014, "accepted": true, "measured_before": [30.76, -2.9, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.64, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -5.9, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661080.93234, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 302, "t": "2026-11-03T08:11:21.002", "t_unix": 1793661081.003, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 16, "held_sec": 3.116, "accepted": true, "measured_before": [30.76, -5.0, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.9, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -8.0, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661081.021552, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 303, "t": "2026-11-03T08:11:21.387", "t_unix": 1793661081.387, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 17, "held_sec": 3.5, "accepted": true, "measured_before": [30.76, -7.11, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.89, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -10.11, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661081.4095948, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 304, "t": "2026-11-03T08:11:21.504", "t_unix": 1793661081.504, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 18, "held_sec": 3.617, "accepted": true, "measured_before": [30.76, -8.52, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 1.59, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -11.52, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661081.567539, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 305, "t": "2026-11-03T08:11:21.620", "t_unix": 1793661081.62, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 19, "held_sec": 3.733, "accepted": true, "measured_before": [30.76, -9.4, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 2.12, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -12.4, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661081.6423419, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 306, "t": "2026-11-03T08:11:22.005", "t_unix": 1793661082.006, "button": 11, "button_name": "dpad_up", "kind": "move", "selected_joint": 1, "step_deg": 2.0, "execute": true, "joint": 1, "delta": -3.0, "hold_id": 31, "hold_n": 20, "held_sec": 4.119, "accepted": true, "released_during_job": true, "measured_before": [30.76, -11.42, 21.88, -2.37, 2.63, -28.74], "start_source": "hold", "cmd_gap_deg": 1.77, "hold_lead_deg": 0.98, "clip": [], "refused": [], "limit_ja": "", "limit_ascii": "", "command": [30.91, -14.42, 20.11, -2.21, 2.21, -29.01], "sent": true, "reached": null, "no_check": true, "t_send": 1793661082.041665, "grip_state": "unknown", "stopped": false, "stop_reason": null}
{"seq": 307, "t": "2026-11-03T08:11:24.070", "t_unix": 1793661084.07, "button": 5, "button_name": "home", "kind": "home", "selected_joint": 1, "step_deg": 1.0, "execute": true, "held_sec": 1.006, "accepted": true, "measured_before": [30.76, -13.71, 21.88, -2.37, 2.63, -28.74], "command": [0.0, 0.0, 0.0, 0.0, 0.0, -30.0], "range_check": "skipped_for_home", "sent": true, "timeout_sec": 8.0, "t_send": 1793661084.106598, "measured_before_send": [30.76, -13.71, 21.88, -2.37, 2.63, -28.74], "resends": [], "reached": true, "reached_angles": [0.08, 0.7, 1.84, -1.14, 1.14, -29.7], "reach_err": 1.84, "elapsed_sec": 1.13, "grip_state": "unknown", "stopped": false, "stop_reason": null}
```
