ROBROS

Human First,

line

Always

Dev Center

Last Updated On: 2026-07-10

SDK Overview

1. Middleware

  • IGRIS-C uses DDS as its message middleware, employing two main data communication methods: Publish/Subscribe mode and Request/Response mode.

  • Publish/Subscription

    • Receivers subscribe to messages, and senders transmit messages to receivers according to the subscription list. This method is primarily used for medium-to-high frequency or continuous data exchange.

  • Request/Response

    • Data queries or actions are performed through requests. This method is used for low-frequency data exchange or function switching.

2. Architecture Description

  • Commands and state information delivered through the SDK are primarily implemented via DDS. The DDS-based communication structure enables reliable, real-time data exchange between modules.

  • DDS Middleware

    • IGRIS-C and its related SDKs exchange commands and state information on top of this DDS middleware, providing a scalable and consistent communication structure between internal modules and external development PCs.

  • Motion Control (the low-level control engine that directly generates and maintains the robot's motion)

    • The Motion Control module is IGRIS-C's core low-level motion control engine, operating based on a very fast internal control loop.

  • Key Features

    1. High-frequency low-level control loop

      • Control loop execution at μs–ms intervals in the internal control code

      • High-speed updates of torque, velocity, and position commands for each joint/motor

    2. CAN communication-based motor control

      • Encodes received control commands into CAN messages and delivers them to each motor

      • Collects motor status (current, velocity, temperature, angle, etc.) in real time and transmits it to DDS

    3. State information → delivered to DDS middleware

      • Various sensor values such as IMU, joint angles, and dynamic states are published as DDS topics and can be subscribed to from the development PC

    4. Processing commands received from DDS

      • Receives DDS motion commands published by PC2 or an external development PC

      • Applies them immediately within the control loop and reflects them to the motors

  • Image Services

    • The Image Services module handles image stream processing and external communication for IGRIS-C.

    • Key Features

      1. Camera image processing and streaming

        • Collects image frames from cameras connected to IGRIS-C

        • Transmits directly via DDS

Supported interfaces: The SDK provides three client interfaces — DDS (Cyclone DDS), ROS2, and Python. Examples are located in the examples/cyclonedds/, examples/ros2/, and examples/python/ folders respectively. (The previous documentation's notice of "ROS2 planned for later" is no longer valid — ROS2 is now officially supported.)

3. Robot Namespace (topic prefix)

All DDS topics are resolved under a namespace specific to each robot unit. Each unit has a different namespace, in the form of the igris_c_ prefix followed by a per-robot suffix (which varies by unit). Example: igris_c_IG01.

  • In the SDK, the namespace is specified using ChannelFactory::Init(domain_id, namespace).

  • In code, topics are written as rt/..., but are actually resolved as <namespace>/rt/....

    • Example: with namespace igris_c_IG01 → rt/lowstate resolves to igris_c_IG01/rt/lowstate

// C++
ChannelFactory::Instance()->Init(0, "igris_c_IG01");                  // domain 0, unit IG01
Subscriber<LowState> sub("rt/lowstate", QosProfile::SensorData());   // → igris_c_IG01/rt/lowstate
# Python
channel = igc_sdk.ChannelFactory.Instance()
channel.Init(0, "igris_c_IG01")

⚠️ The development PC (SDK client) and the robot must use the same namespace + domain_id for communication to work. Verify and set the namespace of the unit you intend to connect to.

Before running the examples — the CYCLONEDDS_URI environment variable

DDS communication uses a CycloneDDS XML file containing the network interface configuration. When running SDK examples on an external development PC, this XML must be specified via CYCLONEDDS_URI to connect to the robot's DDS network. An example cyclonedds.xml is bundled at the root of the SDK distribution.

  1. Edit the <NetworkInterface name="..."> in cyclonedds.xml to the name of the network interface on this PC that communicates with the robot. (To check available interfaces: ip link, or set autodetermine="true" for automatic selection.)

  2. Export CYCLONEDDS_URI to point to this file before running the examples.

# From the root of the SDK distribution (using the bundled cyclonedds.xml)
export CYCLONEDDS_URI=file://$(pwd)/cyclonedds.xml
export ROS_DOMAIN_ID=0          # When using ROS2 examples (domain must match)

# Then run the example
./cyclonedds_hand_example 0 igris_c_IG01

If this is not set, or the interface is incorrect, participant discovery will fail and topics will not be visible. Namespace and domain_id are specified via example arguments (or ChannelFactory::Init), not the XML file.

4. Get SDK

  • SDK Introduction

    • igris_c_sdk is a next-generation robot SDK developed by ROBROS. This SDK encapsulates interfaces such as basic motor control and advanced motion control, and provides related functional interfaces.

    • By referring to the provided SDK and examples, you can learn robot control and complete Secondary Development for IGRIS-C.

  • SDK Download

    • SDK: GitHub - robrosinc/igris_c_sdk_public: IGRIS_C SDK

    • Description: GitHub - robrosinc/igris_c_description_public

  • URDF

    • URDF files for all IGRIS-C versions can be downloaded from the Description repository above.