개발자 센터
개발자 센터
Camera
1. IGRIS-C Camera Topic List
Data Topic -
igris_c::msg::dds::CompressedMessageTopicName
설명
igris_c/sensor/d435_colorrealsense D435 RGB 이미지 데이터
igris_c/sensor/d435_depthrealsense D435 depth 이미지 데이터
igris_c/sensor/eyes_stereoIGRIS-C head stereo 카메라 이미지 데이터
igris_c/sensor/left_handIGRIS-C left hand(end-effector) 이미지 데이터
igris_c/sensor/right_handIGRIS-C right hand(end-effector) 이미지 데이터
Service
TopicName
Message Type
설명
igris_c/sensor/realsense_config_requestigris_c::msg::dds::RealsenseConfigRequestrealsense D435 configuration 서비스
igris_c/sensor/stereo_config_requestigris_c::msg::dds::StereoConfigRequestIGRIS-C head stereo 카메라 configuration 서비스
igris_c/sensor/mono_config_requestigris_c::msg::dds::MonoConfigRequestIGRIS-C hand(end-effector) configuration 서비스
igris_c/sensor/camera_config_responseigris_c::msg::dds::ServiceResponseconfiguration 서비스 응답
2. Camera Topic & Service API
SDK 초기화
#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); // 10초 타임아웃 설정
// ... 이후 서비스 호출
}
이미지 Subscriber 예제
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 기반 압축 이미지 전송
이미지 센서 Service 예제
#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; // DDS Participant 생성 dds::domain::DomainParticipant participant(domain_id); dds::pub::Publisher publisher(participant); dds::sub::Subscriber subscriber(participant); // Topic 정의 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"); // Writer / Reader 생성 dds::pub::DataWriter<StereoConfigRequest> writer(publisher, req_topic); dds::sub::DataReader<ServiceResponse> reader(subscriber, res_topic); // request id 생성 std::string request_id = "req_001"; // ========================= // 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"; // ========================= // 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; } } // 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; }*Github Repository에서 예제를 확인하실 수 있습니다.
Camera
1. IGRIS-C Camera Topic List
Data Topic -
igris_c::msg::dds::CompressedMessageTopicName
설명
igris_c/sensor/d435_colorrealsense D435 RGB 이미지 데이터
igris_c/sensor/d435_depthrealsense D435 depth 이미지 데이터
igris_c/sensor/eyes_stereoIGRIS-C head stereo 카메라 이미지 데이터
igris_c/sensor/left_handIGRIS-C left hand(end-effector) 이미지 데이터
igris_c/sensor/right_handIGRIS-C right hand(end-effector) 이미지 데이터
Service
TopicName
Message Type
설명
igris_c/sensor/realsense_config_requestigris_c::msg::dds::RealsenseConfigRequestrealsense D435 configuration 서비스
igris_c/sensor/stereo_config_requestigris_c::msg::dds::StereoConfigRequestIGRIS-C head stereo 카메라 configuration 서비스
igris_c/sensor/mono_config_requestigris_c::msg::dds::MonoConfigRequestIGRIS-C hand(end-effector) configuration 서비스
igris_c/sensor/camera_config_responseigris_c::msg::dds::ServiceResponseconfiguration 서비스 응답
2. Camera Topic & Service API
SDK 초기화
#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); // 10초 타임아웃 설정
// ... 이후 서비스 호출
}
이미지 Subscriber 예제
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 기반 압축 이미지 전송
이미지 센서 Service 예제
#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; // DDS Participant 생성 dds::domain::DomainParticipant participant(domain_id); dds::pub::Publisher publisher(participant); dds::sub::Subscriber subscriber(participant); // Topic 정의 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"); // Writer / Reader 생성 dds::pub::DataWriter<StereoConfigRequest> writer(publisher, req_topic); dds::sub::DataReader<ServiceResponse> reader(subscriber, res_topic); // request id 생성 std::string request_id = "req_001"; // ========================= // 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"; // ========================= // 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; } } // 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; }*Github Repository에서 예제를 확인하실 수 있습니다.

