ROBROS

Human First,

line

Always

Dev Center

Last Updated On: 2026-06-25

Camera

1. IGRIS-C Camera Topic List

  • Data Topic - igris_c::msg::dds::CompressedMessage

    TopicName

    Description

    igris_c/sensor/d435_color

    RealSense D435 RGB image data

    igris_c/sensor/d435_depth

    RealSense D435 depth image data

    igris_c/sensor/eyes_stereo

    IGRIS-C head stereo camera image data

    igris_c/sensor/left_hand

    IGRIS-C left hand end-effector image data

    igris_c/sensor/right_hand

    IGRIS-C right hand end-effector image data

  • Service

    TopicName

    Message Type

    Description

    igris_c/sensor/realsense_config_request

    igris_c::msg::dds::RealsenseConfigRequest

    RealSense D435 configuration service

    igris_c/sensor/stereo_config_request

    igris_c::msg::dds::StereoConfigRequest

    IGRIS-C head stereo camera configuration service

    igris_c/sensor/mono_config_request

    igris_c::msg::dds::MonoConfigRequest

    IGRIS-C hand end-effector camera configuration service

    igris_c/sensor/camera_config_response

    igris_c::msg::dds::ServiceResponse

    Configuration service response

2. Camera Topic & Service API

  • SDK Initialization

#include <igris_sdk/channel_factory.hpp>
#include <igris_sdk/igris_c_client.hpp>
#include <igris_sdk/igris_c_msgs.hpp>
#include <igris_sdk/subscriber.hpp>

using namespace igris_sdk;
using CompressedMessage = igris_c::msg::dds::CompressedMessage;

int main() {
    // Initialize SDK with domain ID
    int domain_id = 0;
    ChannelFactory::Instance()->Init(domain_id);
    if (!ChannelFactory::Instance()->IsInitialized()) {
        std::cerr << "Failed to initialize ChannelFactory" << std::endl;
        return 1;
    }

    // Initialize service client
    IgrisC_Client client;
    client.Init();
    client.SetTimeout(10.0f);  // Set the default timeout to 10 seconds

    // Service calls...
}
  • Image Subscriber Example

    Subscriber<CompressedMessage> sub("igris_c/sensor/d435_color");
    
    sub.init([](const CompressedMessage &msg) {
        cv::Mat raw(1, msg.image_data().size(), CV_8UC1,
                    const_cast<uint8_t*>(msg.image_data().data()));
    
        cv::Mat img = cv::imdecode(raw, cv::IMREAD_UNCHANGED);
    });
    
    • JPEG-compressed image transmission

  • Image Subscriber Example

    #include <dds/dds.hpp>
    #include <igris_sdk/igris_c_msgs.hpp>
    
    #include <chrono>
    #include <iostream>
    #include <thread>
    
    using namespace igris_c::msg::dds;
    
    int main() {
        int domain_id = 10;
    
        // Create DDS participant
        dds::domain::DomainParticipant participant(domain_id);
        dds::pub::Publisher publisher(participant);
        dds::sub::Subscriber subscriber(participant);
    
        // Define topics
        dds::topic::Topic<StereoConfigRequest> req_topic(
            participant, "igris_c/sensor/stereo_config_request");
    
        dds::topic::Topic<ServiceResponse> res_topic(
            participant, "igris_c/sensor/camera_config_response");
    
        // Create writer and reader
        dds::pub::DataWriter<StereoConfigRequest> writer(publisher, req_topic);
        dds::sub::DataReader<ServiceResponse> reader(subscriber, res_topic);
    
        // Create request ID
        std::string request_id = "req_001";
    
        // =========================
        // Build request
        // =========================
        StereoConfigRequest req;
        req.request_id(request_id);
        req.stereo_width(1280);
        req.stereo_height(480);
        req.stereo_fps(30);
        req.stereo_jpeg_quality(90);
        req.enable_stereo(true);
    
        // publish
        writer.write(req);
        std::cout << "[publish] StereoConfigRequest sent\n";
    
        // =========================
        // Wait for response
        // =========================
        auto start = std::chrono::steady_clock::now();
        int timeout_ms = 5000;
    
        while (true) {
            auto samples = reader.take();
    
            for (auto &s : samples) {
                if (!s.info().valid()) continue;
    
                const auto &res = s.data();
    
                if (res.request_id() == request_id) {
                    std::cout << "\n=== Response ===\n";
                    std::cout << "success: " << res.success() << "\n";
                    std::cout << "message: " << res.message() << "\n";
                    std::cout << "error_code: " << res.error_code() << "\n";
                    return 0;
                }
            }
    
            // Check timeout
            auto now = std::chrono::steady_clock::now();
            auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
            if (elapsed > timeout_ms) {
                std::cout << "[timeout] no response\n";
                break;
            }
    
            std::this_thread::sleep_for(std::chrono::milliseconds(50));
        }
    
        return 0;
    }
    



    * Examples are available in the GitHub repository: