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 newarm_typeparameter (yam,yam_pro,yam_ultra,big_yam). The separateget_big_yam_robot()function has been removed.- New
ArmTypeenum ini2rt.robots.utilsfor 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/androbot_models/gripper/. At runtime,combine_arm_and_gripper_xml()merges the arm and gripper XMLs by replacing thelink_6subtree and combining assets. - End-effector mass/inertia overrides: pass
ee_massandee_inertiatoget_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 aSimRobotbacked by MuJoCo — no CAN hardware required. Useful for testing policies and control loops offline.
Gripper Changes
- Default gripper type changed from
crank_4310tolinear_4310. - Explicit calibration opt-in: gripper auto-detection is now controlled by the
enable_gripper_calibrationflag instead of being inferred from the gripper type.crank_4310no longer triggers calibration by default. - Gripper limit detection tuned:
position_stable_countthreshold reduced from 6 to 3 for faster calibration. Theclose_offsetparameter has been removed.
Motor Driver Cleanup
- Removed
max_step_timetracking from the control loop. - Linear rail imports in
flow_base_controller.pyare now lazy to avoid import errors when the linear rail hardware module is not present.
SDK & API
joint_state_saver_factorysignature changed fromCallable[[str], Any]toCallable[[], Any]._last_gripper_command_qposinitialises to1(fully open) instead ofNone.start_recording()/stop_recording()methods are still available onMotorChainRobot(moved to bottom of class, no behaviour change).- Base
Robotclass now includes default no-opreinit()andclose()methods. GripperType.from_string_name()and the newArmType.from_string_name()use direct enum construction for cleaner error messages.
Dependencies
minkbumped from0.0.11to>=0.0.13.pydantic/pydantic-coreremoved from core dependencies.viser>=0.2.0added.pytest-xdistadded to dev dependencies.mujocois now a required import inminimum_gello.py(no longer optional).
Removed
get_big_yam_robot()— useget_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.mdanddoc/yam_handle_readme.md— content moved to online docs.dm_driver_single_motor_example.pyandmotor_chain_example.py— useexamples/directory instead.mujoco_visualizer.py— functionality covered by existing visualiser utilities.GripperType.get_gripper_default_test_torque()— replaced bytest_torqueparameter onMotorChainRobot.