C++ サンプルプログラム使用ガイド
以下では、Windows 環境における Mech-Vision SDK の C++ サンプルプログラムの設定および実行方法について説明します。
使用前提
-
SDK の環境設定 が完了していること。
-
CMake 3.20 以降がインストールされていること。
-
Visual Studio 2017 以降がインストールされていること(MSVC コンパイラを含む)。
-
Mech-Vision がインストールされ、正常に動作すること。
サンプルプログラム概要
C++ サンプルプログラムは development/cpp/examples/ ディレクトリに格納されており、以下のサンプルが含まれています。
| サンプル一覧 | 説明 |
|---|---|
|
ソリューションの開く/閉じる/保存/名前変更、およびソリューション情報とプロジェクト情報一覧の取得 |
|
プロジェクト状態変更コールバックおよび画像取得完了コールバックを登録し、プロジェクトを実行して出力データ(把持点)を取得 |
|
プロジェクトのデータ保存機能を操作し、保存データの読み取りおよび書き込みを実行 |
|
パラメータレシピ一覧の取得および現在のパラメータレシピの切り替え |
|
ソリューションの通信設定(TCP/IP、Modbus など)の取得および変更 |
|
ソリューション内のカメラの接続状態、温度、転送速度などのデバイス状態情報を取得 |
|
ソリューション内のグローバル変数(整数、浮動小数点数、文字列、キューなど)の読み取りおよび書き込み |
|
ステップ情報の取得、ステップ出力ポートの固定、およびプロジェクト実行後のステップ出力データ(位置姿勢など)の取得 |
|
JSON 形式でステップパラメータを読み取りおよび設定(多階層パラメータへのアクセス方法を含む) |
|
オペレーターインターフェイスの操作 |
|
COM コンポーネントを使用してオペレーターインターフェイスを表示 |
サンプルプログラムの設定とビルド
ここでは、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 .. -
生成された
.slnファイルを Visual Studio で開くか、以下のコマンドでビルドします。cmake --build . --config Release
サンプルプログラムの実行
-
Mech-Vision が起動していることを確認します。起動していない場合は、SDK インターフェースを使用して Mech-Vision を起動してください。詳細については、Mech-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;
// Open a solution
vision::Solution solution;
error = solution.open("D:/data/vision_sdk_example");
// Get solution information
vision::SolutionInfo solutionInfo;
error = solution.getInfo(solutionInfo);
// Get project information list
std::vector<vision::ProjectInfo> projectInfos;
error = solution.getAllProjectInfos(projectInfos);
for (const auto& info : projectInfos) {
// Process project information
}
// Save and close the solution
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");
// Get project name
std::vector<vision::ProjectInfo> projectInfos;
solution.getAllProjectInfos(projectInfos);
vision::Project project(projectInfos.front().name);
// Register running-state callback
project.setRunningChangedCallback(
[](const vision::ProjectRunningChangedCallbackData& cbData) {
// Handle running-state changes
});
// Run the project (wait until it finishes)
vision::ProjectResult projectResult;
project.run(vision::ProjectRunWaitState::Finished, "request_1", projectResult);
// Parse output data (JSON format)
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");
// Get the confidence threshold of a 3D Matching step
vision::Step step("3D Matching_1", "Matching");
std::string propsJson;
step.getPropertiesJson(R"(["confidenceThreshold"])", propsJson);
// Set step parameters
step.setPropertiesJson(R"({"confidenceThreshold": 0.8})");
}