Release v1.1#39
Merged
Merged
Conversation
- 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>
- 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
ee_massCLI arg, viser/visualizer fixes)CanInterfaceand add_drain_bus()helper to flush stale frames at initsame_bus_device_lockduring driver initgripper_limits_override/gripper_kp/gripper_kdparameters toget_yam_robotfor per-call gripper tuningTest Plan
Only in ../JH_i2rt: tests(atests/__pycache__artifact, untracked).Result: PASS — only
Only in ../JH_i2rt: testsreported (untracked__pycache__artifact only).uv syncsucceeds (no dependency changes were synced).Result: PASS —
Resolved 102 packages in 2ms / Checked 96 packages in 7ms, no installs.uv run pytestpasses — confirm no test references the deletedtest_robot_variants.pyor removed STL files.Result: PASS —
260 passed, 2 skippedin 5.36s.grepover the repo found no remaining references to the deleted STL filenames or top-leveltests/test_robot_variants.py. (i2rt/robots/tests/test_robot_variants.pyis a separate file, unaffected.)uv run python -c "from i2rt.robots.get_robot import get_yam_robot; help(get_yam_robot)"shows the newgripper_limits_override,gripper_kp,gripper_kdparameters.Result: PASS —
inspect.signature(get_yam_robot)lists all three:gripper_limits_override,gripper_kp,gripper_kd.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); ranuv run python examples/minimum_gello/minimum_gello.py --sim --arm yamfor ~12s,SimRobotloaded and the portal server bound to0.0.0.0:11333. Note:minimum_gello.pydoes not launch aviserserver — in defaultfollowermode it only starts a portal RPC server, and in--mode visualizer_localit usesmujoco.viewer.launch_passive. The newviser_control_interface.pyis used byexamples/control_with_viser/, not minimum_gello.dm_driverinstantiation twice in the same process and confirmstart_threadno 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_realpath (get_robot.py:231passesstart_thread=Falsethen callsmotor_chain.start_thread()explicitly), but it appears to break thegripper_onlypath (get_robot.py:103passesstart_thread=True). Indm_driver.py:452-454the constructor setsself.start_thread_flag = start_threadbefore callingself.start_thread(), so the new guardif 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.i2rt/robot_models/arm/big_yam/andi2rt/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_4310viamujoco.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