跳至主要內容

Python语言

JAKA大约 67 分钟

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。

动态库版本号查询方法

jkrc的正常使用需要包含动态库文件,以下是动态库版本号的查询方法:

  • Windows 中右击dll文件,选择属性,在“详细信息”选项卡中可以看到版本信息 。
  • Linux 中输入命令strings libjakaAPI.so | grep jakaAPI_version 查询版本信息。

接口列表

机械臂基础

实例化机器人

实例化一个机器人对象。

RC(ip)
  • 参数说明说明
    • ip: 机器人的IP地址,需要填入一个字符串只有正确的IP地址实例化出的对象才能控制机器人。
  • 返回值
    • 成功:返回一个机器人对象
    • 失败:创建的对象会被销毁
  • 代码示例
import jkrc
robot = jkrc.RC("192.168.2.64") #返回一个机器人对象

机器人登录

连接机器人控制器

login()
  • 返回值
    • 成功:(0,)
    • 失败:其它

机器人注销

断开控制器连接

logout()
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc
robot = jkrc.RC("192.168.2.64")#返回一个机器人对象
robot.login()  #登录
pass
robot.logout() #登出

打开机器人电源

打开机器人电源,给真实的机器人上电大概会有8秒钟左右的延迟。

power_on()
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc
robot = jkrc.RC("192.168.2.64")   #返回一个机器人对象
robot.login()     #登录
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()  #登录
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()  #
ret = robot.get_sdk_version()
print("SDK version  is:",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    
#坐标系    
COORD_BASE  = 0    
COORD_JOINT = 1    
COORD_TOOL  = 2    
#运动模式    
ABS = 0    
INCR= 1    
robot = jkrc.RC("192.168.2.160")    
robot.login()    
robot.power_on()    
robot.enable_robot()    
robot.drag_mode_enable(True)    
ret = robot.is_in_drag_mode()    
print(ret)    
a = input()    
robot.drag_mode_enable(False)    
ret = robot.is_in_drag_mode()    
print(ret)    
robot.logout()

查询机器人是否处于拖拽模式

查询机器人是否处于拖拽模式

is_in_drag_mode()
  • 返回值
    • 成功:(0,state) state 为1代表机器人处于拖拽模式,0则相反
    • 失败:其它

设置SDK是否开启调试模式

设置SDK是否开启调试模式

set_debug_mode(mode)
  • 参数说明
    • mode 选择TRUE时,开始调试模式,此时会在标准输出流中输出调试信息;选择FALSE,不开启
  • 返回值
    • 成功:(0,)
    • 失败:其它

设置SDK日志路径

设置SDK日志路径

set_SDK_filepath(filepath)
  • 参数说明
    • filepath:文件路径
  • 返回值
    • 成功:(0,)
    • 失败:其它

机械臂运动

控制机器人在手动模式下运动

控制机器人在手动模式下运动

jog(aj_num , move_mode, coord_type, jog_vel, pos_cmd)
  • 参数说明
    • aj_num:axis_joint_based标识值,在关节空间下代表轴号,1 轴到六轴的轴号分别对应数字 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_mdoe是绝对运动时参数说明可忽略
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例 在关节空间内JOG运动
	# -*- coding: utf-8 -*-  
	import sys  
	sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
	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.2.194")#返回机器人对象  
	robot.login()#登录  
	robot.power_on() #上电  
	robot.enable_robot()  
	print("move1")  
	robot.jog(0,INCR,COORD_JOINT,30,90)  
	time.sleep(5)#jog为非阻塞指令,运动状态下接收jog指令会被丢弃  
	print("move2")  
	robot.jog(0,INCR,COORD_JOINT,5,-90)  
	time.sleep(3)  
	robot.jog_stop()  
	robot.logout()

在笛卡尔空间内JOG运动

import jkrc  
import time  
COORD_BASE = 0    # 基坐标系  
COORD_JOINT = 1   # 关节空间  
COORD_TOOL = 2    #工具坐标系  
ABS = 0             # 绝对运动  
INCR = 1            # 增量运动  
cart_x = 0          #x方向  
cart_y = 1          #y方向  
cart_z = 2          #z方向  
cart_rx = 3         #rx方向  
cart_ry = 4         #ry方向  
cart_rz = 5         #rz方向  
robot = jkrc.RC("192.168.2.64")#返回一个机器人对象  
robot.login()     #登录  
robot.jog(aj_num = cart_z,move_mode = INCR,coord_type = COORD_BASE,jog_vel = 5,pos_cmd = 10)   # z正方向运动10mm  
robot.jog_stop()  
robot.logout()     #登出

提示:

若机器人已经接近奇异姿态或达到关节限位的话,使用上述代码示例将无法JOG机器人。

控制机器人手动模式下运动停止

控制机器人手动模式下运动停止,用于停止JOG

jog_stop(joint_num)
  • 参数说明
    • joint_num: num代表要停止运动的关节轴号,轴号0到5,分别代表关节1到关节6。-1代表停止所有轴的运动。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
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.2.160")#返回机器人对象  
robot.login()#登录  
robot.power_on() #上电  
robot.enable_robot()  
print("move1")  
robot.jog(0,INCR,COORD_JOINT,30,PI)  
time.sleep(5)#jog为非阻塞指令,运动状态下接收jog指令会被丢弃  
print("move2")  
robot.jog(0,INCR,COORD_JOINT,5,-PI)  
time.sleep(0.5)  
robot.jog_stop(0)  #运动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: 关节加速度默认90rad/s^2
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
# import sys  
# sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
  
#运动模式  
ABS = 0  
INCR= 1  
joint_pos=[PI,PI/2,0,PI//4,0,0]  
robot = jkrc.RC("192.168.2.160")#返回机器人对象  
robot.login()#登录  
robot.power_on() #上电  
robot.enable_robot()  
print("move1")  
robot.joint_move(joint_pos,ABS,True,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, )
    • 失败:其它
  • 代码示例:
import jkrc                           #导入模块  
robot = jkrc.RC("192.168.2.226")  #返回一个机器人对象  
robot.login()  
robot.joint_move_extend(joint_pos=[1, 1, 1, 1, 1, 1],move_mode=0, is_block=True, speed=20, acc=5, tol=0.1)  
robot.joint_move_extend(joint_pos=[-1, 1, 1, 1, 1, 0],move_mode=0, is_block=True, speed=20, acc=5, 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
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
	import time        
	import jkrc  
	  
	#运动模式  
	ABS = 0  
	INCR= 1  
	tcp_pos=[0,0,-30,0,0,0]  
	robot = jkrc.RC("192.168.2.160")#返回机器人对象  
	robot.login()#登录  
	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,)
    • 失败:其它

机器人末端圆弧运动

机器人末端圆弧运动

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,)
    • 失败:其它
  • 代码示例
import jkrc                           #导入模块  
robot = jkrc.RC("192.168.2.226")  #返回一个机器人对象  
robot.login()  
robot.circular_move(end_pos = [100, 100, 0, 0, 1, 1],mid_pos = [100, 0, 0, 0, 1, 0],move_mode= 0, is_block = True, speed = 20, acc = 5, tol = 0.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,)
    • 失败:其它
  • 代码示例
import jkrc  
import math  
import traceback  
  
  
_ABS = 0  
_BLOCK = 1  
  
  
try:  
    rc = jkrc.RC("192.168.20.139")    
    rc.login()    
    rc.power_on()    
    rc.enable_robot()    
  
    start_pos = [-406.250, 116.250, 374.000, PI, 0,PI/2]  
    mid_pos = [-468.650, 211.450, 374.000, PI, 0,PI/2]  
    end_pos = [-295.050, 267.450, 374.000, PI, 0, PI/2]  
  
    rc.joint_move([0] + [PI * 0.5] * 3 + [PI * -0.5, 0], 0, 1, 200)  
    rc.linear_move(start_pos, _ABS, _BLOCK, 50)  
    rc.circular_move_extend(end_pos, mid_pos, _ABS, _BLOCK, 250, 1200, 5, None, 5)  
except Exception:    
    traceback.print_exc()

机械臂设置阻塞运动超时时间

机械臂设置阻塞运动超时时间。

set_block_wait_timeout(seconds)
  • 参数说明 Seconds 大于0.5
  • 返回值
    • 成功:(0,)
    • 失败:其它

终止当前机械臂运动

可以在任何情况下终止机器人的运动。

motion_abort ()
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
	# -*- coding: utf-8 -*-  
	import sys  
	#sys.path.append('D:\\vs2019ws\PythonCtt\lib')  
	import time        
	import jkrc  
	robot = jkrc.RC("192.168.2.160")#返回一个机器人对象  
	robot.login()#登录  
	robot.power_on() #上电  
	robot.enable_robot()  
	print("move1")  
	robot.joint_move(joint_pos=[1,0,0,0,0,0],move_mode=1,is_block=False,speed=0.05)#增量运动  
	print("wait")  
	time.sleep(2)  
	print("stop")  
	robot.motion_abort()  
	robot.logout()#登出

查询机器人运动状态

查询机器人运动状态

get_motion_status() 
  • 返回值
    • 成功:(0, data),
      • int motion_line; ///< the executing motion cmd id
      • int motion_line_sdk; ///< reserved
      • BOOL inpos; ///< previous motion cmd is done, should alway check queue info together
      • BOOL err_add_line; ///< previous motion cmd is dropped by controller, like target is already reached
      • int queue; ///< motion cmd number in buffer
      • int active_queue; ///< motion cmd number in blending buffer
      • BOOL queue_full; ///< motion buffer is full and motion cmds reveived at this moment will be dropped
      • BOOL paused; ///< motion cmd is paused and able to resume
    • 失败:其它

查询机器人运动是否停止

查询机器人运动是否停止

is_in_pos()
  • 返回值
    • 成功:(0, state),state为1代表机器人停止,0则相反
    • 失败:其它

机械臂操作信息设置与查询

获取机械臂状态(simple)

获取机械臂状态

get_robot_status_simple()
  • 返回值
    • 成功:(0,data)
      • errcode:错误码
      • errmsg: 错误信息
      • powered_on: 是否上电
      • enabled: 是否上使能
    • 失败:其它

获取机器人状态监测数据

获取机器人状态数据监测数据,支持多线程安全

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 机器人末端工具按钮 [0]free;[1]point;[2]末端灯光按钮
    • 失败:其它

提示:

若机器人无对应IO,会返回如“no extio”字符串。

import sys  
import jkrc  
import time  
  
robot = jkrc.RC("192.168.2.160")  
robot.login()  
ret = robot.get_robot_status()  
if ret[0] == 0:  
    print("the joint position is :",ret[1])   
    print(len(ret[1]))  
    for i in range(len(ret[1])):  
        print(ret[1][i])  
else:  
    print("some things happend,the errcode is: ",ret[0])  
robot.logout()  

设置机器人状态数据自动更新时间间隔

设置机器人状态数据自动更新时间间隔,可以改变系统占用率,默认尽可能快地发送以保证实时性(默认间隔:4ms)。

set_status_data_update_time_interval (millisecond)
  • 参数说明
    • millisecond: 时间参数说明,单位:ms。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc                           #导入模块  
robot = jkrc.RC("192.168.2.165")  #返回一个机器人对象  
robot.login()  
robot.set_status_data_update_time_interval(100)  
robot.logout()  

获取当前机器人的六个关节角度值

获取当前机器人的六个关节角度值

get_joint_position() 
  • 返回值
    • 成功:(0, joint_pos), joint_pos是一个包含6位元素的元组 (j1, j2, j3, j4, j5, j6),j1, j2,j3, j4, j5, j6 分别代表关节1到关节6的角度值。
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
#sys.path.append('D:\\vs2019ws\PythonCtt\lib')  
import time        
import jkrc  
    
robot = jkrc.RC("192.168.2.160")#返回一个机器人对象  
ret = robot.login()#登录  
ret = robot.get_joint_position()  
if ret[0] == 0:  
    print("the joint position is :",ret[1])  
else:  
    print("some things happend,the errcode is: ",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 sys  
#sys.path.append('D:\\vs2019ws\PythonCtt\lib')  
import time        
import jkrc  
  
robot = jkrc.RC("192.168.2.160")#返回一个机器人对象  
ret = robot.login()#登录  
ret = robot.get_tcp_position()  
if ret[0] == 0:  
    print("the tcp position is :",ret[1])  
else:  
    print("some things happend,the errcode is: ",ret[0])  
robot.logout()  #登出

设置用户坐标系信息

设置用户坐标系信息

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,)
    • 失败:其它

查询机器人当前使用的工具ID

查询机器人当前使用的工具ID

get_tool_id()
  • 返回值
    • 成功:(0, id),id值范围为0到15,0代表末端法兰盘,已被控制器使用。
    • 失败:其它
  • 代码示例:
# -*- coding: utf-8 -*-  
import sys  
sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
robot = jkrc.RC("192.168.2.160") #返回一个机器人对象  
robot.login()                        #登录  
ret = robot.get_tool_data(1)    #查询工具坐标系数据  
if ret[0] == 0:  
    print("the tool data is :",ret)  
else:  
    print("some things happend,the errcode is: ",ret[0])  
robot.set_tool_data(1,[0,0,1,0,0,0],'testlx') #设置工具坐标系数据  
time.sleep(0.5)  
ret = robot.get_tool_data(1)    #查询工具坐标系数据  
if ret[0] == 0:  
    print("the tool data is :",ret)  
else:  
    print("some things happend,the errcode is: ",ret[0])  
ret = robot.get_tool_id()     #查询工具坐标系id  
print("tool_id",ret)  
robot.set_tool_id(1)          #设置工具坐标系数据  
time.sleep(0.5)    
ret = robot.get_tool_id()     #查询工具坐标系id  
print("tool_id",ret)  
robot.logout()  

设置指定编号的工具信息

设置指定编号的工具信息

set_tool_data(id, tcp, name)
  • 参数说明
    • id:设置工具ID,可选ID为1到15,0代表末端法兰盘, 已被控制器使用。
    • tcp:设置工具坐标系参数说明[x,y,z,rx,ry,rz]
    • name:用户坐标系别名
  • 返回值
    • 成功:(0,)
    • 失败:其它

设置当前使用的工具ID

设置当前使用的工具ID

set_tool_id(id)
  • 参数说明
    • id: 工具坐标系ID
  • 返回值
    • 成功:(0,)
    • 失败:其它

查询目标工具坐标系的信息

查询机器人使用的工具信息

get_tool_data(id)
  • 返回值
    • 成功:(0, id, tcp), id值范围为0到15,0代表末端法兰盘, 已被控制器使用。工具坐标系参数说明[x,y,z,rx,ry,rz]
    • 失败:其它

设置数字输出变量(DO)的值

set_digital_output(iotype = a_type,  index = a_number,  value = a_value)
  • 参数说明
    • iotype:DO类型
    • index:DO索引
    • value:DO设置值
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例:设置DO3的值为1
# -*- coding: utf-8 -*-  
import sys  
sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
IO_CABINET  = 0  #控制柜面板IO  
IO_TOOL = 1     #工具IO  
IO_EXTEND = 2   #扩展IO  
  
robot = jkrc.RC("192.168.2.160")  
robot.login()    
ret = robot.get_digital_output(0,2)  
if ret[0] == 0:  
    print("1the DO2 is :",ret[1])  
else:  
    print("some things happend,the errcode is: ",ret[0])  
robot.set_digital_output(IO_CABINET, 2, 1)#设置DO2的引脚输出值为1   
time.sleep(0.1)  
ret = robot.get_digital_output(0, 2)  
if ret[0] == 0:  
    print("2the DO2 is :",ret[1])  
else:  
    print("some things happend,the errcode is: ",ret[0])  
robot.logout()  #登出  

设置模拟输出变量(AO)的值

set_analog_output(iotype = a_type,  index = a_number,  value = a_value)
  • 参数说明
    • iotype:AO类型
    • index:AO索引
    • value:AO设置值
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例:设置AO4的值为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()  
robot.set_analog_output(iotype = IO_CABINET,index = 3,value = 1.55)#    
robot.logout()  #登出

查询数字输入(DI)状态

get_digital_input(iotype, index)
  • 参数说明
    • iotype: DI类型
    • index: DI索引
  • 返回值
    • 成功:(0, value),value: DI状态查询结果
    • 失败:其它

查询数字输出(DO)状态

get_digital_output(iotype, index)
  • 参数说明
    • iotype: DO类型
    • index: DO索引
  • 返回值
    • 成功:(0, value),value: DO状态查询结果
    • 失败:其它

查询模拟量输入变量(AI)的值

get_analog_input(iotype, index)
  • 参数说明
    • iotype:AI类型
    • index:AI索引
  • 返回值
    • 成功:(0, value), value是AI状态查询结果,为浮点数
    • 失败:其它

查询模拟量输出变量(AO)的值

get_analog_output(type, index)
  • 参数说明
    • type:AO类型
    • index:AO索引
  • 返回值
    • 成功:(0, value), value是AO状态查询结果,为浮点数
    • 失败:其它
  • 代码示例:查询AO4的值为
import jkrc
IO_CABINET  =0  #控制柜面板IO
IO_TOOL = 1     #工具IO
IO_EXTEND = 2   #扩展IO
robot = jkrc.RC("192.168.2.64")
robot.login()  
robot.set_analog_output(iotype = IO_CABINET,index = 3,value = 1.55)    
ret = robot.get_analog_output(iotype = IO_CABINET,index = 3)
print("AO value is:",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,)
    • 失败:其它
  • 代码示例
import jkrc                               #导入模块
robot = jkrc.RC("192.168.2.226")      #返回一个机器人对象
robot.login()
robot.set_payload(mass= 1, centroid =[0.01,0.02,0.03])
robot.logout() 							#登出

获取机器人负载数据

get_payload()
  • 返回值
    • 成功:(0, payload),payload是长度为2的元组 (mass, (x,y,z)),第一个元素是负载质量,第二个元素是质心坐标。
    • 失败:其它
  • 代码示例:
import jkrc  
robot = jkrc.RC("192.168.2.64") #返回一个机器人对象  
robot.login()                       #登录  
robot.set_payload(mass= 1,centroid =[0.01,0.02,0.03])   
ret = robot.get_payload()    
if ret[0] == 0:  
    print("the payload is :",ret[1])  
else:  
    print("some things happend,the errcode is: ",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))
    • 失败:其它

获取机械臂状态

get_robot_state()
  • 参数说明
    • 成功:(0,(estoped, power_on, servo_enabled))
      • estoped:急停。 0: 关, 1: 开
      • power_on:上电。 0: 关,1: 开
      • servo_enabled:伺服使能。 0: 关,1: 开
    • 失败:其它
  • 代码示例:
def example_get_robot_state():
    _RC_ADDRESS = "192.168.2.64"  
    rc = jkrc.RC(_RC_ADDRESS)  
    rc.login()  
    ret, (estoped, power_on, servo_enabled) = rc.get_robot_state()  
    print('ret is {}, estop: {}, power_on {}, servo_enabled: {}'.format(ret, estoped, power_on, servo_enabled))  

TIO添加或修改信号量

add_tio_rs_signal(sign_info)
  • 参数说明
    • sign_info:dict 信号量属性
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
def example_add_tio_rs_signal():  
    rc = jkrc.RC(_RC_ADDRESS)  
    rc.login()  
    ret = rc.add_tio_rs_signal({  
        'sig_name': 'signal_tmp',  //标识名
        'chn_id': 0,  //RS485通道ID
        'sig_type': 0,  //信号量类型
        'sig_addr': 0x1,  //寄存器地址
        'value': 5,  //值  设置时无效 
        'frequency': 5  //信号量在控制器内部刷新频率不大于10
    })  

TIO删除信号量

del_tio_rs_signal(sign_name)
  • 参数说明
    • sign_info: str 信号量标识名
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
def example_del_tio_rs_signal():  
    rc = jkrc.RC(_RC_ADDRESS)  
    rc.login()  
    ret = rc.del_tio_rs_signal('signal_tmp')  
    print('ret is {}'.format(ret))  

TIO RS485 发送指令

send_tio_rs_command(chn_id, cmd)
  • 参数说明
    • chn_id:int 通道号
    • data:str 数据字段
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
def example_send_tio_rs_command():  
    rc = jkrc.RC(_RC_ADDRESS)  
    rc.login()  
    ret = rc.send_tio_rs_command(0x1, "test_cmd")  
    print('ret is {}'.format(ret)) 

TIO获取信号量信息

get_rs485_signal_info()
  • 返回值
    • 成功:(0,sign_info_list) sign_info_list: list 信号量信息数组
    • 失败:其它
  • 代码示例
def example_get_rs485_signal_info():  
    rc = jkrc.RC(_RC_ADDRESS)  
    rc.login()  
    ret, sign_info_list = rc.get_rs485_signal_info()  
    print('ret is: {}, sign_info_list: {}'.format(ret, sign_info_list))  
    # [{'value': 0, 'chn_id': 0, 'sig_addr': 0, 'sig_name': '', 'sig_type': 0, 'frequency': 0}, ...]  -> 4.3.26TIO添加或修改信号量

设置TIO模式

set_tio_pin_mode(pin_type, pin_mode)
  • 参数说明
    • pin_type: tio类型 0 for DI Pins, 1 for DO Pins, 2 for AI Pins
    • pin_mode: tio模式
      • DI Pins: 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 Pins: 低8位数据高4位为DO2配置,低四位为DO1配置,0x0 DO为NPN输出,0x1 DO为PNP输出,0x2 DO为推挽输出,0xF RS485H接口
      • AI Pins: 0:模拟输入功能使能,RS485L禁止,1:RS485L接口使能,模拟输入功能禁止
  • 返回值
    • 成功:(0,)
    • 失败:其它

获取TIO模式

get_tio_pin_mode(pin_type)
  • 参数说明 pin_type: tio类型。0 for DI Pins, 1 for DO Pins, 2 for AI Pins。
  • 返回值
    • 成功:(0,pin_mode)
    • 失败:其它

TIO通讯参数说明配置

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, channel 1; 1:RS485L, channel 2
    • chn_mode: 0: Modbus RTU, 1: Raw RS485, 2, torque sensor

TIO RS485通讯模式查询

get_rs485_chn_mode(chn_id)
  • 参数说明
    • chn_id 0: RS485H, channel 1; 1:RS485L, channel 2
  • 返回值
    • 成功:(0, chn_mode)
      • chn_mode: 0: Modbus RTU, 1: Raw RS485, 2, torque sensor
    • 失败:其它

设置机器人安装角度

set_installation_angle(anglex, angley)
  • 参数说明
    • anglex:x方向安装角度,范围[0, PI]度
    • anglez:z方向安装角度,范围[0, 360]度
  • 返回值
    • 成功:(0)
    • 失败:其它
  • 代码示例:
import jkrc  
rc = jkrc.RC("192.168.137.152")  
res = rc.login()  
if res[0] != 0:  
    raise "rc login failed."  
 
anglex = 3.14  
angley = 0  
res = rc.set_installation_angle(anglex, angley)  
if res[0] != 0:  
    raise "set installation angle failed."  
  
res = rc.get_installation_angle()  
if res[0] != 0:  
    raise "get installation angle failed."  
  
print("installation angle:")  
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]))  
  
rc.logout() 

获取机器人安装角度

get_installation_angle()
  • 参数说明
    • anglex:x方向安装角度
    • anglez:z方向安装角度
  • 返回值
    • 成功:(0, [qs, qx, qy, qz, rx, ry, rz])。安装角度四元数表示[qx, qy, qz, qs], 安装角度欧拉角表示[rx, ry, rz],其中ry固定为0。
    • 失败:其它。
  • 代码示例
import jkrc  
rc = jkrc.RC("192.168.137.152")  
res = rc.login()  
if res[0] != 0:  
    raise "rc login failed."  
  
anglex = 3.14  
angley = 0  
res = rc.set_installation_angle(anglex, angley)  
if res[0] != 0:  
    raise "set installation angle failed."  
  
res = rc.get_installation_angle()  
if res[0] != 0:  
    raise "get installation angle failed."  
  
print("installation angle:")  
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]))  
  
rc.logout() 

设置系统变量

demo.set_user_var(id, value, name)
  • 参数说明
    • id:系统变量id
    • value:系统变量的值
    • name:系统变量的别名
  • 返回值
    • 成功:(0, )
    • 失败:其它

获取系统变量

get_user_var
  • 返回值
    • 成功:(0, data )
    • 失败:其它

机械臂安全状态设置

查询机器人是否超出限位

is_on_limit() 
  • 返回值
    • 成功:(0, state),state为1代表机器人超出限位,0则相反
    • 失败:其它

查询机器人是否处于碰撞保护模式

is_in_collision() 
  • 返回值
    • 成功:(0, state),state为1代表机器人处于碰撞保护模式,0则相反
    • 失败:其它

碰撞之后从碰撞保护模式恢复

collision_recover()
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
from typing import Counter  
import jkrc  
import time  
  
  
robot = jkrc.RC("192.168.2.160")  
robot.login()  
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(" in collision "+ str(num))  
    else:  
        print("the robot is not in collision "+ 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
    • 失败:其它

获取最新的错误码

获取机器人运行过程中最后一个错误码,当调用clear_error时,最后一个错误码会清零。

如果要获得具体的错误信息,需要使用set_errorcode_file_path设置错误码文件路径,如果只是需要获取错误码,不需要调用set_errorcode_file_path。

get_last_error()
  • 返回值
    • 成功:(0, error)
    • 失败:其它
  • 代码示例
import jkrc  
robot = jkrc.RC("192.168.2.194")#返回一个机器人对象  
robot.login()   #登录  
robot.program_load("not_exist") #故意加载一个不存在的程序,引起报错  
ret = robot.get_last_error ()#没有设置错误码文件路径,只能得到错误码,得不到具体错误信息  
print(ret[1])   
robot.set_errorcode_file_path("D:\\JAKA_ERROR_CODE.csv") #路径不能包含中文   
ret = robot.get_last_error ()   #设置错误码文件路径后,能得到错误码和具体错误信息  
print(ret[1])  
robot.logout()  #登出

设置错误码文件的路径

设置错误码文件路径,使用get_last_error接口时,如果要获得具体的错误信息,需要使用此接口设置错误码文件路径,如果只是需要获取错误码,不需要调用此接口。

注意:路径不能包含中文,否则无法使用。

set_errorcode_file_path (errcode_file_path)
  • 参数说明
    • errcode_file_path:错误码文件存放路径
  • 返回值
    • 成功:(0,)
    • 失败:其它

错误状态清楚

clear_error()
  • 返回值
    • 成功:(0,)
    • 失败:其它

设置网络异常时机器人自动终止运动类型

设置网络异常控制句柄,当网络出现异常情况时,控制机器人运动状态。

set_network_exception_handle(millisecond,mnt)
  • 参数说明
    • millisecond: 时间参数,单位:ms。
    • mnt: 网络异常时机器人需要进行的动作类型,0代表机器人保持原来的运动,1代表暂停运动,2代表终止运动。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
# import sys  
# sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
  
#运动模式  
ABS = 0  
INCR= 1  
robot = jkrc.RC("192.168.2.160")#返回机器人对象  
robot.login()#登录  
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()

使用App脚本程序

加载指定的作业程序

program_load(file_name)
  • 参数说明
    • file_name:程序名称,传入的名称是一个字符串,比如 “file_name”
  • 返回值
    • 成功:(0,)
    • 失败:其它

获取已加载的作业程序名称

get_loaded_program()
  • 返回值
    • 成功:(0, file_name)
    • 失败:其它
  • 代码示例
import jkrc
robot = jkrc.RC("192.168.2.64")#返回一个机器人对象
robot.login()  #登录
ret = robot.program_load("program_test")#加载通过App编写的脚本 program_test需要自己编写
ret = robot.get_loaded_program()  
print("the loaded program is:",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
      • 0代表程序停止运行
      • 1代表程序正在运行
      • 2代表程序暂停
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
import _thread  
  
  
def print_state(name,robot):  
    while(1):  
        ret = robot.get_program_state() #查询程序运行状态,0 程序终止或无程序运行,1 程序运行中,2 暂停  
        print("the robot program state is:",ret[1])  
        time.sleep(1)  
  
robot = jkrc.RC("192.168.2.160")#返回一个机器人对象  
robot.login()  #登录  
ret = robot.program_load("simple")#加载通过APP编写的脚本 program_test需要自己编写  
ret = robot.get_loaded_program()    
print("the loaded program is:",ret[1])  
robot.program_run()  
_thread.start_new_thread( print_state,("p1_state", robot))#开启一个”p1”线程查询程序状态  
time.sleep(10)  
robot.program_pause() #暂停  
time.sleep(10)  
robot.program_resume() #恢复  
time.sleep(10)  
robot.program_abort()   #停止  
time.sleep(3)  
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()  
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("joint")  
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()  
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()  
robot.remove_traj_file('test')  
robot.logout() #登出 

控制器中轨迹复现数据文件生成控制器执行脚本

generate_traj_exe_file(filename)
  • 参数说明
    • filename:数据的文件名
  • 返回值
    • 成功:(0, )
    • 失败:其它

机器人运动学

欧拉角到旋转矩阵的转换

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的旋转矩阵
    • 失败:其它

求机器人逆解

计算指定位姿在当前工具、当前安装角度以及当前用户坐标系设置下的逆解。

kine_inverse(ref_pos, cartesian_pose)
  • 参数说明
    • ref_pos:关节空间参考位置,建议选用机器人当前关节位置。
    • cartesian_pose:笛卡尔空间位姿计算结果。
  • 返回值
    • 成功:(0 , joint_pos) joint_pos是一个包含6位元素的元组 (j1, j2, j3, j4, j5, j6),j1, j2, j3, j4, j5, 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 代表机器人工具末端的位姿值
    • 失败:其它
  • 代码示例
import jkrc  
robot = jkrc.RC("192.168.2.64") #返回一个机器人对象  
robot.login()                   #登录  
ret = robot.get_joint_position()  
if ret[0] == 0:  
    print("the joint position is :",ret[1])  
else:  
    print("some things happend,the errcode is: ",ret[0])       
joint_pos = ret[1]      
robot.kine_forward(joint_pos)   #求机器人正解          
robot.logout()  #登出

旋转矩阵到四元数的转换

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()  
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() 

机器人伺服运动

机器人servo move模式使能

servo_move_enable(enable)
  • 参数说明
    • enable:TRUE为进入SERVO MOVE模式,FALSE表示退出该模式
  • 返回值
    • 成功:(0,)
    • 失败:其它

机器人关节空间伺服模式运动

提示:

  • 当用户使用这个接口的时候需要先调用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指令时需要预先进行轨迹规划,否则使用效果会很差,无法达到预期。若无特殊需要,机器人在关节空间的运动建议使用joint_move,而不是servo_j
  • 参数说明
    • joint_pos:机器人关节运动目标位置。
    • move_mode:指定运动模式。0为绝对运动,1为增量运动。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
ABS = 0           # 绝对运动  
INCR = 1          # 增量运动  
Enable = True   
Disable = False  
robot = jkrc.RC("192.168.2.160")#返回一个机器人对象  
robot.login()#登录  
robot.power_on() #上电  
robot.enable_robot()  
robot.servo_move_enable(Enable)  #进入位置控制模式  
print("enable")  
for i in range(200):  
    robot.servo_j(joint_pos =[0.001,0,0,0,0,0.001],move_mode = INCR)#  
for i in range(200):  
    robot.servo_j(joint_pos =[-0.001,0,0,0,0,-0.001],move_mode = INCR)    
robot.servo_move_enable(Disable)#退出位置控制模式  
print("disable")  
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指令时需要预先进行轨迹规划,否则使用效果会很差,无法达到预期。若无特殊需要,机器人在关节空间的运动建议使用joint_move,而不是servo_j
  • 参数说明
    • joint_pos:机器人关节运动目标位置。
    • move_mode:指定运动模式:0为增量运动,1为绝对运动。
    • step_num:倍分周期,servo_j运动周期为step_num*8ms,其中step_num>=1。
  • 返回值
    • 成功:(0,)
    • 失败:其它

机器人笛卡尔空间伺服模式运动

提示:

  • 当用户使用这个接口的时候需要先调用servo_move_enable(True),进入位置控制模式。
  • 这条指令一般是高校科研当中做轨迹规划时使用。
  • 当用户使用此模式控制机器人的运动的时候,控制器的规划器不参与运动的插补,控制器进行逆解后,会将位置指令会直接发给伺服,所以用户需要自己进行轨迹规划,否则机器人的运动效果会比较差,如抖动剧烈等现象,无法达到用户的预期。
  • 由于控制器的控制周期为8ms,建议用户的发送周期也为8ms,并且需要连续发送,只发一次没有效果。如果网络状况较差,发送周期可以小于8ms。
  • Jaka机器人的关节速度上限是180度/秒,如果发送的位置使得机器人的关节速度超过了此上限。这条指令就会失效。
  • 使用完这条指令,需要使用servo_move_enable(False),退出位置控制模式。
  • 这条指令和前文提到的linear_move()区别较大,linear_move的插补是由控制器进行的,用户无需关心。用户使用servo_p指令时需要预先进行轨迹的规划,否则使用效果会很差,无法达到预期。若无特殊需要,机器人在笛卡尔空间的运动建议使用linear_move,而不是servo_p
  • 参数说明
    • cartesian_pose:机器人笛卡尔空间运动目标位置。
    • move_mode:指定运动模式,0为绝对运动,1为增量运动。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
sys.path.append('D:\\vs2019ws\PythonCtt\PythonCtt')  
import time        
import jkrc  
  
PI = 3.14
ABS = 0           # 绝对运动  
INCR = 1          # 增量运动  
Enable = True   
Disable = False  
  
robot = jkrc.RC("192.168.2.160")#返回一个机器人对象  
robot.login()#登录  
robot.power_on() #上电  
robot.enable_robot()  
joint_pos=[PI/3,PI/3,PI/3,PI/4,PI/4,0]  
robot.joint_move(joint_pos,ABS,True,1)  
robot.servo_move_enable(Enable)  #进入位置控制模式  
print("enable")  
for i in range(200):  
    robot.servo_p(cartesian_pose = [1, 0, 0, 0, 0, 0],move_mode = INCR)   
for i in range(200):  
    robot.servo_p(cartesian_pose = [-1,0, 0, 0, 0, 0],move_mode = INCR)    
robot.servo_move_enable(Disable)#退出位置控制模式  
print("disable")  
robot.logout()  #登出

机器人笛卡尔空间伺服模式运动扩展

提示:

  • 当用户使用这个接口的时候需要先调用servo_move_enable(True),进入位置控制模式
  • 这条指令一般是高校科研当中做轨迹规划时使用。
  • 当用户使用此模式控制机器人的运动的时候,控制器的规划器不参与运动的插补,控制器进行逆解后,会将位置指令会直接发给伺服,所以用户需要自己进行轨迹规划,否则机器人的运动效果会比较差,如抖动剧烈等现象,无法达到用户的预期。
  • 由于控制器的控制周期为8ms,建议用户的发送周期也为8ms,并且需要连续发送,只发一次没有效果。如果网络状况较差,发送周期可以小于8ms。
  • Jaka机器人的关节速度上限是180度/秒,如果发送的位置使得机器人的关节速度超过了此上限。这条指令就会失效。
  • 使用完这条指令,需要使用servo_move_enable(False),退出位置控制模式。
  • 这条指令和前文提到的linear_move()区别较大,linear_move的插补是由控制器进行的,用户无需关心。用户使用servo_p指令时需要预先进行轨迹的规划,否则使用效果会很差,无法达到预期。若无特殊需要,机器人在笛卡尔空间的运动建议使用linear_move,而不是servo_p
servo_p_extend(cartesian_pose, move_mode, step_num)
  • 参数说明
    • cartesian_pose:机器人笛卡尔空间运动目标位置。
    • move_mode:指定运动模式,0为绝对运动,1为增量运动。
    • step_num:倍分周期,servo_p运动周期为step_num*8ms,其中step_num>=1。
  • 返回值
    • 成功:(0,)
    • 失败:其它

机器人servo模式下禁用滤波器

机器人SERVO模式下禁用滤波器,该指令在SERVO模式下不可设置,退出SERVO后可设置。

servo_move_use_none_filter()
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc                           #导入模块  
robot = jkrc.RC("192.168.2.226")  #返回一个机器人对象  
robot.login()  
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()  
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()  
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)
  • 参数说明
    • 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
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc                           #导入模块  
robot = jkrc.RC("192.168.2.226")  #返回一个机器人对象  
robot.login()  
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()  
robot.servo_move_use_joint_MMF(max_buf=20 , kp=0.2 , kv=0.4 ,ka=0.2)  
robot.logout() #登出 

Servo模式下速度前瞻参数设置

servo_speed_foresight (max_buf, kp)
  • 参数说明
    • max_buf: 均值滤波器缓冲区的大小。
    • kp:加速度滤波系数。
  • 返回值
    • 成功:(0,)
    • 失败:其它

力控机器人扩展

JAKA机器人提供了一套基于末端力传感器的力控接口,用户可以基于这些接口完成高级的力控功能如恒力柔顺控制等,进而实现一些较复杂的应用场景,如笛卡尔空间指定方向拖拽、力控装配、打磨等。

但需要注意的是,这些接口依赖于末端力传感器。

本节内容建议在完成阅读力控产品使用手册open in new window的基础上阅读,并参考节卡SDK力控功能快速入门指南open in new window配合理解。 为避免文字冗长,本节中“力控”都代表“力柔顺控制”,“末端力传感器”、“力传感器”、“传感器”都代表安装于机器人末端的6维或1维力/力矩传感器。

设置末端力传感器型号

设置传感器型号,输入数字代表对应的传感器型号,可选值为1,2,3分别代表不同的力矩传感器。

set_torsensor_brand(sensor_brand)
  • 参数说明
    • sensor_brand 传感器型号,取值范围为1-6或10,需要与传感器硬件外壳铭刻的型号数字相匹配。其中10特指已经内置与机器人法兰内部的传感器,此型传感器由系统自动管理,无需调用此接口进行配置
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc                       #导入模块  
robot = jkrc.RC("192.168.2.165")  #返回一个机器人对象  
robot.login()  
robot.set_torsenosr_brand(2)     
robot.logout() #登出

获取末端力传感器型号

获取末端力传感器型号

get_torsensor_brand()
  • 返回值
    • 成功:(0, sensor_brand),sensor_brand: 传感器型号。
    • 失败:其它
  • 代码示例
import jkrc                           #导入模块  
robot = jkrc.RC("192.168.2.165")      #返回一个机器人对象  
robot.login()  
ret=robot.get_torsenosr_brand()  
if ret[0] == 0:  
    print("the sensor_band is", ret[1])  
robot.logout() #登出

开启或关闭末端力传感器

开启或关闭末端力传感器

set_torque_sensor_mode(sensor_mode)
  • 参数说明
    • sensor_mode:传感器工作模式,0代表关闭传感器,1代表开启传感器。
  • 返回值
    • 成功:(0,)
    • 失败:其它

设置柔顺控制参数

设置机器人柔顺控制时的关节坐标轴编号、柔顺方向、阻尼力、回弹力、恒力、法向跟踪等参数。

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,)
    • 失败:其它

开始辨识工具末端负载

开始辨识工具末端负载,输入为一个元组含6个元素,分别对应结束位置6个关节角。 注意:这是一条会触发运动的指令,会使机器人运动到joint_pos指定的位置。

start_torq_sensor_payload_identify(joint_pos)
  • 参数说明
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
#sys.path.append('D:\\vs2019ws\PythonCtt\lib')  
import time        
import jkrc  
PI = 3.1415926  
  
robot = jkrc.RC("10.5.5.100")#返回一个机器人对象  
ret = robot.login()#登录  
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("inint sensor comple")  
print("ready to run")  
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_identify_status()
  • 参数说明
    • identify_status:辨识状态,0代表辨识完成结果已可以读取,1代表暂无可以读取的辨识结果,2代表辨识失败。
  • 返回值
    • 成功:(0,identify_status)
    • 失败:其它

获取末端负载辨识结果

获取末端负载辨识结果,输入为负载质量,负载质心位置坐标。

get_torq_sensor_payload_identify_result()
  • 参数说明
    • mass:负载质量,单位: kg
    • centroid:负载质心位置[x, y, z],单位: mm
  • 返回值
    • 成功:(0,)
    • 失败:其它

设置传感器末端负载

设置传感器末端负载,输入为负载质量,负载质心位置坐标。

set_torq_sensor_tool_payload (mass, centroid)
  • 参数说明
    • mass:负载质量,单位: kg
    • centroid:负载质心坐标位置[x, y, z],单位:mm
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc                               #导入模块  
robot = jkrc.RC("192.168.2.226")      #返回一个机器人对
robot.login()  
robot.set_torq_sensor_tool_payload(mass= 1, centroid =[10,10,0])  
robot.logout() #登出 

获取传感器末端负载

获取传感器末端负载质量,负载质心位置坐标。

get_torq_sensor_tool_payload ()
  • 返回值
    • 成功:(0,(mass, centroid))
      • mass: 负载质量, 单位: kg。
      • centroid: 负载质心位置[x, y, z],单位: mm。
    • 失败:其它

开启或关闭工具拖拽

兼容性接口保留。

适配1.7.1控制器,1.7.2为对应替代接口。

开启或关闭工具拖拽,需要开启传感器并设置合理的柔顺控制参数,此外,推荐进行至少一次力控传感器校零后再开启工具拖拽。

enable_admittance_ctrl (enable_flag)
  • 参数说明
    • enable_flag:标志,0为关闭力控拖拽使能,1为开启。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
# -*- coding: utf-8 -*-  
import sys  
#sys.path.append('D:\\vs2019ws\PythonCtt\lib')  
import time        
import jkrc  

robot = jkrc.RC("10.5.5.100")#返回一个机器人对象  
ret = robot.login()#登录  
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("inint sensor comple")  
print("ready to run")  
#设置柔顺控制参数  
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 open!")  
print("input any word to quit:")  
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)
  • 参数说明
    • sensor_compensation:1代表立即进行一次传感器校零,并将APP的实时力曲线显示以及10000端口返回的torqsensor[1][2]切换为实际外力;0代表不做校零操作,并将不处于力控状态下时APP的实时力曲线显示以及10000端口返回的torqsensor[1][2]切换为传感器原始读数(若处于力控状态下则仍为实际外力)。
    • compliance_type:0代表不使用任何一种柔顺控制方法,1代表开启恒力柔顺控制,2代表开启速度柔顺控制。
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例
import jkrc                               #导入模块
robot = jkrc.RC("192.168.2.226")      #返回一个机器人对象
robot.login()
robot.set_compliant_type(1,1)
robot.logout() #登出 

获取力控类型和读数显示(初始化)状态

兼容性接口保留。

适配1.7.1控制器,1.7.2为对应替代接口。1.7.2控制器调用此接口时仅实现获取力控类型功能,sensor_compensation参数无意义。

获取力控类型和传感器初始化状态

get_compliant_type()
  • 返回值
    • 成功:(0, sensor_compensation, compliance_type)
      • sensor_compensation 是否开启传感器补偿,1代表开启即初始化,0代表不初始化
      • compliance_type 0 代表不使用任何一种柔顺控制方法 1 代表恒力柔顺控制,2 代表速度柔顺控制
    • 失败:其它

设置力控坐标系

设置力控坐标系

兼容性接口保留。

适配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: 柔顺方向, 可选值1 2 3 4 5 6分别对应fx fy fz mx my mz方向,0代表没有勾选。
      • ftUser:阻尼力,表示用户需使用多大的力让机器人沿着某一方向以最大速度运动。
      • ftReboundFK: 回弹力, 表示机器人回到初始状态的能力。
      • ftConstant: 恒力,手动操作时全部设置为0。
      • ftNormalTrack:法向跟踪,手动操作时全部设置为0。
      • 6个AdmitCtrlType组成的数组,分别对应x,y,z,rx,ry,rz方向的力柔顺控制参数
    • 失败:其它

设置末端力传感器通讯参数

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为无效参数,返回值无实际意义
    • 失败:其它

关闭力矩控制

关闭力柔顺控制(对恒力柔顺控制和速度柔顺控制生效,但不对工具拖拽生效)

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,)
    • 失败:其它

设置末端力传感器低通滤波器截止频率

设置末端力传感器低通滤波器截止频率

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,)
    • 失败:其它

获取末端力传感器软限位

获取末端力传感器软限位

1.7.2为废弃接口,不建议使用

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.2及以上版本控制器,1.7.2及以上版本控制器请优先使用这些接口。

传感器校零

zero_end_sensor()
  • 返回值
    • 成功:(0,)
    • 失败:其它

获取力控工具拖拽开启状态

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)
    • 失败:其它

获取传感器运行状态

获取传感器运行状态

  • 参数说明
    • sensor_mode: 传感器处于开启或关闭状态,0为关闭;1为开启
get_torque_sensor_mode()

设置恒力柔顺控制参数

设置恒力柔顺控制参数,与原先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)))
      • 参数说明: 返回的是六个5维数组,分别代表六个轴对应的数据,每个数组的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>))) 
    * 参数说明: 返回的是六个5维数组,分别代表六个轴对应的数据,每个数组的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图形化编程同名指令含义相同

  • 参数说明
    • opt 6维数组,分别代表6个维度上是否开启力控终止条件,0 代表没有勾选, 非 0 值代表勾选
    • lowerlimiton 6维数组,0 代表不设置下限,非 0 值代表设置
    • lowerlimit 6维数组,下限数值
    • upperlimiton 6维数组,0 代表不设置下限,非 0 值代表设置
    • upperlimit 6维数组,下限数值
  • 返回值 成功:(0,) 失败: 其它
set_force_stop_condition(opt, lowerlimiton, lowerlimit,upperlimiton, upperlimit)

获取恒力柔顺开启状态

获取恒力柔顺开启状态,读取控制器内部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为字符串
    • 失败:其它
  • 代码示例
import jkrc  
robot = jkrc.RC("192.168.2.26")  
robot.login()  
dir= "/program/"  
#登陆控制器,需要将192.168.2.26替换为自己控制器的IP  
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()  
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()  
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上的文件

重命名控制器指定类型和名称的文件。

upload_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()  
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)
  • 参数说明
    • remote 控制器内部文件名绝对路径,文件夹需要以""或“/”结尾取决于系统
    • opt 1单个文件 2文件夹
  • 返回值
    • 成功:(0,)
    • 失败:其它
  • 代码示例(谨慎操作,该示例会删除所有程序
import jkrc  
  
robot = jkrc.RC("192.168.2.26")#VMmodel  
robot.login()  
dir= "/program/"  
robot.init_ftp_client()  
result = robot.del_ftp_file("/program/", 2)  
print(result)  
robot.close_ftp_client()  
robot.logout()

接口调用返回值列表及问题排查

错误代码描述处理建议
0successnull
2interface error or controller not support核对控制器和SDK版本信息,进行升级或换用其他接口
-1invalid handler请检查调用接口前是否login
-2invalid parameter请检查参数是否正确
-3fail to connect请检查网络连接状态,或机器人IP是否正确
-4kine_inverse error逆解失败,请检查当前的坐标系,或参考关节角是否合理
-5e-stop急停状态,保留状态
-6not power on未上电
-7not enable未使能
-8not in servo mode不处于伺服模式,在执行servoJP 的时候,必须先进入伺服模式,请检查是否调用对应接口
-9must turn off enable before power off下电前必须下使能
-10cannot operate, program is running无法操作,程序正在执行中,请先关闭程序
-11cannot open file, or file doesn't exist无法打开文件,或者文件不存在
-12motion abnormal运动异常,可能处于奇异点附近,或者超出机器人运动限制
-14ftp errorftp异常
-15socket msg or value oversize超出限制异常
-16kine_forward error正解失败
-17not support empty folder不支持空文件夹
-20protective stop保护性停止
-21emergency stop急停
-22on soft limit处于软限位,此时无法手动拖动机器人,需要用APP上的示教功能接触软限位
-30fail to encode cmd string命令编码失败,一般是解析控制器返回的消息时出错
-31fail to decode cmd string命令解码失败,一般是解析控制器返回的消息时出错
-32fail to uncompress port 10004 string解压缩10004端口数据失败,可能受网络波动影响,或数据量太大的原因
-40move linear error直线运动失败,请检查是否路径中是否有奇异区域
-41move joint error关节运动失败,请检查设置的关节角度
-42move circular error圆弧运动失败,请检查设置的参数
-50block_wait timeout阻塞等待超时
-51power on timeout上电超时
-52power off timeout下电超时
-53enable timeoff使能超时
-54disable timeout下使能超时
-55set userframe timeout设置用户坐标系超时
-56set tool timeout设置工具坐标系超时
-60set io timeout设置IO超时

问题反馈

文档中若出现不准确的描述或者错误,恳请读者见谅指正。如果您在阅读过程中发现任何问题或者有想提出的意见,可以发送邮件到 support@jaka.com ,我们将尽快给您回复。

上次编辑于: