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

Python言語

JAKA約55分

Python言語

本書では、JAKA SDK(Python)で定義されているデータ型とAPIについて説明します。これは主に、Pythonを使用して仮想または実際のコントローラと通信するロボットアプリケーションを作成するソフトウェア開発者を対象としています。JAKAロボットコントローラのアプリケーションを理解する必要があるユーザーにも有用です。

ドキュメントの注意事項

  • 実行環境:Linux Python3.5以上 32ビット、Windows Python3.7以上 64ビット。
  • 使用されるパラメータの単位:ミリメートル(mm)、ラジアン(rad)。
  • 特に明記がない限り、コード例ではロボットがすでに起動し、通電およびイネーブル状態であると仮定します。
  • ドキュメント内のすべてのコード例は、ロボットの作業空間内に干渉がないことを前提としています。
  • ドキュメント内の例では、ユーザーのPythonインタプリタがすでにjkrcモジュールを見つけられる状態であると仮定しています。

Linuxでの使用

Linuxでは、libjakaAPI.soとjkrc.soを同じフォルダに配置し、現在のフォルダパスを環境変数に追加します。例:export LD_LIBRARY_PATH=/xx/xx/

Windowsでの使用

Windowsでは、jkrcおよびjakaAPI.dllを同じフォルダに配置する必要があります。よくある問題についてはFAQを参照してください。

インターフェース一覧

ロボットアームの基礎

ロボットのインスタンス化

ロボットオブジェクトをインスタンス化します。

RC(ip)
  • パラメータの説明
    • ip: ロボットのIPアドレス。正しいIPアドレスでインスタンス化されたオブジェクトのみがロボットを制御できます。
  • 戻り値
    • 成功:ロボットオブジェクトを返します
    • 失敗:作成されたオブジェクトは破棄されます
  • コード例
import jkrc
robot = jkrc.RC("192.168.2.64") #ロボットオブジェクトを返す

ロボットにログイン

ロボットコントローラーに接続

注意:

  • V3コントローラは、ロボットコントローラとの接続にgRPCを優先して使用することを推奨します
  • V3.2.10以上のコントローラバージョンでは、SDKアカウントのユーザー名とパスワードによる認証が必要です
login()
login(use_grpc) #V3コントローラはgRPCの使用を推奨
login(use_grpc, username, password) #V3.2.10以上のコントローラではSDKアカウント認証が必要です
  • パラメータの説明
    • use_grpc: ロボットコントローラとの接続にgRPCを使用するかどうか。未指定の場合、デフォルト値はfalseでTCPインターフェースを使用します。
    • username: SDKアカウントのユーザー名。デフォルトは空です。
    • password: SDKアカウントのパスワード。デフォルトは空です。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc
robot = jkrc.RC("192.168.2.64") #ロボットオブジェクトを返す
robot.login(1, "username", "password")       #ログイン
robot.power_on()    #通電
robot.logout()      #ログアウト

ロボットをログアウト

コントローラー接続を切断

logout()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc
robot = jkrc.RC("192.168.2.64") #ロボットオブジェクトを返す
robot.login(1)  #ログイン
robot.logout() #ログアウト

ロボットの電源を入れる

ロボットの電源を入れると、実際のロボットは約8秒ほどの遅延があります。

power_on()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc
robot = jkrc.RC("192.168.2.64") #ロボットオブジェクトを返す
robot.login(1)       #ログイン
robot.power_on()    #通電
robot.logout()      #ログアウト

ロボットの電源を切る

ロボットの電源を切る

power_off()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットコントローラ

ロボットコントローラ

shut_down()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットを有効化する

ロボットを有効化する

enable_robot()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc
robot = jkrc.RC("192.168.2.64")#ロボットオブジェクトを返す
robot.login(1)  #ログイン
robot.enable_robot()#
robot.logout() #ログアウト

ロボットを無効化する

ロボットを無効化する

disable_robot()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

SDKバージョン番号を照会

SDKバージョン番号を取得

get_sdk_version()
  • 戻り値
    • 成功:(0,version)
    • 失敗:その他
  • コード例
import jkrc
robot = jkrc.RC("192.168.2.64")
robot.login(1)
ret = robot.get_sdk_version()
print("SDKバージョンは:", ret[1])
robot.logout()  #ログアウト

コントローラーIPを取得する

コントローラーIPを取得する

get_controller_ip ()
  • 戻り値
    • 成功:(0, ip_list)、ip_list:コントローラIPリスト。コントローラ名が具体的な値である場合、その名前に対応するコントローラのIPアドレスを返します。コントローラ名が空の場合、同一ネットワーク内のすべてのコントローラIPアドレスを返します。
    • 失敗:その他

ロボットをドラッグモードに入れるまたは終了する

ロボットをドラッグモードに入れるまたは終了する

drag_mode_enable(enable)
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc    
import time    

robot = jkrc.RC("192.168.220.155")    
robot.login(1)    
robot.power_on()    
robot.enable_robot()
robot.drag_mode_enable(True)
time.sleep(1)
ret = robot.is_in_drag_mode()    
print(ret)    
robot.drag_mode_enable(False)
time.sleep(1)
ret = robot.is_in_drag_mode()    
print(ret)    
robot.logout()

ロボットがドラッグモードになっているかを確認

ロボットがドラッグモードになっているかを確認

is_in_drag_mode()
  • 戻り値
    • 成功:(0,state) state が1の場合、ロボットはドラッグモード中、0の場合は逆
    • 失敗:その他

関節の摩擦補償係数を設定

コントローラーバージョン1.7.2のみに対応 ロボットアーム各軸の摩擦力補償係数を設定する

  • パラメータの説明
    • joint 関節番号 0~5
    • gain  摩擦力補償係数、係数値範囲0〜200、200は摩擦力の200%を補償します
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
set_drag_friction_compensation_gain(joint, gain)

関節の摩擦補償係数を取得

get_drag_friction_compensation_gain()
  • 戻り値
    • 成功:(0,list)、listは6次元のリストで、それぞれ6つの軸を表す
    • 失敗:その他

SDKのデバッグモードを有効にするかを設定

このインターフェースは非推奨です

SDKのデバッグモードを有効にするかを設定

set_debug_mode(mode)
  • パラメータの説明
    • mode TRUEを選択するとデバッグモードが開始され、この時標準出力にデバッグ情報が出力される;FALSEを選択すると無効
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

SDKログパスを設定する

SDKログパスを設定する

set_SDK_filepath(filepath)
  • パラメータの説明
    • filepath:ファイルパス
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットアームの動作

ロボットアームのモーションプランナータイプを設定する

ロボットアームの動作で使用するプランナータイプを設定

set_motion_planner(type)
  • パラメータの説明
    • type:モーションプランナーのタイプ。-1はプランナーを無効にする(デフォルトはTプランナー)、0はTプランナー(速度優先)、1はSプランナー(柔軟性優先)を示す
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

手動モードでロボットを制御して動かす

手動モードでロボットを制御して動かす

jog(aj_num , move_mode, coord_type, jog_vel, pos_cmd)
  • パラメータの説明
    • aj_num:axis_joint_based識別値。関節空間では軸番号を表し、1軸から6軸まではそれぞれ数値0から5に対応する。デカルト空間ではx、y、z、rx、ry、rzがそれぞれ数値0から5に対応する。
    • move_mode:0は絶対運動、1は増分運動、2は連続運動を表す。
    • coord_type:ロボットの運動座標系。ツール座標系、ベース座標系(現在のワールド/ユーザー座標系)または関節空間。
    • jog_vel:指令速度。回転軸または関節運動の単位はrad/s、移動軸の単位はmm/s。速度の正負が運動方向の正負を決定する。
    • pos_cmd:指令位置。回転軸または関節運動の単位はrad、移動軸の単位はmm。move_modeが絶対運動の場合、このパラメータの説明は省略できる。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

      ヒント:

      目標位置に到達する前にjog関数を呼び出す場合、その位置を継続的に送信する必要があります。(コントローラの要件は500ms以内)

  • コード例 関節空間内でのJOG運動
# -*- coding: utf-8 -*-
import time
import jkrc
import math
# 座標系
COORD_BASE  = 0
COORD_JOINT = 1
COORD_TOOL  = 2

# 運動モード
ABS  = 0
INCR = 1

# 関節1~6が順に0~5に対応
robot = jkrc.RC("192.168.220.144")  # ロボットオブジェクトを返します
ret = robot.logout()
ret = robot.login(1, "jaka_sdk", "password")
robot.power_on()                      # 電源オン
robot.enable_robot()

# ===== パラメータ =====
joint_id = 1              
vel = 0.5                 # rad/s
value = math.pi / 6       # 増分目標
period = 0.1              # 100 ms
eps = 0.001               # 到達しきい値

# ===== 現在の関節角の読み取り =====
ret = robot.get_joint_position()
if ret[0] != 0:
    raise RuntimeError("関節位置の取得に失敗しました")

start = ret[1][joint_id]
target = start + value

print("開始 =", start, "目標 =", target)

# ===== jog の継続送信 =====
while True:
    # 現在の関節角度
    ret = robot.get_joint_position()
    cur = ret[1][joint_id]
    print("現在 =", cur, "目標 =", target)
    # jog を送信(同じ目標を継続送信)
    robot.jog(
        aj_num=joint_id,
        move_mode=INCR,
        coord_type=COORD_JOINT,
        jog_vel=vel,
        pos_cmd=value
    )
    # 位置到達の判定
    if abs(target - cur) < eps:
        break
    time.sleep(period)   # 500ms 未満である必要あり

# ===== jog の停止 =====
robot.jog_stop(joint_id)
time.sleep(1)

robot.disable_robot()
robot.power_off()
robot.logout()

ロボットの手動モードでの動作停止を制御

ロボットの手動モードでの動作停止を制御し、JOG動作を停止するために使用

jog_stop(joint_num)
  • パラメータの説明
    • joint_num: num は停止したい関節軸番号を表し、軸番号0~5はそれぞれ関節1~関節6を表します。-1はすべての軸の動作を停止することを意味します。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import time        
import jkrc  

# 座標系  
COORD_BASE  = 0  
COORD_JOINT = 1  
COORD_TOOL  = 2  
#運動モード  
ABS = 0  
INCR= 1  
#関節1~6は順に0~5に対応する  

robot = jkrc.RC("192.168.220.155")#ロボットオブジェクトを返す  
robot.login(1)#ログイン  
robot.power_on() #電源オン  
robot.enable_robot()  
print("move1")  
robot.jog(0,INCR,COORD_JOINT,0.1,1)  
time.sleep(5)#jogは非ブロッキング命令であり、動作中に受信したjog命令は無視される  
print("move2")  
robot.jog(0,INCR,COORD_JOINT,0.1,-1)  
time.sleep(0.5)  
robot.jog_stop(-1)  #0.5秒後に停止
robot.logout()

ロボット関節交換

ロボット関節が目標位置まで動作する

joint_move(joint_pos, move_mode, is_block, speed)
  • パラメータの説明
    • joint_pos: ロボット関節の動作目標位置。
    • move_mode: 0は絶対運動、1は相対運動を意味する
    • is_block:インターフェースをブロッキングにするかどうかを設定。TRUE はブロッキング、FALSE は非ブロッキング。ブロッキングはロボットの動作完了後に戻り値が発生することを意味し、非ブロッキングは呼び出し完了直後に戻り値が発生する。
    • speed: ロボット関節の動作速度、単位:rad/s
    • acc: 関節加速度、デフォルトは 3.5rad/s^2
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import time
import math
import jkrc

# 運動モード
ABS  = 0
INCR = 1

# 関節の目標角度(単位:ラジアン)
joint_pos = [math.pi, math.pi/2, 0, math.pi/4, 0, 0]

# ロボットオブジェクトを返す
robot = jkrc.RC("192.168.220.155")
robot.login(1)         # ログイン
robot.power_on()      # 電源オン
robot.enable_robot()  # ロボットを有効化

print("move1")
robot.joint_move(joint_pos, ABS, True, 0.1)
time.sleep(3)

robot.logout()

ロボット拡張関節動作

ロボット拡張関節動作。関節角加速度および関節動作終点誤差を追加します。

joint_move_extend(joint_pos, move_mode, is_block, speed, acc, tol)
  • パラメータの説明
    • joint_pos: ロボット関節動作の各目標関節角度。
    • move_mode: 動作モードを指定します。0 は絶対動作、1 は増分動作、2 は連続動作を意味します。
    • is_block: ブロッキングインターフェースかどうか。True はブロッキング、False はノンブロッキング。
    • speed: ロボット関節の動作速度、単位:rad/s
    • acc:ロボット関節動作の角加速度。
    • tol:ロボット動作終点誤差。
  • 戻り値
    • 成功:(0, )
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.220.155")  # ロボットオブジェクトを返す  
robot.login(1)  
robot.joint_move_extend(joint_pos=[1, 1, 1, 1, 1, 1],move_mode=0, is_block=True, speed=0.2, acc=1, tol=0.1)  
robot.joint_move_extend(joint_pos=[-1, 1, 1, 1, 1, 0],move_mode=0, is_block=True, speed=0.2, acc=1, tol=0.1)  
robot.logout() #ログアウト

ロボットエンドエフェクタ直線動作

ロボットエンドエフェクタを目標位置まで直線的に動かします。

linear_move(end_pos, move_mode, is_block, speed)
  • パラメータの説明
    • end_pos: ロボットエンドエフェクタの目標位置
    • move_mode: 0 は絶対動作、1 は相対動作を表します。
    • is_block: インターフェースをブロッキングにするかどうかを設定します。TRUE はブロッキング、FALSE はノンブロッキング。ブロッキングはロボットの動作完了後に戻り値が発生することを意味し、非ブロッキングは呼び出し完了直後に戻り値が発生する。
    • speed: ロボット直線動作速度、単位:mm/s、デフォルトは500mm/s
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import time
import jkrc
# 運動モード
ABS  = 0
INCR = 1
# TCPターゲット位置(単位:mm)
tcp_pos = [0, 0, -30, 0, 0, 0]
# ロボットオブジェクトを返す
robot = jkrc.RC("192.168.220.155")
robot.login(1)         # ログイン
robot.power_on()      # 電源オン
robot.enable_robot()  # ロボットを有効化
print("move1")
# ブロッキング、Z軸の負方向に10mm/sで30mm移動
ret = robot.linear_move(tcp_pos, INCR, True, 10)
print(ret[0])
time.sleep(3)
robot.logout()

ヒント:

ロボットのモデルが異なるため、上記の例で入力した姿勢が逆運動学で解けず、-4を返す場合があります。

ロボット拡張エンド直線移動

ロボット拡張エンド直線移動。空間加速度と空間運動終端誤差を追加します。

linear_move_extend(end_pos, move_mode, is_block, speed, acc, tol)
  • パラメータの説明
    • end_pos: ロボットエンドの目標位置。
    • move_mode: 移動モードを指定します。0は絶対移動、1は増分移動です。
    • is_block: ブロッキングインターフェースかどうか。True はブロッキング、False はノンブロッキング。
    • speed: ロボットのデカルト空間における移動速度(単位:mm/s)
    • acc:ロボットのデカルト空間における加速度(単位:mm/s^2)。
    • tol:ロボット動作終点誤差。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボット拡張エンド直線移動

ロボット拡張エンド直線移動。姿勢速度と姿勢加速度を追加します。

linear_move_extend_ori(end_pos, move_mode, is_block, speed, accel, tol, ori_vel, ori_acc)
  • パラメータの説明
    • end_pos: ロボットエンドの目標位置。
    • move_mode: 移動モードを指定します。0は絶対移動、1は増分移動です。
    • is_block: ブロッキングインターフェースかどうか。True はブロッキング、False はノンブロッキング。
    • speed: ロボットのデカルト空間における移動速度(単位:mm/s)
    • acc:ロボットのデカルト空間における加速度(単位:mm/s^2)。
    • tol:ロボット動作終点誤差。
    • ori_vel: 姿勢速度、デフォルト値は3.14rad/s
    • ori_acc: 姿勢加速度、デフォルト値は12.56rad/s2
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットエンド円弧運動

ロボットエンド円弧運動

circular_move (end_pos, mid_pos, move_mode, is_block, speed, acc, tol)
  • パラメータの説明
    • end_pos: ロボットエンドの目標位置。
    • mid_pos: ロボットエンド運動の中間点。
    • move_mode: 動作モードを指定します。0 は絶対動作、1 は増分動作、2 は連続動作を意味します。
    • is_block: ブロッキングインターフェースかどうか。True はブロッキング、False はノンブロッキング。
    • speed: ロボットの直線移動速度(単位:mm/s)
    • acc:ロボットの直線運動角加速度(単位:mm/s^2)
    • tol:ロボット動作終点誤差。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import time
import math
import jkrc

# 運動モード
ABS  = 0
INCR = 1

# 円弧運動目標点(デカルト姿勢、単位:mm / rad)
end_pos = [ -200, 400, 400, -math.pi/2, 0, 0 ]
mid_pos = [ -300, 400, 500, -math.pi/2, 0, 0 ]

# 関節の開始位置(単位:rad)
joint_pos = [ 105.791*math.pi/180,
              63.471*math.pi/180,
              -60.442*math.pi/180,
              176.971*math.pi/180,
              74.515*math.pi/180,
              0 ]

# ロボットオブジェクトを作成
robot = jkrc.RC("192.168.220.155")
robot.login(1)
robot.power_on()
robot.enable_robot()

# まず関節空間の動作を行い、開始点へ移動
robot.joint_move(joint_pos, ABS, True, 1)  # ブロッキング動作、速度 1 rad/s
time.sleep(1)  # 動作完了を確実にする

# 次に円弧運動を行う
robot.circular_move(end_pos=end_pos,
                    mid_pos=mid_pos,
                    move_mode=ABS,
                    is_block=True,
                    speed=20,   # mm/s
                    acc=1,      # 加速度
                    tol=0.1,    # 終点誤差
                    )
time.sleep(1)

robot.logout()

ロボット拡張エンド円弧運動

ロボットエンド円弧運動、回転数設定を追加

circular_move_extend (end_pos, mid_pos, move_mode, is_block, speed, acc, tol, opt_cond, cricle_cnt)
  • パラメータの説明
    • end_pos: ロボットエンドの目標位置。
    • mid_pos: ロボットエンド運動の中間点。
    • move_mode: 動作モードを指定します。0 は絶対動作、1 は増分動作、2 は連続動作を意味します。
    • is_block: ブロッキングインターフェースかどうか。True はブロッキング、False はノンブロッキング。
    • speed: ロボットの直線移動速度(単位:mm/s)
    • acc:ロボット直線運動加速度、単位:mm/s^2
    • tol:ロボット動作終点誤差。
    • opt_cond: プレースホルダー、noneを渡す。
    • circle_cnt: 円弧運動の周回数。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import time
import math
import jkrc

# 運動モード
ABS  = 0
INCR = 1

# 円弧運動目標点(デカルト姿勢、単位:mm / rad)
end_pos = [ -200, 400, 400, -math.pi/2, 0, 0 ]
mid_pos = [ -300, 400, 500, -math.pi/2, 0, 0 ]

# 関節の開始位置(単位:rad)
joint_pos = [ 105.791*math.pi/180,
              63.471*math.pi/180,
              -60.442*math.pi/180,
              176.971*math.pi/180,
              74.515*math.pi/180,
              0 ]

# ロボットオブジェクトを作成
robot = jkrc.RC("192.168.220.155")
robot.login(1)
robot.power_on()
robot.enable_robot()

# まず関節空間の動作を行い、開始点へ移動
robot.joint_move(joint_pos, ABS, True, 1)  # ブロッキング動作、速度 1 rad/s
time.sleep(1)  # 動作完了を確実にする

# 次に円弧運動を行う
robot.circular_move_extend(end_pos=end_pos,
                    mid_pos=mid_pos,
                    move_mode=ABS,
                    is_block=True,
                    speed=20,   # 速度 mm/s
                    acc=1,      # 加速度 mm/s^2
                    tol=0.1,    # 終点誤差
                    opt_cond=None,
                    circle_cnt=1) #1回転
time.sleep(1)

robot.logout()

ロボット拡張エンド円弧運動

ロボットのエンド円弧運動、円弧運動の設定を追加

circular_move_extend_mode(end_pos, mid_pos, move_mode, is_block, speed, accel, tol, option_cond, circle_cnt, circle_mode)
  • パラメータの説明
    • end_pos: ロボットエンドの目標位置。
    • mid_pos: ロボットエンド運動の中間点。
    • move_mode: 動作モードを指定します。0 は絶対動作、1 は増分動作、2 は連続動作を意味します。
    • is_block: ブロッキングインターフェースかどうか。True はブロッキング、False はノンブロッキング。
    • speed: ロボットの直線移動速度(単位:mm/s)
    • acc:ロボット直線運動加速度、単位:mm/s^2
    • tol:ロボット動作終点誤差。
    • opt_cond: プレースホルダー、noneを渡す。
    • circle_cnt: 円弧運動の周回数。
    • circle_mode: ロボットアームの円弧運動モードを指定します。デフォルト値は0で、パラメータの説明は以下の通りです:
      • 0:開始姿勢から終了姿勢までの回転角度が180°未満の軸角で姿勢変化を行う(現在の設定);
      • 1:開始姿勢から終了姿勢までの回転角度が180°を超える軸角で姿勢変化を行う;
      • 2:中間点の姿勢に基づき、180°未満か180°超かを自動選択する;
      • 3:姿勢角度が円弧軸線と常に一致する(現在の完全円運動)。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import time
import math
import jkrc

# 運動モード
ABS  = 0
INCR = 1

# 円弧運動目標点(デカルト姿勢、単位:mm / rad)
end_pos = [ -200, 400, 400, -math.pi/2, 0, 0 ]
mid_pos = [ -300, 400, 500, -math.pi/2, 0, 0 ]

# 関節の開始位置(単位:rad)
joint_pos = [ 105.791*math.pi/180,
              63.471*math.pi/180,
              -60.442*math.pi/180,
              176.971*math.pi/180,
              74.515*math.pi/180,
              0 ]

# ロボットオブジェクトを作成
robot = jkrc.RC("192.168.220.155")
robot.login(1)
robot.power_on()
robot.enable_robot()

# まず関節空間の動作を行い、開始点へ移動
robot.joint_move(joint_pos, ABS, True, 1)  # ブロッキング動作、速度 1 rad/s
time.sleep(1)  # 動作完了を確実にする

# 次に円弧運動を行う
robot.circular_move_extend_mode(end_pos=end_pos,
                    mid_pos=mid_pos,
                    move_mode=ABS,
                    is_block=True,
                    speed=20,   # 速度 mm/s
                    acc=1,      # 加速度 mm/s^2
                    tol=0.1,    # 終点誤差
                    opt_cond=None,
                    circle_cnt=1, #1回転
                    circle_mode=0)
time.sleep(1)

robot.logout()

現在のロボットアームの動作を終了する

どんな状況でもロボットの動作を停止することができます。

motion_abort ()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import time
import jkrc

robot = jkrc.RC("192.168.220.155")  # ロボットオブジェクトを返す
robot.login(1)
robot.power_on()
robot.enable_robot()

print("move1")
# 関節増分運動(非ブロッキング)
robot.joint_move(
    joint_pos=[1, 0, 0, 0, 0, 0],
    move_mode=1,      # INCR
    is_block=False,   # 非ブロッキング
    speed=0.05
)

print("待機")
time.sleep(2)

print("停止")
robot.motion_abort()  # 現在の動作を強制的に中断する

robot.logout()

ロボットの動作が停止しているかを確認する

ロボットの動作が停止しているかを確認する

is_in_pos()
  • 戻り値
    • 成功:(0, state)、stateが1の場合はロボットが停止、0の場合は動作中
    • 失敗:その他

ロボットの動作状態を確認する

ロボットの動作状態を確認する

get_motion_status()
  • 戻り値
    • 成功:(0, data)、
      • motion_line 現在の動作コマンドのID
      • motion_line_sdk 予約パラメータ
      • inpos 現在の動作が完了しているかどうか
      • err_add_line 動作コマンドの追加に失敗(ロボットアームがすでに目標位置にある)
      • queue キュー内で処理待ちの動作コマンド数
      • active_queue キュー内で実行中のコマンド数
      • queue_full コマンドキューが満杯かどうか、0:未満、1:満杯
      • paused ロボットアームが一時停止状態かどうか、0:未停止、1:停止中
      • isOnLimit ロボットアームがソフトリミット状態かどうか、0:正常、1:ソフトリミット到達
      • isInEstop ロボットアームが緊急停止状態かどうか、0:正常、1:緊急停止中
      • isInCollision ロボットアームが衝突状態かどうか、0:正常、1:衝突が発生
    • 失敗:その他

ロボットアームのブロッキング動作タイムアウト時間を設定する

このインターフェースは非推奨です

ロボットアームのブロッキング動作タイムアウト時間を設定します。

set_block_wait_timeout(seconds)
  • パラメータの説明 seconds は0.5より大きくする
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットアームの操作情報の設定と照会

ロボットの状態監視データを取得する

ロボットの状態データ監視情報を取得し、マルチスレッド安全をサポート

get_robot_status ()
  • 戻り値
    • 成功:(0, robotstatus)、robotstatusの長さは24で、robotstatusの返却データの順序は次の通りです:
      • errcode ロボット運転時のエラーコード、0は正常運転、その他は異常
      • inpos ロボット動作が目標位置に到達したかのフラグ、0は未到達、1は到達
      • powered_on ロボットが通電されているかのフラグ、0は未通電、1は通電
      • enabled ロボットが有効化されているかのフラグ、0は未有効化、1は有効化
      • rapidrate ロボット動作倍率
      • protective_stop ロボットが衝突を検出したかどうか、0は検出なし、1は検出あり
      • drag_status ロボットがドラッグ状態にあるかどうか、0はドラッグ状態でない、1はドラッグ状態
      • on_soft_limit ロボットがリミットに達しているかどうか、0はリミット保護が作動していない、1はリミット保護が作動している
      • current_user_id ロボットが現在使用しているユーザー座標系ID
      • current_tool_id ロボットが現在使用しているツール座標系ID
      • dout ロボット制御キャビネットのデジタル出力信号
      • din ロボット制御キャビネットのデジタル入力信号
      • aout ロボット制御キャビネットのアナログ出力信号
      • ain ロボット制御キャビネットのアナログ入力信号
      • tio_dout ロボットエンドツールのデジタル出力信号
      • tio_din ロボットエンドツールのデジタル入力信号
      • tio_ain ロボットエンドツールのアナログ入力信号
      • extio ロボット外部拡張モジュールIO信号
      • cart_position ロボットエンドのデカルト空間位置値
      • joint_position ロボット関節空間位置
      • robot_monitor_data ロボット状態監視データ(SCBのメジャーバージョン番号、SCBのマイナーバージョン番号、コントローラ温度、ロボット平均電圧、ロボット平均電流、ロボット6関節の監視データ(瞬時電流、瞬時電圧、瞬時温度))
      • torq_sensor_monitor_data ロボットトルクセンサー状態監視データ(トルクセンサーIPアドレス、トルクセンサーポート番号、ツール負荷(負荷質量、重心x軸座標、重心y軸座標、重心z軸座標)、トルクセンサー状態、トルクセンサー異常エラーコード、6つのトルクセンサー実際接触力値、6つのトルクセンサー生読取値、6つのトルクセンサー実際接触力値(初期化オプションの変化に影響されない))
      • is_socket_connect sdkとコントローラ接続チャンネルが正常かどうか、0は接続チャンネル異常、1は接続チャンネル正常
      • emergency_stop ロボットが非常停止状態かどうか、0は非常停止が押されていない、1はその逆
      • tio_key ロボットエンドツールボタン [0free];[1point];[2]エンドライトボタン
    • 失敗:その他

ヒント:

ロボットに対応するIOがない場合、“no extio”という文字列が返されます。

# -*- coding: utf-8 -*-
import jkrc  

robot = jkrc.RC("192.168.220.155")  
robot.login(1)  
ret = robot.get_robot_status()  
if ret[0] == 0:  
    print("関節位置は :",ret[1])   
    print(len(ret[1]))  
    for i in range(len(ret[1])):  
        print(ret[1][i])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()

ロボットアーム状態を取得(simple)

ロボットアームの状態を取得

get_robot_status_simple()
  • 戻り値
    • 成功:(0,data)
      • errcode: エラーコード
      • errmsg: エラーメッセージ
      • powered_on: 通電されているかどうか
      • enabled: イネーブル状態かどうか
    • 失敗:その他

現在のロボットの6つの関節角度値を取得(サーボフィードバック)

現在のロボットの6つの関節角度値を取得(サーボフィードバック)

get_actual_joint_position()
  • 戻り値
    • 成功:(0, joint_pos)、joint_posは6つの要素を含むタプル (j1, j2, j3, j4, j5, j6) であり、j1〜j6はそれぞれ関節1から関節6の角度値を表します。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-    
import jkrc  

robot = jkrc.RC("192.168.220.155")# ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.get_actual_joint_position()  
if ret[0] == 0:  
    print("現在の関節位置は :",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()  #ログアウト  

現在のロボットの6つの関節角度値を取得する

現在のロボットの6つの関節角度値を取得する

get_joint_position()
  • 戻り値
    • 成功:(0, joint_pos)、joint_posは6つの要素を含むタプル (j1, j2, j3, j4, j5, j6) であり、j1〜j6はそれぞれ関節1から関節6の角度値を表します。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-    
import jkrc  

robot = jkrc.RC("192.168.220.155")# ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.get_joint_position()  
if ret[0] == 0:  
    print("関節位置は :",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()  #ログアウト  

手動または自動モードを設定

ロボットアームの操作モードを設定します。自動モードでは、安全関連の設定を行うことはできません。手動モードでは、安全な操作を確保するために自動的にインデントモードに入ります。

set_auto_manual_mode(mode|robot_id)
  • パラメータの説明
    • mode モードパラメータ、0:手動モード、1:自動モード
    • robot_id ロボットID、デフォルトは0(任意パラメータ)
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

現在のロボットアーム操作モードを取得

現在のロボットアーム操作モードを取得

get_auto_manual_mode(|robot_id)
  • パラメータの説明
    • robot_id ロボットID、デフォルトは0(任意パラメータ)
  • 戻り値
    • 成功:(0, mode)、mode モードパラメータ、0:手動モード、1:自動モード
    • 失敗:その他

現在設定されているツールの先端の姿勢(サーボフィードバック)を取得する

現在設定されているツールの先端の姿勢(サーボフィードバック)を取得する

get_actual_tcp_position()
  • 戻り値
    • 成功:(0, cartesian_pose)、cartesian_pose は6つの要素 (x, y, z, rx, ry, rz) を含むタプルであり、x, y, z, rx, ry, rz はロボットツール先端の姿勢値を表す
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-         
import jkrc  

robot = jkrc.RC("192.168.220.155")# ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.get_actual_tcp_position()  
if ret[0] == 0:  
    print("現在のTCP位置は :",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()  #ログアウト

現在の設定下でのツールエンドの姿勢を取得する

現在の設定下でのツールエンドの姿勢を取得する

get_tcp_position()
  • 戻り値
    • 成功:(0, cartesian_pose)、cartesian_pose は6つの要素 (x, y, z, rx, ry, rz) を含むタプルであり、x, y, z, rx, ry, rz はロボットツール先端の姿勢値を表す
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-         
import jkrc  

robot = jkrc.RC("192.168.220.155")# ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.get_tcp_position()  
if ret[0] == 0:  
    print("TCP位置は :",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()  #ログアウト

ロボットのDHパラメータを取得

ユーザー座標系情報を取得

get_dh_param()
  • 戻り値

    • 成功:(0, {'alpha': (0.0, 1.5707963, 0.0, 0.0, 1.5707963, -1.5707963), 'a': (0.0, 0.0, 897.0, 744.5, 0.0, 0.0), 'd': (196.5, 0.0, 0.0, -188.35000610351562, 138.5, 120.5), 'joint_homeoff': (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)})
  • DHパラメータ解析

パラメータ名タイプ説明単位
アルファ (α)リンクねじれ角隣接するZ軸間の角度(X軸回りの回転角)ラジアン (rad)
aリンク長さX軸に沿ったリンクの長さ(隣接するZ軸間の共通垂線距離)ミリメートル (mm)
DリンクオフセットZ軸に沿った平行移動距離(隣接するX軸間のオフセット)ミリメートル (mm)
joint_homeoff関節のゼロ位置オフセット関節ゼロ位置のキャリブレーションオフセット量(ロボットアームの原点補正)ラジアン (rad)
* 失敗:その他

ユーザー座標系情報を設定

ユーザー座標系情報を設定

set_user_frame_data(id, user_frame, name)
  • パラメータの説明
    • id:ユーザー座標系ID、選択可能なIDは1から15、0はロボットベース座標系を表す
    • user_frame:ユーザー座標系パラメータの説明 [x, y, z, rx, ry, rz]
    • name:ユーザー座標系の別名
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ユーザー座標系情報を取得

ユーザー座標系情報を取得

get_user_frame_data(id)
  • パラメータの説明
    • id ユーザー座標系IDの照会結果
  • 戻り値
    • 成功:(0, id, tcp)、id:ユーザー座標系ID、選択可能なIDは1から15、0はロボットベース座標系を表す tcp:ユーザー座標系パラメータの説明 [x, y, z, rx, ry, rz]
    • 失敗:その他

現在使用中のユーザー座標系IDを照会

現在使用中のユーザー座標系IDを照会

get_user_frame_id()
  • 戻り値
    • 成功:(0, id)、id値の範囲は0から15、0はロボットベース座標系を表す
    • 失敗:その他

現在使用中のユーザー座標系IDを設定する

現在使用中のユーザー座標系IDを設定する

set_user_frame_id(id)
  • パラメータの説明
    • id:ユーザー座標系ID
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

指定された番号のツール情報を設定する

指定された番号のツール情報を設定する

set_tool_data(id, tcp, name)
  • パラメータの説明
    • id:ツールIDを設定します。選択可能なIDは1から15で、0はエンドフランジを表し、コントローラによって使用されています。
    • tcp:ツール座標系パラメータの説明 [x,y,z,rx,ry,rz]
    • name:ユーザー座標系の別名
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ターゲットツール座標系の情報を問い合わせる

ロボットで使用されているツール情報を問い合わせる

get_tool_data(id)
  • 戻り値
    • 成功:(0, id, tcp)。idの範囲は0から15で、0はエンドフランジを表し、コントローラによって使用されています。ツール座標系パラメータの説明 [x,y,z,rx,ry,rz]
    • 失敗:その他

ロボットが現在使用しているツールIDを問い合わせる

ロボットが現在使用しているツールIDを問い合わせる

get_tool_id()
  • 戻り値
    • 成功:(0, id)。idの範囲は0から15で、0はエンドフランジを表し、コントローラによって使用されています。
    • 失敗:その他

現在使用中のツールIDを設定する

現在使用中のツールIDを設定する

set_tool_id(id)
  • パラメータの説明
    • id:ツール座標系ID
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-  
import time        
import jkrc  
robot = jkrc.RC("192.168.220.155") #ロボットオブジェクトを返す  
robot.login(1)                        #ログイン  
ret = robot.get_tool_data(1)    #ツール座標系データを取得  
if ret[0] == 0:  
    print("the tool data is :",ret)  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
ret = robot.set_tool_data(1,[0,0,1,0,0,0],'test') #ツール座標系データを設定  
print("set tool data ret:",ret)
time.sleep(0.5)  
ret = robot.get_tool_data(1)    #ツール座標系データを取得  
if ret[0] == 0:  
    print("the tool data is :",ret)  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
ret = robot.get_tool_id()     #ツール座標系IDを取得  
print("tool_id",ret)  
robot.set_tool_id(2)          #ツール座標系データを設定  
time.sleep(0.5)    
ret = robot.get_tool_id()     #ツール座標系IDを取得  
print("tool_id",ret)  
robot.logout()  

デジタル出力変数(DO)の値を設定する

set_digital_output(iotype, index, value)
  • パラメータの説明
    • iotype:DOタイプ
    • index:DOインデックス(0から開始)
    • value:DO設定値
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:DO3の値を1に設定
# -*- coding: utf-8 -*-  
import jkrc
IO_CABINET  =0  #制御キャビネットパネルIO
IO_TOOL = 1     #ツールIO
IO_EXTEND = 2   #拡張IO
robot = jkrc.RC("192.168.220.155")
robot.login(1)  
ret = robot.set_analog_output(iotype = IO_CABINET,index = 0,value = 1.55)# 制御キャビネットパネルIO0の出力値を1.55に設定
if ret[0] == 0:  
    print("set_analog_output success, ret = ",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()  #ログアウト

アナログ出力変数(AO)の値を設定

set_analog_output(iotype, index, value)
  • パラメータの説明
    • iotype:AOタイプ
    • index:AOインデックス(0から開始)
    • value:AO設定値
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:AO1の値を1.55に設定
import jkrc
IO_CABINET  =0  #制御キャビネットパネルIO
IO_TOOL = 1     #ツールIO
IO_EXTEND = 2   #拡張IO
robot = jkrc.RC("192.168.2.64")
robot.login(1)  
robot.set_analog_output(iotype = IO_CABINET,index = 0,value = 1.55)#    
robot.logout()  #ログアウト

動作中にデジタル出力変数(DO)の値を設定

set_motion_digital_output(iotype, index, value, rel, distance)
  • パラメータの説明
    • iotype DOタイプ
    • index DOインデックス(0から開始)
    • value DO設定値
    • rel 0: 動作開始点に対して, 1: 動作終点に対して
    • distance 距離。開始点または終点(relパラメータに基づく)からどれだけ離れた位置でDOをトリガーするか
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

動作中にアナログ出力変数(AO)の値を設定

set_motion_analog_output(iotype, index, value, rel, distance)
  • パラメータの説明
    • iotype AOタイプ
    • index AOインデックス(0から開始)
    • value AO設定値
    • rel 0: 動作開始点に対して, 1: 動作終点に対して
    • distance 距離。relパラメータに基づいて、始点または終点からどれだけ離れた位置でAOをトリガーするかを示す
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

デジタル入力(DI)の状態を取得

get_digital_input(iotype, index)
  • パラメータの説明
    • iotype: DIタイプ
    • index: DIインデックス(0から開始)
  • 戻り値
    • 成功:(0, value),value: DI状態の取得結果
    • 失敗:その他

デジタル出力(DO)の状態を取得

get_digital_output(iotype, index)
  • パラメータの説明
    • iotype: DOタイプ
    • index: DOインデックス(0から開始)
  • 戻り値
    • 成功:(0, value),value: DO状態の取得結果
    • 失敗:その他

アナログ入力変数(AI)の値を取得

get_analog_input(iotype, index)
  • パラメータの説明
    • iotype:AIタイプ
    • index:AIインデックス(0から開始)
  • 戻り値
    • 成功:(0, value)、valueはAI状態の取得結果で、浮動小数点数
    • 失敗:その他

アナログ出力変数(AO)の値を取得

get_analog_output(type, index)
  • パラメータの説明
    • type:AOタイプ
    • index:AOインデックス(0から開始)
  • 戻り値
    • 成功:(0, value)、valueはAO状態の取得結果で、浮動小数点数
    • 失敗:その他
  • コード例:AO1の値を取得する
# -*- coding: utf-8 -*-  
import jkrc
IO_CABINET  =0  #制御キャビネットパネルIO
IO_TOOL = 1     #ツールIO
IO_EXTEND = 2   #拡張IO
robot = jkrc.RC("192.168.220.155")
robot.login(1)  
robot.set_analog_output(iotype = IO_CABINET,index = 0,value = 1.55)    
ret = robot.get_analog_output(iotype = IO_CABINET,index = 0)
print("AO値は:",ret[1])
robot.logout()  #ログアウト

拡張IOモジュールが動作中かを確認する

is_extio_running()
  • 戻り値
    • 成功:(0, status)、status が1の場合は拡張IOモジュールを示し、0の場合はその逆を示す
    • 失敗:その他

ロボットの負荷設定

set_payload(mass = m, centroid = [x,y,z])
  • パラメータの説明
    • mass:負荷の質量、単位:kg
    • centroid:負荷の重心座標[x, y ,z]、単位:mm
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc                               # モジュールをインポート
robot = jkrc.RC("192.168.220.155")      # ロボットオブジェクトを返す
robot.login(1)
robot.set_payload(mass= 1, centroid =[0.01,0.02,0.03])
robot.logout() 							# ログアウト

ロボットの負荷データを取得

get_payload()
  • 戻り値
    • 成功:(0, payload)、payloadは長さ2のタプル (mass, (x,y,z)) で、最初の要素は負荷の質量、2番目の要素は重心座標。
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-  
import jkrc  
robot = jkrc.RC("192.168.220.155") #ロボットオブジェクトを返す  
robot.login(1)                       # ログイン  
robot.set_payload(mass= 1,centroid =[0.01,0.02,0.03])   
ret = robot.get_payload()    
if ret[0] == 0:  
    print("負荷は:",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()

TIO V3電圧パラメータを設定

set_tio_vout_param(vout_enable,vout_vol)
  • パラメータの説明
    • vout_enable 電圧イネーブル、0:オフ、1:オン
    • vout_vol 電圧レベル 0:24V 1:12V
  • 戻り値
    • 成功:(0)
    • 失敗:その他

TIO V3電圧パラメータを取得する

get_tio_vout_param(vout_enable ,vout_vol)
  • パラメータの説明
    • vout_enable 電圧イネーブル、0:オフ、1:オン
    • vout_vol 電圧レベル 0:24V 1:12V
  • 戻り値
    • 成功:(0,(vout_enable ,vout_vol))
    • 失敗:その他

TIOセマフォを追加または変更

add_tio_rs_signal(sign_info)
  • パラメータの説明
    • sign_info:dict シグナル属性
      • sig_name シグナル名
      • chn_id チャネルID
      • sig_type シグナルタイプ
      • sig_addr シグナルアドレス
      • value シグナル初期値
      • frequency シグナル周波数
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc  

robot = jkrc.RC("192.168.220.155")  # ロボットオブジェクトを返す  
robot.login(1)                       # ログイン  

ret = robot.add_tio_rs_signal({
    'sig_name': 'signal_tmp',   # シグナル名
    'chn_id': 0,                # RS485 チャネル ID
    'sig_type': 0,              # シグナルタイプ
    'sig_addr': 0x1,            # シグナルアドレス
    'value': 5,                 # シグナル初期値
    'frequency': 5              # シグナル周波数
})

if ret[0] == 0:  
    print("add_tio_rs_signal 成功, ret =", ret[0])  
else:  
    print("何かが発生しました, errcode =", ret[0])   

robot.logout()

TIOセマフォを削除

del_tio_rs_signal(sign_name)
  • パラメータの説明
    • sign_info: str シグナル識別名
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc  

robot = jkrc.RC("192.168.220.155")  # ロボットオブジェクトを返す  
robot.login(1)                       # ログイン  
ret = robot.del_tio_rs_signal('signal_tmp')  
if ret[0] == 0:  
    print("del_tio_rs_signal 成功、ret =", ret[0])  
else:  
    print("何かが発生しました, errcode =", ret[0])   

robot.logout()

TIO RS485 送信コマンド

send_tio_rs_command(chn_id, cmd)
  • パラメータの説明
    • chn_id:int チャンネル番号
      • 0-チャンネル1
      • 1-チャンネル2
    • cmd:str データフィールド(bytearray、可変バイト配列)
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc

robot = jkrc.RC("192.168.220.155")
robot.login(1)

cmd = bytearray(b"test_cmd")
ret = robot.send_tio_rs_command(0, cmd)

if ret[0] == 0:
    print("send_tio_rs_command 成功、ret =", ret[0])
else:
    print("何かが発生しました, errcode =", ret[0])

robot.logout()

TIOセマフォ情報を更新

update_tio_rs_signal(sign_info)
  • パラメータの説明
    • sign_info:dict セマフォ属性、辞書型データ
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc

robot = jkrc.RC("192.168.220.155")
robot.login(1)
ret = robot.update_tio_rs_signal({  
        'sig_name': 'signal_tmp',
        'frequency': 5
})
if ret[0] == 0:
    print("update_tio_rs_signal 成功、ret =", ret[0])
else:
    print("何かが発生しました, errcode =", ret[0])
robot.logout()

TIO信号情報の取得

get_rs485_signal_info()
  • 戻り値
    • 成功:(0,sign_info_list) sign_info_list: list セマフォ情報配列
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc

robot = jkrc.RC("192.168.220.155")
robot.login(1)
ret = robot.get_rs485_signal_info()
if ret[0] == 0:
    print("get_rs485_signal_info 成功、sign_info_list: {}".format(ret, ret[1]))
else:
    print("何かが発生しました, errcode =", ret[0])
robot.logout()

TIOモードを設定

set_tio_pin_mode(pin_type, pin_mode)
  • パラメータの説明
    • pin_type: tioタイプ 0 は DI ピン、1 は DO ピン、2 は AI ピン
    • pin_mode: tioモード
      • DI ピン: 0:0x00 DI2=NPN、DI1=NPN、1:0x01 DI2=NPN、DI1=PNP、2:0x10 DI2=PNP、DI1=NPN、3:0x11 DI2=PNP、DI1=PNP
      • DO ピン: 下位8ビットデータの上位4ビットはDO2設定、下位4ビットはDO1設定、0x0 DO=NPN出力、0x1 DO=PNP出力、0x2 DO=トーテムポール出力、0xF RS485Hインターフェース
      • AI ピン: 0:アナログ入力機能有効、RS485L 無効、1:RS485L インターフェース有効、アナログ入力機能無効
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

TIOモードを取得

get_tio_pin_mode(pin_type)
  • パラメータの説明 pin_type:tio の種類。0 は DI ピン用、1 は DO ピン用、2 は AI ピン用。
  • 戻り値
    • 成功:(0, pin_mode)
    • 失敗:その他

TIO RS485通信パラメータ設定

set_rs485_chn_comm(chn_id, slave_id, baudrate, databit, stopbit, parity)
  • パラメータの説明
    • chn_id:RS485 チャネル ID、照会時は chn_id が入力パラメータとして使用される
    • slaveId:チャネルモードが Modbus RTU に設定されている場合、追加で Modbus スレーブノード ID を指定する必要があり、その他のモードでは省略可能
    • baudrate:ボーレート 4800、9600、14400、19200、38400、57600、115200、230400
    • databit:データビット 7、8
    • stopbit:ストップビット 1、2
    • parity:パリティビット 78→なし 79→奇数 69→偶数

TIO RS485 通信パラメータ説明照会

get_rs485_chn_comm(chn_id)
  • 戻り値
    • 成功:(0, (chn_id, slave_id, baudrate, databit, stopbit, parity))
    • 失敗:その他

TIO RS485通信モード設定

set_rs485_chn_mode(chn_id, chn_mode)
  • パラメータの説明
    • chn_id: 0:RS485H、チャネル 1;1:RS485L、チャネル 2
    • chn_mode: 0:Modbus RTU、1:Raw RS485、2:トルクセンサー

TIO RS485通信モード照会

get_rs485_chn_mode(chn_id)
  • パラメータの説明
    • chn_id 0:RS485H、チャネル 1;1:RS485L、チャネル 2
  • 戻り値
    • 成功:(0, chn_mode)
      • chn_mode: 0:Modbus RTU、1:Raw RS485、2:トルクセンサー
    • 失敗:その他

ロボットの設置角度を設定する

set_installation_angle(anglex, angley)
  • パラメータの説明
    • anglex:x 方向の取り付け角度、範囲[ 0~PI ]度
    • anglez:z 方向の取り付け角度、範囲[ 0~360 ]度
  • 戻り値
    • 成功:(0)
    • 失敗:その他

ロボットの設置角度を取得

get_installation_angle()
  • パラメータの説明
    • anglex:x方向の取り付け角度
    • anglez:z方向の取り付け角度
  • 戻り値
    • 成功:(0,[ qs, qx, qy, qz, rx, ry, rz])。取り付け角度のクォータニオン表現は[ qx, qy, qz, qs]、オイラー角表現は[ rx, ry, rz ]で、ry は 0 に固定されます。
    • 失敗:その他。
  • コード例
# -*- coding: utf-8 -*-
import jkrc  
robot = jkrc.RC("192.168.220.156")  
res = robot.login(1)  
if res[0] != 0:  
    raise "rc ログインに失敗しました。"  

anglex = 3.14  
angley = 0  
res = robot.set_installation_angle(anglex, angley)  
if res[0] != 0:  
    raise "取り付け角度の設定に失敗しました。"  

res = robot.get_installation_angle()  
if res[0] != 0:  
    raise "取り付け角度の取得に失敗しました。"  

print("取り付け角度:")  
print("quat: [{x}, {y}, {z}, {s}]".format(s=res[1][0], x=res[1][1], y=res[1][2], z=res[1][3]))  
print("rpy: [{rx}, {ry}, {rz}]".format(rx=res[1][4], ry=res[1][5], rz=res[1][6]))  

robot.logout()

ロボットアームの状態を取得

get_robot_state()
  • パラメータの説明
    • 成功:(0,(estoped, power_on, servo_enabled))
      • estoped:非常停止。0: オフ、1: オン
      • power_on:電源オン。0: オフ、1: オン
      • servo_enabled:サーボ有効。0: オフ、1: オン
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-
import jkrc  
robot = jkrc.RC("192.168.220.156")  
ret = robot.login(1)  
ret, (estoped, power_on, servo_enabled) = robot.get_robot_state()  
print('ret は {}, estop: {}, power_on {}, servo_enabled: {}'.format(ret, estoped, power_on, servo_enabled))  
robot.logout()

システム変数を設定する

set_user_var(id, value, name)
  • パラメータの説明
    • id:システム変数ID
    • value:システム変数の値
    • name:システム変数の別名
  • 戻り値
    • 成功:(0, )
    • 失敗:その他

システム変数を取得する

get_user_var()
  • 戻り値
    • 成功:(0, data)
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-
import jkrc  
robot = jkrc.RC("192.168.220.156")  
ret = robot.login(1)  
ret  = robot.set_user_var(5500, 1, "test")  
if ret[0] == 0:  
    print("set_user_var 成功")  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])
ret = robot.get_user_var()
print("get_user_var の結果は: ", ret)
robot.logout()

振動抑制モードを設定

振動抑制モードを設定

set_vibsuppress_mode(mode| robot_id)
  • パラメータの説明
    • mode 振動抑制モード、0:オフ、1:モード1、2:モード2
    • robot_id ロボットアームID、デフォルト値は 0(オプション引数)
  • 戻り値
    • 成功:(0, )
    • 失敗:その他

振動抑制設定を有効にする

振動抑制設定を有効にする

vibsuppress_on(frequency | damping, robot_id)
  • パラメータの説明
    • frequency 振動周波数
    • damping 振動減衰、デフォルト値は 0.05(オプション引数)
    • robot_id ロボットアームID、デフォルト値は 0(オプション引数)
  • 戻り値
    • 成功:(0, )
    • 失敗:その他

各機種の初期デフォルト周波数は以下の通りです:

負荷/機種デフォルト周波数(Hz)
MiniCobot116
MiniCobot215
3kg(Zu3など)14
5kg(C5/A5/双腕など)12
7kg(Zu7など)12
12kg(Zu12など)8
16kg(Zu16)7.5
18kg(Zu18)7.5
20kg(Zu20)7.5
30kg(Zu30)7.4
Max405

振動抑制設定を無効にする

振動抑制設定を無効にする

vibsuppress_off(| robot_id)
  • パラメータの説明
    • robot_id ロボットアームID、デフォルト値は 0(オプション引数)
  • 戻り値
    • 成功:(0, )
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-
import jkrc  
robot = jkrc.RC("192.168.220.156")  
ret = robot.login(1)  
ret  = robot.set_vibsuppress_mode(1)  
if ret[0] == 0:  
    print("set_vibsuppress_mode 成功")  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])

ret = robot.vibsuppress_on(14)
if ret[0] == 0:  
    print("vibsuppress_on 成功")  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])

ret = robot.vibsuppress_off()
if ret[0] == 0:  
    print("vibsuppress_off 成功")  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])
robot.logout()

ロボットアームの安全状態設定

ロボットアームが非常停止状態にあるかを確認する

ロボットアームが非常停止状態にあるかを確認する

is_in_estop()
  • 戻り値
    • 成功:(0, estop)、estop が 1 の場合、ロボットは緊急停止状態であり、0 の場合はその逆
    • 失敗:その他

ロボットがリミットを超えているかを確認

is_on_limit()
  • 戻り値
    • 成功:(0, state)、state が 1 の場合、ロボットはリミットを超えており、0 の場合はその逆
    • 失敗:その他

ロボットが衝突保護モードにあるかを確認

is_in_collision()
  • 戻り値
    • 成功:(0, state)、state が 1 の場合、ロボットは衝突保護モードにあり、0 の場合はその逆
    • 失敗:その他

衝突後に衝突保護モードから復帰

collision_recover()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc  
import time  

robot = jkrc.RC("192.168.220.156")  
robot.login(1)  
robot.power_on()  
robot.enable_robot()  
ret = robot.get_collision_level()#現在の衝突レベルを取得  
print(ret)  
robot.set_collision_level(1)#衝突レベルを設定  
ret = robot.get_collision_level()  
print(ret)  
num = 0  
while(1):  
    ret = robot.is_in_collision()  #衝突保護モードにあるかを確認
    collision_status = ret[1]  
    if collision_status == 1:  
        time.sleep(5)  
        robot.collision_recover()   #衝突が発生した場合、衝突保護モードから復帰する  
        print(" 衝突中 "+ str(num))  
    else:  
        print("ロボットは衝突していません "+ str(num))  
    time.sleep(1)  
    num=num+1  

robot.logout()

ロボットの衝突レベルを設定する

set_collision_level(level)
  • パラメータの説明
    • level: 衝突レベル、値の範囲は[0~5]。0は衝突検出を無効、1は衝突閾値25N、2は衝突閾値50N、3は衝突閾値75N、4は衝突閾値100N、5は衝突閾値125Nを表す。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットの衝突レベルを取得する

get_collision_level()
  • 戻り値
    • 成功:(0, level)、levelは返される衝突レベルで、レベルは0~5。
      • 0は衝突検出を無効にする。
      • 1は衝突閾値25N。
      • 2は衝突閾値50N。
      • 3は衝突閾値75N。
      • 4は衝突閾値100N。
      • 5は衝突閾値125N。
    • 失敗:その他

ネットワーク異常時にロボットが自動的に停止する動作タイプを設定する

ネットワーク異常制御ハンドルを設定し、ネットワーク異常が発生した際にロボットの動作状態を制御する。

set_network_exception_handle(millisecond, mnt)
  • パラメータの説明
    • millisecond: 時間パラメータ、単位:ms。
    • mnt: ネットワーク異常時にロボットが行う動作タイプ。0は既存の動作を維持、1は動作を一時停止、2は動作を終了する。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import time        
import jkrc  

#運動モード  
ABS = 0  
INCR= 1  
robot = jkrc.RC("192.168.220.156")#ロボットオブジェクトを返す  
robot.login(1)#ログイン  
robot.power_on() #電源オン  
robot.enable_robot()  
robot.set_network_exception_handle(100,2)#100ms設定、動作を一時停止。    
print("move1")  
num=0  
while(1):  
    robot.joint_move([1,1,1,1,1,1],ABS,False,0.5)  
    robot.joint_move([-1,1,1,1,1,1],ABS,False,0.5)  
    num = num +1  
    print(num)  
    time.sleep(6)  
robot.logout()

ロボットの動作中に発生するエラーコードを取得する

ロボットの動作中に最後のエラーコードを取得する。clear_errorを呼び出すと、最後のエラーコードはリセットされる。

get_last_error()
  • 戻り値
    • 成功:(0, error)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc  
robot = jkrc.RC("192.168.220.156")#ロボットオブジェクトを返す  
robot.login(1)   #ログイン  
robot.program_load("not_exist") #存在しないプログラムを意図的にロードし、エラーを発生させる  
ret = robot.get_last_error ()#エラーコードファイルパスが設定されていないため、エラーコードのみ取得でき、具体的なエラー情報は取得できない  
print(ret[1])   
robot.logout()  #ログアウト

エラー状態をクリア

clear_error()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

エラーコードファイルのパスを設定する

廃止されたインターフェース

エラーコードファイルのパスを設定する。get_last_errorインターフェースを使用する際、具体的なエラー情報を取得するには、このインターフェースを使用してエラーコードファイルのパスを設定する必要がある。エラーコードのみが必要な場合は、このインターフェースを呼び出す必要はない。

注意:パスには中国語を含めないでください。中国語が含まれると使用できません。

set_errorcode_file_path (errcode_file_path)
  • パラメータの説明
    • errcode_file_path:エラーコードファイルの保存パス
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットアームEDG(External Data Guider)機能

ロボットアームEDGのイネーブル

ロボットアームのEDG機能の有効化。有効化後にEDG関連インターフェースを使用できます。

edg_init(en, edg_stat_ip)
  • パラメータの説明
    • en 有効化スイッチ。trueはEDG機能を有効にし、falseは機能を終了します。
    • edg_stat_ip SDKクライアントIPアドレス
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc  
robot = jkrc.RC("192.168.220.156")#ロボットオブジェクトを返す  
robot.login(1)   #ログイン  

ret = robot.edg_init(
    en=True,                      # EDG機能を有効にするかどうか
    edg_stat_ip="192.168.220.144"  # 状態フィードバックモジュールのIPアドレス
)
print("edg_init 戻り値:", ret)
robot.logout()  #ログアウト

注意:

有効化後はservo_jおよびservo_pを呼び出すことはできません。EDG機能をedg_init(false)で無効化した後にservo_jおよびservo_pを呼び出す必要があります。

ロボットアームEDG有効化拡張

ロボットアームEDG有効化拡張は、ローカルポート番号の設定およびservo_jとservo_pの呼び出しをサポートします。

edg_init_extend(en, edg_stat_ip, edg_port, edg_mode)
  • パラメータの説明
    • en 有効化スイッチ。trueでこの機能をオン、falseでこの機能をオフにします。
    • edg_stat_ip SDKクライアントのIPアドレス
    • edg_port ローカルポート番号
    • edg_mode EDGモード。デフォルト値は0。0はすべてのEDG関連インターフェースを呼び出せることを意味し、1はedg_servo_jおよびedg_servo_pを除くすべてのインターフェースを呼び出せることを意味します(この場合、servo_jおよびservo_pを呼び出すことができます)。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:
# -*- coding: utf-8 -*-  
import jkrc  
robot = jkrc.RC("192.168.220.156")#ロボットオブジェクトを返す  
robot.login(1)   #ログイン  

ret = robot.edg_init_extend(
    en=True,
    edg_stat_ip="192.168.220.144",
    edg_port=30003,         # ポート番号
    edg_mode=1              # モード番号(プロトコル定義に基づく)
)
print("edg_init_extend 戻り値:", ret)
robot.logout()  #ログアウト

ロボットアームの高速EDGフィードバックデータ取得

edg_get_stat(robot_index)
  • パラメータの説明
    • robot_index デフォルト値を使用し、引数を渡す必要はありません。
  • 戻り値
    • 成功:(0,status) の形式で返されます。statusの長さは6で、返されるデータの順序は次のとおりです:
      • joint_value 現在の関節位置
      • joint_vel 現在の関節速度
      • joint_torque 現在の関節トルク
      • cart_pose 現在のデカルト位置
      • torque_sensor トルクセンサーのデータ
      • io_state 順に din、dout、ain、aout、tool_din、tool_dout、tool_ain となります。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc  
robot = jkrc.RC("192.168.220.156")#ロボットオブジェクトを返す  
robot.login(1)   #ログイン  

ret = robot.edg_init_extend(
    en=True,
    edg_stat_ip="192.168.220.144",
    edg_port=30003,         # ポート番号
    edg_mode=1              # モード番号(プロトコル定義に基づく)
)
print("edg_init_extend 戻り値:", ret)
ret = robot.edg_get_stat(robot_index=0)
print("edg_get_stat の戻り値:", ret)
robot.logout()  #ログアウト

ロボットアームがEDGフィードバック送信タイムスタンプを取得

ロボットアームのEDGフィードバックデータ送信タイムスタンプ取得

edg_stat_details()
  • 戻り値
    • 成功:(0, details)、detailsの長さは3、データの順序:秒、ナノ秒、タイムスタンプカウント
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc  
robot = jkrc.RC("192.168.220.156")#ロボットオブジェクトを返す  
robot.login(1)   #ログイン  

ret = robot.edg_init_extend(
    en=True,
    edg_stat_ip="192.168.220.144",
    edg_port=30003,         # ポート番号
    edg_mode=1              # モード番号(プロトコル定義に基づく)
)
print("edg_init_extend 戻り値:", ret)
ret = robot.edg_get_stat(robot_index=0)
print("edg_get_stat の戻り値:", ret)
# EDG状態の詳細を取得
ret = robot.edg_stat_details()
print("edg_stat_details の戻り値:", ret)
robot.logout()  #ログアウト

ロボットアームEDG関節空間サーボモード動作

edg_servo_j(joint_pos, move_mode, step_num, robot_index)
  • パラメータの説明
    • joint_pos ロボットアーム関節の目標位置
    • move_mode 動作モードを指定:0は絶対運動、1は増分運動を表す
    • step_num 倍分周期。edg_servo_jの動作周期は step_num*8ms(step_num>=1)
    • robot_index デフォルト値0を使用
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# サーボ制御 - 関節空間
ret_val = rc.edg_servo_j(
    joint_pos=(0.0, -0.5, 1.0, 0.0, -0.5, 0.5),  # 6つの関節角度
    move_mode=1,      # 制御モード(例:サーボ)
    step_num=50,      # 補間ステップ数
    robot_index=0     # ロボット番号
)
print("edg_servo_j の戻り値:", ret_val)

ロボットアームEDGデカルト空間サーボモード動作

ロボットアームEDGデカルト空間位置制御モード

edg_servo_p(end_pos,move_mode,step_num,robot_index)
  • パラメータの説明
    • cartesian_pose ロボットアームのデカルト空間での目標位置
    • move_mode 動作モードを指定:0は絶対運動、1は増分運動を表す
    • step_num 倍分周期。edg_servo_pの動作周期は step_num*8ms(step_num>=1)
    • robot_index デフォルト値0を使用
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# サーボ制御 - デカルト空間
ret_val = rc.edg_servo_p(
    end_pos=(500.0, 200.0, 300.0, 0.0, 3.14, 0.0),  # X, Y, Z, RX, RY, RZ
    move_mode=1,        # 移動モード
    step_num=50,        # 補間ステップ数
    robot_index=0       # ロボット番号
)
print("edg_servo_p の戻り値:", ret_val)

Appスクリプトプログラムを使用する

指定されたジョブプログラムを読み込む

program_load(file_name)
  • パラメータの説明
    • file_name:プログラム名。渡される名前は文字列で、例えば “file_name” のようになります。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

読み込まれたジョブプログラム名を取得する

get_loaded_program()
  • 戻り値
    • 成功:(0, file_name)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc
robot = jkrc.RC("192.168.220.1564")# ロボットオブジェクトを返す
robot.login(1)  #ログイン
ret = robot.program_load("program_test")# Appで作成したスクリプト program_testを読み込む(自作する必要があります)
ret = robot.get_loaded_program()  
print("読み込まれたプログラムは:", ret[1])
robot.logout() #ログアウト

現在のロボットジョブプログラムの実行行番号を取得する

get_current_line()
  • 戻り値
    • 成功:(0, curr_line)、curr_line:現在の行番号の取得結果。
    • 失敗:その他

現在読み込まれているジョブプログラムを実行する

program_run()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

現在実行中のジョブプログラムを一時停止する

program_pause()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

現在一時停止中のジョブプログラムを再開する

program_resume()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

現在実行中のジョブプログラムを終了する

program_abort()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットジョブプログラムの実行状態を取得する

get_program_state()
  • 戻り値
    • 成功:(0, state)、state の値には 0、1、2 の 3 つの可能性があります
      • 0 はプログラムの実行停止を意味します
      • 1 はプログラムが実行中であることを意味します
      • 2 はプログラムが一時停止していることを意味します
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import time
import jkrc
import threading

stop_flag = threading.Event()

def print_state(name, robot):
    while not stop_flag.is_set():
        ret = robot.get_program_state()
        print("ロボットプログラムの状態は:", ret[1])
        time.sleep(1)

robot = jkrc.RC("192.168.220.156")
robot.login(1)
ret = robot.program_load("program_test")
ret = robot.get_loaded_program()    
print("読み込まれたプログラムは:", ret[1])
robot.program_run()

t = threading.Thread(target=print_state, args=("p1_state", robot))
t.start()  # 通常のサブスレッド、daemon を設定しない

time.sleep(2)
robot.program_pause()
time.sleep(2)
robot.program_resume()
time.sleep(2)
robot.program_abort()
time.sleep(3)

# サブスレッドに終了を通知して待機する
stop_flag.set()
t.join()

robot.logout()

ロボットアームのジョブプログラム情報を取得する

ロボットアーム作業プログラム情報を取得する

get_program_info()
  • 戻り値
    • 成功:(0, logic_line, motion_line, file, program_state)
      • logic_line プログラムスクリプトの実行行番号
      • motion_line 実行中のモーションCMD ID
      • file 現在のプログラムファイル
      • program_state プログラム実行状態
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import time
import jkrc
import threading

stop_flag = threading.Event()

def print_state(name, robot):
    while not stop_flag.is_set():
        ret = robot.get_program_info()
        print("ロボットプログラム情報:", ret)
        time.sleep(1)

robot = jkrc.RC("192.168.220.157")
robot.login(1)
ret = robot.program_load("program_test")
ret = robot.get_loaded_program()    
print("読み込まれたプログラムは:", ret[1])
robot.program_run()

t = threading.Thread(target=print_state, args=("p1_state", robot))
t.start()  # 通常のサブスレッド、daemon を設定しない

time.sleep(2)
robot.program_pause()
time.sleep(2)
robot.program_resume()
time.sleep(2)
robot.program_abort()
time.sleep(3)

# サブスレッドに終了を通知して待機する
stop_flag.set()
t.join()

robot.logout()
import time
import jkrc
import threading

stop_flag = threading.Event()

def print_state(name, robot):
    while not stop_flag.is_set():
        ret = robot.get_program_info()
        print("ロボットプログラム情報:", ret)
        time.sleep(1)

robot = jkrc.RC("192.168.220.157")
robot.login(1)
ret = robot.program_load("program_test")
ret = robot.get_loaded_program()    
print("読み込まれたプログラムは:", ret[1])
robot.program_run()

t = threading.Thread(target=print_state, args=("p1_state", robot))
t.start()  # 通常のサブスレッド、daemon を設定しない

time.sleep(2)
robot.program_pause()
time.sleep(2)
robot.program_resume()
time.sleep(2)
robot.program_abort()
time.sleep(3)

# サブスレッドに終了を通知して待機する
stop_flag.set()
t.join()

robot.logout()

ロボットの動作速度倍率を設定

set_rapidrate(rapid_rate)
  • パラメータの説明
    • rapid_rate:ロボットの動作速度倍率
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボットの動作速度倍率を取得

get_rapidrate()
  • 戻り値
    • 成功:(0, rapidrate)、rapidrateは速度倍率で、戻り値は0から1の閉区間内
    • 失敗:その他

軌跡再現

軌跡再現の設定パラメータを設定

軌跡再現の設定パラメータを設定します。空間位置の取得精度、姿勢取得精度、スクリプト実行速度、スクリプト実行加速度を設定できます。

set_traj_config(xyz_interval, rpy_interval, vel, acc)
  • パラメータの説明
    • xyz_interval:軌跡再現の座標精度
    • rpy_interval:軌跡再現の姿勢精度
    • vel:軌跡再現の動作速度
    • acc:軌跡再現の動作加速度
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc  
import time  

# 座標系  
COORD_BASE  = 0  
COORD_JOINT = 1  
COORD_TOOL  = 2  
#運動モード  
ABS = 0  
INCR= 1  

robot = jkrc.RC("192.168.2.160")  
robot.login(1)  
robot.power_on()  
robot.enable_robot()  
robot.joint_move(joint_pos =[1,1,1,1,1,1] ,move_mode = 0 ,is_block = True ,speed = 10 )  
print("ジョイント")  
robot.set_traj_config([0.1, 0.1, 25, 100]) #軌跡再現パラメータを設定、記録中のみ有効  
time.sleep(0.1)  
ret = robot.get_traj_config()#軌跡再現パラメータを取得  
print("traj_config:")  
print(ret)  
robot.set_traj_sample_mode(True, 'pythonTrack')#軌跡再現データ収集を開始  
time.sleep(0.1)  
robot.joint_move(joint_pos =[-1,1,1,1,1,1] ,move_mode = 0 ,is_block = True ,speed = 30*3.14/180 )#ブロッキング動作  
robot.joint_move(joint_pos =[1,1,1,1,1,1] ,move_mode = 0 ,is_block = True ,speed = 30*3.14/180 )  
# robot.jog(2,INCR,COORD_BASE,10,-2)  
# robot.jog(2,INCR,COORD_BASE,10,2)  
robot.set_traj_sample_mode(False, 'pythonTrack')#軌跡再現データ収集を終了  
time.sleep(1)  
res = robot.generate_traj_exe_file('pythonTrack')#収集した軌跡再現ファイルを実行可能スクリプトに変換  
print(res)  
robot.program_load("track/pythonTrack")#軌跡プログラムをロード  
time.sleep(0.1)  
robot.program_run()

軌跡再現の設定パラメータを取得

軌跡再現設定パラメータを取得し、空間位置収集精度、姿勢収集精度、スクリプト実行速度、およびスクリプト実行加速度を得ることができます。

get_traj_config()
  • 戻り値
    • 成功:(0 , ( xyz_interval, rpy_interval, vel, acc))
      • xyz_interval:空間位置収集速度
      • rpy_interval:姿勢収集精度
      • vel:スクリプト実行速度
      • acc:スクリプト実行加速度
    • 失敗:その他

軌跡再現データ収集の制御スイッチ

set_traj_sample_mode(mode, filename)
  • パラメータの説明
    • mode:制御モード。Trueはデータ収集開始を意味し、Falseはデータ収集終了を意味します。
    • filename:データの保存ファイル名。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

軌跡再現データ収集の状態を照会

ヒント:

データ収集中は、再度データ収集スイッチをオンにすることはできません。

get_traj_sample_status()
  • 戻り値
    • 成功:(0, sample_status),sample_status:データ状態。True はデータ収集中、False はデータ収集終了を意味します。
    • 失敗:その他

コントローラ内に存在する軌跡再現データファイル名を照会

このインターフェースは非推奨です

get_exist_traj_file_name ()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

軌跡再現データのファイル名を変更する

このインターフェースは非推奨です

rename_traj_file_name (src, dest)
  • パラメータの説明
    • src:ソースファイル名
    • dest:ターゲットファイル名。ファイル名の長さは100文字を超えてはならず、空欄にすることはできません。ターゲットファイル名には中国語を使用できません。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc                               # モジュールをインポート  
robot = jkrc.RC("192.168.2.226")      #ロボットオブジェクトを返す  
robot.login(1)  
robot.rename_traj_file_name('/home/src', '/home/dst')  
robot.logout() #ログアウト

コントローラ内の軌跡再現データのファイルを削除する

このインターフェースは非推奨です

remove_traj_file(filename)
  • パラメータの説明
    • filename:削除するファイル名
  • 戻り値
    • 成功:(0, )
    • 失敗:その他
  • コード例
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.2.226")  #ロボットオブジェクトを返す  
robot.login(1)  
robot.remove_traj_file('test')  
robot.logout() #ログアウト

コントローラ内の軌跡再現データファイルからコントローラ実行スクリプトを生成する

コントローラ内の軌跡再現データファイルからコントローラ実行スクリプトを生成する

generate_traj_exe_file(filename)
  • パラメータの説明
    • filename:データのファイル名
  • 戻り値
    • 成功:(0, )
    • 失敗:その他

ロボット運動学

ロボットの逆運動学を求める

指定された姿勢において、現在のツール、現在の取り付け角度、および現在のユーザー座標系設定下での逆解を計算する。

kine_inverse(ref_pos, cartesian_pose)
  • パラメータの説明
    • ref_pos:関節空間の参照位置。ロボットの現在の関節位置を使用することを推奨します。
    • cartesian_pose:デカルト空間での姿勢計算結果。
  • 戻り値
    • 成功:(0 , joint_pos) joint_posは6つの要素 (j1, j2, j3, j4, j5, j6) を含むタプルであり、j1からj6はそれぞれ関節1~関節6の角度値を表す
    • 失敗:その他

ロボット逆運動学の拡張解を求める

指定された姿勢において、指定されたツール、現在の取り付け角度、および指定されたユーザー座標系設定下での逆解を計算する。

kine_inverse_extend(ref_pos, cartesian_pose, tool, userFrame)
  • パラメータの説明
    • ref_pos:関節空間の参照位置。ロボットの現在の関節位置を使用することを推奨します。
    • cartesian_pose:デカルト空間での姿勢計算結果。
    • tool:指定されたツール座標系
    • userFrame:指定されたユーザー座標系
  • 戻り値
    • 成功:(0 , joint_pos) joint_posは6つの要素 (j1, j2, j3, j4, j5, j6) を含むタプルであり、j1からj6はそれぞれ関節1~関節6の角度値を表す
    • 失敗:その他

ロボットの順運動学を求める

指定された関節位置における、現在のツール、現在の取り付け角度および現在のユーザー座標系設定下での姿勢値を計算します。

kine_forward(joint_pos)
  • パラメータの説明
    • joint_pos:関節空間位置
  • 戻り値
    • 成功:(0, cartesian_pose)、cartesian_poseは6つの要素(x, y, z, rx, ry, rz)を含むタプルであり、x, y, z, rx, ry, rzはロボットツールの先端姿勢値を示します。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc  

robot = jkrc.RC("192.168.220.158") #ロボットオブジェクトを返します  
robot.login(1)                   #ログイン  
ret = robot.get_joint_position()  
if ret[0] == 0:  
    print("関節位置は :",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])       
joint_pos = ret[1]      
ret = robot.kine_forward(joint_pos)   #ロボットの正運動学を求めます
if ret[0] == 0:  
    print("kine_forward success, result = :",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])               
robot.logout()  #ログアウト

ロボットの正運動学の拡張を求める

指定された関節位置における、指定されたツール、現在の取り付け角度および指定されたユーザー座標系設定下での姿勢値を計算します。

kine_forward_extend(joint_pos, tool, userFrame)
  • パラメータの説明
    • joint_pos:関節空間位置
    • tool:指定されたツール座標系
    • userFrame:指定されたユーザー座標系
  • 戻り値
    • 成功:(0, cartesian_pose)、cartesian_poseは6つの要素(x, y, z, rx, ry, rz)を含むタプルであり、x, y, z, rx, ry, rzはロボットツールの先端姿勢値を示します。
    • 失敗:その他

オイラー角から回転行列への変換

rpy_to_rot_matrix(rpy = [rx,ry,rz])
  • パラメータの説明
    • rpy:変換するオイラー角データ[rx,ry,rz]
  • 戻り値
    • 成功:(0, rot_matrix)、rot_matrixは3x3の回転行列(行優先順)です。
    • 失敗:その他

回転行列からオイラー角への変換

rot_matrix_to_rpy(rot_matrix)
  • パラメータの説明
    • rot_matrix: 変換する回転行列データ
  • 戻り値
    • 成功:(0, rpy)、rpyは長さ3のオイラー角タプル(rx,ry,rz)です。
    • 失敗:その他

クォータニオンから回転行列への変換

quaternion_to_rot_matrix(quaternion = [w,x,y,z])
  • パラメータの説明
    • quaternion:変換する四元数データ
  • 戻り値
    • 成功:(0, rot_matrix)、rot_matrixは3x3の回転行列です。
    • 失敗:その他

回転行列からクォータニオンへの変換

rot_matrix_to_quaternion(rot_matrix)
  • パラメータの説明
    • rot_matrix:3x3の回転行列
  • 戻り値
    • 成功:(0, quaternion)、quaternionは長さ4の四元数タプル(w,x,y,z)
    • 失敗:その他
  • コード例
import jkrc  
robot = jkrc.RC("192.168.2.160")  
robot.login(1)  
ret = robot.get_tcp_position()  
print(ret)  
rpy = [ret[1][3], ret[1][4], ret[1][5]]#rpyを取得  
ret = robot.rpy_to_rot_matrix(rpy)#rpyを回転行列に変換  
print(ret)  
rot_matrix = ret[1]#回転行列を取得  
ret = robot.rot_matrix_to_rpy(rot_matrix)#回転行列をrpyに変換  
print(ret)  
ret = robot.rot_matrix_to_quaternion(rot_matrix)#回転行列を四元数に変換  
print(ret)  
quaternion = ret[1]  
ret = robot.quaternion_to_rot_matrix(quaternion)#四元数を回転行列に変換  
print(ret)  
robot.logout()

現在接続されているロボットアームのDHパラメータを取得する

ロボットアームのDHパラメータを取得

get_dh_param()
  • 戻り値
    • 成功:(0, dhparam)、dhparamはDHパラメータ
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-  
import jkrc  

robot = jkrc.RC("192.168.220.158") #ロボットオブジェクトを返します  
robot.login(1)                   #ログイン   
ret = robot.get_dh_param()
if ret[0] == 0:  
    print("get_dh_param 成功、結果は: ",ret[1])  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])               
robot.logout()  #ログアウト

ロボットのサーボ動作

ヒント:

  • ユーザーがこのインターフェースを使用する前にservo_move_enable(True)を呼び出し、位置制御モードに入る必要があります。
  • このコマンドは一般的に大学や研究機関で軌道計画を行う際に使用されます。
  • このモードでロボットの動作を制御する場合、コントローラーのプランナーは動作補間に関与せず、位置指令は直接サーボに送られるため、ユーザー自身で軌跡を計画する必要があります。そうでないと、ロボットの動作が不安定になり、激しい振動などの現象が生じ、期待した結果が得られません。
  • コントローラーの制御周期は8msのため、ユーザーの送信周期も8msにすることを推奨します。また、連続して送信する必要があり、一度だけ送信しても効果はありません。ネットワークの状態が悪い場合、送信周期を8msより短くすることができます。
  • JAKAロボットの関節速度の上限は180度/秒です。送信する関節角度によって関節速度がこの上限を超える場合、このコマンドは無効になります。例えば、送信する関節角度が1.5,0.5,0.5,0.5,0.5,0.5で、送信周期が8msの場合、1.5/0.008=187.5度/秒となり、関節速度の上限を超えます。そのため、コマンドは無効になります。
  • この命令を使用した後は、servo_move_enable(False)を使用して位置制御モードを終了する必要があります。
  • この命令は前述のjoint_move()とは大きく異なり、joint_moveの補間はコントローラーによって行われるため、ユーザーが意識する必要はありません。ユーザーがservo_j命令を使用する場合、事前に軌道計画を行う必要があります。そうしないと、動作効果が悪くなり、期待した結果が得られません。特別な要件がない限り、ロボットの関節空間での動作はservo_jではなくjoint_moveを使用することを推奨します

ロボットアームがサーボ動作状態にあるかを確認

ロボットアームがサーボ動作状態にあるかを確認

is_in_servomove()
  • 戻り値
    • 成功:(0,in_servo)、in_servoが1の場合はロボットがサーボ運動モードにあり、0の場合はその逆を示します。
    • 失敗:その他

ロボットのサーボムーブモードを有効化

servo_move_enable(enable|is_block, robot_id)
  • パラメータの説明
    • enable:TRUEはSERVO MOVEモードに入り、FALSEはこのモードを終了することを示します。
    • is_block:TRUEはブロッキングモード、FALSEは非ブロッキングモードを示します。デフォルト値はTRUE(オプション引数)。
    • robot_id:ロボットアームID。デフォルト値は0(オプション引数)。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボット関節空間サーボモードでの運動

servo_j(joint_pos, move_mode|step_num, do_info, robot_id)
  • パラメータの説明
    • joint_pos:ロボット関節の運動目標位置。
    • move_mode:運動モードを指定します。0は絶対運動、1は増分運動を示します。
    • step_num:分割サイクル。servo_jの運動周期はstep_num*8msで、step_num>=1。デフォルト値は1(オプション引数)。
    • do_info:DO情報を指定します。デフォルト値はnullptr(オプション引数)。
    • robot_id:ロボットアームID。デフォルト値は0(オプション引数)。
  • 戻り値
    • 成功:(0,queue_num)、queue_numはコントローラーのキュー長を返します(100を超えることはできません)。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc
import time
import math

ABS = 0
Enable = True

robot = jkrc.RC("192.168.220.158")
robot.login(1)
robot.power_on()
robot.enable_robot()
robot.servo_move_enable(Enable, False) #非ブロッキングモードでサーボ運動モードを開始する

print("サーボモードが有効化されました")

target_joint = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
do_info = [0, 0, 1]
step_num = 1

# ===== 運動パラメータ =====
amp_deg = 10.0
amp = math.radians(amp_deg)
freq = 0.2                 # Hz(ヘルツ)
dt = 0.008                 # 8 ms → 125 Hz

t = 0.0

try:
    while True:
        ret = robot.servo_j(target_joint, ABS, step_num, do_info)

        if ret[0] != 0:
            print("servo_j エラー:", ret)
            break

        queue_len = ret[1]
        print("queue_len =", queue_len)

        # === キューのレート制限 ===
        if queue_len > 10:
            time.sleep(0.01)
            continue(コンティニュー)

        # === 往復軌道を生成 ===
        target_joint[0] = amp * math.sin(2 * math.pi * freq * t)
        t += dt

except KeyboardInterrupt:
    print("ユーザーによって中断されました")

finally:
    robot.servo_move_enable(False, False)
    robot.logout()
    print("サーボモードが無効化されました")

ロボットのデカルト空間サーボモード運動

servo_p(cartesian_pose, move_mode|step_num, do_info, robot_id)
  • パラメータの説明
    • cartesian_pose:ロボットのデカルト空間における運動の目標位置。
    • move_mode:運動モードを指定する。0は絶対運動、1は増分運動。
    • step_num:分割サイクル。servo_jの運動周期はstep_num*8msで、step_num>=1。デフォルト値は1(オプション引数)。
    • do_info:DO情報を指定します。デフォルト値はnullptr(オプション引数)。
    • robot_id:ロボットアームID。デフォルト値は0(オプション引数)。
  • 戻り値
    • 成功:(0,queue_num)、queue_numはコントローラーのキュー長を返します(100を超えることはできません)。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc
import time
import math

ABS = 0
Enable = True

robot = jkrc.RC("192.168.220.158")
robot.login(1)
robot.power_on()
robot.enable_robot()

start_joint = [0.0, -0.5, 1.2, 0.0, 1.0, 0.0]
robot.joint_move(start_joint, ABS, True, 0.5)

robot.servo_move_enable(Enable, True) #ブロッキングモードでサーボ運動モードを有効化

print("servo_p モードが有効になりました")

# ===== 現在の TCP 姿勢を基準として読み取る =====
ret = robot.get_tcp_position()
if ret[0] != 0:
    raise RuntimeError("get_tcp_position に失敗しました")

base_pose = list(ret[1])   # [x, y, z, rx, ry, rz]

print("base_pose:", base_pose)

# ===== サーボパラメータ =====
do_info = [0, 0, 1]
step_num = 1

amp_mm = 8.0              # 平行移動の振幅
amp_rot = 0.02            # 姿勢の摂動
freq = 0.2                # Hz
dt = 0.008                # 8 ms

t = 0.0

try:
    while True:
        # === デカルト往復軌跡を生成 ===
        pose = base_pose.copy()
        # ---- 平行移動:X方向の往復 ----
        pose[0] = base_pose[0] + amp_mm * math.sin(2 * math.pi * freq * t)

        # ---- 姿勢の微摂動:Z軸回り ----
        pose[5] = base_pose[5] + amp_rot * math.sin(2 * math.pi * freq * t)

        # === servo_p を送信 ===
        t_start = time.perf_counter()
        ret = robot.servo_p(pose, ABS, step_num, do_info)
        t_end = time.perf_counter()
        servo_cost_ms = (t_end - t_start) * 1000.0
        print("servo_p コスト: %.2f ms" % servo_cost_ms)
        if ret[0] != 0:
            print("servo_p エラー:", ret)
            break

        t += dt

except KeyboardInterrupt:
    print("ユーザーによって中断されました")

finally:
    robot.servo_move_enable(False)
    robot.logout()
    print("サーボモードが無効化されました")

ロボットのservoモードでフィルターを無効化

ロボットのSERVOモードでフィルターを無効化します。この命令はSERVOモード中に設定できず、SERVOを終了した後に設定可能です。

servo_move_use_none_filter()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.220.158")  # ロボットオブジェクトを返します  
robot.login(1)  
robot.servo_move_use_none_filter()  
robot.logout() #ログアウト

ロボットのservoモードで関節空間の一次ローパスフィルタ

ロボットのSERVOモードで関節空間の一次ローパスフィルタ。この命令はSERVOモード中に設定できず、SERVOを終了した後に設定可能です。

servo_move_use_joint_LPF(cutoffFreq)
  • パラメータの説明
    • cutoffFreq:一次ローパスフィルタのカットオフ周波数。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.2.226")  #ロボットオブジェクトを返す  
robot.login(1)  
robot.servo_move_use_joint_LPF(0.5)  
robot.logout() #ログアウト

ロボットのservoモードで関節空間の非線形フィルタ

ロボットのSERVOモードで関節空間の非線形フィルタ。この命令はSERVOモード中に設定できず、SERVOを終了した後に設定可能です。

servo_move_use_joint_NLF(max_vr, max_ar, max_jr)
  • パラメータの説明
    • max_vr:デカルト空間の姿勢変化速度の速度上限値(絶対値)°/s
    • max_ar:デカルト空間の姿勢変化速度の加速度上限値(絶対値)°/s^2
    • max_jr:デカルト空間の姿勢変化速度の加加速度上限値(絶対値)°/s^3
  • コード例
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.2.226")  #ロボットオブジェクトを返す  
robot.login(1)  
robot.servo_move_use_joint_NLF(max_vr=2, max_ar=2, max_jr=4)  
robot.logout() #ログアウト

ロボットのservoモードでデカルト空間の非線形フィルタ

ロボットのSERVOモードでデカルト空間の非線形フィルタ。この命令はSERVOモード中に設定できず、SERVOを終了した後に設定可能です。

servo_move_use_carte_NLF(max_vp, max_ap, max_jp, max_vr, max_ar, max_jr|ori_quat)
  • パラメータの説明
    • max_vp:デカルト空間での移動指令速度の上限値(絶対値)mm/s
    • max_ap:デカルト空間での移動指令加速度の上限値(絶対値)mm/s^2
    • max_jp:デカルト空間での移動指令ジャーク(加加速度)の上限値(絶対値)mm/s^3
    • max_vr:デカルト空間の姿勢変化速度の速度上限値(絶対値)°/s
    • max_ar:デカルト空間の姿勢変化速度の加速度上限値(絶対値)°/s^2
    • max_jr:デカルト空間の姿勢変化速度の加加速度上限値(絶対値)°/s^3
    • ori_quat:デカルト空間の姿勢を記述する表現方法を指定する。0はオイラー角を使用して記述し、1はクォータニオンを使用して記述することを示す。デフォルトは0(任意パラメータ)
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.2.226")  #ロボットオブジェクトを返す  
robot.login(1)  
robot.servo_move_use_carte_NLF(max_vp=2, max_ap=2, max_jp=4,max_vr=2, max_ar=2, max_jr=4)  
robot.logout() #ログアウト

ロボットSERVOモードにおける関節空間多段平均フィルタ

ロボットのSERVOモードにおける関節空間多段平均フィルタ。この指令はSERVOモード中には設定できず、SERVOモードを終了した後に設定可能。

servo_move_use_joint_MMF(max_buf, kp, kv, ka)
  • パラメータの説明
    • max_buf: 平均フィルタのバッファサイズ。
    • kp:加速度フィルタ係数。
    • kv:速度フィルタ係数。
    • ka:位置フィルタ係数。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.2.226")  #ロボットオブジェクトを返す  
robot.login(1)  
robot.servo_move_use_joint_MMF(max_buf=20 , kp=0.2 , kv=0.4 ,ka=0.2)  
robot.logout() #ログアウト

Servoモードにおける速度先読みパラメータ設定

SERVOモードにおける速度先読みフィルタ。この指令はSERVOモード中には設定できず、SERVOモードを終了した後に設定可能。

servo_speed_foresight(max_buf, kp|ori_quat)
  • パラメータの説明
    • max_buf: 平均フィルタのバッファサイズ。
    • kp:加速度フィルタ係数。
    • ori_quat:デカルト空間の姿勢を記述する表現方法を指定する。0はオイラー角を使用して記述し、1はクォータニオンを使用して記述することを示す。デフォルトは0(任意パラメータ)
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

Servoモードにおける関節空間PCMフィルタ設定

SERVOモードにおける関節空間PCMフィルタ。この指令はSERVOモード中には設定できず、SERVOモードを終了した後に設定可能。

servo_move_use_joint_PCM(max_buf, kp)
  • パラメータの説明
    • max_buf: 平均フィルタのバッファサイズ。
    • kp:加速度フィルタ係数。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

Servoモードにおけるデカルト空間PCMフィルタ設定

SERVOモードにおけるデカルト空間PCMフィルタ。この指令はSERVOモード中には設定できず、SERVOモードを終了した後に設定可能。

servo_move_use_carte_PCM(max_buf, kp)
  • パラメータの説明
    • max_buf: 平均フィルタのバッファサイズ。
    • kp:加速度フィルタ係数。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

ロボット力制御インターフェース

JAKAロボットは、エンドエフェクタ力センサに基づく力制御インターフェースを提供しており、ユーザーはこれらのインターフェースを使用して、一定力コンプライアンス制御などの高度な力制御機能を実現できます。これにより、デカルト空間で指定方向へのドラッグ、力制御による組立、研磨など、より複雑な応用シナリオを実現することが可能です。

ただし、これらのインターフェースはエンドエフェクタ力センサに依存している点に注意してください。

本節の内容は、力制御製品の使用マニュアルopen in new windowを一通り読んだ上で読むことを推奨します。また、JAKA SDKの力制御機能クイックスタートガイドをopen in new window併せて参照すると理解が深まります。 文を簡潔にするため、本節における「力制御」はすべて「力コンプライアンス制御」を意味し、「エンドエフェクタ力センサ」「力センサ」「センサ」はすべてロボットのエンドに取り付けられた6次元または1次元の力/トルクセンサを指します。

エンド力センサのモデルを設定する

センサモデルを設定します。数値を入力して対応するセンサのモデルを指定します。

set_torsensor_brand(sensor_brand)
  • パラメータの説明
    • sensor_brand センサモデル。取り得る値の範囲は1〜6または10であり、センサハードウェア筐体に刻印されたモデル番号と一致している必要があります。10は特にロボットフランジ内部に内蔵されたセンサを指します。このタイプのセンサはシステムによって自動管理され、このインターフェースを呼び出して設定する必要はありません。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc                       # モジュールのインポート  
robot = jkrc.RC("192.168.220.158")  # ロボットオブジェクトを返します  
robot.login(1)  
ret = robot.set_torsenosr_brand(2)
if ret[0] == 0:  
    print("set_torsenosr_brand 成功")  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout() #ログアウト

エンド部力覚センサーの型番を取得

エンド部力覚センサーの型番を取得

get_torsensor_brand()
  • 戻り値
    • 成功:(0, sensor_brand)、sensor_brand:センサモデル。
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc                       # モジュールのインポート  
robot = jkrc.RC("192.168.220.158")  # ロボットオブジェクトを返します  
robot.login(1)  
ret=robot.get_torsenosr_brand()  
if ret[0] == 0:  
    print("センサモデルは", ret[1])
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout() #ログアウト

エンドエフェクタ力センサーのオン/オフを切り替える

エンドエフェクタ力センサーのオン/オフを切り替える

set_torque_sensor_mode(sensor_mode)
  • パラメータの説明
    • sensor_mode:センサ動作モード。0はセンサの無効化、1はセンサの有効化を意味します。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

センサーエンドの負荷を設定

センサのエンド負荷を設定します。入力値は負荷の質量および負荷重心位置座標です。

注意: set_torq_sensor_tool_payloadとset_payloadの違いをよく区別してください。

payloadはロボットアームの動力学に影響します。

tool_payloadは力制御の効果(すなわち力制御中のアーム力およびトルク補償)に影響します。

エンドフランジにセンサが内蔵されたロボットアームモデル(例:Sシリーズ)では、センサエンド負荷とロボットアーム負荷は同一であり、この場合、対応する2つの設定およびクエリインターフェースは等価です。

set_torq_sensor_tool_payload (mass, centroid)
  • パラメータの説明
    • mass:負荷の質量、単位:kg
    • centroid:負荷の重心座標位置[x, y, z]、単位:mm
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc                       # モジュールのインポート  
robot = jkrc.RC("192.168.220.158")  # ロボットオブジェクトを返します  
robot.login(1)  
ret = robot.set_torq_sensor_tool_payload(mass= 1, centroid =[10,10,0])  
if ret[0] == 0:  
    print("set_torq_sensor_tool_payload 成功")
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout() #ログアウト

センサー先端の負荷を取得

センサーのエンド側の負荷質量と、負荷重心位置の座標を取得します。

get_torq_sensor_tool_payload ()
  • 戻り値
    • 成功:(0,(mass, centroid))
      • mass:負荷質量、単位:kg。
      • centroid:負荷の重心位置[ x, y, z]、単位:mm。
    • 失敗:その他

エンド負荷識別の状態を取得

get_torq_sensor_identify_status()
  • パラメータの説明
    • identify_status:識別状態。0 は識別完了で結果が読み取り可能、1 は現在読み取れる結果がない、2 は識別失敗を意味します。
  • 戻り値
    • 成功:(0,identify_status)
    • 失敗:その他

ツールエンド負荷の識別を開始

ツールエンド負荷の識別を開始します。入力は6要素のタプルで、それぞれ終端位置の6つの関節角に対応します。 注意:これは動作をトリガーする命令であり、ロボットが joint_pos で指定された位置に移動します。

start_torq_sensor_payload_identify(joint_pos)
  • パラメータの説明
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-   
import time        
import jkrc  
PI = 3.1415926  

robot = jkrc.RC("192.168.220.158")#ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.power_on()  
ret = robot.enable_robot()  
robot.set_torsenosr_brand(2)  
robot.set_torque_sensor_mode(1)  
robot.set_compliant_type(1, 1)  
print("センサー初期化完了")  
print("実行準備完了")  
ret = robot.get_joint_position()  
joint_pos_origin = ret[1]  
joint_pos = ret[1]  
print(joint_pos)  
joint_pos[3] += PI / 4  
if (joint_pos[3] > 265 * PI / 180):  
    joint_pos[3] -= 90  
joint_pos[4] += PI / 4  
if (joint_pos[4] > 320 * PI / 180):  
    joint_pos[4] -= 90  
joint_pos[5] += PI / 4  
if (joint_pos[5] > 265 * PI / 180):  
    joint_pos[5] -= PI  
print(joint_pos)  
ret = robot.start_torq_sensor_payload_identify(joint_pos)  
time.sleep(1)  
flag = 1  
while (1 == flag):  
    ret = robot.get_torq_sensor_identify_staus()  
    print(ret)  
    time.sleep(1)  
    flag = ret[1]  
print("identy_finish")  
ret = robot.get_torq_sensor_payload_identify_result()  
print(ret)  
ret = robot.set_torq_sensor_payload()  
print(ret)  
ret = robot.get_torq_sensor_payload_identify_result()  
print(ret)  
robot.joint_move(joint_pos_origin,0,1,10)  
print("back")  
robot.logout()  #ログアウト

エンドエフェクタの負荷識別結果を取得

エンドエフェクタの負荷識別結果を取得します。入力は負荷の質量および負荷重心位置の座標です。

get_torq_sensor_payload_identify_result()
  • パラメータの説明
    • mass:負荷の質量、単位:kg
    • centroid:負荷の重心位置[ x、y、z](単位:mm)
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

エンドエフェクタの力センサー通信パラメータを設定

set_torque_sensor_comm(type, ip_addr, port)
  • パラメータの説明
    • type:センサータイプ
    • ip_addr:センサーのIPアドレス
    • port:ポート番号
    • 1に設定するかUSBを使用する場合、ip_addrとportは無効であり、例のようにデフォルトパラメータを指定すれば十分です。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

エンドエフェクタの力センサー通信パラメータを取得

get_torque_sensor_comm()
  • 戻り値
    • 成功:(0, type, ip_addr, port)
      • type: 0はネットワークポートまたはUSBを使用、1はTIOを使用。
      • ip_addr: ネットワークポート使用時のセンサーIPアドレス。
      • port: ネットワークポート使用時のフォースコントロールセンサーポート番号。
      • TIOまたはUSBを使用する場合、ip_addrとportは無効なパラメータであり、返り値に実際の意味はありません。
    • 失敗:その他

エンドエフェクタの力センサーのローパスフィルタカットオフ周波数を設定

エンドエフェクタの力センサーのローパスフィルタカットオフ周波数を設定

set_torque_sensor_filter(torque_sensor_filter)
  • パラメータの説明
    • torque_sensor_filter: ローパスフィルターパラメータ、浮動小数点数 単位:HZ
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

エンドエフェクタの力センサーのローパスフィルタカットオフ周波数を取得

エンドエフェクタの力センサーのローパスフィルタカットオフ周波数を取得

get_torque_sensor_filter()
  • パラメータの説明

  • 戻り値

    • 成功:(0, torque_sensor_filter)
      • torque_sensor_filter: ローパスフィルターパラメータ、浮動小数点数 単位:HZ
    • 失敗:その他

エンド力センサのソフトリミットを設定する

エンド力センサのソフトリミットを設定する

set_torque_sensor_soft_limit(fx, fy, fz, tx, ty, tz)
  • パラメータの説明
    • fx: X軸方向の力、単位:N
    • fy: Y軸方向の力、単位:N
    • fz: Z軸方向の力、単位:N
    • tx: X軸まわりのトルク、単位:Nm
    • ty: Y軸まわりのトルク、単位:Nm
    • tz: Z軸まわりのトルク、単位:Nm
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

エンド力センサのソフトリミットを取得する

エンド力センサのソフトリミットを取得する

get_torque_sensor_soft_limit()
  • 戻り値
    • 成功:(0, (fx, fy, fz, tx, ty, tz))
      • fx: X軸方向の力、単位:N
      • fy: Y軸方向の力、単位:N
      • fz: Z軸方向の力、単位:N
      • tx: X軸まわりのトルク、単位:Nm
      • ty: Y軸まわりのトルク、単位:Nm
      • tz: Z軸まわりのトルク、単位:Nm
    • 失敗:その他

ツールドラッグのオン/オフを切り替える

互換性インターフェースとして予約。

バージョン1.7.1のコントローラーに対応、1.7.2では代替インターフェースを使用してください。

ツールドラッグのオン/オフを切り替えます。センサーを有効にし、適切なアドミッタンス制御パラメータを設定する必要があります。さらに、ツールドラッグを有効にする前に、フォースセンサーのゼロ校正を少なくとも1回行うことを推奨します。

enable_admittance_ctrl(enable_flag)

1.7.2コントローラー対応インターフェースは次のとおりです

set_ft_ctrl_mode(enable_flag)
  • パラメータの説明
    • enable_flag:フラグ。0は力制御ドラッグの有効化をオフにし、1はオンにします。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-       
import jkrc  

robot = jkrc.RC("192.168.220.158")#ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.power_on()  
ret = robot.enable_robot()  
robot.set_torsenosr_brand(2)  
robot.set_torque_sensor_mode(1)  
robot.set_compliant_type(1, 1)  
print("センサー初期化完了")  
print("実行準備完了")  
#コンプライアンス制御パラメータを設定  
ret = robot.set_admit_ctrl_config(0, 0, 20, 5, 0, 0)  
ret = robot.set_admit_ctrl_config(1, 0, 20, 5, 0, 0)  
ret = robot.set_admit_ctrl_config(2, 1, 20, 10, 0, 0)
ret = robot.set_admit_ctrl_config(3, 0, 20, 5, 0, 0)  
ret = robot.set_admit_ctrl_config(4, 0, 20, 5, 0, 0)  
ret = robot.set_admit_ctrl_config(5, 0, 20, 5, 0, 0)  
#力制御ドラッグを有効化設定、1はオン、0はオフ  
ret = robot.enable_admittance_ctrl(1)  
print("enable_admittance_ctrl オープン!")  
print("終了するには任意の文字を入力してください:")  
a = input()  
ret = robot.enable_admittance_ctrl(0)  
ret = robot.set_admit_ctrl_config(2, 0, 20, 5, 0, 0)  
robot.set_torque_sensor_mode(0)  
robot.logout()  #ログアウト

力制御タイプとゼロ校正(初期化)オプションを設定

互換性インターフェースとして予約。

1.7.1コントローラーに対応、1.7.2は複数の代替インターフェースに分割されています。1.7.2コントローラーがこのインターフェースを呼び出す際は、ゼロリセットのトリガーと力制御タイプの設定のみを実行します。ただし、sensor_compensationが1の場合、compliance_typeパラメータは必ず0に設定し、さらに1秒待ってから再度このインターフェースを呼び出してcompliance_typeパラメータを設定する必要があります。

set_compliant_type(sensor_compensation, compliance_type)

1.7.2コントローラーのセンサーゼロリセットインターフェースは次のとおりです:

zero_end_sensor()
  • パラメータの説明
    • sensor_compensation:1は即座に1回センサーのゼロリセットを実行し、APPのリアルタイム力曲線表示および10000ポートのtorqsensor11を[]実際の外力に切り替えます。0は[]ゼロリセットを行わず、力制御状態でない場合、APPのリアルタイム力曲線表示および10000ポートのtorqsensor11を[][]センサーの生読み値に切り替えます(力制御状態の場合は引き続き実際の外力です)。
    • compliance_type:0はコンプライアンス制御を使用しないことを示し、1は一定力コンプライアンス制御を有効にし、2は速度コンプライアンス制御を有効にすることを示します。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-       
import jkrc  
robot = jkrc.RC("192.168.220.158")#ロボットオブジェクトを返す  
ret = robot.login(1)#ログイン  
ret = robot.set_compliant_type(1,1)
if ret[0] == 0:  
    print("set_compliant_type 成功")  
else:  
    print("何かが起こりました。エラーコードは: ",ret[0])  
robot.logout()  #ログアウト

力制御タイプと読み取り値表示(初期化)状態を取得

互換性インターフェースとして予約。

1.7.1コントローラに対応し、1.7.2では対応する代替インターフェースを提供します。1.7.2コントローラがこのインターフェースを呼び出す場合、力制御タイプの取得機能のみを実現し、sensor_compensationパラメータは意味を持ちません。

力制御タイプとセンサー初期化状態を取得する

get_compliant_type()
  • 戻り値
    • 成功:(0, sensor_compensation, compliance_type)
      • sensor_compensation  センサー補償が有効かどうかを示し、1はAPPのリアルタイム力曲線表示およびtorq_sensor_monitor_data.actTorqueが実際の外力であることを意味します。0は力制御状態下にない場合、APPのリアルタイム力曲線表示およびtorq_sensor_monitor_data.actTorqueがセンサーの生読値であることを意味します(力制御状態下では依然として実際の外力)。
      • compliance_type 0 はいかなる柔順制御方法も使用しないことを示し、1 は一定力柔順制御、2 は速度柔順制御を示します。
    • 失敗:その他

柔順制御パラメータを設定する

ロボットの柔順制御設定時の関節座標軸番号、柔順方向、減衰力、反発力、一定力、法線追従などのパラメータを設定します。

set_admit_ctrl_config(axis, opt, ftUser, ftConstant, ftNormalTrack, ftReboundFK)
  • パラメータの説明
    • axis: デカルト空間の座標軸番号を示し、値は0~5で、それぞれfx、fy、fz、mx、my、mz方向に対応します。
    • opt: 柔順方向、0はオフを示し、1はオンを示します。
    • ftUser:減衰力、ユーザーがロボットをある方向に最大速度で動かすために必要な力の大きさを示します。
    • ftConstant: 一定力、手動操作時はすべて0に設定します。
    • ftNormalTrack:法線追従、手動操作時はすべて0に設定します。
    • ftReboundFK: 反発力、ロボットが初期状態に戻る能力を示します。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

力制御座標系を設定する

力制御座標系を設定する

互換性インターフェースとして予約。

1.7.1コントローラに対応し、1.7.2では異なる力制御機能に応じて複数の対応代替インターフェースに分割されます。1.7.2コントローラがこのインターフェースを呼び出すとき、すべての代替インターフェースを呼び出し、同じパラメータを設定します。

set_ft_ctrl_frame(ftFrame)
  • パラメータの説明
    • ftFrame: 0 ツール; 1 ワールド
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

力制御座標系を取得

互換性インターフェースとして予約。

1.7.1コントローラに対応し、1.7.2では異なる力制御機能に応じて複数の対応代替インターフェースに分割されます。1.7.2コントローラがこのインターフェースを呼び出す場合、一定力柔順制御機能に対応する力制御座標系を返します。

力制御座標系を取得

get_ft_ctrl_frame()
  • 戻り値
    • 成功:(0,ftFrame)
      • ftFrame: 0 ツール; 1 ワールド
    • 失敗:その他

力制御柔順制御パラメータを設定する

互換性インターフェースとして予約。

1.7.1コントローラに対応し、1.7.2では異なる力制御機能に応じて複数の対応代替インターフェースに分割されます。1.7.2コントローラがこのインターフェースを呼び出すとき、すべての代替インターフェースを呼び出し、同じパラメータを設定します。

力制御のコンプライアンス制御パラメータを取得し、6つの関節に対応するコンプライアンス方向、減衰力、反発力、一定力、法線追従を取得します。

set_admit_ctrl_config(axis,opt,ftUser,ftReboundFK,ftConstant,ftNnormalTrack)
  • パラメータの説明
    • axis:0,x軸;1,y軸;2,z軸;3,rx;4,ry;5,rz。
    • opt:0 オフ,1 オン。
    • ftUser:ダンピング。これはロボット先端が外部環境に対して示す剛性に影響します。このパラメータが大きいほど、ロボット先端が示す剛性は大きくなります。単位:×8N·s/m (x/y/z用)、×16Nm·s/π (rx/ry/rz用)
    • ftReboundFK:リバウンド。これはロボットのコンプライアンス制御過程で、指令軌跡(または初期位置)との弾性係数を表します。単位は N/mm (x/y/z用)、Nm/rad (rx/ry/rz用) です。
    • ftConstant:目標力を表し、単位は N (x/y/z用)、Nm (rx/ry/rz用) です。
    • ftNnormalTrack:過去との互換性のためのインターフェースであり、正常動作を確保するために現在はすべて0に設定する必要があります。
    • 上記各パラメータの詳細については、力制御製品の取扱open in new window説明書の関連説明を参照してください。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

力制御のコンプライアンス制御パラメータを取得する

互換性インターフェースとして予約。

1.7.1コントローラに対応し、1.7.2では異なる力制御機能に応じて複数の対応代替インターフェースに分割されます。1.7.2 コントローラがこのインターフェースを呼び出した場合、一定力コンプライアンス制御機能に対応するコンプライアンスパラメータを返します。

力制御のコンプライアンス制御パラメータを取得する

get_admit_ctrl_config()
  • 戻り値
    • 成功:(0, [[opt, ftUser, ftReboundFK, ftConstant, ftNormanlTrack], ……])
      • opt: 0オフ、1オン。
      • ftUser:減衰力、ユーザーがロボットをある方向に最大速度で動かすために必要な力の大きさを示します。
      • ftReboundFK: 反発力、ロボットが初期状態に戻る能力を示します。
      • ftConstant: 一定力、手動操作時はすべて0に設定します。
      • ftNormalTrack:法線追従、手動操作時はすべて0に設定します。
    • 失敗:その他

トルク制御をオフにする

力コンプライアンス制御をオフにする(一定力コンプライアンス制御と速度コンプライアンス制御には有効ですが、ツールドラッグには無効です)

disable_force_control ()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

速度コンプライアンス制御パラメータを設定する

1.7.2 は廃止されたインターフェースであり、使用は推奨されません

速度コンプライアンス制御パラメータを設定します。速度コンプライアンス制御には3つのレベルと4つの比率レベルがあります。

set_vel_compliant_ctrl (level, rate1, rate2, rate3, rate4)
  • パラメータの説明

    • level: コンプライアンス制御レベル。レベルは 1, 2, 3 に分かれます。
      • rate1: 比率レベル1
      • rate2: 比率レベル2
      • rate3: 比率レベル3
      • rate4: 比率レベル4

        注意:

        比率レベル間の関係: 0<rate4<rate3<rate2<rate1<1;

  • level=1 の場合、rate1 と rate2 のみ設定可能で、rate3 および rate4 の値はすべて 0 です。

  • level=2 の場合、rate1、rate2、rate3 のみ設定可能で、rate4 の値は 0 です。

  • level=3 の場合、rate1、rate2、rate3、rate4 の値を設定できます。 :::

  • 戻り値

    • 成功:(0,)
    • 失敗:その他

コンプライアンス制御トルク条件を設定する

1.7.2 は廃止されたインターフェースであり、使用は推奨されません

set_compliance_condition(fx, fy, fz, tx, ty, tz)
  • パラメータの説明(以下のパラメータはコンプライアンス制御トルク制限であり、制限値を超えると停止します)
    • fx: X軸方向の力、単位:N
    • fy: Y軸方向の力、単位:N
    • fz: Z軸方向の力、単位:N
    • tx: X軸まわりのトルク、単位:Nm
    • ty: Y軸まわりのトルク、単位:Nm
    • tz: Z軸まわりのトルク、単位:Nm
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

注:

以下のインターフェースはバージョン1.7.2以降のコントローラ専用です。1.7.2以降のコントローラでは、これらのインターフェースを優先的に使用してください。

センサーをゼロ設定にする

センサーのゼロ点をキャリブレーションし、0.5秒間ブロックします。

zero_end_sensor()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

センサーのハードウェアレベル校正

センサーのハードウェアレベル校正をトリガーし、センサー数値の精度を向上させます。

tio_sensor_calib(type)
  • パラメータの説明
    • type: 0:効果なし。1: キャリブレーションを実行。2: 現在のキャリブレーション値を照会。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

      注意

      この指令は即時に有効にはならず、ロボット制御キャビネットの再起動後、初回の電源投入時に現在のセンサー状態でキャリブレーションが行われます。キャリブレーションには5〜10秒かかる場合があります。この指令を送信した後、次回再起動・通電後に5〜10秒待ってから有効化すると、最適なキャリブレーション結果が得られます。

この指令はセンサー数値精度の極限向上が必要な場合のみ使用してください。不適切な使用はセンサーのゼロ点が大きくずれて予期せぬ事態を引き起こす可能性があります。頻繁または繰り返しのキャリブレーションは推奨されません。通常のセンサー数値校正は、センサーゼロ調整インターフェースによるソフトウェア調整を推奨します。

この指令が有効化された後は、起動時にアプリ上に表示される現在のキャリブレーション結果を必ず記録し、その後の使用過程で実際の荷重がこのキャリブレーション結果との合計でセンサーの測定範囲を超えないようにしてください。 :::

センサーの動作状態を取得する

センサーの動作状態を取得する

get_torque_sensor_mode()
  • 戻り値
    • 成功:(0,sensor_mode)
      • sensor_mode: センサーがオンまたはオフの状態。0はオフ、1はオン。
    • 失敗:その他

センサーの状態とデータを取得する

センサーの状態とデータを取得する

get_torque_sensor_data(type)
  • パラメータの説明
    • type: データ取得タイプ。1:torq_sensor_monitor_data.actTorqueと同じ;2:torq_sensor_monitor_data.torqueと同じ(センサーの生データ);3:torq_sensor_monitor_data.realTorqueと同じ(負荷の重力補償とセンサーのオフセットを差し引いた実際の力)。
  • 戻り値
    • 成功:(0,(errorCode, status, data))
      • errorCode: エラーコード
      • status: ステータス
      • data: データ
    • 失敗:その他

定常力コンプライアンス制御パラメータを設定

定常力コンプライアンス制御パラメータを設定

set_ft_ctrl_config(type)
  • パラメータの説明
    • type: データ取得タイプ。1:torq_sensor_monitor_data.actTorqueと同じ;2:torq_sensor_monitor_data.torqueと同じ(センサーの生データ);3:torq_sensor_monitor_data.realTorqueと同じ(負荷の重力補償とセンサーのオフセットを差し引いた実際の力)。
  • 戻り値
    • 成功:(0,(errorCode, status, data))
      • errorCode: エラーコード
      • status: ステータス
      • data: データ
    • 失敗:その他

フォースコントロールツールドラッグの有効状態を取得

get_tool_drive_state()
  • 戻り値
    • 成功:(0,enable_flag, drive_state)
      • enable_flag: 0 は力制御ドラッグ有効化をオフにし、1 はオンにします。
      • drive_statは、ドラッグの現在の状態が特異点、速度、関節リミットの警告をトリガーしているかどうかを示します。
    • 失敗:その他

ツールドラッグ座標系を取得

get_tool_drive_frame()
  • 戻り値
    • 成功:(0,ftFrame)
      • ftFrame: 0 ツール; 1 ワールド
    • 失敗:その他

ツールドラッグ座標系を設定

set_tool_drive_frame(ftFrame)
  • パラメータの説明
    • ftFrame: 0 ツール; 1 ワールド
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

融合ドライブ感度を取得

get_fusion_drive_sensitivity_level()
  • 戻り値
    • 成功:(0,level)
      • level: 感度レベル、値は0〜5、0はオフ
    • 失敗:その他

融合ドライブ感度を設定

set_fusion_drive_sensitivity_level(level)
  • パラメータの説明
    • level: 感度レベル、値は0〜5、0はオフ
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

動作制限(特異点および関節リミット)の警告範囲を取得

get_motion_limit_warning_range(warningRange)
  • 戻り値
    • 成功:(0,warningRange) warningRange: 警告範囲
    • 失敗:その他

動作制限(特異点および関節リミット)の警告範囲を設定

set_motion_limit_warning_range(warningRange)
  • パラメータの説明
    • warningRange: 警告範囲
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

力制御の速度制限を取得する

get_compliant_speed_limit(vel,angularvel)
  • 戻り値
    • 成功:(0,vel,angularvel)
      • vel: 線速度制限、mm/s
      • angularvel: 角速度制限、rad/s
    • 失敗:その他

力制御の速度制限を設定する

set_compliant_speed_limit(vel,angularvel)
  • パラメータの説明
    • vel: 線速度制限、mm/s
    • angularvel: 角速度制限、rad/s
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

トルク参照点を取得

get_torque_ref_point()
  • 戻り値
    • 成功:(0,refpoint)
      • refpoint: 0: センサー中心; 1: TCP中心
    • 失敗:その他

トルク基準中心を設定する

set_torque_ref_point(refpoint)
  • パラメータの説明
    • refpoint: 0: センサー中心。1: TCP中心
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

センサー感度を取得する

get_end_sensor_sensitivity_threshold ()
  • 戻り値
    • 成功:(0,data)
      • fx: X軸方向の力、単位:N
      • fy: Y軸方向の力、単位:N
      • fz: Z軸方向の力、単位:N
      • tx: X軸まわりのトルク、単位:Nm
      • ty: Y軸まわりのトルク、単位:Nm
      • tz: Z軸まわりのトルク、単位:Nm
    • 失敗:その他

センサー感度を設定する

set_end_sensor_sensitivity_threshold (fx, fy, fz, tx, ty, tz)
  • パラメータの説明
    • fx: X軸方向の力、単位:N
    • fy: Y軸方向の力、単位:N
    • fz: Z軸方向の力、単位:N
    • tx: X軸まわりのトルク、単位:Nm
    • ty: Y軸まわりのトルク、単位:Nm
    • tz: Z軸まわりのトルク、単位:Nm
    • 6次元配列、0〜1、値が大きいほどセンサーの感度が低くなる
  • 戻り値
    • 成功:(0,data)
    • 失敗:その他

定常力コンプライアンス制御パラメータを設定

定力コンプライアンス制御パラメータを設定。以前の set_admit_ctrl_config 機能と同じだが、引数 ftNnormalTrack を削除。

  • パラメータの説明
    • axis はどの軸を設定するかを表し、選択可能な値は 0~5 の柔軟方向で、それぞれ fx、fy、fz、mx、my、mz に対応します。
    • opt 0 は未選択を示し、0以外の値は選択済みを示す
    • ftDamping はダンピング力で、力制御中におけるロボットの硬さを表します。
    • ftConstant は目標力を表します。
    • ftReboundFK は反発力で、ロボットアームが指令軌道に弾性的に戻る力を表します。
  • 戻り値 成功:(0,) 失敗: その他
set_cst_force_ctrl_config(axis, opt, ftDamping, ftConstant, ftReboundFK)

定常力コンプライアンス制御パラメータを取得

定力コンプライアンス制御パラメータを取得。以前の get_admit_ctrl_config と同じ。

  • 戻り値
    • 成功:(0, ((0.0, 50.0, 0.0, 0.0, 0.0), (0.0, 50.0, 0.0, 0.0, 0.0), (1.0, 25.0, 0.0, 5.0, 0.0), (0.0, 5.0, 0.0, 0.0, 0.0), (0.0, 5.0, 0.0, 0.0, 0.0), (0.0, 5.0, 0.0, 0.0, 0.0)))
      • パラメータ説明: 戻り値は6つの5次元配列で、それぞれ6軸に対応するデータを表す。各配列の5つの要素の意味は前のインターフェース説明を参照。
    • 失敗: その他
get_cst_force_ctrl_config()

恒力コンプライアンス制御座標系を設定

定力コンプライアンス制御座標系を設定し、コントローラ内部の新しいインターフェースを呼び出す

  • パラメータの説明
    • cstForceFrame 0はツール 1はワールド
  • 戻り値 成功:(0,) 失敗: その他
set_cst_force_ctrl_frame(cstForceFrame)

恒力コンプライアンス制御座標系を取得

定力コンプライアンス制御座標系を取得し、コントローラ内部の新しいインターフェースを呼び出す

  • 戻り値 成功:(0,cstForceFrame)
    • cstForceFrame 0はツール 1はワールド 失敗: その他
get_cst_force_ctrl_frame()

力制御ドラッグ感覚パラメータを設定

力制御ドラッグ感度パラメータを設定し、コントローラ内部の対応インターフェースを呼び出す

  • パラメータの説明
    • axis はどの軸を設定するかを表し、選択可能な値は 0~5 の柔軟方向で、それぞれ fx、fy、fz、mx、my、mz に対応します。
    • opt 0 は未選択を示し、0以外の値は選択済みを示す
    • rigidity はドラッグ感覚を表し、範囲は 0~1 で、値が大きいほど硬くなります。
    • rebound は反発力で、ロボットアームが初期位置に弾性的に戻る力を表します。
  • 戻り値 成功:(0,) 失敗: その他
set_tool_drive_config(axis, opt, rigidity, rebound)

ツールドラッグパラメータを取得

ツールドラッグパラメータを取得し、コントローラ内部の新しいインターフェースを呼び出す

  • パラメータの説明
    • admit_ctrl_cfg ロボットアームの力制御コンプライアンス制御パラメータの保存アドレス
  • 戻り値 成功:
(0, ((0, 1, 0.0, 0.30000001192092896, <NULL>), (1, 1, 0.0, 0.30000001192092896, <NULL>), (2, 1, 0.0, 0.30000001192092896, <NULL>), (3, 1, 0.0, 0.30000001192092896, <NULL>), (4, 1, 0.0, 0.30000001192092896, <NULL>), (5, 1, 0.0, 0.30000001192092896, <NULL>)))
  • パラメータ説明: 戻り値は6つの5次元配列で、それぞれ6軸に対応するデータを表す。各配列の4つの要素の意味は前のインターフェース説明を参照。 失敗: その他
get_tool_drive_config()  

力制御ツールドラッグ有効化

力制御ツールドラッグ有効化。enable_admittance_ctrl と同じで、事前にツールドラッグパラメータを設定し、フォースセンサーの起動とゼロ校正を行う必要があります。

  • パラメータの説明
    • enable_flag 0 は力制御ドラッグの無効化、1 は有効化を示します。
  • 戻り値 成功:(0,) 失敗: その他
enable_tool_drive(enable_flag)

定常力コンプライアンス制御の有効/無効を設定

定常力コンプライアンス制御の有効/無効を設定

  • パラメータの説明
    • enable_flag 0 は無効化、1 は有効化。コントローラ内部の compliantType 変数に値を代入し、従来の set_compliant_type インターフェースと同じ動作をします。
  • 戻り値 成功:(0,) 失敗: その他
enable_cst_force_ctrl(enable_flag)

力制御の停止条件を設定する

力制御終了条件を設定します。APPのグラフィカルプログラミングと同名の命令と同じ意味です。

set_force_stop_condition([opt,lowerlimiton,lowerlimit,upperlimiton,upperlimit],[...],[...],[...],[...],[...])
  • パラメータの説明

    • opt は 6 次元配列で、6 つの次元それぞれで力制御終了条件を有効にするかどうかを表し、0 は未選択、0 以外の値は選択済みを示す
    • lowerlimiton は6次元配列で、0 は下限を設定しないことを、0以外の値は設定することを意味します。
    • lowerlimit は 6 次元配列で、下限値
    • upperlimiton は6次元配列で、0 は上限を設定しないことを、0以外の値は設定することを意味します。
    • upperlimit は 6 次元配列で、上限値 インターフェースに渡す6つのリスト(6軸を表す)、各リストには5つのデータがあり、具体的な意味は上記の通りです。
  • 戻り値 成功:(0,) 失敗: その他

set_force_stop_condition([0,1,2,3,4],[0,0,0,0,0][0,0,0,0,0][0,0,0,0,0][0,0,0,0,0][0,0,0,0,0])

定力コンプライアンスの有効状態を取得

定常力コンプライアンスの有効状態を取得します。コントローラ内部の compliantType 値を読み込むだけです。

  • 戻り値 成功:(0,cst_force_ctrl_stat)
    • cst_force_ctrl_stat:0 は未有効、1 は有効、2 は速度モード(互換性のため、新しいバージョンでは2は存在しません) 失敗: その他
get_cst_force_ctrl_stat()

接近速度制限を設定

接近速度制限を設定

  • パラメータの説明
    • speed_limit 線速度制限、mm/s
    • angular_speed_limit 角速度制限、rad/s
  • 戻り値 成功:(0,speed_limit, angular_speed_limit) 失敗: その他
set_approach_speed_limit(speed_limit, angular_speed_limit)

接近速度制限を取得

接近速度制限を取得

  • 戻り値 成功:(0,speed_limit, angular_speed_limit)
    • speed_limit 線速度制限、mm/s
    • angular_speed_limit 角速度制限、rad/s 失敗: その他
get_approach_speed_limit()

恒力制御許容値を設定

恒力制御許容値を設定

  • パラメータの説明
    • force_tol 力の許容誤差
    • torque_tol トルクの許容誤差
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
set_cst_force_ctrl_tol(force_tol, torque_tol)

恒力制御許容値を取得

恒力制御許容値を設定

  • 戻り値
    • 成功:(0, force_tol, torque_tol)
      • force_tol 力の許容誤差
      • torque_tol トルクの許容誤差
    • 失敗:その他
get_cst_force_ctrl_tol()

FTP

FTP初期化

FTPクライアントを初期化し、制御キャビネットと接続を確立して、programとtrackのインポートおよびエクスポートを行うことができます。

init_ftp_client()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

FTP終了

close_ftp_client()
  • 戻り値
    • 成功:(0,)
    • 失敗:その他

コントローラのFTPディレクトリを取得します

get_ftp_dir(remotedir, type)
  • パラメータの説明
    • remotedir:コントローラ内部フォルダ名
    • type:0 ファイルとフォルダ 1 ファイル 2 フォルダ
  • 戻り値
    • 成功:(0,ret) retは文字列です
    • 失敗:その他
  • コード例
# -*- coding: utf-8 -*-
import jkrc                           # モジュールをインポート  
robot = jkrc.RC("192.168.220.158")  # ロボットオブジェクトを返します  
robot.login(1)  
dir= "/program/"  
robot.init_ftp_client()  
result = robot.get_ftp_dir("/program/", 0)  
print(result)  
robot.close_ftp_client()  
robot.logout()

FTPファイルをダウンロード

ロボット制御キャビネットのFTPからファイルまたはフォルダをローカルにダウンロードします。軌跡は "/track/"、スクリプトプログラムは "/program/" で検索します。

download_file(local, remote, opt)
  • パラメータの説明
    • remote:コントローラ内部ファイル名の絶対パス。フォルダの場合はシステムにより "" または "/" で終わる必要があります。例えば単一ファイル “/program/test/test.jks” またはフォルダ “/program/test/”
    • local:ローカルへのダウンロード先ファイル名の絶対パス
    • opt:1 単一ファイル 2 フォルダ
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:ftp上のprogramフォルダーをデスクトップのprogramフォルダーにダウンロードする
import jkrc  
robot = jkrc.RC("192.168.2.26")#VMmodel  
robot.login(1)  
remote = "/program/"  
local= "C:\\Users\\Administrator\\Desktop\\program\\track\\"  
robot.init_ftp_client()  
result = robot.download_file(local, remote, 2)  
print(result)  
robot.close_ftp_client()  
robot.logout()  

FTPへファイルをアップロード

ローカルから指定した種類と名前のファイルをコントローラへアップロードします。

upload_file(local, remote,  opt)
  • パラメータの説明
    • remote コントローラ内部のファイル名絶対パス。フォルダーはシステムにより""または“/”で終わる必要があります。
    • local ローカルファイル名の絶対パス
    • opt:1 単一ファイル 2 フォルダ
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:デスクトップのlxxproフォルダー内のすべてのファイルとフォルダーをftpのprogram/フォルダーにアップロードする
import jkrc  
robot = jkrc.RC("192.168.2.26")#VMmodel  
robot.login(1)  
remote = "/program/"  
local= "C:\\Users\\Administrator\\Desktop\\lxxpro\\"  
robot.init_ftp_client()  
result = robot.upload_file(local, remote, 2)  
print(result)  
robot.close_ftp_client()  
robot.logout()

FTP上のファイル名を変更

コントローラ内の指定された種類と名前のファイルの名前を変更します。

rename_ftp_file(local, remote,  opt)
  • パラメータの説明
    • remote コントローラ内部のファイル名絶対パス。フォルダーはシステムにより""または“/”で終わる必要があります。
    • des 変更後のターゲット名
    • opt 1単一ファイル 2フォルダー。ファイルをリネームする際はフォルダー内の全ファイルもリネームされ、/track/での使用に便利です。
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例:ftpのlxxproフォルダー内のすべてのファイルとフォルダーをlxxにリネームする
import jkrc  

robot = jkrc.RC("192.168.2.26")#VMmodel  
robot.login(1)  
remote = "/lxxpro/"  
des = "lxx"  
robot.init_ftp_client()  
result = robot.rename_ftp_file(remote, des, 2)  
print(result)  
robot.close_ftp_client()  
robot.logout()

FTP上のファイルを削除

コントローラから指定された種類と名前のファイルを削除します。

del_ftp_file( リモート, オプション)
  • パラメータの説明
    • remote コントローラ内部のファイル名絶対パス。フォルダーはシステムにより""または“/”で終わる必要があります。
    • opt:1 単一ファイル 2 フォルダ
  • 戻り値
    • 成功:(0,)
    • 失敗:その他
  • コード例(操作には注意。この例はすべてのプログラムを削除します
import jkrc  

robot = jkrc.RC("192.168.2.26")#VMmodel  
robot.login(1)  
dir= "/program/"  
robot.init_ftp_client()  
result = robot.del_ftp_file("/program/", 2)  
print(result)  
robot.close_ftp_client()  
robot.logout()

インターフェース呼び出し戻り値リストおよび問題のトラブルシューティング

エラーコード説明処理の提案
0成功null
2インターフェースエラーまたはコントローラーが未対応コントローラーとSDKのバージョン情報を確認し、アップグレードまたは他のインターフェースに切り替えてください
-1無効なハンドラー呼び出しインターフェースの前にログインしているか確認してください
-2無効なパラメータパラメータが正しいか確認してください
-3接続に失敗しましたネットワーク接続状態、またはロボットのIPが正しいか確認してください
-4逆運動学エラー逆解に失敗しました。現在の座標系、または参照関節角が適切か確認してください
-5非常停止非常停止状態、保持状態
-6電源が入っていません未通電
-7未イネーブル有効化されていません
-8サーボモードではありませんサーボモードではありません。servoJPを実行する際は、先にサーボモードに入る必要があります。対応するインターフェースを呼び出しているか確認してください
-9電源を切る前にイネーブルをオフにする必要があります電源を切る前に必ずイネーブルを解除してください
-10操作できません。プログラムが実行中です操作できません。プログラムが実行中です。先にプログラムを終了してください
-11ファイルを開けない、またはファイルが存在しませんファイルを開けません、またはファイルが存在しません
-12動作異常動作が異常です。特異点付近にあるか、ロボットの動作制限を超えている可能性があります
-14ftpエラーftp異常
-15ソケットメッセージまたは値が大きすぎます制限超過異常
-16kine_forward エラー順運動学の解が失敗しました
-17空のフォルダーはサポートされていません空のフォルダーはサポートされていません
-20保護停止保護停止
-21緊急停止緊急停止
-22ソフトリミット上ソフトリミット内にあり、手動でロボットをドラッグできません。APPのティーチング機能を使用してソフトリミットから離してください。
-30コマンド文字列のエンコードに失敗しましたコマンドのエンコードに失敗しました。通常はコントローラーからのメッセージ解析時のエラーです。
-31コマンド文字列のデコードに失敗しましたコマンドのデコードに失敗しました。通常はコントローラーからのメッセージ解析時のエラーです。
-32ポート10004の文字列の解凍に失敗しましたポート10004のデータの解凍に失敗しました。ネットワークの不安定またはデータ量過多が原因の可能性があります。
-40直線移動エラー直線運動に失敗しました。軌道内に特異点領域がないか確認してください。
-41関節移動エラー関節運動に失敗しました。設定した関節角度を確認してください。
-42円弧移動エラー円弧運動に失敗しました。設定パラメータを確認してください。
-50block_wait タイムアウトブロック待機がタイムアウトしました
-51電源投入タイムアウト電源オンがタイムアウトしました
-52電源オフのタイムアウト電源オフのタイムアウト
-53有効化タイムアウト有効化タイムアウト
-54無効化タイムアウト無効化タイムアウト
-55ユーザーフレーム設定のタイムアウトユーザ座標系設定のタイムアウト
-56ツール設定のタイムアウトツール座標系設定のタイムアウト
-57edg 初期化に失敗しましたedg機能の初期化に失敗しました
-58edgが実行中のため、servo_jまたはservo_pを使用できませんedg機能が実行中のため、servo_jまたはservo_pインターフェースを使用できません
-59現在のedgモードでは、edg_servo_jまたはedg_servo_pの使用はサポートされていません。edg機能が実行中のため、edg_servo_jまたはedg_servo_pインターフェースを使用できません
-60IO設定のタイムアウトIO設定のタイムアウト
-61操作タイムアウトインターフェースのタイムアウト
-62サーボキューが満杯ですサーボキューが満杯です
-63サーボが動作していませんサーボモードが開始されていません
-9997未実装インターフェースが実装されていません
-9998非推奨のインターフェースこのインターフェースは将来的に削除される予定です(現在は利用可能)
-9999廃止されたインターフェースこのインターフェースは将来的に削除される予定です(機能は利用できません)

問題のフィードバック

ドキュメントに不正確な記述や誤りがあった場合は、読者の皆様のご理解とご指摘をお願いいたします。読書中に問題を発見したりご意見がありましたら、support@jaka.com までメールをお送りください。できるだけ早く返信いたします。

最終更新日: