メインコンテンツへスキップ

クイックスタート

JAKA約7分

クイックスタート

ドキュメントの説明

JAKA SDKは、開発者がJAKAロボットと簡単にやり取りできるよう支援するために設計された効率的なツールキットです。SDKは、デバイスの接続、制御、データ転送などの機能をサポートする一連のインターフェースを提供します。このガイドを通して、JAKAが提供するSDKを基に短時間で自分のアプリケーションを構築し、JAKAロボットとの基本的なインタラクションを実現できるようになります。

SDKの取得

JAKA SDKソフトウェアパッケージは、JAKA公式サイトからダウンロードできます。中国語版では、JAKA公式サイトのホームページ(資料センター (jaka.com)open in new window)にアクセスし、「[サービスとサポート ]--> [資料センター ]--> [二次開発 ]--> [SDK]」をクリックして、最新および過去のSDKバージョン情報を確認してください。

ユーザープログラムの作成

ユーザーが異なるプラットフォーム上で最初のアプリを迅速に構築できるよう、本文では3つの例(ここをクリックしてサンプルをダウンロード)を用いて、WindowsとLinuxプラットフォームで異なるコンパイルツールを使用してアプリを作成する方法を説明します:

  1. WindowsではMicrosoft Visual Studioを使用してC#アプリを作成します;

  2. LinuxではCMakeを使用してC++アプリを作成します;

  3. LinuxではQt Creatorを使用してQtアプリを作成します。

WindowsではVisual Studioを使用してC#アプリを作成

コンパイル環境のインストール

ユーザーはMicrosoft Visual Studio開発プラットフォームソフトウェアをダウンロードしてインストールする必要があります。インターネット上の資料に従ってインストールしてください。以下の説明では、すでにソフトウェアがインストールされていることを前提としています。C#開発環境の構築中に、.Netフレームワークの更新を求められる場合があります。指示に従って導入してください(本プロジェクトが正常に動作する際の .NETフレームワークは .NET6.0 です)。

新規プロジェクトの作成

ソフトウェアを開き、左上のファイル -> 新規 -> プロジェクトをクリックします。次の図のように。この例では、フォームアプリケーションを作成することを選択します。

Nextをクリックし、クロスプラットフォームアプリケーションが必要な場合はWindows Form Appを選択することを推奨します。Windowsのみで実行する場合はWindows Forms App (.Net Framework)を選択できます。プロジェクト名と保存場所を設定した後、Nextをクリックしてプロジェクト作成を完了します。

コンパイルおよびリンク環境の設定

JAKA公式サイトからダウンロードしたSDKソフトウェアパッケージを解凍すると、次のようなディレクトリ構造が表示されます。

Windows C#アプリ開発の場合、Windows\csharpディレクトリ下にあるinclude(ヘッダーファイルを含む)およびx64(Windows 64ビットシステム用のライブラリファイルを含む)ディレクトリを確認できます。

新しく作成したプロジェクトに入り、右側バーのプロジェクトから「追加」--->「既存項目」をクリックし、includeフォルダ内の2つのヘッダーファイル「jakaAPI.cs」と「jkType.cs」をプロジェクトに追加します。

SDKパッケージ内のC#の動的ライブラリファイルを、プロジェクトのビルドされたメインプログラムディレクトリ(通常はbinディレクトリ)に配置します。

ユーザープログラム内で以下の2行のコードを追加し、JAKA SDKで定義された型やメソッドを後続のコードで使用できるようにします。

using jkType;

using jakaApi;

アプリケーションの作成

プログラムの作成が完了したら、ニーズに応じてインターフェースや対応する機能を開発することができます。コードの編集が完了したら、「[ビルド]」--->[「ソリューションのビルド」をクリック]して、実行可能プログラムをコンパイル・生成します。最後にツールバーの起動ボタンをクリックし、プログラムを実行またはデバッグします。

このサンプルでは、ロボットのティーチングに使用されるデモプログラムを示しており、機能には接続、電源投入およびイネーブル、関節空間での運動制御、デカルト空間での位置姿勢制御などが含まれます。具体的な実装については、サンプルコードを参考にしてください。

LinuxでCMakeを使用してC++アプリケーションを作成

CMakeツールをダウンロードしてインストール

公式サイトから、使用するプラットフォームに対応するインストールパッケージをダウンロードすることを推奨します。CMake公式サイトopen in new windowにて、本サンプルで使用しているCMakeのバージョンは3.7.2であり、このバージョン以上を使用することを推奨します。(具体的なインストール手順については、読者自身でオンラインリソースを参照し、ダウンロードおよびインストールしてください)以下の説明は、読者がすでにこの操作を完了している前提で進めます。

ダウンロードが完了したら、ターミナルで cmake --version と入力し、以下の内容が表示されればインストール成功です。

jakauser@ZuCAB2001:~$ cmake --version
cmake version 3.7.2

CMakeスイートはKitware(kitware.com/cmake)によって管理・サポートされています。

Visual Studio Codeをダウンロードしてインストール

ユーザーはVisual Studio Codeの公式サイト(https://code.visualstudio.com/Downloadopen in new window)でソフトウェアのインストールパッケージを検索し、ダウンロードしてインストールできます。VS Codeのインストールが完了したら、VS Codeの拡張機能でCMake拡張をインストールしてください。

プロジェクトフレームを作成し、CMakeを設定

Linux上で新しいプロジェクトフォルダ「CmakeSDKDemo」を作成し、以下のファイルを作成します。ここでc&c++はJAKAが提供するSDKパッケージ内のLinux用リソースファイルで、ヘッダーファイルincおよび動的ライブラリファイルが含まれます。main.cppはプロジェクトのメインファイルで、CMakeLists.txtはCMakeの設定ファイルです。大文字と小文字に注意してください。

次に、CMakeを使用して簡単な「hello world」プログラムを作成して実行します。まず、CMakeLists.txtに次の内容を入力します。

cmake_minimum_required(VERSION 3.5)
project(JAKADemo)

add_executable(hello main.cpp)
  • cmake_minimum_required: CMakeの最小バージョン要件を指定します。

  • project: プロジェクト名を定義します。

  • add_executable: 実行可能ターゲットを追加します。最初の引数はターゲット名、2番目の引数はソースファイルのリストです。

注:このプロジェクトはデフォルトでgccコンパイラを使用します。以下のように、読者自身でC++コンパイラを設定してください。

main.cppのメインプログラムを作成し、次のコードを入力します。

#include <string>
#include <iostream>

int main(){
    std::cout << "hello world" << std::endl;
}

その後、CMakeの設定を行います。ターミナルでcmake . と入力し、プロジェクト全体を構成します。設定後、プロジェクトフォルダー内にビルドに必要な設定ファイルが生成されます。

生成が完了したら、ターミナルでmakeコマンドを入力し、実行可能プログラムをビルドします。カレントディレクトリに「hello」という実行ファイルが生成されます。

ターミナルで ./hello コマンドを入力します。プログラムを実行すると、結果は次のようになります。

これで、CMakeを使って簡単な「hello world」プログラムを実行する手順が完了しました。

JAKA SDKの動的ライブラリをリンクする

CMakeLists.txtファイルに次の内容を入力します。各設定行の意味はコメントを参照してください。

cmake_minimum_required(VERSION 3.7.2)    # 最小CMakeバージョン
project(sdk_test VERSION 1.0)     # プロジェクト定義

# C++標準
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED true)

# ソースディレクトリ情報
message(${CMAKE_SOURCE_DIR})

# 実行ファイルの作成
add_executable(demo main.cpp)

# プロジェクトに含まれるSDKのヘッダーファイルパスを設定
target_include_directories(demo PUBLIC ${CMAKE_SOURCE_DIR}/c&c++/inc_of_c++)

# SDKの動的ライブラリリンクパスを設定
target_link_libraries(demo ${CMAKE_SOURCE_DIR}/c&c++/x86_64-linux-gnu/shared/libjakaAPI.so pthread)

main.cppファイルを作成し、SDKによる制御のサンプルコードを以下のように実現します。この例では、SDKのバージョン情報の出力、現在のtcp位置姿勢の取得、ロボットの末端をy軸方向に一定距離移動させる機能を実装しています。

#include <string>
#include <vector>
#include <iostream>
#include <chrono>
#include "JAKAZuRobot.h" // この行を必ず含めてください
#include <thread>
int main(int argc, char** argv)
{

    JAKAZuRobot demo;

    demo.login_in("192.168.164.222");
    //sleep(2);
    demo.power_on();
    //sleep(2)
    demo.enable_robot();
    //sleep(2);

    CartesianPose tcp_pos;
    int ret;
    char ver[100];
    demo.get_tcp_position(&tcp_pos);
    demo.get_sdk_version(ver);

    std::cout << "SDKバージョン: " << ver << std::endl;
    std::cout << "tcp位置:\n x: " << tcp_pos.tran.x << "y: " << tcp_pos.tran.y << "z: " << tcp_pos.tran.z << std::endl;

    std::cout << "tcp位置:\n rx: " << tcp_pos.rpy.rx << "ry: " << tcp_pos.rpy.ry << "rz: " << tcp_pos.rpy.rz << std::endl;
    auto now = std::chrono::system_clock::now().time_since_epoch();
    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now).count();
    std::cout << "現在の秒数: " << std::fixed << ((double)ms) / 1000.0f << std::endl;
    tcp_pos.tran.y = tcp_pos.tran.y + 60.0;
    ret = demo.linear_move(&tcp_pos, ABS, TRUE, 10, 10, 1, NULL);
    std::cout << "ret==" << ret << std::endl;
    std::cout << "linear_move 終了!" << std::endl;
    now = std::chrono::system_clock::now().time_since_epoch();

    return 0;
}

上記の準備が完了したら、cmakeを使ってプロジェクト全体を構成およびビルドします。プロジェクトのルートディレクトリにbuildディレクトリを新規作成し、ビルドによって生成される中間ファイルを保存することをお勧めします。これによりファイル構成の複雑化を防げます。

次に cd build でbuildディレクトリに移動し、コマンド cmake .. を実行してプロジェクト全体をビルドします。システムは自動的に生成された中間ファイルをbuildディレクトリに配置します。(注意:cmake .. は、CMakeLists.txtがあるディレクトリの一つ上の階層を意味します)。

11.png
11.png

その後、ターミナルで make を入力して実行可能プログラムをビルドします。

上記の手順が完了すると、buildディレクトリ内にdemoという実行可能ファイルが生成されます。ターミナルで ./demo を実行することでC++プログラムを動かすことができます。

これらの手順により、読者のC++プログラムは作成され、正常に実行できるようになります。

LinuxでQt Creatorを使用してQtアプリケーションを作成する

Qt Creatorのダウンロードとインストール

ユーザーはQt Groupの公式サイト(https://www.qt.io/download-devopen in new window)にアクセスし、ソフトウェアのインストーラを探してダウンロード・インストールできます。Qt Creatorのインストールが完了したら、Qt Creatorを起動します。画面は次のようになります。

Qtをインストールした後、さらにQtのビルド設定を完了する必要があります。Qt Creatorを開き、[Tools ]--> [Options]へ進み、表示されたダイアログで Kits タブを選択します。

  • Qt Versions の項目で、インストール済みのQtバージョンが一覧に表示されていることを確認します。もしバージョンが表示されていない場合は、ユーザーが手動で追加する必要があります。
  • Compliers(コンパイラ)欄でコンパイラの設定を確認します。通常、Qt Creatorはインストール済みのコンパイラを自動的に認識しますが、認識されない場合は手動で設定することができます。

Qtとコンパイラの設定が完了したら、Kitsタブに進み、左下の「Add」ボタンをクリックして新しいKitを作成するか、既存のKitを選択します。

Qtアプリケーションを作成する

Qt Creatorを起動し、メニューバーで[File ]--> [New File or Project ... を]クリックして新しいQtアプリケーションを作成します。次の例では、Application (Qt) --> Qt Console Application(Qtコンソールアプリケーション)を選択し、ウィザードに従って設定を行います。

プロジェクト名と保存ディレクトリを設定した後、Build System(ビルドシステム)を選択する必要があります。Qtは複数のビルドシステムをサポートしており、本例ではqmakeを選択します。

Kits選択画面で、事前に設定したKitを選択し、「Next」をクリックしてプロジェクトの作成を完了します。

プロジェクト作成後の初期画面は次のとおりです。

SDKリンクの設定

ダウンロードしたJAKA SDKのヘッダーファイルおよびライブラリファイルをプロジェクトに追加します。本例はLinuxシステムを使用しているため、JAKA SDKフォルダ内のinc_of_c++およびx86_64-linux-gnuの2つのフォルダをプロジェクトディレクトリにコピーします。

Qt Creatorでプロジェクト設定ファイルSDKQtDemo.proをダブルクリックし、JAKA SDKを使用するために必要なヘッダーファイルとライブラリファイルをプロジェクトに追加します。本例の設定内容は以下のとおりです。

  1. 設定行「INCLUDEPATH += inc_of_c++」を追加し、ヘッダーファイルディレクトリをプロジェクトに追加します。

  2. 設定行「LIBS += -L$$PWD/x86_64-linux-gnu/shared -ljakaAPI」を追加し、libjakaAPI.soファイルをプロジェクトに追加します。ここで$(PWD)/x86_64-linux-gnu/sharedはlibjakaAPI.soファイルのディレクトリを指定しており、jakaAPIはライブラリ名(libjakaAPI.so)を意味します。

これで、QtプログラムでJAKA SDKを使用するための環境構築および設定が完了しました。

プログラムを編集してSDKを呼び出す

プログラム内で#include "JAKAZuRobot.h"を追加してJAKA SDKのヘッダーファイルをインクルードすると、関連するインターフェースを呼び出すことができます。本例では、参考用として以下のコードを作成します。注:サンプルで使用しているIPアドレスはロボットのIPアドレスです。使用環境に応じて調整してください。

#include <QCoreApplication>
#include "JAKAZuRobot.h"
#include <string>
#include <vector>
#include <iostream>
#include <chrono>
#include <thread>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    JAKAZuRobot demo;

    demo.login_in("192.168.1.100");
    //sleep(2);
    demo.power_on();
    //sleep(2)
    demo.enable_robot();
    //sleep(2);

    CartesianPose tcp_pos;
    int ret;
    char ver[100];
    demo.get_tcp_position(&tcp_pos);
    demo.get_sdk_version(ver);

    std::cout << "SDKバージョン: " << ver << std::endl;
    std::cout << "tcp位置:\n x: " << tcp_pos.tran.x << "y: " << tcp_pos.tran.y << "z: " << tcp_pos.tran.z << std::endl;

    std::cout << "tcp位置:\n rx: " << tcp_pos.rpy.rx << "ry: " << tcp_pos.rpy.ry << "rz: " << tcp_pos.rpy.rz << std::endl;
    auto now = std::chrono::system_clock::now().time_since_epoch();
    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now).count();
    std::cout << "現在の秒数: " << std::fixed << ((double)ms) / 1000.0f << std::endl;
    tcp_pos.tran.y = tcp_pos.tran.y + 60.0;
    ret = demo.linear_move(&tcp_pos, ABS, TRUE, 10, 10, 1, NULL);
    std::cout << "ret==" << ret << std::endl;
    std::cout << "linear_move 終了!" << std::endl;
    now = std::chrono::system_clock::now().time_since_epoch();

    return a.exec();
}

プログラムのコンパイルと実行

プログラムの編集が完了し保存した後、メニュー[の「Build ]--> [Run qmake]」をクリックして、ビルドに必要な設定ファイルを生成します。qmakeの実行が終了すると、成功またはエラー(ある場合)が表示されます。

その後、[「Build ]--> [Build All Projects」を]クリックしてソースコードをコンパイルし、実行ファイルをリンク生成します。Qt Creatorの下部にあるCompile Outputウィンドウに、コンパイル結果が出力されます。

ビルドが成功した後、Qt Creator左側のツールバーのRunボタンをクリックすると、プログラムを起動して実行できます。本例の実行結果は次のようになります。

Addonとしてロボットコントローラにデプロイする手順

一部のユーザーがSDKによるプログラミングを採用し、コントローラ内で実行して複雑なグラフィカルプログラミング作業を代替できるようにするために、本章ではAddonの方式を用いて、JAKA SDKで作成したアプリケーションをデプロイおよび実行する手順を説明します。現在JAKAのAddon機能はPythonのメインファイルを実行し、デフォルトでPython2.7を使用しています。しかし現行のJAKA SDKはPython3以降でコンパイルされているため、Addon下で直接Python版SDKライブラリを実行すると問題が発生します。したがって、本ドキュメントでは、Addon方式を通じて顧客がC++で作成したSDKアプリケーションを呼び出す方法を主に説明します。対象プラットフォームはLinuxシステムです。

全体の考え方は次の2つのステップに分けられます。

  1. C/C++に基づいてJAKAコントローラ上で動作するユーザープログラムを開発する;

  2. Addonを開発してJAKAコントローラ上で実行し、最終的に上記SDKベースのユーザー作業プログラムを呼び出して実行します。

環境準備

全プロセスでは、ユーザーは上記の2つのステップをそれぞれ完了するために2つの開発環境を準備する必要があります。

  1. SDKベースのユーザープログラム開発環境;

  2. JAKA Addon開発環境。

SDKベースのユーザープログラム開発環境

この部分は「++3.2 Linux上でCMakeを使用してC++アプリケーションを作成++」の章の説明過程を参照して準備してください。

Addon環境の準備

まずJAKA Addon開発用のデモ(以下のリンクからダウンロード可能)を用意し、解凍すると次のディレクトリおよびファイルが含まれています。中でも赤枠で示した2つのファイルが最も重要で、Addon_Demo.pyはPythonのメインプログラムであり、Addon実行時のエントリーポイントとなります。Addon_Demo_config.iniはAddon設定ファイルで、このAddonに関するいくつかの設定項目が含まれています。

Addonの詳細な説明は、JAKAドキュメントセンターの関連ページ(https://www.jaka.com/docs/guide/addOn/1.2-AboutDev.html)open in new windowを参照してください。

開発とデプロイ

以下では、Linux上でJAKA SDK C++の開発環境をデプロイする方法を示します。この開発デプロイにはCMakeツールを使用する必要があります。読者は自身でダウンロード、インストール、設定を行ってください。以下の説明では、読者がすでに設定を完了し、ある程度の開発知識を持っていることを前提としています。

ユーザープログラムの作成

ユーザー作業プログラムの作成については「++_3.2 Linux上でCMakeを使用してC++_アプリケーションを作成++」の章に記載された手順を参考にして、ロボットコントローラ環境下で実行可能なプログラムを作成してください。この例では、ユーザーが開発したジョブプログラムの実行可能ファイルは demo であると仮定します。

PythonでC++プログラムを実行する

この時点で、読者はAddonのPythonメインプログラム内で、C++の実行可能プログラムを呼び出すPythonコードを記述する必要があります。以下はユーザーが呼び出しを実現するための2つの方法です(注意:コントローラのシステム環境でのデフォルトのPython実行バージョンはPython 2.7です)。

  1. subprocess サブプロセスモジュールによる実行
import subprocess
import os
if __name__ == '__main__':
    # 方法 1
    args = ['./build/demo']
    result = subprocess.call(args)   # python2
  1. osモジュールによる実行
import subprocess
import os
if __name__ == '__main__':
    # 方法 2
    args = ['./build/demo']
    os.system('./build/demo')

以上で、JAKAのAddonフレームワークを通じてSDKプログラムを実行する例です。ここで ./build/demo は、ユーザーが開発したジョブプログラムの実行可能ファイルが開発したAddon内にあるパスを指します。

Addon方式でユーザープログラムを実行する

ユーザーはAddonを作成した後、プロジェクトをtar.gz形式にパッケージ化し、Addonソフトウェアパッケージを生成する必要があります。その後、JAKA Appソフトウェアを開き、ユーザーは[[設定]]-->[[システム設定]]-->[[付属プログラム]から付属]プログラム管理画面に入り、このAddonパッケージをアップロードするとインストールが完了します。インストール完了後、ユーザーはその画面でAddonの起動や停止を制御できます。

下図の通りです。

ローカルディレクトリ内のパッケージ化済みAddonパッケージを選択し、ファイルのアップロードが完了するまで待ちます。

状態列の切り替えボタンを使ってこのAddonをオンまたはオフにします。

注意事項

  1. SDKを基にユーザーアプリケーションを開発する際は、現在の制御キャビネットのシステムアーキテクチャに注意する必要があります。JAKAコントローラはDebian Linuxをベースとしており、x86およびx86_64の2つの構成が存在する可能性があります。具体的にはJAKA Appでコントローラに接続し、コントローラのバージョンのサフィックスを確認することで取得できます。

  2. プログラムはコントローラ上で動作するため、CPU、メモリ、ディスク容量などのリソース消費を適切に計画し、ロボット制御システムへの影響を避ける必要があります。

最終更新日: