Dev Center
Dev Center
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
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
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
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
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
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/, andexamples/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/lowstateresolves toigris_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.
Edit the
<NetworkInterface name="...">incyclonedds.xmlto the name of the network interface on this PC that communicates with the robot. (To check available interfaces:ip link, or setautodetermine="true"for automatic selection.)Export
CYCLONEDDS_URIto 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_IG01If 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.
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
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
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
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
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
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/, andexamples/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/lowstateresolves toigris_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.
Edit the
<NetworkInterface name="...">incyclonedds.xmlto the name of the network interface on this PC that communicates with the robot. (To check available interfaces:ip link, or setautodetermine="true"for automatic selection.)Export
CYCLONEDDS_URIto 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_IG01If 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.

