ROBROS

Human First,

line

Always

개발자 센터

Last Updated On: 2026-07-10

SDK Overview

1. Middleware

  • Igris-C는 DDS를 메시지 미들웨어로 사용하며, 주요 데이터 통신 방식으로 Publish/Subscribe 모드와 Request/Response 모드 두 가지 방법을 사용합니다.

  • Publish /Subscription

    • 수신자는 메시지를 구독하고, 송신자는 구독 목록에 따라 수신자에게 메시지를 전송합니다. 이 방식은 중·고주파수 또는 지속적인 데이터 교환에 주로 사용됩니다.

  • Request/Response

    • 요청(Request)을 통해 데이터 조회나 동작 수행이 이루어집니다. 이 방식은 저주파수 데이터 교환이나 기능 전환(Function Switching) 시 사용됩니다.

2. Architecture Description

  • DDS Middleware

    • IGRIS-C 및 관련 SDK에서는 이 DDS 미들웨어 위에서 커맨드와 상태 정보를 교환함으로써, 내부 모듈과 외부 개발 PC 간에 확장 가능하고 일관된 통신 구조를 제공합니다.

  • Motion Control (로봇의 움직임을 직접 만들고 유지하는 로우레벨 제어 엔진)

    • Motion Control 모듈은 IGRIS-C의 로우레벨 운동 제어 핵심 엔진으로, 매우 빠른 내부 제어 루프를 기반으로 동작합니다.

  • 주요 기능

    1. 고주기 로우레벨 제어 루프

      • 내부 컨트롤 코드에서 μs~ms 단위로 제어 루프 실행

      • 각 관절/모터에 대한 토크·속도·위치 명령을 고속으로 업데이트

    2. CAN 통신 기반 모터 제어

      • 수신한 제어 명령을 CAN 메시지로 인코딩하여 각 모터로 전달

      • 모터 상태(전류, 속도, 온도, 각도 등)를 실시간으로 수집하여 DDS로 전송

    3. 상태 정보 → DDS 미들웨어로 전달

      • IMU, 관절각, 동적 상태 등 다양한 센서 값은 DDS 토픽으로 퍼블리시되어 개발 PC에서 구독 가능

    4. DDS에서 들어오는 커맨드 처리

      • PC2 또는 외부 개발 PC에서 발행한 DDS 모션 커맨드를 수신

      • 제어 루프 안에서 즉시 적용하여 모터에 반영

  • Image Services

    • Image Services 모듈은 IGRIS-C의 이미지 스트림 처리 및 외부 통신을 담당합니다.

    • 주요 기능

      1. 카메라 영상 처리 및 스트리밍

        • IGRIS-C에 연결된 카메라로부터 영상 프레임 수집

        • DDS 기반으로 직접 전송

지원 인터페이스: SDK는 DDS(Cyclone DDS), ROS2, Python 세 가지 클라이언트
인터페이스를 제공합니다. 예제는 각각 examples/cyclonedds/, examples/ros2/, examples/python/
폴더에 있습니다. (이전 문서의 "ROS2 추후 예정" 안내는 더 이상 유효하지 않습니다 — ROS2 정식 지원.)

3. Robot Namespace (토픽 prefix)

모든 DDS 토픽은 로봇 호기(unit)별 namespace 아래로 해석됩니다. 호기마다 namespace가 다르며,

igris_c_접두사에 로봇별 suffix(호기마다 다름)가 붙는 형태입니다. 예: igris_c_IG01.

  • SDK에서는 ChannelFactory::Init(domain_id, namespace) 로 namespace를 지정합니다.

  • 코드에서는 토픽을 rt/... 로 작성하고, 실제로는 <namespace>/rt/... 로 해석됩니다.

    • 예: namespace igris_c_IG01 → rt/lowstate 는 igris_c_IG01/rt/lowstate

// C++
ChannelFactory::Instance()->Init(0, "igris_c_IG01");                  // domain 0, 호기 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")

⚠️ 개발 PC(SDK 클라이언트)와 로봇이 동일한 namespace + domain_id 를 사용해야 통신됩니다. 연결할 호기의 namespace를 확인해 지정하세요.

예제 실행 전 — CYCLONEDDS_URI 환경 변수

DDS 통신은 네트워크 인터페이스 설정이 담긴 CycloneDDS XML 을 사용합니다. 외부 개발 PC에서
SDK 예제를 실행할 때는 이 XML을 CYCLONEDDS_URI 로 지정해야 로봇의 DDS 네트워크에 연결됩니다.
SDK 배포본 루트에 예제용 cyclonedds.xml 이 동봉되어 있습니다.

  1. cyclonedds.xml 의 <NetworkInterface name="..."> 를 이 PC에서 로봇과 통신하는 네트워크
    인터페이스 이름으로 수정합니다. (인터페이스 목록 확인: ip link / 또는 autodetermine="true" 로 자동 선택)

  2. 예제 실행 전 CYCLONEDDS_URI 를 이 파일로 export 합니다.

# SDK 배포본 루트에서 (동봉된 cyclonedds.xml 사용)
export CYCLONEDDS_URI=file://$(pwd)/cyclonedds.xml
export ROS_DOMAIN_ID=0          # ROS2 예제 사용 시 (도메인 일치)
# 이후 예제 실행
./cyclonedds_hand_example 0 igris_c_IG01

설정하지 않거나 인터페이스가 맞지 않으면 participant 디스커버리가 실패해 토픽이 보이지 않습니다.
namespace · domain_id는 XML이 아니라 예제 인자(또는 ChannelFactory::Init)로 지정합니다.

4. Get SDK

  • SDK 소개

    • igris_c_sdk 는 ROBROS에서 개발한 차세대 로봇용 SDK입니다. 이 SDK는 기본 모터 제어 및 고급 동작 제어와 같은 인터페이스를 캡슐화하고, 관련 기능 인터페이스를 제공합니다.

    • 제공되는 SDK와 예제를 참고하시면 로봇 제어를 학습하고 IGRIS-C의 2차 개발(Secondary Development)을 완성할 수 있습니다.

  • SDK download

  • URDF

    • IGRIS-C의 모든 버전용 URDF는 위 Description 저장소에서 다운로드할 수 있습니다.