Skip to content

Release v1.1#39

Merged
nu-jliu merged 2 commits into
mainfrom
sync/from-jh-i2rt
May 6, 2026
Merged

Release v1.1#39
nu-jliu merged 2 commits into
mainfrom
sync/from-jh-i2rt

Conversation

@nu-jliu
Copy link
Copy Markdown
Contributor

@nu-jliu nu-jliu commented May 5, 2026

Summary

Sync working-tree content from the JH_i2rt staging repo into this public release repo. Brings over the threaded mujoco control loop, viser control interface, gripper gain/limit overrides, motor-driver bus-drain fixes, minimum_gello example improvements, and unused big_yam/crank_4310 STL cleanup that have accumulated in JH_i2rt since the last release.

Changes

  • examples/minimum_gello/minimum_gello.py: pull staging-repo improvements (arm-type selection, sim mode, ee_mass CLI arg, viser/visualizer fixes)
  • examples/minimum_gello/README.md: update docs to match new minimum_gello CLI and arm-type options
  • i2rt/motor_drivers/can_interface.py: store channel name on CanInterface and add _drain_bus() helper to flush stale frames at init
  • i2rt/motor_drivers/dm_driver.py: drain bus before motor bring-up, guard against duplicate control-loop thread start, hold same_bus_device_lock during driver init
  • i2rt/robots/get_robot.py: add gripper_limits_override / gripper_kp / gripper_kd parameters to get_yam_robot for per-call gripper tuning
  • i2rt/robots/motor_chain_robot.py: incorporate teaching-handle support, joint log mode, and torque logging from staging
  • i2rt/utils/encoder_manager.py: minor encoder manager updates from staging repo
  • i2rt/utils/mujoco_control_interface.py: bring in threaded mujoco control loop, gravity-comp integration, and visualizer overhaul
  • i2rt/utils/viser_control_interface.py: add viser control interface (safety gate, IK/joint/PD controls, normalized 0–1 gripper slider)
  • i2rt/robot_models/arm/big_yam/assets/{finger-l-link,finger-r-link,gripper_link,joint1..joint6_link}.STL: drop unused big_yam STL meshes (cleanup performed in staging repo)
  • i2rt/robot_models/gripper/crank_4310/assets/link_6_collision.stl: drop unused crank_4310 collision mesh
  • tests/test_robot_variants.py: drop test that no longer matches the staging-repo robot factory signature

Test Plan

  • Confirm working tree matches the staging repo (excluding gitignored files):
    diff -rq --no-dereference \
      --exclude=.git --exclude=.venv --exclude=.ruff_cache --exclude=.pytest_cache \
      --exclude=node_modules --exclude=__pycache__ --exclude='*.pyc' \
      --exclude=.claude --exclude=.vitepress \
      ../JH_i2rt .
    
    Expected: only Only in ../JH_i2rt: tests (a tests/__pycache__ artifact, untracked).
    Result: PASS — only Only in ../JH_i2rt: tests reported (untracked __pycache__ artifact only).
  • uv sync succeeds (no dependency changes were synced).
    Result: PASS — Resolved 102 packages in 2ms / Checked 96 packages in 7ms, no installs.
  • uv run pytest passes — confirm no test references the deleted test_robot_variants.py or removed STL files.
    Result: PASS — 260 passed, 2 skipped in 5.36s. grep over the repo found no remaining references to the deleted STL filenames or top-level tests/test_robot_variants.py. (i2rt/robots/tests/test_robot_variants.py is a separate file, unaffected.)
  • uv run python -c "from i2rt.robots.get_robot import get_yam_robot; help(get_yam_robot)" shows the new gripper_limits_override, gripper_kp, gripper_kd parameters.
    Result: PASS — inspect.signature(get_yam_robot) lists all three: gripper_limits_override, gripper_kp, gripper_kd.
  • Smoke-test minimum_gello in sim mode: uv run python examples/minimum_gello/minimum_gello.py --sim --arm_type yam — verify viser comes up and the arm responds to the slider.
    Result: PASS (with caveats) — actual CLI flag is --arm yam (not --arm_type yam); ran uv run python examples/minimum_gello/minimum_gello.py --sim --arm yam for ~12s, SimRobot loaded and the portal server bound to 0.0.0.0:11333. Note: minimum_gello.py does not launch a viser server — in default follower mode it only starts a portal RPC server, and in --mode visualizer_local it uses mujoco.viewer.launch_passive. The new viser_control_interface.py is used by examples/control_with_viser/, not minimum_gello.
  • Edge case: with hardware connected, run dm_driver instantiation twice in the same process and confirm start_thread no longer spawns a second control loop.
    Result: SKIPPED on dev machine — no CAN hardware available. Static-analysis finding (please confirm before merge): the new guard works for the yam_real path (get_robot.py:231 passes start_thread=False then calls motor_chain.start_thread() explicitly), but it appears to break the gripper_only path (get_robot.py:103 passes start_thread=True). In dm_driver.py:452-454 the constructor sets self.start_thread_flag = start_thread before calling self.start_thread(), so the new guard if self.start_thread_flag: return (line 518) early-returns and the control-loop thread is never started on first init. Repro (no hardware needed): see the equivalence-class simulation in this PR's test thread.
  • Edge case: confirm i2rt/robot_models/arm/big_yam/ and i2rt/robot_models/gripper/crank_4310/ still load in MuJoCo without the deleted STLs (no XML still references them).
    Result: PASS — loaded big_yam × {no_gripper, crank_4310, yam_teaching_handle} and {yam, yam_pro, yam_ultra} × crank_4310 via mujoco.MjModel.from_xml_path(combine_arm_and_gripper_xml(...)); all six combinations parsed successfully. No XML in the working tree references any of the deleted STL filenames.

🤖 Generated with Claude Code

- examples/minimum_gello/minimum_gello.py: pull staging-repo improvements (arm-type selection, sim mode, ee_mass CLI arg, viser/visualizer fixes)
- examples/minimum_gello/README.md: update docs to match new minimum_gello CLI and arm-type options
- i2rt/motor_drivers/can_interface.py: store channel name on CanInterface and add _drain_bus() to flush stale frames at init
- i2rt/motor_drivers/dm_driver.py: drain bus before motor bring-up, guard against duplicate control-loop thread start, hold same_bus_device_lock during driver init
- i2rt/robots/get_robot.py: add gripper_limits_override / gripper_kp / gripper_kd parameters to get_yam_robot for per-call gripper tuning
- i2rt/robots/motor_chain_robot.py: incorporate teaching-handle support, joint log mode, and torque logging
- i2rt/utils/encoder_manager.py: minor encoder manager updates from staging repo
- i2rt/utils/mujoco_control_interface.py: bring in threaded mujoco control loop, gravity-comp integration, and visualizer overhaul
- i2rt/utils/viser_control_interface.py: add viser control interface (safety gate, IK/joint/PD controls, normalized 0-1 gripper slider)
- i2rt/robot_models/arm/big_yam/assets/{finger-l-link,finger-r-link,gripper_link,joint1..joint6_link}.STL: drop unused big_yam STL meshes (cleanup performed in staging repo)
- i2rt/robot_models/gripper/crank_4310/assets/link_6_collision.stl: drop unused crank_4310 collision mesh
- tests/test_robot_variants.py: drop test that no longer matches the staging-repo robot factory signature

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
@nu-jliu nu-jliu changed the title chore(release): sync content from JH_i2rt staging repo Release v1.1 May 5, 2026
- docs/.vitepress/config.mjs: bump Releases nav to v1.1 and add sidebar entries for Viser Control, Minimum Gello, and v1.1 release notes
- docs/examples/control-with-mujoco.md: document --log flag, no_arm/flexible_4310 support, auto --site detection, and background control loop behavior
- docs/examples/control-with-viser.md: new walkthrough for the Viser web-based control example
- docs/examples/index.md: re-sort example table by complexity and surface Minimum Gello + Viser entries
- docs/examples/minimum-gello.md: new walkthrough for the leader-follower minimum_gello example
- docs/examples/motor-control.md: rewrite around examples/single_motor_position_pd_control and document the motor_config_tool ping/zero/timeout utilities
- docs/releases/v1.1.md: new v1.1 release notes
- docs/sdk/grippers.md: document the new flexible_4310 soft-tip gripper variant
- docs/sdk/index.md: surface i2rt.robots.config in the package map
- docs/sdk/yam-arm.md: document NO_ARM arm type, new gripper/gravity-comp overrides, and the updated minimum_gello CLI flags
- pyproject.toml: bump package version to 1.1.0

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
@nu-jliu nu-jliu merged commit 9897358 into main May 6, 2026
2 checks passed
@nu-jliu nu-jliu deleted the sync/from-jh-i2rt branch May 6, 2026 01:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant