ROBROS

Human First,

line

Always

Dev Center

Last Updated On: 2026-10-01

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 ros transport mode.

Choosing the transport mode

  • The robot serves exactly one external transport mode. The config key igris_c.network.transport takes cyclonedds_native (factory default), cyclonedds_ros_compatible or ros. 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 as lowstate; the transport mode decides the actual topic name (native <ns>/lowstate, ros_compatible rt/<ns>/lowstate, ros /<ns>/lowstate).

  • Config files for networks without multicast (Wi-Fi robot + wired PC) ship with the SDK: cyclonedds/cyclonedds_peers.xml and ros2/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. battery is a percentage, not a voltage.

  • Standard ROS messages replace the custom types: std_msgs/Header (no seq), sensor_msgs/Imu (rpy removed; derive it from the orientation quaternion), geometry_msgs/TwistStamped (cmd_vel), sensor_msgs/Joy (joystick, replaces JoyState), sensor_msgs/Image and CompressedImage (cameras).

  • Enums became uint8 constants (PDU_INIT, TORQUE_ON, CONTROL_MODE_CMD_*, KINEMATIC_MODE_PJS). In Python they are module constants such as igc_sdk.PDU_INIT, and message classes carry a _ suffix (LowCmd_()).

  • HandCmd.motor_cmd / HandState.motor_state are fixed 12-slot arrays (index them; no push_back). HandState.imu_state was removed.

  • handstate is now published by the bridge at roughly the lowstate rate (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 generic ServiceResponse_ receives nothing. IgrisC_Client callers are unaffected.

  • MetaQuest messages and examples were removed.

Control behavior

  • The TORQUE_OFF_MODE control mode is renamed PASSIVE_MODE (shown as PASSIVE in 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) or JOINT_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, handcmd is ignored.

  • While Motion Stop is latched, the JOINT_POSITION_HOLD command is now accepted, and the automatic PASSIVE (torque off) and DAMPING (fall) transitions are no longer blocked. The state reads STOP (IDLE in 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 on sensor/d435_depth (Image, 16UC1), IR on sensor/d435_ir_left|right, and the D435i IMU on sensor/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_reset is 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.