Skip to content

v1.0 Release Notes

Date: 2026-03-03

Highlights

This release introduces a unified robot assembly API, modular arm + gripper MJCF models, simulation support, and a cleaner SDK surface for downstream consumers.

Unified Robot Assembly

  • get_yam_robot() now supports all arm variants via the new arm_type parameter (yam, yam_pro, yam_ultra, big_yam). The separate get_big_yam_robot() function has been removed.
  • New ArmType enum in i2rt.robots.utils for selecting arm variants.
  • Motor wrap-around correction: the assembly routine now reads initial motor positions and applies ±2π offsets automatically, preventing jump discontinuities on startup.

Modular Arm + Gripper Models

  • Arm and gripper MJCF files are now separate under robot_models/arm/ and robot_models/gripper/. At runtime, combine_arm_and_gripper_xml() merges the arm and gripper XMLs by replacing the link_6 subtree and combining assets.
  • End-effector mass/inertia overrides: pass ee_mass and ee_inertia to get_yam_robot() to customise the link_6 inertial properties without editing XML files.
  • Removed legacy monolithic model directories (robot_models/yam/, robot_models/big_yam/, robot_models/arx_r5/).

Simulation Support

  • get_yam_robot(sim=True) returns a SimRobot backed by MuJoCo — no CAN hardware required. Useful for testing policies and control loops offline.

Gripper Changes

  • Default gripper type changed from crank_4310 to linear_4310.
  • Explicit calibration opt-in: gripper auto-detection is now controlled by the enable_gripper_calibration flag instead of being inferred from the gripper type. crank_4310 no longer triggers calibration by default.
  • Gripper limit detection tuned: position_stable_count threshold reduced from 6 to 3 for faster calibration. The close_offset parameter has been removed.

Motor Driver Cleanup

  • Removed max_step_time tracking from the control loop.
  • Linear rail imports in flow_base_controller.py are now lazy to avoid import errors when the linear rail hardware module is not present.

SDK & API

  • joint_state_saver_factory signature changed from Callable[[str], Any] to Callable[[], Any].
  • _last_gripper_command_qpos initialises to 1 (fully open) instead of None.
  • start_recording() / stop_recording() methods are still available on MotorChainRobot (moved to bottom of class, no behaviour change).
  • Base Robot class now includes default no-op reinit() and close() methods.
  • GripperType.from_string_name() and the new ArmType.from_string_name() use direct enum construction for cleaner error messages.

Dependencies

  • mink bumped from 0.0.11 to >=0.0.13.
  • pydantic / pydantic-core removed from core dependencies.
  • viser>=0.2.0 added.
  • pytest-xdist added to dev dependencies.
  • mujoco is now a required import in minimum_gello.py (no longer optional).

Removed

  • get_big_yam_robot() — use get_yam_robot(arm_type=ArmType.BIG_YAM) instead.
  • robot_models/yam/, robot_models/big_yam/, robot_models/arx_r5/ directories.
  • doc/set_persist_id_socket_can.md and doc/yam_handle_readme.md — content moved to online docs.
  • dm_driver_single_motor_example.py and motor_chain_example.py — use examples/ directory instead.
  • mujoco_visualizer.py — functionality covered by existing visualiser utilities.
  • GripperType.get_gripper_default_test_torque() — replaced by test_torque parameter on MotorChainRobot.

Released under the MIT License.