RoboDKは、クーカのKRC3およびKRC4コントローラーを含めた、KRC2以降すべてのクーカロボットコントローラーをサポートしています。このドキュメンテーションはKRC4コントローラに基づいています。KRC4ロボットコントローラーは、Microsoft Embedded Windows 7オペレーティングシステムを実行します。KRC2以前のコントローラーなどはWindows 95を実行します。ロボットティーチペンダントは「HMI」を示します。これはKUKAがWindowsで実行するために開発したプログラムであり、ロボットユーザーがロボットを操作するために使用するインターフェイスです。
以下の項目では、クーカロボットティーチペンダントを使用してRoboDKで新しいプログラムを準備し、ロボットに転送する一般的な操作を示します。
以下の手順を辿って、プログラムをUSBディスクからクーカKRC4ロボットコントローラーに読み込みます。
1.ロボットコントローラーにUSBディスクを挿入してください(ティーチペンダントの接続を使用するよりも早いです)。
2.USBディスクが表示されない場合は、管理者モードで入る必要があります
3.USBディスクからファイルを選択してください
4.編集➔コピーを選択
5.KRCユニットのフォルダを選択します
6.編集➔貼り付けを選択


KUKA KRCロボットコントローラー用のロボットプログラムを生成する際、座標系($BASE)とツール($TOOL)は、RoboDKで入力したものと同じ座標として、または番号付きの座標系とツールとして、それぞれ定義することができます。
デフォルトでは、RoboDKはツールと座標系の完全なポーズ(XYZABCの値)を、RoboDKで入力したのと同じ形式でエクスポートします。以下のコードは、RoboDKがKUKA SRCロボットプログラム用に生成する内容の例を示しています:
; ---- Setting tool (TCP) ----------
; TOOL_DATA[3]={FRAME: X 116.058,Y 0.0,Z 219.481,A 0.0,B 60.0,C 0.0}
$TOOL = {FRAME: X 116.058,Y 0.0,Z 219.481,A 0.0,B 60.0,C 0.0}
; $TOOL=TOOL_DATA[3]
; ----------------------------------
; ---- Setting reference (Base) ----
; BASE_DATA[1]={FRAME: X 640.289,Y -290.0,Z 0.0,A 90.0,B 0.0,C 0.0}
$BASE = {FRAME: X 640.289,Y -290.0,Z 0.0,A 90.0,B 0.0,C 0.0}
; $BASE = BASE_DATA[1]
; ----------------------------------
一方、ツール($TOOL変数)と座標系($BASE変数)を番号付きのツールと参照系にリンクさせたい場合は、ポストプロセッサー内の以下の変数を変更できます:
1.FRAME_INDEX:この変数をTrueに設定すると、座標系を番号付きのベース参照系にリンクできます。以下の画像のように、RoboDKステーション内で参照系に番号が付いていることを確認してください。
2.TOOL_INDEX:この変数をTrueに設定すると、ツールを番号付きのツールにリンクできます。以下の画像のように、RoboDKステーション内でツールに番号が付いていることを確認してください。

次の手順に従って、KUKA KRC4コントローラーでロボットプログラムを開始させます。
1.KRCメモリーユニットからプログラムを選択
2.画面上の選択ボタンを選択してください
3.「R」ボタン(画面の上)を選択して、プログラムをリセットします
4.ティーチペンダントの緑色の「再生」ボタンを選択してプログラムが開始します


次の手順は、ロボットコントローラーからロボットツール(TCP)を作成または変更します(クーカKRCロボットプログラミングでは$TOOLとも呼ばれます):
1.メニュー➔起動➔調整(Calibrate)➔ツールを選択
2.ツールを選択し、TCPのX、Y、Z位置を編集または取得します。


次の手順は、ロボットからロボットの関節を取得できます:
1.メニュー➔表示➔実際の位置(Actual position)を選択
2.関節モードを選択し、左側の列を使用してロボットの関節を取得します


一部のメニューにアクセスするには、「管理者」権限が必要です。次の手順で、管理者モードで入れます:
1.メニュー➔構成➔ユーザー・グループを選択
2.管理者(またはその他)を選択します。
3.必要に応じてパスワードを入力してください(デフォルトのパスワードは「kuka」です)


ロボットドライバーは、オフラインプログラミング(プログラムを生成し、ロボットに転送して実行する方法)に代わる手段を提供します。ロボットドライバーを使用すると、シミュレーションをロボット上で直接実行できます(オンラインプログラミング)。詳細については、ロボットドライバーのセクションをご覧ください。
RoboDKとKUKAコントローラーの間に接続を確立することで、コンピューターからロボットを自動的に動かすことができます。これにより、オンラインプログラミングやデバッグのためにRoboDKのRun on robotオプションを使用できます。接続は、標準的なイーサネット接続(TCP/IP)を介して確立できます。
最新バージョンのRoboDKを使用していない場合、レガシードライバー(KUKAVARPROXYプロジェクトをベースにしたapikuka)を使用している可能性があります。現行のドライバーを使用するには、Connection to RobotウィンドウのMore optionsセクションでkukabridgeドライバーが選択されていることを確認してください。

KUKA用のRoboDKドライバーを設定するには、次の手順に従います:
1.最新のC3 Bridgeインストーラーファイル(c3setup実行ファイル)をこちらのリンクから取得します。
2.KUKA HMIを使用して、c3setup.exeインストーラーファイルをコントローラーのデスクトップまたは制御システムのフォルダーにコピーします。
3.マウスを接続します(任意ですが、推奨されます)。USBデバイスをティーチペンダントまたはコントローラーに接続できます(再起動は不要です)。あるいは、リモートデスクトップ接続を確立することもできます。これらの手順は、ティーチペンダントのタッチスクリーンと仮想キーボードを使用しても実行できます。
4.KUKA HMIアプリケーションを使用すると、画面左上のKUKAボタンでメインメニューを開くことができます:
a.KUKA→Configuration→User group→Expertを選択(パスワード:kuka)
b.KUKA→Start-up→Service→Minimize HMI(Windows画面が表示されます)
5.先ほどコピーしたc3setup-X.Y.Z.exe(X.Y.ZはKukabridgeのリリースバージョン、例:1.7.1)ファイルを見つけて実行します。インストーラーの指示に従ってください。
6.TCP/UDP通信用にポート7000を許可します(ポート7000が使用中の場合は別のポートを使用してください。以下のメモを参照)(この手順はKUKA KRC2コントローラーでは不要です):
a.HMIを復元します。
b.KUKA→Start-up→Network configuration→Advanced
c.NAT→Add port→Port number 7000
d.許可するプロトコルを設定します:tcp/udp
7.デスクトップのショートカットまたはスタートメニューの項目からC3 Bridge Serverを起動します(インストールの最終手順でRun C3 Bridge Serverを選択した場合は、この手順を省略できます)。
8.システム起動時にC3 Bridge Serverを自動的に開始するには、デスクトップのアプリケーションショートカットをスタートメニューのStartupフォルダーにコピーします。
9.Using the KUKA HMI application it is possible to open the main menu using the KUKA button 
a.
b.
c.



これでC3 Bridge Serverの準備が整いました。このプログラムは実行したままにしておくことができます。このサーバーを使用すると、KUKA制御システムとリモートPCの間でグローバル変数の値をやり取りしたり、KRLプログラムのダウンロード/アップロードを行ったり、KRLプログラムの実行を制御したりすることができます。
制御システムのさらなる設定は、2つの方法で行うことができます:kukabridgeドライバーのインタラクティブモードを使用した自動設定(KRC4のみ)と、KUKA HMIでロボット制御システムのファイルを編集する手動設定です。両方の方法を見ていきましょう。
C3 Bridge Serverは、その設定をWindowsレジストリに保存します。ネットワークポートを変更するには、次の手順に従います:
1.C3 Bridge Serverを終了します。
2.レジストリエディターを開き、HKEY_CURRENT_USER\SOFTWARE\C3 Bridge Interfaceに移動します。
3.NetworkTcpPortキーの値を7000以外の値(例えば7001)に変更します。
4.C3 Bridge Serverを再度起動し、前のセクションの手順6(適切なポートへのアクセスを許可する)を繰り返します。
新しいバージョンのC3 Bridge Server(1.7.1以降)は、コマンドラインオプションに対応しています。特に、-tcpPortパラメーターを指定してアプリケーションを実行することで、サーバーのポートを変更できます。例:
c3bridge.exe -tcpPort 7001
フォルダーC:\RoboDK\Library\Scripts内のスクリプトKUKA_Auto_Configuration.pyを使用すると、KUKA制御システムの自動設定を実行できます。この場合、現在のRoboDKステーションには、Connection to Robotウィンドウで正しいIPアドレスとポートが設定された少なくとも1台のKUKAロボットが含まれている必要があります。このスクリプトは、メニューのTools→Run Scriptから、またはShift+Sのホットキーで呼び出すことができます。

前提条件:RoboDKバージョン5.5.2以降、Windowsオペレーティングシステム、インストールパスC:\RoboDK。
1.START→All programs→Accessories→Command Prompt、またはSTART→Run→cmdでコマンドシェルを開きます。
2.C:\RoboDK\binにディレクトリを変更し、次のコマンドを実行してkukabridge.exeを起動します:
c:
cd C:\RoboDK\bin
..\api\Robot\kukabridge.exe
1.これで、KUKA Bridge Driverがインタラクティブモードで実行されるようになりました。
2.CONNECT <ロボットのIPアドレス> <ポート> <ロボットの軸数>と入力して、制御システムへの接続を確立します。例:
CONNECT 172.1.1.10 7000 6
1.成功すると、次のような出力が表示されます:
SMS:Connecting
Connected
SMS:Working...
SMS:Ready
1.CJNTコマンドを入力して、現在のロボットの関節位置を要求します:
CJNT
SMS:Working...
JNTS 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
SMS:Ready
1.CONFIGURE FORCEコマンドで自動設定を実行します:
CONFIGURE FORCE
SMS:Working...
Requesting robot program state
Current robot program state is #P_FREE
Reading current configuration ($config.dat)
Read complete, updating configuration
Adding definition of variable COM_ACTION
Adding definition of variable COM_ACTCNT
Adding definition of variable COM_ROUNDM
Adding definition of variable COM_VALUE1
Adding definition of variable COM_VALUE2
Adding definition of variable COM_VALUE3
Adding definition of variable COM_VALUE4
Adding definition of variable COM_E6AXIS
Adding definition of variable COM_FRAME
Adding definition of variable COM_POS
Adding definition of variable COM_E6POS
Configuration lines have been updated: 11 added, 0 removed, 0 updated, 659 total
Checking existence of old backup file ($config.bak)
Old backup file exists, deleting it
Creating new backup file ($config.bak)
Backup completed, writing new configuration
New configuration was successfully written
Checking existence of program file (RoboDKsync543.src)
Program file does not exists
Writing program file to robot system
Configuration is complete
SMS:Ready

1.これでロボットの準備が整いました。あとはRoboDKsyncVER.srcプログラム(VERは同期プログラムのバージョン、例:543)を選択して実行するだけです。
次の手順は、ロボットの動作を処理するメインプログラムを手動で設定するためのものです:
1.次のグローバル変数の宣言を追加します:これを行うには、KUKA HMI経由でファイル「KRC:\R1\SYSTEM\$CONFIG.DAT」を見つけて編集します。フォルダー「KRC:\R1\」には、Windowsのパス「C:\KRC\ROBOTER\KRC\」からC:\ドライブ経由でアクセスすることもできます。
INT COM_ACTION=0
INT COM_ACTCNT=0
REAL COM_ROUNDM=0
REAL COM_VALUE1=0
REAL COM_VALUE2=0
REAL COM_VALUE3=0
REAL COM_VALUE4=0
DECL E6AXIS COM_E6AXIS
DECL FRAME COM_FRAME
DECL POS COM_POS
DECL E6POS COM_E6POS
1.KUKAのSRCプログラムRoboDKsyncVER.srcをフォルダーKRC\R1\PROGRAMにコピーします。ファイル名のVERという接尾辞は、プログラムのバージョンを示します(例:RoboDKsync543.src)。
2.RoboDKsyncVER.srcプログラムを手動で起動し、ロボットがコンピューターからのコマンドを待ち受けるようにします。
RoboDKsyncVER.srcプログラムが実行されていない場合でも、ロボットコントローラーでC3 Bridge Serverが実行されていれば、RoboDKはロボットの関節を読み取ることができます。
ロボットドライバーは、オフラインプログラミング(プログラムが生成され、ロボットに転送されて実行される事)の代替手段を提供します。ロボットドライバーを使用すると、直接ロボットでシミュレーションが実行できます(オンラインプログラミング)。詳細については、ロボットドライバー項目へ。
RoboDKとクーカロボットの間に接続を成立して、RoboDKを使用している接続されたPCからロボットを自動的に操作できます。これにより、オンラインプログラミングとデバッグ用にRoboDKのロボットで実行機能が使用できます。接続は、通常のイーサネット接続(TCP / IP)を介して成立できます。
以下の手順を辿って、クーカ用のRoboDKドライバーを設置します:
3.マウスを接続してください(任意ですが、強くお勧めします)。
USBデバイスをティーチペンダントまたはコントローラーに接続できます(再起動は必要ありません)。または、リモートデスクトップ接続を成立させることもできます。
これらの手順は、ティーチペンダントのタッチスクリーンと仮想キーボードを使用して実行することもできます。
4.クーカHMIアプリケーションを使用で、クーカボタン
a.
b.
5.デスクトップ(またはコントローラーPCのどこかに)にKUKAVARPROXYフォルダーをコピー
6.TCP/UDP通信の為にポート7000を許可します(この手順はKUKA KRC2コントローラーでは不要です):
a.HMIを選択します。
b.
c.NAT➔ポートを追加➔ポート番号7000
d.許可されたプロトコルを設定:tcp/udp
7.ロボットコントローラーでプログラムKUKAVARPROXY.EXEを起動します(Windowsで実行)。
8.これらの手順により、コントローラーの再起動時に自動でドライバーを起動します(推奨):
a.ファイルKUKAVARPROXY.EXEのショートカットを作成します
b.Windowsのスタート➔全てのプログラム➔スタートアップを右クリック➔開くを選択
c.ショートカットをスタートアップフォルダに貼り付けます
これでKUKAVARPROXYサーバーの準備が整いました。このプログラムは実行したままにできます。このサーバーで、クーカコントローラーからリモートPCにグローバル変数の交換ができます。
次の手順は、ロボットの動きを処理するメインプログラムを設定する為です:
1.次のグローバル変数の定義を追加してください:
これを行うには、「KRC\R1\STEU\$config.dat」ファイル(またはKRC2コントローラーの場合は「KRC\R1\System\$config.dat」)を見つけて編集します。フォルダ「KRC\R1\」は、Windowsパス「C:\KRC\ROBOTER\KRC\」でC:\ドライブからアクセスすることもできます。
INT COM_ACTION = 0
INT COM_ACTCNT = 0
REAL COM_ROUNDM = 0
REAL COM_VALUE1 = 0
REAL COM_VALUE2 = 0
REAL COM_VALUE3 = 0
REAL COM_VALUE4 = 0
DECL E6AXIS COM_E6AXIS
DECL FRAME COM_FRAME
DECL POS COM_POS
2.提供されたSRCプログラム(RoboDKsynch.src)をフォルダーKRC\R1にコピーしてください。
3.RoboDKsynch.srcプログラムを手動で起動させて、PCからの移動コマンドに応答するサーバーのようにロボットを動かします。
RoboDKsynch.srcプログラムが実行されていなくても、ロボットコントローラでプログラムKUKAVARPROXYが実行されていれば、RoboDKはいつでもロボットの関節を読み取ることができます。
このセクションでは、RoboDKでKUKAロボットドライバーを使用する際に発生する可能性のある問題を特定、診断、修正する方法について説明します。
ポート7000の問題をトラブルシューティングするには、KUKAコントローラーでExpertユーザーグループに入る必要があります。
1.KUKA→Configuration→User group→Expertを選択(パスワード:kuka)
2.KUKA→Start-up→Service→Minimize HMI(Windows画面が表示されます)
3.START→All programs→Accessories→Command Prompt、またはSTART→Run→cmdでコマンドシェルを開きます。
4.次のコマンドを使用して、すべての接続とリスニングポートの一覧を取得します:
netstat -a -b -n -o -p TCP | findstr :7000
1.応答に何も文字列が含まれていない場合、ポート7000は空いており、ドライバーの動作に使用できます。以降の手順はスキップできます。
2.手順4のコマンドへの応答が次のようであった場合:
TCP 0.0.0.0:7000 0.0.0.0:0 LISTENING 1840
1.上記の行の最後の数字がプロセスID(PID)です。これを使用して、次のコマンドでプロセス名に関する情報を取得できます(1840の代わりにご自身の番号を使用してください):
tasklist /fi "PID eq 1840"
1.tasklistコマンドの結果には、ポート7000でリスニングしているプロセスに関する情報が含まれます。出力例:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
c3bridge.exe 1840 Console 1 5,912 K
1.ポートがKukavarProxy.exeまたはc3bridge.exeプロセスによって使用されている場合、システムは選択したドライバーで動作する準備が整っています。ポートが他のアプリケーションによって使用されている場合は、そのアプリケーションを終了するか、C3 Bridge Serverのポート番号を変更する必要があります。
KUKAVARPROXYを使用していて、C3 Bridge Serverにアップグレードしたい場合、特別なアンインストール手順は必要ありません。KUKA HMIを最小化し、KUKAVARPROXYを閉じ、システム起動時に自動的に読み込まれないようにしてください(START→All programs→Startupにショートカットがないこと)。KUKAVARPROXYの実行ファイルを削除する必要はありません。
制御システムの自動設定または手動設定の手順が失敗することがあります。多くの場合、これは$config.datファイルを上書きできないことが原因です。このファイルは、上級権限(エキスパート)を持つユーザーのみが編集できます。さらに、ロボットとサブミットのすべてのインタープリターを停止しておく必要があります。ロボットインタープリターを停止するには、選択されているプログラムをキャンセルするか、制御システムを読み込んだばかりの場合はプログラムを選択しないようにします。サブミットインタープリターをキャンセルするには、以下の図に示すように、KRC2システムとKRC4システムそれぞれについてHMIを使用します:
すべてのインタープリターを停止した後も$config.datファイルがロックされている場合は、ロボット制御システムのソフトウェア部分の実行を完全に停止することができます。KRC2システムでは、ステータスインジケーター(S I R)の隣にある四角い領域をクリックし、Exitボタンをクリックします:
KRC4システムでは、トレイ領域にある緑色のロボットアイコンをクリックし、Stop KRCを選択します:
制御ソフトウェアを停止した後、ファイルC:\KRC\ROBOTER\KRC\R1\System\$config.datを任意のテキストエディターで編集できます。変更を適用するには、オペレーティングシステムを再起動してください。
ターンテーブルなどの外部軸がある場合でも、KUKAロボットコントローラーでドライバーとポストプロセッサーを使用できるはずです。ロボットコントローラーにすでに定義されている、番号付きの座標系または正しいマシン定義を持つ座標系を使用することをお勧めします。
KUKAロボットコントローラーの以下のファイルは、KUKAシステムがどのように構築されているかを理解するのに役立ちます:
1.KRC\R1\System\$config.dat
2.KRC\R1\System\bas.src
3.KRC\R1\Mada\$machine.dat
ターンテーブルをお持ちの場合、ターンテーブルの原点の位置は、config.datファイルのMACHINE_DEF変数で定義されている必要があります。システムを設置した担当者は、BAS関数に基づいて同期されたターンテーブルを使用してプログラムを生成する例を提供しているはずです。
例えば、SRCファイル内でex_BASEフラグと特定のインデックス(インデックス9など)を使用してBAS関数を呼び出す場合:
BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
BAS(#ex_BASE,9)
これは、MACHINE_FRAME_DATのインデックス9を使用したいことを意味します。また、コントローラーがデフォルトでどのマシンインデックス(MACH_IDX)を参照しているかを確認するために、BASおよびEX_BASEの定義も確認する必要があります。SRCファイル内でBAS関数を呼び出す直前に定義されるBASE_DATA配列は、ターンテーブルに取り付けられた治具のオフセットにすぎない場合があります。
ロボットアームと同期したターンテーブルをお持ちの場合、ポストプロセッサーまたはドライバーで$BASE変数を手動で変更し、ターンテーブルの原点に設定する必要がある場合があります。
例えば、BASE_DATAのインデックス9が利用可能な場合、ドライバーで次のコードを使用する必要があります。
;--------
; Replace this the $BASE definition by the following 2 lines
; to make the KUKA RoboDKSynch driver work with external axes:
; $BASE = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0} ; Comment this line
BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
BAS(#ex_BASE,9)
; the BAS ex_BASE function links to a fixed MACHINE_DEF index
; visible in the BAS function
; The previous two lines are equivalent to the following,
; if the BAS function uses index 2 for the Machine definition
; BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
; $BASE=EK(MACHINE_DEF[2].ROOT,MACHINE_DEF[2].MECH_TYPE,BASE_DATA[9])
;--------
$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)
ポストプロセッサーでは、ターンテーブルと治具の間のオフセットを考慮したい場合、ポストプロセッサーのsetFrame関数内の前の行をこの$BASE定義に置き換えることができます:
$BASE=EK(MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, {%s})' % self.pose_2_str(pose)
あるいは、ドライバーを使用する場合は、以下に説明する手順に従って座標系を分離することもできます(そのため、RoboDK内で外部軸の運動学を完全に一致させる必要はありません)。
例えば、RoboDKドライバーをデフォルトで使用できるようにするには、ロボットコントローラーで定義された外部軸の運動学が、RoboDKで作成された運動学と一致している必要があります。また、ターンテーブルをお持ちの場合、ターンテーブルのルートポイントは、RoboDKで定義されたターンテーブルの位置と一致している必要があります。
既知の座標系を使用してドライバーを使用するには、次の手順に従います:
1.Tools→OptionsのDriversタブを選択します。
2.Provide Cartesian coordinates with respect to the referenceオプションをオンにします。

1.RoboDKsync.srcプログラムファイルの$BASE変数を、使用したい座標系に置き換えます。
例えば、ベース参照系番号5を使用したい場合、RoboDKsync.srcファイルは次のようになります(最初の行はコメントアウトされており、25行目付近にあります):
; $BASE = {FRAME: X 0,Y 0,Z 0,A 0,B 0,C 0}
$BASE = BASE_DATA[5]
この座標系はKUKAロボットコントローラー内であらかじめ定義されている必要があり、RoboDKはこの値を上書きしません。
RoboDKを使用すると、KUKAのAbsolute Accuracyオプションによってすでにキャリブレーションが行われているKUKAロボットをキャリブレーションできます。ただし、KUKAロボットコントローラーでこのオプションを無効にする必要があります。Absolute AccuracyオプションによってすでにキャリブレーションされているKUKAロボットをキャリブレーションする際は、RoboDKでキャリブレーションできるように、このオプションを無効にすることが重要です。
KUKAのAbsolute Accuracyを無効にするには、変数DEACTIVATE_ABS_ACCURをTRUEに設定する必要があります。この変数は、ファイルKRC:\STEU\MADA\$custom.dat(73行目付近)にあります。
KUKAのAbsolute Accuracyオプションが正しく無効化されていることを確認するには、ロボットを既知の位置に移動させ(例えば、実機とRoboDK内の両方でロボットの軸をホームポジションに移動させ)、ロボットコントローラーに表示されるカルテシアン位置がRoboDKに表示されるカルテシアン位置と一致していることを確認します。