Dev Center
Dev Center
Release Notes
This page lists only the changes that affect how you use the robot. A new section is added at the top for each release. For full details see the relevant chapters (SDK Overview, ControlMode, Hand, Camera, Web Viewer).
v2.1.1 (2026-10)
Read this first — compatibility
Matching public repository versions: igris_c_sdk_public v2.1.1, igris_c_description_public v2.1.1, igris_c_masterarm_public v2.0.6.
A 2.1.0 SDK client cannot talk to a 2.1.1 robot. Topic names, message types and service names all changed, and a mismatch fails silently (0 FPS, service timeouts). Replace the SDK package with 2.1.1 and rebuild the examples and your own code.
Use mobile control app v2.0.6. From 2.1.1 IMU roll/pitch/yaw are sent in radians instead of degrees.
The master-arm (teleop) node and Fixer/Recorder must also be updated to their 2.1.1 versions and match the robot's transport mode and topic layout (below). Recorder does not work in the
rostransport mode.
Choosing the transport mode
The robot serves exactly one external transport mode. The config key
igris_c.network.transporttakescyclonedds_native(factory default),cyclonedds_ros_compatibleorros. Unlike 2.1.0, DDS and ROS 2 are no longer served at the same time.The
rt/segment is gone from topic names. Code uses unprefixed names such aslowstate; the transport mode decides the actual topic name (native<ns>/lowstate, ros_compatiblert/<ns>/lowstate, ros/<ns>/lowstate).Config files for networks without multicast (Wi-Fi robot + wired PC) ship with the SDK:
cyclonedds/cyclonedds_peers.xmlandros2/fastdds_peers.xml.
SDK data contract
The topic layout is selected on the client with the 4th argument of
ChannelFactory::Init(domain, ns, config, TopicNaming)or the example flag--dds-topic-naming native|ros_compatible, matching the robot's transport mode.BMS → PDU rename:
InitBms→InitPdu,rt/service/bms_init→service/pdu_init,rt/bmsstate→pdustate,BmsState→PduState.batteryis a percentage, not a voltage.Standard ROS messages replace the custom types:
std_msgs/Header(noseq),sensor_msgs/Imu(rpyremoved; derive it from the orientation quaternion),geometry_msgs/TwistStamped(cmd_vel),sensor_msgs/Joy(joystick, replacesJoyState),sensor_msgs/ImageandCompressedImage(cameras).Enums became
uint8constants (PDU_INIT,TORQUE_ON,CONTROL_MODE_CMD_*,KINEMATIC_MODE_PJS). In Python they are module constants such asigc_sdk.PDU_INIT, and message classes carry a_suffix (LowCmd_()).HandCmd.motor_cmd/HandState.motor_stateare fixed 12-slot arrays (index them; nopush_back).HandState.imu_statewas removed.handstateis now published by the bridge at roughly thelowstaterate (about 300 Hz, up from 10 Hz in 2.1.0). Check your subscriber buffers and logging capacity.When subscribing to a response topic (
service/<name>/response) directly, use the per-service type (TorqueCmd_Response_etc.); the genericServiceResponse_receives nothing.IgrisC_Clientcallers are unaffected.MetaQuest messages and examples were removed.
Control behavior
The
TORQUE_OFF_MODEcontrol mode is renamedPASSIVE_MODE(shown asPASSIVEin the app and web).New DAMPING mode: when a fall is detected in a walk mode the controller automatically enters a safe stop that keeps only joint damping. The state reads
STOP. A fall means pelvis tilt above 0.8 rad (about 46°), or above 0.4 rad (about 23°) while tilting faster than 1.57 rad/s. Even while the robot hangs on a hoist it switches and goes limp once these are exceeded; this is expected. Re-entering a walk mode directly from DAMPING is not blocked, so first settle the robot, then go through torque off (PASSIVE) orJOINT_POSITION_HOLD→ HOME preset before re-entering a control mode.External hand commands (
handcmd) are applied only in LOW_LEVEL_MODE and LOW_LEVEL_WALK_MODE. HIGH_LEVEL modes follow the preset's hand motion; as in all other modes,handcmdis ignored.While Motion Stop is latched, the
JOINT_POSITION_HOLDcommand is now accepted, and the automatic PASSIVE (torque off) and DAMPING (fall) transitions are no longer blocked. The state readsSTOP(IDLEin PASSIVE).The walk speed scale setting in Web Viewer Config (
twist_teleop.scale) is gone; the walk policy now sets the speed limits. The same joystick input may produce a higher forward speed (WALK: half stick ≈ 0.5 m/s), so start with small inputs. The slow arm start when entering WALK was also removed. The heading-bias setting (twist_teleop.heading_bias) was also removed from the user config; existing values are not carried over.Requesting torque ON while torque is already on now returns success and does nothing. In 2.1.0 the request re-ran the torque-on sequence, so every motor briefly released torque (the robot momentarily went limp) before re-engaging.
Cameras
Image topics use standard types: color, stereo and hand cameras on
sensor/<name>/compressed(CompressedImage, JPEG), depth onsensor/d435_depth(Image, 16UC1), IR onsensor/d435_ir_left|right, and the D435i IMU onsensor/d435_imu(sensor_msgs/Imu).The DDS camera-configuration services (
*_config_request) were removed. Change settings in Web Viewer › Config › camera config (camera.yaml) and restart the camera service.The Jetson relay (route) setup is gone; cameras always publish directly from the robot PC. DDS domain 1 is no longer reserved.
Defaults changed:
d435.initial_resetis false (5–8 s faster start-up) and the hand cameras run at 20 fps.
Hardware variants
Wrist v2 and ankle v2 variants are supported. Set the robot's variant with
description.common.wrist_version/ankle_version(Web Viewer › Config); it must match the physical hardware. Both keys are required; the robot services will not start without them.Wrist v2 has a different range of motion (mechanical spec: roll L −80/+40°, R −40/+80°, pitch ±25°); see Specs (DoF). Ankle v2 is a reinforced foot with the same range as v1.
The 1-DoF gripper's URDF/simulation model now matches the hardware (q = 0 = OPEN). The meaning of gripper command (
handcmd) values is unchanged.
Documentation
A Web Viewer manual was added to the developer center. The Web Viewer itself (
http://<robot IP>:18080) has shipped since 2.1.0; 2.1.1 adds camera config editing to the Config tab. The Web Viewer chapter covers live status, 3D pose, joint/hand/IMU values, data recording and download, configuration editing and service restarts.
Other changes
Unchanged: motor error code values and meanings, LED indicators, motor ID order, hand motor IDs and baud rates, the app TCP port (9000), and the BLE/AP pairing flow.
Release Notes
This page lists only the changes that affect how you use the robot. A new section is added at the top for each release. For full details see the relevant chapters (SDK Overview, ControlMode, Hand, Camera, Web Viewer).
v2.1.1 (2026-10)
Read this first — compatibility
Matching public repository versions: igris_c_sdk_public v2.1.1, igris_c_description_public v2.1.1, igris_c_masterarm_public v2.0.6.
A 2.1.0 SDK client cannot talk to a 2.1.1 robot. Topic names, message types and service names all changed, and a mismatch fails silently (0 FPS, service timeouts). Replace the SDK package with 2.1.1 and rebuild the examples and your own code.
Use mobile control app v2.0.6. From 2.1.1 IMU roll/pitch/yaw are sent in radians instead of degrees.
The master-arm (teleop) node and Fixer/Recorder must also be updated to their 2.1.1 versions and match the robot's transport mode and topic layout (below). Recorder does not work in the
rostransport mode.
Choosing the transport mode
The robot serves exactly one external transport mode. The config key
igris_c.network.transporttakescyclonedds_native(factory default),cyclonedds_ros_compatibleorros. Unlike 2.1.0, DDS and ROS 2 are no longer served at the same time.The
rt/segment is gone from topic names. Code uses unprefixed names such aslowstate; the transport mode decides the actual topic name (native<ns>/lowstate, ros_compatiblert/<ns>/lowstate, ros/<ns>/lowstate).Config files for networks without multicast (Wi-Fi robot + wired PC) ship with the SDK:
cyclonedds/cyclonedds_peers.xmlandros2/fastdds_peers.xml.
SDK data contract
The topic layout is selected on the client with the 4th argument of
ChannelFactory::Init(domain, ns, config, TopicNaming)or the example flag--dds-topic-naming native|ros_compatible, matching the robot's transport mode.BMS → PDU rename:
InitBms→InitPdu,rt/service/bms_init→service/pdu_init,rt/bmsstate→pdustate,BmsState→PduState.batteryis a percentage, not a voltage.Standard ROS messages replace the custom types:
std_msgs/Header(noseq),sensor_msgs/Imu(rpyremoved; derive it from the orientation quaternion),geometry_msgs/TwistStamped(cmd_vel),sensor_msgs/Joy(joystick, replacesJoyState),sensor_msgs/ImageandCompressedImage(cameras).Enums became
uint8constants (PDU_INIT,TORQUE_ON,CONTROL_MODE_CMD_*,KINEMATIC_MODE_PJS). In Python they are module constants such asigc_sdk.PDU_INIT, and message classes carry a_suffix (LowCmd_()).HandCmd.motor_cmd/HandState.motor_stateare fixed 12-slot arrays (index them; nopush_back).HandState.imu_statewas removed.handstateis now published by the bridge at roughly thelowstaterate (about 300 Hz, up from 10 Hz in 2.1.0). Check your subscriber buffers and logging capacity.When subscribing to a response topic (
service/<name>/response) directly, use the per-service type (TorqueCmd_Response_etc.); the genericServiceResponse_receives nothing.IgrisC_Clientcallers are unaffected.MetaQuest messages and examples were removed.
Control behavior
The
TORQUE_OFF_MODEcontrol mode is renamedPASSIVE_MODE(shown asPASSIVEin the app and web).New DAMPING mode: when a fall is detected in a walk mode the controller automatically enters a safe stop that keeps only joint damping. The state reads
STOP. A fall means pelvis tilt above 0.8 rad (about 46°), or above 0.4 rad (about 23°) while tilting faster than 1.57 rad/s. Even while the robot hangs on a hoist it switches and goes limp once these are exceeded; this is expected. Re-entering a walk mode directly from DAMPING is not blocked, so first settle the robot, then go through torque off (PASSIVE) orJOINT_POSITION_HOLD→ HOME preset before re-entering a control mode.External hand commands (
handcmd) are applied only in LOW_LEVEL_MODE and LOW_LEVEL_WALK_MODE. HIGH_LEVEL modes follow the preset's hand motion; as in all other modes,handcmdis ignored.While Motion Stop is latched, the
JOINT_POSITION_HOLDcommand is now accepted, and the automatic PASSIVE (torque off) and DAMPING (fall) transitions are no longer blocked. The state readsSTOP(IDLEin PASSIVE).The walk speed scale setting in Web Viewer Config (
twist_teleop.scale) is gone; the walk policy now sets the speed limits. The same joystick input may produce a higher forward speed (WALK: half stick ≈ 0.5 m/s), so start with small inputs. The slow arm start when entering WALK was also removed. The heading-bias setting (twist_teleop.heading_bias) was also removed from the user config; existing values are not carried over.Requesting torque ON while torque is already on now returns success and does nothing. In 2.1.0 the request re-ran the torque-on sequence, so every motor briefly released torque (the robot momentarily went limp) before re-engaging.
Cameras
Image topics use standard types: color, stereo and hand cameras on
sensor/<name>/compressed(CompressedImage, JPEG), depth onsensor/d435_depth(Image, 16UC1), IR onsensor/d435_ir_left|right, and the D435i IMU onsensor/d435_imu(sensor_msgs/Imu).The DDS camera-configuration services (
*_config_request) were removed. Change settings in Web Viewer › Config › camera config (camera.yaml) and restart the camera service.The Jetson relay (route) setup is gone; cameras always publish directly from the robot PC. DDS domain 1 is no longer reserved.
Defaults changed:
d435.initial_resetis false (5–8 s faster start-up) and the hand cameras run at 20 fps.
Hardware variants
Wrist v2 and ankle v2 variants are supported. Set the robot's variant with
description.common.wrist_version/ankle_version(Web Viewer › Config); it must match the physical hardware. Both keys are required; the robot services will not start without them.Wrist v2 has a different range of motion (mechanical spec: roll L −80/+40°, R −40/+80°, pitch ±25°); see Specs (DoF). Ankle v2 is a reinforced foot with the same range as v1.
The 1-DoF gripper's URDF/simulation model now matches the hardware (q = 0 = OPEN). The meaning of gripper command (
handcmd) values is unchanged.
Documentation
A Web Viewer manual was added to the developer center. The Web Viewer itself (
http://<robot IP>:18080) has shipped since 2.1.0; 2.1.1 adds camera config editing to the Config tab. The Web Viewer chapter covers live status, 3D pose, joint/hand/IMU values, data recording and download, configuration editing and service restarts.
Other changes
Unchanged: motor error code values and meanings, LED indicators, motor ID order, hand motor IDs and baud rates, the app TCP port (9000), and the BLE/AP pairing flow.

