(base) shimazueiichi@shimadzueiichinoMacBook-Pro _制作ベース % cd ~/r2r2r-scripts && bash tools/daemon_add_read_servo.sh 今の daemon の写し: /Volumes/KIOXIA/r2r2r-data/archive/mecharm_daemon_premerge_readservo_20261107_175619/mecharm_daemon.py --- 差分 66a67,187 > # ---- 2026-11-07 依頼 109: 電流などを読むだけの命令 read_servo (純追記) ---------------------- > # アームと爪には何も送らない. pymycobot の読む関数 (get_angles / get_servo_currents / get_servo_status / > # get_gripper_value / get_servo_data) だけを, 頼まれた順に 1 回ずつ呼ぶ. 読み直さない・待たない. > # 読めなかった項目は値 None と error を返す (ok=True のまま. get_angles_once と同じ. 呼び出し側が例外にしないため). > # 2.9.6 は返事がないとき 例外にせず, リストを返す関数は [] を, 1 つの値を返す関数は -1 を返す. > # これも読めなかったとして value None・error "no reply"・returned (返ってきた値そのまま) にする (codex R1 必須 2). > # 前提 (この機体で確かめていない. codex R2): 番地の値は 1 バイトで返る (ff は 255 になり -1 にならない). > # 2 バイトの ffff が返る形だと符号つきで -1 になり, 返事なしと見分けられない. raw=True のバイト列で確かめる. > # 2.9.6 の read は返事がないと 1 回 0.1 秒ほど待つ (途中まで返ると 0.2 秒近く). 頼む数を増やすと, その分 > # daemon がほかの命令 (ゲームパッドの stop も) を受けるのが遅れる. 呼び出し側で数を絞る (codex R1 必須 1). > # 頼み方がおかしいとき (regs の形・番号の範囲) だけ ok=False で, そのときは何も読まない. > # {"cmd": "read_servo", "angles": true, "currents": true, "status": false, "gripper": false, > # "regs": [[servo_id, addr], ...], "raw": false} > # angles / currents は既定で読む. status / gripper / regs は頼んだときだけ. > # regs: get_servo_data(servo_id, addr) を 1 つずつ (servo_id 1〜7. 7 = 爪. addr 0〜100. 32 個まで). > # この版の get_servo_data は番地を 1 つ渡すだけなので, 2 バイトの値は下位と上位の番地を別々に頼む. > # raw: 返ってきたバイト列 (16 進) も返す (形の分からない返事を確かめる用). > # 返事: {"ok": true, "t": Pi の時刻, "total_ms": ..., "items": {名前: {"value": ..., "ms": ..., ("error"), ("raw")}}, > # "regs": [[servo_id, addr, value, ms], ...]} > SERVO_READ_MAX_REGS = 32 > > > def _servo_read_one(fn, args, want_raw, no_reply=None): > """読む関数を 1 回だけ呼ぶ. 返事のバイト列は _read を一時的に包んで写す (daemon は 1 件ずつなので混ざらない). > no_reply: 2.9.6 が返事のないときに返す値 ([] か -1). これが返ったら value None・error にする.""" > item = {} > cap = [] > if want_raw: > orig = _mc._read > > def _cap_read(*a, **k): > d = orig(*a, **k) > cap.append(d) > return d > _mc._read = _cap_read > t0 = time.perf_counter() > try: > v = fn(*args) > if isinstance(v, tuple): > v = list(v) > if v is None or (no_reply is not None and v == no_reply): > item["value"] = None > item["error"] = "no reply" > item["returned"] = v > else: > item["value"] = v > except Exception as e: > item["value"] = None > item["error"] = f"{type(e).__name__}: {e}" > finally: > item["ms"] = round((time.perf_counter() - t0) * 1000.0, 2) > if want_raw: > del _mc._read # インスタンスに置いた包みを外す (クラスの _read に戻る) > item["raw"] = [d.hex() if isinstance(d, (bytes, bytearray)) else repr(d) for d in cap] > try: > json.dumps(item["value"]) > except (TypeError, ValueError): > item["value"] = repr(item["value"])[:200] > return item > > > def handle_servo_read(cmd_obj): > regs = cmd_obj.get("regs") > if regs is None: # 頼まないのは「ない」か None だけ ({}・""・0 は形がおかしいとして断る. codex R2) > regs = [] > if not isinstance(regs, (list, tuple)) or len(regs) > SERVO_READ_MAX_REGS: > return {"ok": False, "error": f"regs must be a list of at most {SERVO_READ_MAX_REGS} [servo_id, addr]"} > pairs = [] > for r in regs: > try: > if not isinstance(r, (list, tuple)) or len(r) != 2: > raise ValueError("length") > # 整数だけ (1.9 を 1 に丸めて読まない. True も数にしない. codex R1 推奨) > if not all(isinstance(x, int) and not isinstance(x, bool) for x in r): > raise TypeError("not int") > sid, addr = r > except (TypeError, ValueError): > return {"ok": False, "error": f"bad reg: {r!r}"} > if not (1 <= sid <= 7) or not (0 <= addr <= 100): > return {"ok": False, "error": f"reg out of range (servo_id 1..7, addr 0..100): {r!r}"} > pairs.append((sid, addr)) > want_raw = bool(cmd_obj.get("raw", False)) > plan = [] > if cmd_obj.get("angles", True): > plan.append(("angles", "get_angles", [])) > if cmd_obj.get("currents", True): > plan.append(("currents", "get_servo_currents", [])) > if cmd_obj.get("status", False): > plan.append(("status", "get_servo_status", [])) > if cmd_obj.get("gripper", False): > plan.append(("gripper_value", "get_gripper_value", -1)) > t_start = time.perf_counter() > t_wall = time.time() > items = {} > for key, name, no_reply in plan: > fn = getattr(_mc, name, None) > if fn is None: > items[key] = {"value": None, "ms": 0.0, "error": f"{name} is not available in this pymycobot environment"} > continue > items[key] = _servo_read_one(fn, (), want_raw, no_reply) > out_regs = [] > raw_regs = [] > if pairs: > fn = getattr(_mc, "get_servo_data", None) > for sid, addr in pairs: > if fn is None: > out_regs.append([sid, addr, None, 0.0]) > raw_regs.append({"servo_id": sid, "addr": addr, "raw": None, > "error": "get_servo_data is not available in this pymycobot environment"}) > continue > it = _servo_read_one(fn, (sid, addr), want_raw, -1) > out_regs.append([sid, addr, it["value"], it["ms"]]) > if want_raw or "error" in it: > raw_regs.append({"servo_id": sid, "addr": addr, "raw": it.get("raw"), "error": it.get("error")}) > resp = {"ok": True, "t": t_wall, "total_ms": round((time.perf_counter() - t_start) * 1000.0, 2), > "items": items, "regs": out_regs} > if raw_regs: > resp["regs_detail"] = raw_regs > return resp > > 260a382,385 > > # 2026-11-07 依頼 109: 関節と爪の電流を読む (読むだけ. 純追記). handle_servo_read の説明を参照. > elif cmd == "read_servo": > return handle_servo_read(cmd_obj) ping → {'ok': True, 'daemon': 'mecharm_daemon', 'fresh_mode': 0} get_angles → {'ok': True, 'angles': [-0.08, 92.37, -5.09, 7.47, -89.56, -29.44]} read_servo → {'ok': True, 't': 1665645171.1441107, 'total_ms': 165.4, 'items': {'angles': {'value': [-0.08, 92.37, -5.09, 7.47, -89.56, -29.44], 'ms': 16.42, 'raw': ['fefe0e20fff82415fe0302ebdd04f480fa']}, 'currents': {'value': None, 'error': 'no reply', 'returned': [], 'ms': 114.57, 'raw': ['None']}, 'status': {'value': [0, 0, 0], 'ms': 15.16, 'raw': ['fefe08e4000000000000fa']}, 'gripper_value': {'value': 95, 'ms': 18.93, 'raw': ['fefe03655ffa']}}, 'regs': []} currents = None (no reply) status = [0, 0, 0] gripper_value = 95 できました。記録: /Volumes/KIOXIA/r2r2r-data/archive/mecharm_daemon_premerge_readservo_20261107_175619 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/servo_current_probe.py --seconds 10 [記録] /Volumes/KIOXIA/r2r2r-data/diag/servo_current_20261107/175645_solo ---- 始めの 1 回 (読めるものを全部) angles [-0.08, 92.37, -5.09, 7.47, -89.56, -29.44] (18.09 ms) raw=['fefe0e20fff82415fe0302ebdd04f480fa'] currents None (109.93 ms) error=no reply raw=['None'] status [0, 0, 0] (18.67 ms) raw=['fefe08e4000000000000fa'] gripper_value 95 (15.85 ms) raw=['fefe03655ffa'] servo 1 (j0) 60:0 61:0 69:0 70:0 servo 2 (j1) 60:0 61:0 69:1 70:128 servo 3 (j2) 60:0 61:0 69:0 70:0 servo 4 (j3) 60:0 61:0 69:0 70:0 servo 5 (j4) 60:0 61:0 69:0 70:0 servo 6 (j5) 60:0 61:0 69:0 70:0 servo 7 (爪) 60:0 61:0 69:0 70:0 番地 1 つの読み取り: 中央値 19.9 ms Pi の中の合計 709.67 ms 往復 720.2 ms 読み始めます。印: 1 静止 2 空で閉じた 3 つかんだ 4 引っ張った 5 離した 6 押した 0 そのほか / p 止める・再開 / q 終わる [読み] 16 回 7.4 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 16 回 やりとりの失敗 0 回 [読み] 33 回 7.7 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 33 回 やりとりの失敗 0 回 [読み] 50 回 7.9 Hz 往復の中央値 123.7 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 50 回 やりとりの失敗 0 回 [読み] 67 回 7.9 Hz 往復の中央値 124.2 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 67 回 やりとりの失敗 0 回 [読み] 81 回 7.9 Hz 往復の中央値 127.1 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 81 回 やりとりの失敗 0 回 [終了] アームには何も送っていません (ゲームパッドで送った分を除く)。記録: /Volumes/KIOXIA/r2r2r-data/diag/servo_current_20261107/175645_solo (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/servo_current_probe.py --with-pad [記録] /Volumes/KIOXIA/r2r2r-data/diag/servo_current_20261107/175706_pad /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[91550]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1025612c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b08e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1025613b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b09d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0a20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1025614d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0a98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0ae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0b38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1025615c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0b88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1025615e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0bb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0bd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0c50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0cc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0d18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102561778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0d40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[91550]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1025617c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x1279b0d90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. ---- 始めの 1 回 (読めるものを全部) angles [-0.08, 92.37, -5.09, 7.47, -89.56, -29.44] (20.63 ms) raw=['fefe0e20fff82415fe0302ebdd04f480fa'] currents None (100.74 ms) error=no reply raw=['None'] status [0, 0, 0] (20.16 ms) raw=['fefe08e4000000000000fa'] gripper_value 95 (21.44 ms) raw=['fefe03655ffa'] servo 1 (j0) 60:0 61:0 69:0 70:0 servo 2 (j1) 60:0 61:0 69:0 70:0 servo 3 (j2) 60:0 61:0 69:0 70:0 servo 4 (j3) 60:0 61:0 69:0 70:0 servo 5 (j4) 60:0 61:0 69:0 70:0 servo 6 (j5) 60:0 61:0 69:0 70:0 servo 7 (爪) 60:0 61:0 69:0 70:0 番地 1 つの読み取り: 中央値 19.8 ms Pi の中の合計 712.86 ms 往復 724.7 ms [記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261107_175708 [実機] daemon に送ります。起動したときの姿勢: -0.08 +92.37 -5.09 +7.47 -89.56 -29.44 [注意] 起動したときの姿勢が守りの外: j1=+92.37。この関節を含む操作は送りません(HOME の長押しは送れます) コントローラーを待っています(つないでいなければ、今つないでください) 読み始めます。印はターミナルかゲームパッドの窓で: 1 静止 2 空で閉じた 3 つかんだ 4 引っ張った 5 離した 6 押した 0 そのほか / p 止める・再開 / 終わるときはウィンドウを閉じる [読み] 15 回 6.7 Hz 往復の中央値 127.5 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 15 回 やりとりの失敗 0 回 [読み] 30 回 6.9 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 30 回 やりとりの失敗 0 回 [読み] 45 回 7.0 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 45 回 やりとりの失敗 0 回 [読み] 60 回 7.1 Hz 往復の中央値 127.7 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 60 回 やりとりの失敗 0 回 [読み] 75 回 7.1 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 75 回 やりとりの失敗 0 回 [読み] 90 回 7.2 Hz 往復の中央値 127.5 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 90 回 やりとりの失敗 0 回 [読み] 105 回 7.2 Hz 往復の中央値 127.5 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 105 回 やりとりの失敗 0 回 [接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16 [読み] 108 回 6.0 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 108 回 やりとりの失敗 0 回 [読み] 123 回 6.1 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 123 回 やりとりの失敗 0 回 [読み] 138 回 6.2 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 138 回 やりとりの失敗 0 回 [読み] 153 回 6.3 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 153 回 やりとりの失敗 0 回 [読み] 168 回 6.4 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 168 回 やりとりの失敗 0 回 [読み] 183 回 6.4 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 183 回 やりとりの失敗 0 回 [読み] 198 回 6.5 Hz 往復の中央値 127.5 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 198 回 やりとりの失敗 0 回 [読み] 213 回 6.5 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 213 回 やりとりの失敗 0 回 [読み] 228 回 6.6 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 228 回 やりとりの失敗 0 回 [読み] 243 回 6.6 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 243 回 やりとりの失敗 0 回 [読み] 258 回 6.7 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 258 回 やりとりの失敗 0 回 [読み] 273 回 6.7 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 273 回 やりとりの失敗 0 回 [読み] 287 回 6.7 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 287 回 やりとりの失敗 0 回 [読み] 302 回 6.7 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 302 回 やりとりの失敗 0 回 [読み] 317 回 6.8 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 317 回 やりとりの失敗 0 回 [読み] 332 回 6.8 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 332 回 やりとりの失敗 0 回 [読み] 346 回 6.8 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 346 回 やりとりの失敗 0 回 [読み] 361 回 6.8 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 361 回 やりとりの失敗 0 回 [読み] 376 回 6.8 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 376 回 やりとりの失敗 0 回 [読み] 391 回 6.8 Hz 往復の中央値 127.6 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 391 回 やりとりの失敗 0 回 [読み] 406 回 6.8 Hz 往復の中央値 127.7 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 406 回 やりとりの失敗 0 回 [読み] 421 回 6.8 Hz 往復の中央値 127.7 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 421 回 やりとりの失敗 0 回 [読み] 432 回 6.8 Hz 往復の中央値 127.7 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 432 回 やりとりの失敗 0 回 [送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00 届いた(ずれ 1.31°) 届いた角度 -0.26 +1.23 +0.70 +0.70 +1.31 -29.61 [読み] 447 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 447 回 やりとりの失敗 0 回 [読み] 462 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 462 回 やりとりの失敗 0 回 [読み] 477 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 477 回 やりとりの失敗 0 回 [読み] 492 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 492 回 やりとりの失敗 0 回 [読み] 507 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 507 回 やりとりの失敗 0 回 [読み] 521 回 6.9 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 521 回 やりとりの失敗 0 回 [読み] 536 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 536 回 やりとりの失敗 0 回 [読み] 551 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 551 回 やりとりの失敗 0 回 [読み] 566 回 6.9 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 566 回 やりとりの失敗 0 回 [読み] 581 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 581 回 やりとりの失敗 0 回 [読み] 596 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 596 回 やりとりの失敗 0 回 [読み] 611 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 611 回 やりとりの失敗 0 回 [読み] 626 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 626 回 やりとりの失敗 0 回 [読み] 641 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 641 回 やりとりの失敗 0 回 [読み] 656 回 6.9 Hz 往復の中央値 127.9 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 656 回 やりとりの失敗 0 回 [読み] 671 回 6.9 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 671 回 やりとりの失敗 0 回 [読み] 686 回 6.9 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 686 回 やりとりの失敗 0 回 [読み] 701 回 6.9 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 701 回 やりとりの失敗 0 回 [読み] 716 回 6.9 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 716 回 やりとりの失敗 0 回 [終了] Ctrl+C [終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261107_175708 [WARN] _daemon_request timeout (timeout=3.0s, cmd=read_servo). socket closed. [読み] 731 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 730 回 やりとりの失敗 1 回 [読み] 731 回 6.8 Hz 往復の中央値 127.8 ms 電流が 6 個の数で読めた 0 回 項目が読めなかった 730 回 やりとりの失敗 1 回 [パッド] 鍵の待ち (ms): 読んでいる間 {'n': 11, 'median': 41.66, 'p95': 132.41, 'max': 139.99} / 止めている間 None [終了] アームには何も送っていません (ゲームパッドで送った分を除く)。記録: /Volumes/KIOXIA/r2r2r-data/diag/servo_current_20261107/175706_pad (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/servo_current_probe.py --with-pad --no-currents --regs 2:69,2:70,7:69,7:70 usage: servo_current_probe.py [-h] [--with-pad] [--seconds SECONDS] [--regs REGS] [--status] [--gripper] [--no-currents] [--gap GAP] servo_current_probe.py: error: --with-pad のときは 1 回に読む数 (角度・電流・状態・爪・番地の合計) を 4 までにしてください (今 5). daemon が読んでいる間はゲームパッドの命令 (stop も) が待たされます (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts %