Dev Center
Dev Center
Camera
1. IGRIS-C Camera Topic List
Data Topic -
igris_c::msg::dds::CompressedMessageTopicName
Description
igris_c/sensor/d435_colorRealSense D435 RGB image data
igris_c/sensor/d435_depthRealSense D435 depth image data
igris_c/sensor/eyes_stereoIGRIS-C head stereo camera image data
igris_c/sensor/left_handIGRIS-C left hand end-effector image data
igris_c/sensor/right_handIGRIS-C right hand end-effector image data
Service
TopicName
Message Type
Description
igris_c/sensor/realsense_config_requestigris_c::msg::dds::RealsenseConfigRequestRealSense D435 configuration service
igris_c/sensor/stereo_config_requestigris_c::msg::dds::StereoConfigRequestIGRIS-C head stereo camera configuration service
igris_c/sensor/mono_config_requestigris_c::msg::dds::MonoConfigRequestIGRIS-C hand end-effector camera configuration service
igris_c/sensor/camera_config_responseigris_c::msg::dds::ServiceResponseConfiguration 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:
Camera
1. IGRIS-C Camera Topic List
Data Topic -
igris_c::msg::dds::CompressedMessageTopicName
Description
igris_c/sensor/d435_colorRealSense D435 RGB image data
igris_c/sensor/d435_depthRealSense D435 depth image data
igris_c/sensor/eyes_stereoIGRIS-C head stereo camera image data
igris_c/sensor/left_handIGRIS-C left hand end-effector image data
igris_c/sensor/right_handIGRIS-C right hand end-effector image data
Service
TopicName
Message Type
Description
igris_c/sensor/realsense_config_requestigris_c::msg::dds::RealsenseConfigRequestRealSense D435 configuration service
igris_c/sensor/stereo_config_requestigris_c::msg::dds::StereoConfigRequestIGRIS-C head stereo camera configuration service
igris_c/sensor/mono_config_requestigris_c::msg::dds::MonoConfigRequestIGRIS-C hand end-effector camera configuration service
igris_c/sensor/camera_config_responseigris_c::msg::dds::ServiceResponseConfiguration 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:

