C++ 예제 사용 가이드
이 절에서는 Windows 시스템에서 Mech-Vision SDK의 C++ 예제를 구성하고 실행하는 방법을 설명합니다.
사용 전 준비
-
SDK 환경 구성을 완료해야 합니다.
-
CMake 3.20 이상.
-
Visual Studio 2017 이상(MSVC 컴파일러 포함).
-
Mech-Vision가 설치되어 있고 정상적으로 실행 가능해야 합니다.
예제 소개
C++ 예제는 development/cpp/examples/ 디렉터리에 있으며, 다음 예제를 포함합니다.
| 예제 디렉터리 | 설명 |
|---|---|
|
솔루션 열기/닫기/저장/이름 변경을 수행하고, 솔루션 정보 및 프로젝트 정보 목록을 가져옵니다. |
|
프로젝트 상태 변경 및 캡처 완료 콜백을 등록하고, 프로젝트를 실행한 뒤 출력 데이터(픽 포인트 포즈)를 가져옵니다. |
|
프로젝트 데이터 저장소를 조작하고 저장 데이터를 읽고 씁니다. |
|
파라미터 레시피 목록을 가져오고 현재 파라미터 레시피를 전환합니다. |
|
솔루션의 통신 구성(TCP/IP, Modbus 등)을 가져오고 수정합니다. |
|
솔루션 내 카메라의 연결 상태, 온도, 전송 속도 등 장치 상태 정보를 가져옵니다. |
|
솔루션 내 전역 변수(정수형, 부동소수점형, 문자열, 큐 등)를 읽고 씁니다. |
|
스텝 정보를 가져오고, 스텝 출력 포트를 고정한 후 프로젝트 실행 뒤 스텝 출력 데이터(예: 포인트 포즈)를 가져옵니다. |
|
JSON 형식으로 스텝 파라미터를 읽고 설정합니다(다중 계층 파라미터 접근 방식 포함). |
|
생산 인터페이스 조작. |
|
생산 인터페이스 통신 조작. |
예제 구성 및 빌드
solution_basic 예제를 기준으로 일반적인 구성 및 빌드 절차를 설명합니다.
-
예제 디렉터리의
CMakeLists.txt를 열고VISION_SDK_DIR을 실제 SDK 경로로 수정합니다.set(VISION_SDK_DIR path/to/development/cpp) -
예제 디렉터리에서 빌드 디렉터리를 만들고 CMake를 실행합니다.
mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. -
Visual Studio로 생성된
.sln파일을 열거나, 다음 명령으로 빌드합니다.cmake --build . --config Release
예제 실행
-
Mech-Vision가 시작되어 있는지 확인하거나, SDK 인터페이스를 통해 Vision 서비스를 시작합니다(Vision 서비스 시작 참조).
-
예제 코드의 솔루션 경로를 수정하여
"D:/data/vision_sdk_example"을 실제 솔루션 경로로 바꿉니다.error = solution.open("D:/path/to/your/solution"); -
빌드된 실행 파일을 실행합니다.
코드 예제
솔루션 열기 및 프로젝트 정보 가져오기(solution_basic)
#include "vision_sdk/vision_sdk.h"
using namespace mmind;
int main()
{
vision::initialize();
vision::ErrorStatus error;
// 솔루션 열기
vision::Solution solution;
error = solution.open("D:/data/vision_sdk_example");
// 솔루션 정보 가져오기
vision::SolutionInfo solutionInfo;
error = solution.getInfo(solutionInfo);
// 프로젝트 정보 목록 가져오기
std::vector<vision::ProjectInfo> projectInfos;
error = solution.getAllProjectInfos(projectInfos);
for (const auto& info : projectInfos) {
// 프로젝트 정보 처리
}
// 솔루션 저장 및 닫기
error = solution.save();
error = solution.close();
vision::uninitialize();
return 0;
}
프로젝트 실행 및 출력 데이터 가져오기(project_basic)
#include "vision_sdk/vision_sdk.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
using namespace mmind;
void example()
{
vision::Solution solution;
solution.open("D:/data/vision_sdk_example");
// 프로젝트 이름 가져오기
std::vector<vision::ProjectInfo> projectInfos;
solution.getAllProjectInfos(projectInfos);
vision::Project project(projectInfos.front().name);
// 실행 상태 변경 콜백 등록
project.setRunningChangedCallback(
[](const vision::ProjectRunningChangedCallbackData& cbData) {
// 실행 상태 변경 이벤트 처리
});
// 프로젝트 실행(프로젝트 실행 완료까지 대기)
vision::ProjectResult projectResult;
project.run(vision::ProjectRunWaitState::Finished, "request_1", projectResult);
// 출력 데이터 파싱(JSON 형식)
const auto joOutput =
QJsonDocument::fromJson(projectResult.outputJson.c_str()).object();
const auto jaPickPoints =
joOutput["workobject_data"].toObject()["pick_points"].toArray();
}
스텝 파라미터 읽기 및 설정(step_props)
#include "vision_sdk/vision_sdk.h"
#include <QJsonDocument>
#include <QJsonArray>
using namespace mmind;
void example()
{
vision::Solution solution;
solution.open("D:/data/vision_sdk_example");
// 3D 매칭 스텝의 신뢰도 임계값 파라미터 가져오기
vision::Step step("3D Matching_1", "Matching");
std::string propsJson;
step.getPropertiesJson(R"(["confidenceThreshold"])", propsJson);
// 스텝 파라미터 설정
step.setPropertiesJson(R"({"confidenceThreshold": 0.8})");
}