跳至主要內容

JAKA TCP/IP 控制协议

JAKA大约 58 分钟

JAKA TCP/IP 控制协议

文档说明

JAKA支持基于TCP/IP的外部控制协议。该协议提供了丰富的接口,客户可以通过该接口实现控制机器人、获取信息的功能。 这也是JAKA SDK的核心通信协议之一。

版本说明

此TCP/IP 控制协议文档目前主要适配1.7.2及1.7.1版本控制器,部分接口会在两个版本控制器出现兼容性问题,已标注。

框架基础

JAKA TCP/IP 协议通讯框架

JAKA TCP/IP 控制协议定义的交互框架如下:

机器人控制器中运行一个 TCP 服务器,用于接受用户自定义的指令并反馈状态数据。该服务器使用10000端口与10001端口与外部客户端进行交互,其中:

  • 10001——用来给机器人发送控制指令并接收控制器返回;
  • 10000——用来接收机器人返回的数据(用户可定义发送频率和数据内容)。

用户可根据 JAKA TCP/IP 协议进行机器人二次开发,在开发时需注意:

  • TCP/IP指令均按照异步方式执行,返回信息仅表示控制器接收指令并完成预处理与转发,并不反映指令的最终执行结果。部分指令执行结果需要主动查询反馈数据获取;
  • 用户需要根据本协议来实现相应的 TCP 用户端调用,即用户需要自己设计上层规划器发送机器人数据(servo_j,servo_p);
  • 该功能可以与 JAKA App 同时使用,不需要断开 App 与控制器的连接。但用户必须确保只有一个用户端可以连接到端口 10001,否则后一个用户端可能会立即替代前一个用户端。

通讯端口数据说明

用户从10001端口发送以及从10000端口接收的数据均基于JSON格式定义。用户可根据协议快速构建指令或解析反馈数据。

10001端口说明

该手册的全部指令都属于该范畴。所有的机器人控制指令均基于10001端口,端口交互数据格式定义如下:

  • 消息发送格式:
{"cmdName":"cmd","parameter1":"parameter1","parameter2":"parameter2",...}
  • 消息接收格式:
{"cmdName":"cmd","errorCode":"0","errorMsg":"","parameter1":"parameter1","parameter2":"parameter2",...}

10000端口说明

10000端口将以字符串的形式来返回与机器人有关的数据,返回的内容可参考如下样例:

样例:

{
    "len":3547,
    "drag_status":false,
    "extio":Object{...},
    "errcode":"0x0",
    "errmsg":"",
    "monitor_data":Array[6],
    "torqsensor":Array[2],
    "joint_actual_position":Array[6],
    "actual_position":Array[6],
    "din":Array[144],
    "dout":Array[144],
    "ain":Array[66],
    "aout":Array[66],
    "tio_din":Array[8],
    "tio_dout":Array[8],
    "tio_ain":Array[1],
    "task_state":4,
    "homed":Array[9],
    "task_mode":1,
    "interp_state":0,
    "enabled":true,
    "paused":false,
    "rapidrate":1,
    "current_tool_id":0,
    "current_user_id":0,
    "on_soft_limit":1,
    "emergency_stop":0,
    "drag_near_limit":Array[6],
    "funcdi":Array[15],
    "powered_on":1,
    "inpos":true,
    "motion_mode":1,
    "curr_tcp_trans_vel":0,
    "protective_stop":0,
    "point_key":0,
    "netState":1
}

说明:

  • len:数据包的长度,一般最大长度不超过15000字节(取决于数据内容)。
  • drag_status:布尔值,表示是否处于拖动模式中。
  • extio:扩展IO模块的配置和状态,内部数据结构如下——
    • status:所有扩展IO引脚的状态,包括DI、DO、AI、AO。
      • status[0]:所有扩展DI的状态
      • status[1]:所有扩展DO的状态
      • status[2]:所有扩展AI的状态
      • status[3]:所有扩展AO的状态
    • setup:所有扩展IO配置的数组,最多8个。每个扩展IO模块的设置都应遵循以下结构——
      • setup[N][0]:通讯类型。0代表Modbus RTU。1代表Modbus TCP/IP。
        • setup[N][0]==0:
          • setup[N][2][0]:波特率
          • setup[N][2][1]:数据位长度
          • setup[N][2][2]:从站号
          • setup[N][2][3]:数据位
          • setup[N][2][4]:奇偶校验位
          • setup[N][2][5]:停止位长度
        • setup[N][0]==1:
          • setup[N][2][0]:IP地址
          • setup[N][2][1]:端口
          • setup[N][2][2]:从站号
      • setup[N][1]:扩展IO模块的别名。
      • setup[N][2]:通信配置,根据通信类型不同。
    • setup[N][3]:引脚配置
      • setup[N][3][0][0]:DI中寄存器的起始偏移量
      • setup[N][3][0][1]:DI个数
      • setup[N][3][1][0]:DO中寄存器的起始偏移量
      • setup[N][3][1][1]:DO个数
      • setup[N][3][2][0]:AI中寄存器的起始偏移量
      • setup[N][3][2][1]:AI个数
      • setup[N][3][3][0]:AO中寄存器的起始偏移量
      • setup[N][3][3][1]:AO个数
    • num:扩展IO模块。
    • pinmap:扩展IO模块的管脚图数组。
      • pinmap[N][0]:设置[N]的DI中寄存器的起始偏移量
      • pinmap[N][1]:setup[N]的DO中寄存器的起始偏移量
      • pinmap[N][2]:setup[N]的AI中寄存器的起始偏移量
      • pinmap[N][3]:setup[N]的AO中寄存器的起始偏移量
    • mode:扩展IO模块的状态。0表示状态开启,1表示关闭。
  • errcode:来自控制器的十六制字符串错误代码,如“0x0”。
  • errmsg:来自控制器的错误信息字符串,对应errcode。
  • monitor_data:用于诊断的机器人和机柜的监控数据。
    • monitor_data[0]:SCB 主要版本号
    • monitor_data[1]:SCB 次要版本号
    • monitor_data[2]:控制柜温度
    • monitor_data[3]:控制柜母线平均功率
    • monitor_data[4]:控制柜母线平均电流
    • monitor_data[5]:数组中机器人1-6关节轴的监控数据
      • monitor_data[5][0]:机器人轴的瞬时电流
      • monitor_data[5][1]:机器人轴的瞬时电压
      • monitor_data[5][2]:机器人轴的瞬时温度
      • monitor_data[5][3]:瞬时平均功率
      • monitor_data[5][4]:电流波动
      • monitor_data[5][5]:累计跑圈
      • monitor_data[5][6]:累计运行时间
      • monitor_data[5][7]:本次开机后运行循环
      • monitor_data[5][8]:本次开机后的运行时间
      • monitor_data[5][9]:关节扭矩
  • torqsensor:末端力传感器设置和状态数组,数据结构如下——
    • torqsensor[0]:当前传感器的设置
      • torqsensor[0][0]:通讯类型,0为网口/USB通讯,1为TIO通讯。
      • torqsensor[0][1]:传感器的通讯配置。与TCP/IP地址通信时为[ip, port],与TIO通信时为[baudrate, databits, stopbits, parity]。
      • torqsensor[0][2]:传感器末端负载及质心。
    • torqsensor[1]:传感器的状态
      • torqsensor[1][0]:传感器状态。1表示工作,0表示关闭。
      • torqsensor[1][1]:传感器错误代码
      • torqsensor[1][2]:传感器实际接触力(6维,跟随校零(初始化)选项变化,与APP显示保持一致,数值可能不稳定,为旧版兼容保留,不推荐使用)
      • torqsensor[1][3]:传感器原始读数值(6维)
      • torqsensor[1][4]:传感器实际接触力(6维,对负载重力和传感器零点进行补偿之后的数值)
  • joint_actual_position:所有6个关节的实际位置。
  • actual_position:机器人TCP在笛卡尔空间中的实际位置。
  • din:数字输入数组的所有值的数组。
  • dout:机柜中所有数字输出值的数组。
  • ain:柜内所有模拟输入值的数组。
  • aout:柜内所有模拟输出值的数组。
  • tio_din:所有工具数字输入的状态数组。
  • tio_dout:所有工具数字输出的状态数组。
  • tio_ain:所有工具模拟输入的状态数组。
  • task_state:电源状态和使能状态指示灯。1表示机器人断电,2表示机器人上电,3表示机器人未上使能,4表示机器人上使能。
  • homed:每个关节的home状态(已废弃)。
  • task_mode:机器人的任务模式。1表示手动模式,2表示自动模式,3表示保留模式,4表示拖动模式。
  • interp_state:程序状态。0表示空闲,1表示加载,2表示暂停,3表示运行。
  • enabled:显示机器人启用状态的布尔值。
  • paused:显示程序暂停状态的布尔值。
  • rapidrate:机器人运动的缩放速率。
  • current_tool_id:当前TCP的索引。
  • current_user_id:当前用户坐标系的索引。
  • on_soft_limit:是否处于软限位,0未到达软限位,1到达软限位。
  • emergency_stop:急停按钮是否被按下,0未按下,1按下。
  • drag_near_limit:表示每个关节是否被拖拽到接近极限位置,0否,1是。
  • funcdi:功能IO,参考下方功能IO设置。
  • powered_on:上电状态,0未上电,1上电。
  • inpos:运动状态,true运动结束,false运动中。
  • motion_mode:运动模式。
  • curr_tcp_trans_vel:当前机器人末端移动速度。
  • protective_stop:保护性停止,0未碰撞,1碰撞。
  • point_key:机器人末端按钮状态。
  • netState:网络连接状态。

配置 optionalInfoConfig.ini

由于机器人控制器10000端口出厂默认会返回所有定义的数据字段,采用TCP发送会占用较大带宽并影响用户端实际接受数据的及时性。

而在实际用户应用中并非所有的数据均会被使用,因此该版本增加设计提供用户可配置10000端口反馈数据字段的功能。

控制器内部配置文件optionalInfoConfig.ini定义了用户可配置启用或关闭的数据字段,当某个数据字段对应的值为1时代表10000端口会返回此数据字段,当值为0时不会返回。

用户可通过10001端口的特定指令设置与查询该字段的启用或关闭。

详细的配置文件内容如下:

[ATTROPTIONALDATA]
joint_actual_position = 1
joint_position = 1
actual_position = 1
position = 1
din = 1
dout = 1
ain = 1
aout = 1
tio_key = 1
tio_din = 1
tio_dout = 1
tio_ain = 1
relay_io = 1
mb_slave_din = 1
mb_slave_dout = 1
mb_slave_ain = 1
mb_slave_aout = 1
pn_dev_din = 1
pn_dev_dout = 1
pn_dev_ain = 1
pn_dev_aout = 1
eip_adpt_din = 1
eip_adpt_dout = 1
eip_adpt_ain = 1
eip_adpt_aout = 1
task_state = 1
homed = 1
task_mode = 1
interp_state = 1
enabled = 1
paused = 1
rapidrate = 1
current_tool_id = 1
current_user_id = 1
on_soft_limit = 1
emergency_stop = 1
drag_near_limit = 1
funcdi = 1
powered_on = 1
inpos = 1
motion_mode = 1
curr_tcp_trans_vel = 1
protective_stop = 1
point_key = 1
motion_line = 1
err_add_line = 1

[STATOPTIONALDATA]
drag_status = 1
num = 1
setup = 1
pinmap = 1
mode = 1
status = 1
extio = 1
errcode = 1
errmsg = 1
monitor_data = 1
torqsensor = 1

[PORTCONFIG]
port10000_delay_ms = 2000
  • 对于 ATTROPTIONALDATA 和 STATOPTIONALDATA 中的数据,设为 0 表示 10000 端口不会发送该数据,设为 1 表示 10000 端口会发送该数据。
  • 对于 PORTCONFIG 中的 port10000_delay_ms,其值表示 10000 端口发送数据的周期(单位 ms)。

请注意:

用户从10000端口获取的数据不是实时的,真实的发送周期受到网络波动等影响。

此外,过大的数据或者过快的发送周期,很有可能造成网络阻塞、粘包等问题(特别是网络波动时),从而导致用户端数据接收或者解析失败。

请尽量排除不必要的数据,并设置合理的发送周期。

机器人姿态表示

在JAKA TCP/IP 控制协议涉及的机器人空间姿态均采用RPY角表示。

在RPY中,旋转变换顺序为依次绕固定坐标系的轴x-y-z旋转。绕固定坐标系z轴的旋转(Rz)称为回转(Roll);绕固定坐标系y轴的旋转(Ry)称为俯仰(Pitch);将绕固定坐标系x轴的旋转(Rx)称为偏转(Yaw)。

机器人位姿数据格式定义为[X , Y , Z , Rx , Ry , Rz],其中,X、Y、Z 代表三个坐标轴上的位置,单位为mm;Rx、Ry、Rz代表机器人姿态,分别对应RPY的三个分量Yaw(偏转)、Pitch(俯仰)、Roll(横滚),单位为°。

对于其与旋转矩阵间的转换关系,假设我们选取固定坐标系{A},某坐标系{B}的RPY表示同旋转矩阵间的转换计算如下:

用户需注意事项

错误码说明

  • 接口正确返回时,errorCode 应为 0 (可能是int或字符串类型)而不是 Empty/Null;errorCode为其他时,代表执行出错。
  • 如果发生错误,客户可以在反馈 JSON 数据中检查 errorCode 和 msg
    • 当errorCode返回的值为0时,errorMsg返回的消息为空,代表执行成功;
    • 当errorCode返回的值为其他数时,errorMsg将返回具体的错误信息,代表程序发生异常。

错误码列表

TCP/IP 指令返回错误码列表简要说明:

机器人基本操作(200-249)

ERROR_INSTALLATION_ANGLE_OUT_OF_RANGE="0x000200" #installation angle out of range

运动指令(250-349)

ERROR_SETTING_MOTION_PLANNER="0x000250"

伺服相关(350-399)

ERROR_NOT_IN_SERVO_MODE="0x000350" #try to servo when not in servo mode ERROR_SET_FILTER_IN_SERVO_MODE = "0x000351" #cannot set servo filter when in servo mode ERROR_SERVO_PARAMETER_INVALID = "0x000352" #servo params invalid ERROR_SERVO_FILTER_INVALID = "0x000353" #servo filter params invalid

IO相关(400-449)

ERROR_IO_INDEX_OUT_OF_RANGE = "0x000400" #IO index out of range ERROR_IO_TYPE_OUT_OF_RANGE = "0x000401" #IO type out of range

程序相关(450-499)

ERROR_VAR_ALIAS_EXIST = "0x000450" #var alias already exist ERROR_VAR_ID_NOT_EXIST = "0x000451" #var id not exist

碰撞相关(500-549)

ERROR_COLLISION_LEVEL_OUT_OF_RANGE = "0x000500" #collision level out of range

运动学相关(550-599)

ERROR_FAIL_KINE_INVERSE = "0x000550" #kine_inverse fail

torque sensor part
traj part
drag and force control part
FTP part
TIO part
reserved for future features

其他说明

  • errorCode 可能为字符串或整数。
  • 所有命令均为非阻塞命令。
  • 协议使用的单位为:mm(毫米) 和 degree(角度)。
  • TCP IO 索引从 1 开始,但 SDK IO 索引从 0 开始。

10000及10004端口设置

10004端口为SDK专用端口,返回数据和10000端口一致。

获取 10000 端口的发送周期

发送消息:

{"cmdName":"get_port10000_delay_ms"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_port10000_delay_ms", "port10000_delay_ms": 2000}

修改 10000 端口的发送周期

发送消息:

{"cmdName":"set_port10000_delay_ms","port10000_delay_ms":20}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_port10000_delay_ms"}

查询 optionalInfoConfig 的配置

发送消息:

{"cmdName":"getOptionalInfoConfig","section":"PORTCONFIG","key":"port10000_delay_ms"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "getOptionalInfoConfig", "value": 20}

发送消息:

{"cmdName":"getOptionalInfoConfig","section":"ATTROPTIONALDATA","key":"joint_actual_position"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "getOptionalInfoConfig", "value": 1}

修改 optionalInfoConfig 配置

发送消息:

{"cmdName":"setOptionalInfoConfig","section":"PORTCONFIG","key":"port10000_delay_ms", "value": "200"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "setOptionalInfoConfig"}

发送消息:

{"cmdName":"setOptionalInfoConfig","section":"ATTROPTIONALDATA","key":"joint_actual_position", "value": 0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "setOptionalInfoConfig"}

指令接口介绍

以下按照各功能模块分节介绍各指令的用法,返回字段含义见各指令下方的说明。

机器人基本操作

打开电源

发送消息:

{"cmdName":"power_on"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "power_on"}

关闭电源

发送消息:

{"cmdName":"power_off"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "power_off"}

机器人上使能

发送消息:

{"cmdName":"enable_robot"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "enable_robot"}

机器人下使能

发送消息:

{"cmdName":"disable_robot"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "disable_robot"}

关闭机器人和控制器

发送消息:

{"cmdName":"shutdown"}

接收消息:

null

发送关机指令后,控制器关闭进程,TCP服务端关闭,故不返回消息。

获取机器人状态

发送消息:

{"cmdName":"get_robot_state"}

接收消息:

{"enable": true, "power": 1, "errorMsg": "", "errcode": 0, "cmdName": "get_robot_state", "errorCode": "0", "msg": ""}

说明:

  • enable: 表示机器人的使能状态,true代表使能,false代表未使能。
  • power: 表示机器人的上电状态,1代表上电,0代表未上电。
  • errorCode: 表示TCP指令对应的错误码。
  • errcode: 表示控制器返回的对应的错误码。
  • errorMsg: 表示TCP指令对应的错误信息。
  • msg: 表示控制器返回的对应的错误信息。

获取控制器版本

发送消息:

{"cmdName":"get_version"}

接收消息:

{"errorMsg": "", "cmdName": "get_version", "errorCode": "0", "robot_name": "JKROBOT", "version": "1.7.1_40_rc_X64", "robot_id": "Zu20200100"}

说明:

  • robot_name:机器人名称
  • version:机器人控制器版本
  • robot_id:机器人序列号

获取机器人安装角度

发送消息:

{"cmdName":"get_installation_angle"}

接收消息:

{"installation_angle": [[x, y, z, w], [rx, ry , rz]], "errorCode": "0", "cmdName": "get_installation_angle", "errorMsg": ""}

说明:

  • x, y, z, w 安装角度四元数表示。
  • rx, ry, rz 安装角度欧拉角表示。

设置机器人安装角度

发送消息:

{"cmdName":"set_installation_angle","angleX":angleX,"angleZ": angleZ}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_installation_angle"}

说明:

  • angleX:机器人X方向旋转角度,范围[0, 180]度。
  • angleZ:机器人Z方向旋转角度,范围[0, 360)度。

机械臂运动相关

JOG指令

Jog指令包括关节空间的单轴运动和笛卡尔空间的单轴运动:

  • jog_mode 代表运动模式,可支持4种运动模式:

    • Jog_stop(Jog停止): 0
    • Continue(连续运动): 1
    • Increment(步进运动): 2
    • ABS绝对运动: 3
  • coord_map 代表坐标系的选择,可支持3种运动坐标系:

    • 在世界坐标系下运动: 0
    • 在关节空间运动: 1
    • 在工具坐标系下运动: 2
  • jnum 在关节空间下代表关节号,关节1至关节6的编号分别对应数字0到5;

  • jnum 在笛卡尔空间代表x,y,z,rx,ry,rz。分别对应数字0到5。

  • jogvel 代表速度。

  • poscmd 代表步进值,单关节运动为deg,空间单轴运动为mm。

当jog_mode为0时,仅jog_mode, coord_map, jnum参数有效。

发送消息:

{"cmdName":"jog","jog_mode":0, "coord_map":1, "jnum":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "jog"}

说明:

  • 发送的指令代表机器人停止机器人关节2在关节空间下的jog运动

当jog_mode为1时,仅jog_mode, coord_map, jnum及jogvel参数生效。

发送消息:

{"cmdName":"jog","jog_mode":1, "coord_map":1, "jnum":1, "jogvel":30}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "jog"}

说明:

  • 发送的指令代表机器人在关节空间下,关节2以30 deg/s 做jog运动
  • 值得注意的是,运动的正负由jogvel的正负来确定
  • 需要先停止当前轴的运动才能再次下发该轴的运动指令

当jog_mode为2时,参数jog_mode, coord_map, jnum, jogvel, poscmd均生效。

发送消息:

{"cmdName":"jog","jog_mode":2, "coord_map":1, "jnum":1, "jogvel":30, "poscmd":20}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "jog"}

说明:

  • 发送的指令为控制机器人关节2以30 deg/s速度向正方向运动20 deg。
  • 运动的正负可以由poscmd的正负来确定。

当jog_mode为3时,参数jog_mode, coord_map, jnum, jogvel, poscmd均生效。

发送消息:

{"cmdName":"jog","jog_mode":3, "coord_map":1, "jnum":1, "jogvel":30, "poscmd":20}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "jog"}

说明:

  • 发送指令为控制机器人关节2以30 deg/s速度运动到20 deg的目标位置。

关节运动到指定位置MoveJ

发送消息:

{"cmdName":"joint_move","relFlag":0,"jointPosition":[0,90.5,90.5,0,90.5,0],"speed":20.5,"accel":20.5}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "joint_move"}

说明:

  • relFlag: 可选值为0或者1,0代表绝对运动,1代表相对运动。
  • jointPosition:[j1,j2,j3,j4,j5,j6] 填入的是每一个关节的角度值。单位是度,不是弧度。运动的正负由jointPosition值的正负来确定。
  • speed: speed_val 代表关节的速度,单位是 (°/S),用户可以自行填入适合的参数。
  • accel:accel_val 代表关节的加速度,单位是 (°/S²),用户可以自行填入适合的参数,加速度的值建议不要超过720。
  • joint_move是阻塞(在控制器内部,不影响指令的立即返回)的运动指令,必须一条运动指令执行完才会执行下一条运动指令。如果需要立即执行下一条指令,建议先使用stop_program停止当前的运动,再发送下一条运动指令。

TCP末端运动到指定位置

发送消息:

{"cmdName":"end_move","endPosition":[100,200.1,200.5,0,0,0], "speed":21.5, "accel":31.5}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "end_move"}

说明:

  • endPosition: [x,y,z,a,b,c] 指定TCP末端xyzabc的值。
  • speed: speed_val 代表关节的速度,单位是 (°/S),用户可以自行填入适合的参数。如果speed_val设置为20,则代表关节速度为20 °/S。
  • accel:accel_val 代表关节的加速度,单位是 (°/S²),用户可以自行填入适合的参数,加速度的值建议不要超过720。
  • end_move是阻塞的运动指令,必须一条运动指令执行完才会执行下一条运动指令。如果需要立即执行下一条指令,建议先使用stop_program停止当前的运动,再发送下一条运动指令。
  • end_move指令并不是从当前位置直线运动到目标位置点,这条指令是先对用户输入的笛卡尔空间目标点进行逆解,然后使用joint_move指令,让机器人关节运动到指定位置。
  • 如果需要从当前位置直线运动到目标位置点,需要使用moveL指令。

直线运动MoveL

发送消息:

{"cmdName":"moveL","relFlag":1,"cartPosition":[0,0,50,0,0,0],"speed":20,"accel":50,"tol":0.5}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "moveL"}

说明:

  • cartPosition:[x,y,z,rx,ry,rz] 指定笛卡尔空间x,y,z,rx,ry,rz的值。
  • speed:speed_val代表线速度,单位是 (mm/s),用户可以自行填入适合的参数。如果speed_val设置为20,则代表线速度为20 mm/s。
  • accel:accel_val代表直线运动的加速度,单位是 (mm/S²),用户可以自行填入适合的参数,加速度的值建议不要超过8000。
  • relFlag:flag_val可选值为0或者1。 0代表绝对运动,1代表相对运动。
  • moveL是阻塞的运动指令,必须一条运动指令执行完才会执行下一条运动指令。如果需要立即执行下一条指令,建议先使用stop_program停止当前的运动,再发送下一条运动指令。

圆弧运动MoveC

发送消息:

{"cmdName":"movc","relFlag":move_mode,"pos_mid":[x,y,z,rx,ry,rz],"pos_end":[x,y,z,rx,ry,rz],"speed":vel,"accel":acc,"tol":tol}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "movc"}

说明:

  • pos_mid:[x,y,z,rx,ry,rz] 指定笛卡尔空间x,y,z,rx,ry,rz的值。
  • pos_end:[x,y,z,rx,ry,rz] 指定笛卡尔空间x,y,z,rx,ry,rz的值。
  • speed:speed_val 代表关节的速度,单位是 (°/S),用户可以自行填入适合的参数。如果speed_val设置为20,则代表关节速度为20 °/S。
  • accel:accel_val 代表关节的加速度,单位是 (°/S²),用户可以自行填入适合的参数,加速度的值建议不要超过720。
  • tol:tol代表最大允许误差,若不需要则取0。

查询运动状态

发送消息:

{"cmdName":"get_motion_state"}

接收消息:

{"queue": 0, "errorMsg": "", "cmdName": "get_motion_state", "queue_full": false, "active_queue": 0, "inpos": true, "paused": false, "err_add_line": 0, "errorCode": "0", "motion_line": 0}

说明:

  • queue_full: 判断队列是否处于队满状态, 0为不满;1为队满。
  • queue: 在队列中的运动指令数目
  • inpos: 是否到位状态标志位, 0代表未到位(即正在运动中),1代表到位(一般处于停止状态)
  • paused: 运动是否暂停标志位,0代表未暂停,1代表处于暂停状态
  • err_add_line: 如果是重复对应控制器不执行的时候,那个运动指令的行号
  • motion_line: 运动指令ID

获取机器人DH参数

发送消息:

{"cmdName":"get_dh_param"}

接收消息:

{"errorCode": "0", "errorMsg": "", "dh_param": [[0.0, 90.0, 0.0, 0.0, 90.0, -90.0], [0.0, 0.0, 897.0, 744.5, 0.0, 0.0], [196.5, 0.0, 0.0, -188.35000610351562, 138.5, 120.5], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]], "cmdName": "get_dh_param"}

说明:

  • dh_param: 返回的列表中,各元素按索引依次分别代表:alpha, a, d, joint_homeoff.
    • alpha: 连杆扭转角
    • a: 连杆长度
    • d: 连杆偏移
    • joint_homeoff: 关节零点偏移

获取用户坐标系信息

发送消息:

{"cmdName":"get_user_offsets"}

接收消息:

{"user_offsets": [[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.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, 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.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, 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.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, 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.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]], "errorCode": "0", "cmdName": "get_user_offsets", "errorMsg": ""}

说明:

  • tool_offset:有16组数据(0~15),对应相对id的工具坐标系偏移,0代表默认的世界坐标系。

获取当前用户坐标系信息

发送消息:

{"cmdName":"get_curr_user_offset"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_curr_user_offset", "user_offset": [-590.0, 380.0, -1230.0, 0.0, 0.0, 0.0]}

选择用户坐标系

发送消息:

{"cmdName":"set_user_id","user_frame_id":2}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_user_id"}

说明:

  • set_user_id: 用户坐标系ID号。用来选择在哪个用户坐标系下运动。比如设置ID为2,就是在第二个用户坐标系下运动。
  • 需要说明的是 set_user_id 设置为 0 的时候代表机器人在基坐标系(世界坐标系)下运动。

获取当前用户坐标系

发送消息:

{"cmdName":"get_curr_user_id"}

接收消息:

{"errorCode": "0", "errorMsg": "", "id": 10, "cmdName": "get_curr_user_id"}

设置用户坐标系

发送消息:

{"cmdName":"set_user_offsets","userffset":[10,10,10,10,10,10],"id":2,"name":"user_new"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_user_offsets"}

说明:

  • userffset: 填入用户坐标系的 x, y, z, rx, ry, rz 如例子中的[10,10,10,10,10,10]。
  • id: 想要设置的用户坐标系的ID号,可选的ID为1到15。例入设置用户坐标系2。
  • name: 想要设置的用户坐标系的名字。例如将名字设置为 user_new。
  • 此命令仅是设置了坐标系数值,但实际并未选用此坐标系

选择工具坐标系

发送消息:

{"cmdName":"set_tool_id","tool_id":2}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tool_id"}

说明:

  • tool_id: 工具坐标系ID号。用来选择在哪个工具坐标系下运动。比如设置ID为2,就是在第二个工具坐标系下运动。
  • 需要说明的是当tool_id 为 0 的时候机器人的工具默认为末端法兰盘中心。

获取当前工具坐标系

发送消息:

{"cmdName":"get_curr_tool_id"}

接收消息:

{"errorCode": "0", "errorMsg": "", "id": 2, "cmdName": "get_curr_tool_id"}

设置工具坐标系

发送消息:

{"cmdName":"set_tool_offsets","tooloffset":[10,10,10,10,10,10],"id":2,"name":"tcp_new"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tool_offsets"}

说明:

  • tooloffset: 填入工具坐标系的 x, y, z, rx, ry, rz。如例子中的[10,10,10,10,10,10]。
  • id: 想要设置的工具坐标系的ID号,可选的ID为1到15。例入设置工具坐标系2。
  • name: 想要设置的工具坐标系的名字。例如将名字设置为 tcp_new。

获取工具坐标系信息

发送消息:

{"cmdName":"get_tool_offsets"}

接收消息:

{"errorCode": "0", "errorMsg": "", "tool_offsets": [[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.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, 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.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, 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.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, 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.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]], "cmdName": "get_tool_offsets"}

说明:

  • tool_offset:有16组数据(0~15),对应相对id的工具坐标系偏移,0代表默认的末端法兰中心坐标系。

获取当前坐标系信息

发送消息:

{"cmdName":"get_curr_tool_offset"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_curr_tool_offset", "tool_offset": [0.0, 0.0, 130.0, 0.0, 0.0, -90.0]}

设置负载

发送消息:

{"cmdName":"set_payload","mass":m,"centroid":[x,y,z]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_payload"}

说明:

  • mass是负载的质量,单位是千克(KG)。centroid是负载的质心,单位是mm。例如要设置的负载质量为1KG,质心为[10,10,10]。 那么可以发送命令:
{"cmdName":"set_payload","mass":1,"centroid":[10,10,10]}

获取负载

发送消息:

{"cmdName":"get_payload"}

接收消息:

{"errorCode": "0", "centroid": [0.0, 0.0, 1.0], "mass": 1.0, "cmdName": "get_payload", "errorMsg": ""}

说明:

  • mass: 是负载的质量,单位是千克(KG)。
  • centroid: 是负载的质心,单位是mm。

获取关节位置

发送消息:

{"cmdName":"get_joint_pos"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_joint_pos", "joint_pos": [j1,j2,j3,j4,j5,j6]}

说明:

  • j1,j2,j3,j4,j5,j6 是返回的六个关节的位置,单位是度。

获取当前坐标系下的末端位姿

发送消息:

{"cmdName":"get_tcp_pos"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": " get_tcp_pos", "tcp_pos": [x,y,z,a,b,c]}

说明:

  • [x,y,z,a,b,c] 是在当前设置的工具坐标系下的末端位姿,默认情况下工具坐标系是法兰盘中心。

设置机器人速度倍率

发送消息:

{"cmdName":"rapid_rate","rate_value":0.2}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "rapid_rate"}

说明:

  • rate_value: 默认情况下机器人的程序运行倍率是1,通过这个命令可以进行修改,设置范围是0到1。

查询是否处于软限位

发送消息:

{"cmdName":"is_on_limit"}

接收消息:

{"errorCode": "0", "errorMsg": "", "on_limit": 0, "cmdName": "is_on_limit"}

说明:

  • on_limit: 为True代表机器人正处于软限位,值为False则相反。

查询急停状态

发送消息:

{"cmdName":"emergency_stop_status"}

接收消息:

{"errorCode": "0", "errorMsg": "", "emergency_stop": 0, "cmdName": "emergency_stop_status"}

说明:

  • emergency_stop: 是返回的是否处于急停状态,0代表未处于急停状态;1代表处于急停状态

设置运动规划器

发送消息:

{"cmdName":"set_motion_planner","type":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_motion_planner"}

说明:

  • type:运动规划器类型,可选值为-1,0,1。-1代表禁用规划器,0代表选用T规划,1代表选用S规划。

获取当前实际关节位置

发送消息:

{"cmdName":"get_actual_joint_pos"}

接收消息:

{"errorCode": "0", "position": [285.8061097309843, 80.09823788479945, 60.72657603991451, 124.99045041547085, -85.27718451168131, 316.9348226974971], "cmdName": "get_actual_joint_pos", "errorMsg": ""}

说明:

  • position:返回六维列表代表各个关节角。

获取当前实际笛卡尔位姿

发送消息:

{"cmdName":"get_actual_tcp_pos"}

接收消息:

{"errorCode": "0", "position": [604.2014815031182, -71.01229318144345, 1669.033510162098, -179.4141090762053, -6.279762125819193, 149.01179247501761], "cmdName": "get_actual_tcp_pos", "errorMsg": ""}

说明:

  • 返回六维列表代表各个笛卡尔位姿。

获取当前速率

发送消息:

{"cmdName":"get_rapid_rate"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_rapid_rate", "value": 1.0}

说明:

  • value:当前速率,范围[0,1]

伺服相关

查询是否进入伺服位置控制模式

发送消息:

{"cmdName":"is_in_servomove"}

接收消息:

{"errorCode": "0", "errorMsg": "", "in_servomove": true, "cmdName": "is_in_servomove"}

说明:

  • in_servomove:true,处于伺服模式。false,不在伺服模式。

机器人伺服位置控制使能

发送消息:

{"cmdName":"servo_move","relFlag":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "servo_move"}

说明:

  • relFlag: 1代表进入servo_move模式,0代表退出。

关节空间位置控制模式

发送消息:

{"cmdName":"servo_j","relFlag":1,"jointPosition":[0.1,0,0,0,0,0],"stepNum":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "servo_j"}

说明:

  • 用户可以自己生成六个关节的角度然后发送给机器人,能控制机器人到达相应的目标位置。
  • 用户在使用servo_j指令之前需要先使用servo_move指令进入伺服位置控制模式。
  • jointPosition:[joint1,joint2,joint3,joint4,joint5,joint6] 填入的是各个关节的角度,单位是度。
  • relFlag:relFlag可选参数为0和1。0代表绝对运动,1代表相对运动。
  • stepnum:是周期分频,机器人将以num*8ms的周期执行接收到的servo运动指令。
  • 需要注意的是,由于控制器的控制周期是8ms,这个指令需要8ms发送一次才能有效果,而且需要连续的发才行,只发一次看不出效果,并且六个关节的最大速度是180度/秒。例如[1.5,0.5,0.5,0.5,0.5,0.5],1.5/0.008= 187.5超出了关节速度限制, 那么servo_j指令就不会生效。

注意:

这条指令和joint_move的区别是比较大的,这条指令主要是科研当中做轨迹规划时使用,这条指令发给机器人时并不经过控制器的规划器进行插补,而是直接发给伺服的。用户使用这条指令时需要预先进行轨迹的规划,否则使用效果会很差,无法达到预期。一般情况下建议使用joint_move指令。

笛卡尔空间位置控制模式

relFlag:0代表绝对运动,1代表相对运动

发送消息:

{"cmdName":"servo_p","catPosition":[x,y,z,a,b,c],"relFlag":0,"stepNum":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "servo_p"}

说明:

  • 用户可以使用自己的轨迹规划算法,生成各个关节的点坐标,然后发送给机器人的六个关节,机器人能执行这些指令。
  • 用户在使用servo_p指令之前需要先使用servo_move指令进入伺服位置控制模式。
  • catPosition:[x,y,z,a,b,c] 表示机器人在笛卡尔空间中的坐标xyz的单位是mm,abc的单位是度。
  • abc代表机器人姿态的欧拉角顺序是XYZ
  • relFlag:0 relFlag可选参数为0 和1 。0代表绝对运动,1代表相对运动。
  • stepnum:是周期分频,机器人将以num*8ms的周期执行接收到的servo运动指令。
  • 需要注意的是,这个指令需要每8ms发送一次才能有效果。因为控制器是每8ms插补一个位置点。并且x、y、z、a、b、c的值不宜过大,避免超出控制器的安全速度限制。

注意:

这条指令主要是科研当中做轨迹规划时使用,使用这条指令时,控制器的规划器不进行插补。用户使用这条指令时需要预先进行轨迹的规划,否则使用效果会很差,无法达到预期。一般情况下建议使用moveL。

伺服模式滤波器

  • set_servo_move_filter指令设置了伺服模式滤波器,协助规划轨迹
  • filter_type代表运动模式可填的值有6个:
    • no_filter禁用滤波器:0
    • 关节空间一阶低通滤波器:1
    • 关节空间非线性滤波器:2
    • 关节空间多阶均值滤波器:3
    • 笛卡尔空间非线性滤波器:4
    • 速度前瞻:5

当filter_type为0的时候只有1个参数

发送消息:

{"cmdName":"set_servo_move_filter","filter_type":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_servo_move_filter"}

说明:

禁用滤波器、不使用滤波器进行辅助规划,需要退出servo模式后设置。

当filter_type为1的时候只有2个参数

发送消息:

{"cmdName":"set_servo_move_filter","filter_type":1",lpf_cf":0.5}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_servo_move_filter"}

说明:

(a)设置关节空间一阶低通滤波器,需要退出servo模式后设置。

(b)lpf_cf表示截止频率,单位HZ。

当filter_type为2的时候只有4个参数

发送消息:

{"cmdName":"set_servo_move_filter","filter_type":2,"nlf_max_vr":2,"nlf_max_ar":2,"nlf_max_jr":4}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_servo_move_filter"}

说明:

(a) 设置关节空间非线性滤波器,需要退出servo模式后设置。

(b) max_vr 姿态变化速度的速度上限值(绝对值)°/s。

(c) max_ar 姿态变化速度的加速度上限值(绝对值)°/s^2。

(d) max_jr 姿态变化速度的加加速度上限值(绝对值)°/s^3。

当filter_type为3的时候只有5个参数

发送消息:

{"cmdName":"set_servo_move_filter","filter_type":3,"mmf_max_buf":20,"mmf_kp":0.1,"mmf_kv":0.2,"mmf_ka":0.6}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_servo_move_filter"}

说明:

(a) 设置关节空间多阶均值滤波器,需要退出servo模式后设置。

(b) mmf_max_buf:滤波窗口宽度,越大滤波轨迹越平缓,会损失精度。

(c) mmf_kp:位置跟踪系数,越小滤波轨迹越平缓,越大精度越高,但可能有抖动。

(d) mmf_kv:速度跟踪系数越小滤波轨迹越平缓,越大精度越高,但可能有抖动。

(e) mmf_ka:加速度位置跟踪系数越小滤波轨迹越平缓,越大精度越高,但可能有抖动。

当filter_type为4的时候只有7个参数

发送消息:

{"cmdName":"set_servo_move_filter","filter_type":4,"nlf_max_vr":2,"nlf_max_ar":2,"nlf_max_jr":4,"nlf_max_vp":10,"nlf_max_ap":100,"nlf_max_jp":200}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_servo_move_filter"}

说明:

(a) 设置笛卡尔空间非线性滤波器,需要退出servo模式后设置。

(b) max_vr 笛卡尔空间姿态变化速度的速度上限值(绝对值)°/s。

(c) max_ar 笛卡尔空间姿态变化速度的加速度上限值(绝对值)°/s^2。

(d) max_jr 笛卡尔空间姿态变化速度的加加速度上限值(绝对值)°/s^3。

(e) max_vp 笛卡尔空间下移动指令速度的上限值(绝对值)。单位:mm/s。

(f) max_ap 笛卡尔空间下移动指令加速度的上限值(绝对值)。单位:mm/s^2。

(g) max_jp 笛卡尔空间下移动指令加加速度的上限值(绝对值)。单位:mm/s^3。

当filter_type为5的时候只有3个参数

发送消息:

{"cmdName":"set_servo_move_filter","filter_type":5,"mmf_max_buf":max_buf,"mmf_kp":kp}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_servo_move_filter"}

说明:

(a) 设置关节空间多阶均值滤波器,需要退出servo模式后设置。

(b) max_buf 均值滤波器缓冲区的大小。

(c) mmf_kp 加速度滤波系数。

设置拖拽模式的开关

发送消息:

{"cmdName":"torque_control_enable","enable_flag":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "torque_control_enable"}

说明:

  • enable_flag,0关闭拖拽模式,1开启拖拽模式。

获取拖拽状态

发送消息:

{"cmdName":"get_drag_status"}

接收消息:

{"status": false, "errorCode": "0", "cmdName": "get_drag_status", "errorMsg": ""}

说明:

  • drag_status: 为True代表机器人正处于拖拽模式下,用户可以对机器人进行拖拽编程;值为False则相反。

IO 设置相关

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

发送消息:

{"cmdName":"set_digital_output","type":0,"index":1,"value":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_digital_output"}

说明:

  • type 是DO的类型: 0--控制器AO;1--工具IO;2--扩展AO;3--保留;4--modbusIO;5--Profinet IO;6--Ethernet/IP IO。
  • index 是DO的编号,如果想要控制第1个DO,index的值设为1,即索引从1开始
  • value 是DO的值,可选值为0或者1。

获取数字输出变量(DO)的值

发送消息:

{"cmdName":"get_digital_output","type":0,"index":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_digital_output", "value": 0}

说明:

  • type 是DO的类型: 0--控制器AO;1--工具IO;2--扩展AO;3--保留;4--modbusIO;5--Profinet IO;6--Ethernet/IP IO。
  • index 是DO的编号,例如控制的DO编号为1~31,如果想要控制第31个DO,index的值设为31,即索引从1开始
  • value 是DO的值,可选值为0或者1。

获取指定数字输入状态

发送消息:

{"cmdName":"get_digital_input","type":0,"index":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_digital_input", "value": 0}

说明:

  • type 是DO的类型: 0--控制器AO;1--工具IO;2--扩展AO;3--保留;4--modbusIO;5--Profinet IO;6--Ethernet/IP IO。
  • index 是DO的编号,例如控制的DO编号为1~31,如果想要控制第31个DO,index的值设为31,即索引从1开始
  • value 是DO的值,可选值为0或者1。

获取数字输入状态

发送消息:

{"cmdName":"get_digital_input_status"}

接收消息:

{"din_status": [1, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "errorCode": "0", "cmdName": "get_digital_input_status", "errorMsg": ""}

说明:

  • din_status:一共有136个引脚,前 8个引脚为控制柜硬件IO。之后的为modbus。

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

发送消息:

{"cmdName":"set_analog_output","type":type,"index":index,"value":value}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_analog_output"}

说明:

  • type 是AO的类型:0--控制器AO;1--工具IO;2--扩展AO;3--保留;4--modbusIO;5--Profinet IO;6--Ethernet/IP IO 。
  • index 是AO的编号,例如控制的AO编号为0~7,如果想要控制第7个AO,index的值设为7。
  • value 是AO的值,可输入一个浮点数来满足编程要求。

获取模拟输出变量的值(AO)的值

发送消息:

{"cmdName":"get_analog_output","type":0,"index":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_analog_output", "value": 0.0}

说明:

  • type 是AO的类型:0--控制器AO;1--工具IO;2--扩展AO;3--保留;4--modbusIO;5--Profinet IO;6--Ethernet/IP IO 。
  • index 是AO的编号,例如控制的AO编号为0~7,如果想要控制第7个AO,index的值设为7。
  • value 是AO的值,可输入一个浮点数来满足编程要求,例如4.32。

获取扩展IO状态

发送消息:

{"cmdName":"get_extio_status"}

接收消息:

  • 无扩展模块时:
(0, [], {'state': 0})
  • 有扩展模块时:
{
    "errorCode": "0",
    "errorMsg": "",
    "cmdName": "get_extio_status",
    "extio_status": {"status": "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [], []]", "setup": "[[0, \"11\", [9600, 8, 1, 78, 1], [[1, 8], [17, 8], [0, 0], [0, 0]], \"ext_0kakhfa54n84kl8k\"], [1, \"22\", [\"192.168.1.200\", 1111, 2], [[1, 8], [0, 0], [0, 0], [0, 0]], \"ext_9ckraca694bm6gm9\"]]", "num": 2, "pinmap": "[[0, 0, 0, 0], [8, 8, 0, 0]]", "mode": 0}}
    }

对extio_status进行说明:

  • num:代表有 num 个外部扩展IO模块。
  • mode: 代表拓展IO是否在运行。
  • setup:(1, 'mobusIoName', ('192.168.1.200', 1111) 1代表TCP(0代表RTU),modbusIoName是外部扩展模块的名字,('192.168.1.200', 1111) 是IP和端口。 [9600, 8, 1, 78, 1]代表RTU下的波特率,数据位,校验位,停止位信息。
  • [[1, 8], [17, 8], [0, 0], [0, 0]] 四个列表分别代表:数字输入,数字输出,模拟输入,模拟输出。括号内第一个数字代表外部扩展模块寄存器起始分配地址。第二个数字代表IO的数量。
  • pinmap: 外部模块引脚索引起始地址,当有多个外部模块的时候需要考虑。
  • status: "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [], []]" 为拓展IO对应的状态。

获取功能输入引脚的状态

发送消息:

{"cmdName":"get_funcdi_status"}

接收消息:

{"errorCode": "0", "errorMsg": "", "funcdi_status": [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [0,2], [-1,- 1], [-1, -1], [-1, -1]], "cmdName": "get_funcdi_status"}

说明:

  • funci_status:一共返回12种功能输入引脚,分别是:
    • 1启动程序,
    • 2暂停程序,
    • 3继续运行程序,
    • 4停止程序,
    • 5打开电源,
    • 6关闭电源,
    • 7机器人上使能,
    • 8机器人下使能,
    • 9一级缩减模式,
    • 10保护性停止,
    • 11回初始位置,
    • 12二级缩减模式。
  • [type,index]:[-1,-1]为默认值表示没有输入引脚被设置为功能引脚。
    • Type的值有三种:

      • 0代表控制柜输入引脚,
      • 1代表机器人末端工具输入引脚,
      • 2代表modbus的输入引脚。
    • Index代表的是输入引脚的索引号,表示哪一个引脚被设置为功能引脚。如上文中[0,2]表示控制柜的第三个引脚(索引号从0开始)被设置为一级缩减模式功能引脚。

TIO相关

设置TIO V3工具电压

发送消息:

{"cmdName":"set_tio_vout_param","tio_vout_ena":0,"tio_vout_vol":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tio_vout_param"}

说明:

  • tio_vout_ena 参数为0或1。0为下使能,1为上使能。

  • tio_vout_vol 参数为0或1。0为24V,1为12V。

获取TIO V3工具电压

发送消息:

{"cmdName":"get_tio_vout_param"}

接收消息:

{"errorCode": "0", "errorMsg": "", "tio_vout_ena": 0, "tio_vout_vol": 0, "cmdName": "get_tio_vout_param"}

说明:

  • tio_vout_ena 参数为0或1。0为未使能,1为已使能。

  • tio_vout_vol 参数为0或1。0为12V,1为24V。

添加或修改信号

发送消息:

{"cmdName":"add_tio_rs_signal","tio_signal_name":<>,"tio_signal_chnId":<>,"tio_signal_sigType":<>,"tio_signal_sigAddr":<>,"frequency":<>}

接收消息: {"errorCode": "0", "errorMsg": "", "cmdName": "add_tio_rs_signal"} 说明:

  • tio_signal_name: 标识名称(限制在 20 个字符以内)
  • tio_signal_chnId: RS485 通道 ID
  • tio_signal_sigType: 信号类型
  • tio_signal_sigAddr: 寄存器地址
  • frequency: 信号在控制器内部的刷新率不大于 10

获取 RS485 信号列表

发送消息:

{"cmdName":"get_rs485_signal_list"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_rs485_signal_list", "num":<>, </signalName>:<> }

说明:

  • num,表示信号的数量
  • signalName: signalName: { “chnId”:<>, “sigType”:<:>, “sigAddr”:<>, “value”:<>, “frequency”:<> }

删除信号量

发送消息:

{"cmdName":"del_tio_rs_signal","tio_signal_name":"test"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "del_tio_rs_signal"}

说明:

  • tio_signal_name:信号名称

设置 TIO 模式

发送消息:

{"cmdName":"set_tio_pin_mode","pinType":<>,"pinMode":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tio_pin_mode"}

说明:

  • pinType:tio 类型 0 for DI Pins, 1 for DO Pins, 2 for AI Pins
  • pinMode: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 接口使能,模拟输入功能禁止

获取 TIO 模式

发送消息:

{"cmdName":"get_tio_pin_mode","pinType":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_tio_pin_mode", "pinMode": <>}

说明:

  • pinType:tio 类型 0 for DI Pins, 1 for DO Pins, 2 for AI Pins
  • pinMode: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接口使能,模拟输入功能禁止

设置 RS485 通讯参数

发送消息:

{"cmdName":"set_rs485_chn_comm","chn_id":<>,"slaveId":<>,"baudrate":<>,"databit":<>,"stopbit":<>,"parity":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_rs485_chn_comm"}

说明:

  • 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→偶校验

获取 RS485 通讯参数

发送消息:

{"cmdName":"get_rs485_chn_comm","chn_id":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": 34,"get_rs485_chn_comm","slaveId":<>,"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->偶校验

配置 RS485 通讯模式

发送消息:

{"cmdName":"set_rs485_chn_mode","chnId":<>,"chnMode":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_rs485_chn_mode"}

说明:

  • chnId: 0: RS485H, channel 1; 1: RS485L, channel 2
  • chnMode: 0: Modbus RTU, 1: Raw RS485, 2, torque sensor

获取 RS485 通讯模式

发送消息:

{"cmdName":"get_rs485_chn_mode","chnId":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_rs485_chn_mode", "chnMode": <>}

说明:

  • chnId: 0: RS485H,channel 1。1: RS485L,channel 2。
  • chnMode: 0: Modbus RTU。1: Raw RS485。2:torque sensor。

通过 RS485 发送命令

发送消息:

{"cmdName":"send_tio_rs_command","chn_id":<>,"cmbBuf":<>}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "send_tio_rs_command"}

说明:

  • chn_id:通道号
  • cmdBuf:数据字段

获取信号量

发送消息:

{"cmdName":"get_tio_signals"}

接收消息:

{"signals": [["ttt", 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, 0, 0, 0, 0.0], ["", 0, 0, 0, 0, 0.0], ["", 0, 0, 0, 0, 0.0], ["", 0, 0, 0, 0, 0.0]], "errorCode": "0", "cmdName": "get_tio_signals", "errorMsg": ""}

说明:

  • signals:返回信号量列表,8个元素列表
  • 第一个是信号量名称
  • 每个列表后面几项分别是:chn_id通道号id,signal_type信号量类型,sigal_addr信号量地址,value: 信号量的值,frequence信号量刷新频率

程序相关

加载程序

发送消息:

{"cmdName":"load_program","programName":"track/test.jks"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "load_program"}

说明:

  • programName 不支持中文。
  • 如果控制器是1.5版本之前的,使用.ngc作为文件结尾;1.5及之后的版本以.jks作为文件结尾。
  • 若加载轨迹文件需要在文件名前加 track/

获取被加载程序名称

发送消息:

{"cmdName":"get_loaded_program"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_loaded_program", "programName": "test.jks"}

运行程序

发送消息:

{"cmdName":"play_program"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "play_program"}

暂停程序

发送消息:

{"cmdName":"pause_program"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "pause_program"}

恢复程序

发送消息:

{"cmdName":"resume_program"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "resume_program"}

停止程序

发送消息:

{"cmdName":"stop_program"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "stop_program"}

说明:

  • 停止程序实际上就是停止机器人的运动。
  • stop_program 也可以用于停止机器人的其它运动指令,比如joint_move/moveL,当要控制机器人停止运动时建议使用stop_program。

获取程序状态

程序状态:running/pause/idle

  • running: 正在运行中
  • pause: 暂停状态
  • idle: 空闲状态

发送消息:

{"cmdName":"get_program_state"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_program_state", "programState": "idle"}

查询用户自定义系统变量

发送消息:

{"cmdName":"query_user_defined_variable"}

接收消息:

{"errorCode": "0", "errorMsg": "", "var_list": [{"alias": "test", "id": 5500, "value": 1.0}], "cmdName": "query_user_defined_variable"}

说明:

  • var_list: 会以列表的形式返回所有的用户自定义的系统变量。
  • alias: 系统变量的名字。
  • id:系统变量的id号。用户想要修改系统变量需要知道系统变量的id号。
  • value:系统变量的值。例如返回消息中返回的系统变量名字是system_var1,id是5500,值为1.0。

修改用户自定义系统变量

发送消息:

{"cmdName":"modify_user_defined_variable","id_new":5500,"alias_new":"s_new","value_new":14}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName":"modify_user_defined_variable"}

说明:

  • id_new:是要修改的系统变量的id号,id号可以通过指令query_user_defined_variable 查询获取。
  • alias_new:设置要修改的系统变量的新名字。
  • value_new:设置要修改的系统变量的值。

获取当前脚本执行行号

发送消息:

{"cmdName":"get_current_line"}

接收消息:

{"current_line": 0, "errorCode": "0", "cmdName": "get_current_line", "errorMsg": ""}

说明:

  • current_line:当前脚本执行行号

获取程序状态信息

发送消息:

{"cmdName":"get_program_info"}

接收消息:

{"current_line": 0, "errorMsg": "", "cmdName": "get_program_info", "errorCode": "0", "programName": "test", "programState": "idle", "motion_line": 0}

说明:

  • current_line:当前主线程脚本执行行号。
  • programName:程序名称。
  • programState:程序状态。idle空闲。running正在运行中。paused暂停中。
  • motion_line:当前运动行号,仅是运动指令。

机械臂安全状态相关

保护性停止状态

发送消息:

{"cmdName":"protective_stop_status"}

接收消息:

{"errorCode": "0", "errorMsg": "", "protective_stop": "0", "cmdName": "protective_stop_status"}

说明:

  • protective_stop的值为1时代表机器人处于保护性停止状态,值为0的时候相反。保护性停止一般发生在机器人发生碰撞的情况下。这时候机器人会处于保护性停止状态。

设置机器人碰撞等级

发送消息:

{"cmdName":"set_clsn_sensitivity","sensitivityVal":level}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_clsn_sensitivity"}

说明:

  • level的可选值为0到5,0代表关闭碰撞,等级1的碰撞灵敏度是最高的,25N。等级5的碰撞灵敏度是最低的,125N,每级差25N。

获取机器人碰撞等级

发送消息:

{"cmdName":"get_clsn_sensitivity"}

接收消息:

{"errorCode": "0", "sensitivityLevel": 1, "cmdName": "get_clsn_sensitivity", "errorMsg": ""}

说明:

  • level是返回的碰撞等级。0代表关闭碰撞。1代表的碰撞灵敏度是最高的。5代表的碰撞灵敏度是最低的。

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

发送消息:

{"cmdName":"clear_error"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "clear_error"}

机械臂运动学相关

机器人运动学正解

发送消息:

{"cmdName":"kine_forward","jointPosition":[j1,j2,j3,j4,j5,j6]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "kine_forward", "cartPosition": [x,y,z,rx,ry,rz]}

说明:

  • [j1,j2,j3,j4,j5,j6]是需要发送的6个关节角度用来求运动学正解,[x,y,z,rx,ry,rz] 是经过正解后得到的机器人末端位姿。
  • 正、逆解接口默认是在当前用户坐标系和工具坐标系下的计算。

机器人运动学逆解

发送消息:

{"cmdName":"kine_inverse","jointPosition":[j1,j2,j3,j4,j5,j6],"cartPosition": [x,y,z,rx,ry,rz]} 

接收消息:

  • 若逆解成功:
{"errorCode": "0", "errorMsg": "", "cmdName": "kine_inverse", "jointPosition":[x,y,z,rx,ry,rz]}
  • 若逆解失败:
{"errorCode": "2", "errorMsg": "call kine_inverse failed", "cmdName": "kine_inverse"}

说明:

  • 发送的jointPosition 是机器人的参考关节角,推荐用户选取机器人当前的关节角作为参考关节角。单位是度。
  • 发送的cartPosition 是机器人的末端位姿,[x,y,z,a,b,c]; x y z是笛卡尔空间位置,单位是毫米;a b c是空间恣态,单位是度。
  • 接收消息里得到的jointPosition是逆解后的机器人关节角度。

轨迹相关

设置轨迹采集参数

发送消息:

{"cmdName":"set_traj_config","acc":100,"vel":20,"xyz_interval":0.1,"rpy_interval":0.1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_traj_config"}

说明:

  • acc:轨迹执行的加速度mm/s^2。
  • vel:轨迹执行的速度mm/s。
  • xyz_interval:笛卡尔空间位移数据采集间隔。
  • rpy_interval:笛卡尔空间旋转数据采集间隔。

获取轨迹采集参数

发送消息:

{"cmdName":"get_traj_config"}

接收消息:

{"acc": 100.0, "xyz_interval": 0.1, "errorMsg": "", "cmdName": "get_traj_config", "errorCode": "0", "rpy_interval": 0.1, "vel": 20.0}

说明:

  • acc:轨迹执行的加速度mm/s^2。
  • vel:轨迹执行的速度mm/s。
  • xyz_interval:笛卡尔空间位移数据采集间隔。
  • rpy_interval:笛卡尔空间旋转数据采集间隔。

设置轨迹采集开关

发送消息:

{"cmdName":"set_traj_sample_mode","mode":1,"filename":"test"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_traj_sample_mode"}

说明:

  • mode: 0关闭,1开启。
  • filename:文件名。

获取轨迹采集开关状态

发送消息:

{"cmdName":"get_traj_sample_status"}

接收消息:

{"sampleStatus": 1, "errorCode": "0", "cmdName": "get_traj_sample_status", "errorMsg": ""}

说明:

  • sampleStatus:0关闭,1开启。

查询控制器中已经存在的轨迹复现数据的文件名

发送消息:

{"cmdName":"get_exist_traj_file_name"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_exist_traj_file_name", "trajTrackFileName": ["pythonTrack1", "test"]}

说明:

  • trajTrackFileName:轨迹数据文件名称,以列表形式返回所有的名称。

重命名轨迹复现数据的文件名

发送消息:

{"cmdName":"rename_traj_file_name","src":"test","dest":"test_rename"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "rename_traj_file_name"}

说明:

  • src: 源轨迹数据文件名。
  • dest:修改成的文件名。

删除轨迹

发送消息:

{"cmdName":"remove_traj_file","fileName":fileName}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "remove_traj_file"}

说明:

  • filename:轨迹数据文件名。

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

发送消息:

{"cmdName":"generate_traj_exe_file","fileName":"test_rename"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "generate_traj_exe_file"}

说明:

  • filename:轨迹数据文件名。

力控相关

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

设置末端力传感器型号

发送消息:

{"cmdName":"set_torsenosr_brand","sensor_brand":num}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_torsenosr_brand"}

说明:

sensor_band:

  • num为传感器型号,取值范围为1-6或10,需要与传感器硬件外壳铭刻的型号数字相匹配。其中10特指已经内置与机器人法兰内部的传感器,此型传感器由系统自动管理,无需调用此接口进行配置;

获取末端力传感器型号

发送消息:

{"cmdName":"get_torsenosr_brand"}

接收消息:

{"sensor_brand": 1, "errorCode": "0", "cmdName": "get_torsenosr_brand", "errorMsg": ""}

说明:

sensor_band:

  • 传感器型号

开始辨识传感器末端负载

发送消息:

{"cmdName":"start_torq_sensor_payload_identify","jointPosition":[j1,j2,j3,j4,j5,j6]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "start_torq_sensor_payload_identify"}

说明:

  • 这是一条会触发运动的指令,会使机器人运动到jointposition指定的位置。

  • jointPosition:负载辨识终点,关于终点点位设置的注意事项,请参考力控产品使用手册open in new window中对相关功能的说明。

获取传感器末端负载辨识状态

发送消息:

{"cmdName":"get_torq_sensor_identify_staus"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_torq_sensor_identify_staus", "identify_status": 1}

说明:

identify_status:0代表辨识完成结果已可以读取,1代表暂无可以读取的辨识结果,2代表辨识失败。

获取传感器末端负载辨识结果

发送消息:

{"cmdName":"get_torq_sensor_payload_identify_result"}

接收消息:

{"errorCode": "0", "centroid": [0, 0, 0], "mass": 0, "cmdName": "get_torq_sensor_payload_identify_result", "errorMsg": ""}

说明:

  • mass是负载的质量,单位是千克(KG)。

  • centroid是负载的质心,单位是mm。

注意:

请仔细区分set_tool_payload和set_payload的区别。

payload影响的是机器人的动力学;

tool_payload影响的是力控效果(即力控时机器人的力矩补偿)

设置传感器末端负载

发送消息:

{"cmdName":"set_tool_payload","mass":weight,"centroid":[x,y,z]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tool_payload"}

说明:

mass是负载的质量,单位是千克(KG)。centroid是负载的质心,单位是mm。

例如要设置的负载质量为1KG,质心为[10,10,10],那么可以发送命令:

{"cmdName":"set_tool_payload","mass":1,"centroid":[10,10,10]}

获取传感器末端负载

发送消息:

{"cmdName":"get_tool_payload"}

接收消息:

{"errorCode": "0", "centroid": [0.0, 0.0, 0.0], "mass": 1.0, "cmdName": "get_tool_payload", "errorMsg": ""}

说明:

  • mass 是负载的质量,单位是千克(KG)。

  • centroid是负载的质心,单位是mm。

设置力控坐标系

发送消息:

{"cmdName":"set_ft_ctrl_frame", "ftFrame":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_ft_ctrl_frame"}

说明:

  • FtFrame:0工具;1世界

获取力控坐标系

发送消息:

{"cmdName":"get_ft_ctrl_frame"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_ft_ctrl_frame", "ftFrame":0}

说明:

  • FtFrame 0工具 ; 1世界

设置力柔顺控制参数

发送消息:

{"cmdName":"set_admit_ctrl_config","axis":2,"opt":1,"ftUser":25,"ftConstant":5,"ftNnormalTrack":0,"ftReboundFK":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_admit_ctrl_config"}

说明:

  • 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中的相关说明。

获取力柔顺控制参数

发送消息:

{"cmdName":"get_admit_ctrl_config"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_admit_ctrl_config", "admitConfig": [[0, 5.0, 0.0, 0.0, 0], [0, 5.0, 0.0, 0.0, 0], [1, 25.0, 0.0, 5.0, 0], [0, 0.20000000298023224, 0.0, 0.0, 0], [0, 0.20000000298023224, 0.0, 0.0, 0], [0, 0.20000000298023224, 0.0, 0.0, 0]]}

说明:

  • admitConfig:有6组1*5的矩阵分别代表x,y,z,rx,ry,rz的力柔顺控制参数。

  • 每个矩阵内按顺序[opt,ftUser,ftReboundFK,ftConstant,ftNnormalTrack]。

开启或关闭末端力传感器

发送消息:

{"cmdName":"set_torque_sensor_mode","sensor_mode":mode}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_torque_sensor_mode"}

说明:

  • mode:0关;1开

开启或关闭工具拖拽

发送消息:

{"cmdName":"enable_admittance_ctrl","enable_flag":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "enable_admittance_ctrl"}

说明:

enable_flag:0关;1开。

注:

此接口将被废弃(deprecated),替代接口为enable_tool_drive

开启或关闭工具拖拽

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

发送消息:

{"cmdName":"enable_tool_drive", "enable_flag":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "enable_tool_drive"}

说明:

enable_flag:0关;1开。

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

发送消息:

{"cmdName":"get_compliant_type"}

接收消息:

{"errorCode": "0", "errorMsg": "", "compliance_type": 0, "sensor_compensation": 1, "cmdName": "get_compliant_type"}

说明:

  • sensor_compensation:1代表APP的实时力曲线显示以及10000端口返回的torqsensor[1][2]为实际外力;0代表不处于力控状态下时APP的实时力曲线显示以及10000端口返回的torqsensor[1][2]为传感器原始读数(若处于力控状态下则仍为实际外力)。
  • compliance_type:0代表不使用任何一种柔顺控制方法,1代表开启恒力柔顺控制,2代表开启速度柔顺控制。

设置力控类型和校零(初始化)选项

发送消息:

{"cmdName":"set_compliant_type","sensor_compensation":1,"compliance_type":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_compliant_type"}

说明:

  • sensor_compensation: 1代表立即进行一次传感器校零,并将APP的实时力曲线显示以及10000端口返回的torqsensor[1][2]切换为实际外力;0代表不做校零操作,并将不处于力控状态下时APP的实时力曲线显示以及10000端口返回的torqsensor[1][2]切换为传感器原始读数(若处于力控状态下则仍为实际外力)。
  • compliance_type: 0代表不使用任何一种柔顺控制方法,1代表开启恒力柔顺控制,2代表开启速度柔顺控制。

注:

此接口将被废弃(deprecated),替代接口为enable_cst_force_ctrl

获取末端力传感器运行状态

发送消息:

{"cmdName":"get_torque_sensor_mode"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_torque_sensor_mode", "sensor_mode": 0}

说明:

  • sensor_mode: 0 代表未开启, 1代表开启

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

发送消息:

{"cmdName":"set_torque_sensor_comm","type":0,"ip_addr":"172.30.1.110","port":55555}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_torque_sensor_comm"}

说明:

  • type:0为使用网口或USB,1为使用TIO。
  • ip_addr为使用网口时传感器ip地址。
  • port为使用网口时力控传感器端口号。
  • 设置为1或使用USB时ip_addr和port不起作用,给定如示例所示的默认参数即可

获取末端力传感器通讯参数

发送消息:

{"cmdName":"get_torque_sensor_comm"}

接收消息:

{"ip_addr": "192.168.2.228", "errorMsg": "", "cmdName": "get_torque_sensor_comm", "errorCode": "0", "type": 0, "port": 49152}

说明:

  • type:0为使用网口或USB,1为使用TIO。
  • ip_addr为使用网口时传感器ip地址。
  • port为使用网口时力控传感器端口号。
  • 使用TIO或USB时ip_addr和port为无效参数,返回值无实际意义

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

发送消息:

{"cmdName":"set_torque_sensor_filter","torqueSensorFilter":10}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_torque_sensor_filter"}

说明:

  • torqueSensorFilter: 低通滤波器截止频率,单位:Hz

获取末端力传感器低通滤波器截止频率

发送消息:

{"cmdName":"get_torque_sensor_filter"}

接收消息:

{"errorCode": "0", "errorMsg": "", "torqueSensorFilter": 1.0, "cmdName": "get_torque_sensor_filter"}

说明:

  • torqueSensorFilter: 低通滤波器截止频率,单位:Hz

关闭力柔顺控制

对恒力柔顺控制和速度柔顺控制生效,但不对工具拖拽生效 发送消息:

{"cmdName":"disable_force_control"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "disable_force_control"}

设置速度柔顺控制参数

注:

此接口将被废弃(deprecated)

发送消息:

{"cmdName":"set_vel_compliant_ctrl","compliant_ctrl":[vc_level, rate1, rate2, rate3, rate4]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_vel_compliant_ctrl"}

说明:

  • compliant_ctrl:vc_level速度柔顺控制等级。
  • rate1 比率等级1;rate2 比率等级2;rate3 比率等级3;rate4 比率等级4。

设置速度柔顺控制力条件

发送消息:

{"cmdName":"set_compliance_condition","compliant_condition":[0,0,0,0,0,0]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_compliance_condition"}

说明:

  • compliant_condition:力传感器的受力分量和力矩分量。fx,沿x轴受力分量;tx,绕x轴力矩分量。

设置末端力传感器软限位

发送消息:

{"cmdName":"set_torque_sensor_soft_limit","torqueSensorSoftLimit":{"Fx":1,"Fy":1,"Fz":1,"Mx":1,"My":1,"Mz":1}}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_torque_sensor_soft_limit"}

说明:

  • "Fx","Fy","Fz","Mx","My","Mz"为各方向上允许的最大力或力矩数值,单位:N、Nm,超过此数值将报错并终止程序及机器人运动

获取末端力传感器软限位

发送消息:

{"cmdName":"get_torque_sensor_soft_limit"}

接收消息:

{"errorCode": "0", "errorMsg": "", "torqueSensorSoftLimit": {"Fx": 1.0, "Fy": 1.0, "Fz": 1.0, "My": 1.0, "Mx": 1.0, "Mz": 1.0}, "cmdName": "get_torque_sensor_soft_limit"}

说明:

  • "Fx","Fy","Fz","Mx","My","Mz"为各方向上允许的最大力或力矩数值,超过此数值将报错并终止程序及机器人运动

设置力矩参考中心

发送消息:

{"cmdName":"set_torque_ref_point", "ref_point":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_torque_ref_point"}

说明:

  • ref_point: 0代表传感器中心,1代表TCP

获取力矩参考中心

发送消息:

{"cmdName":"get_torque_ref_point"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_torque_ref_point"}

说明:

  • ref_point: 0代表传感器中心,1代表TCP

设置末端传感器灵敏度

发送消息:

{"cmdName":"set_end_sensor_sensitivity_threshold", "threshold_percent":[0.3, 0.3, 0.3, 0.3, 0.3, 0.3]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_torque_ref_point"}

说明:

  • threshold_percent 6维数组,0~1,越大传感器越不灵敏

获取末端传感器灵敏度

发送消息:

{"cmdName":"get_end_sensor_sensitivity_threshold"}

接收消息:

{"threshold": [30.5, 1.6250000000000002], "errorCode": "0", "cmdName": "get_end_sensor_sensitivity_threshold", "threshold_percent": [0.3, 0.3, 0.3, 0.3, 0.3, 0.3], "errorMsg": ""}

说明:

  • threshold_percent 6维数组,用户设置的百分比灵敏度
  • threshold 2维数组,实际阈值

设置融合拖拽灵敏度

发送消息:

{"cmdName":"set_fusion_drive_sensitivity_level", "sensitivity_level":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_fusion_drive_sensitivity_level"}

说明:

  • sensitivity_level 灵敏度等级,0-5,0代表关闭

获取融合拖拽灵敏度

发送消息:

{"cmdName":"get_fusion_drive_sensitivity_level"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_fusion_drive_sensitivity_level", "sensitivity_level": 0}

说明:

  • sensitivity_level 灵敏度等级,0-5,0代表关闭

设置运动限制(奇异点和关节限位)预警范围

发送消息:

{"cmdName":"set_motion_limit_warning_range", "range_level":1}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_motion_limit_warning_range"}

说明:

  • range_level:范围等级,1-5

获取运动限制(奇异点和关节限位)预警范围

发送消息:

{"cmdName":"get_motion_limit_warning_range"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_motion_limit_warning_range", "range_level":1}

说明:

  • range_level:范围等级,1-5

获取传感器数据

发送消息:

{"cmdName":"get_torque_sensor_data","type":1}

接收消息:

{"status": 0, "errorMsg": "", "errcode": 0, "cmdName": "get_torque_sensor_data", "errorCode": "0", "data": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}

说明:

  • type: 1或2或3
  • data: 力矩传感器实际数值,六维数组
  • status: 传感器是否打开,0未打开,1已打开

校零传感器

发送消息:

{"cmdName":"zero_end_sensor"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "zero_end_sensor"}

说明:校零后,传感器显示力曲线归到0附近。

设置力矩终止条件

发送消息:

{"cmdName":"set_force_stop_condition", "opt":[0, 1, 1, 0, 0, 0], "lowerlimiton":[0, 1, 1, 0, 0, 0], "lowerlimit":[3.0, 4.0, 5.0, 6.0, 7.0, 8.0], "upperlimiton":[0, 1, 1, 0, 0, 0], "upperlimit":[13.0, 14.0, 15.0, 16.0, 17.0, 18.0]}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_force_stop_condition"}

说明:

  • opt 6维数组,分别代表6个维度上是否开启力控终止条件,0 代表没有勾选, 非 0 值代表勾选
  • lowerlimiton 6维数组,0 代表不设置下限, 非 0 值代表设置
  • lowerlimit 6维数组,下限数值
  • upperlimiton 6维数组,0 代表不设置下限, 非 0 值代表设置
  • upperlimit 6维数组,下限数值

设置力矩速度限制

发送消息:

{"cmdName":"set_compliant_speed_limit", "speed_limit":10.0, "angular_speed_limit":10.0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_compliant_speed_limit"}

说明:

  • speed_limit: 线速度限制,mm/s
  • angular_speed_limit: 角速度限制,deg/s

获取力矩速度限制

发送消息:

{"cmdName":"get_compliant_speed_limit"}

接收消息:

{"errorCode": "0", "angular_speed_limit": 10.0, "cmdName": "get_approach_speed_limit", "speed_limit": 10.0, "errorMsg": ""}

说明:

  • speed_limit: 线速度限制,mm/s
  • angular_speed_limit: 角速度限制,deg/s

设置力控拖拽手感参数

发送消息:

{"cmdName":"set_tool_drive_config", "axis":0, "opt":1, "rigidity":0.0, "rebound": 100.0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tool_drive_config"}

说明:

  • axis 代表配置哪一轴,可选值为 0~5 柔顺方向,分别对应 fx fy fz mx my mz
  • opt 0 代表没有勾选, 非 0 值代表勾选
  • rigidity 拖拽手感,范围0~1,越大越硬
  • rebound 回弹,表示机械臂向初始位置弹性回复的力度

获取工具拖拽参数

发送消息:

{"cmdName":"get_tool_drive_config"}

接收消息:

{"errorCode": "0", "force_ctrl_config": [[1, 0.0, 100.0], [1, 0.30000001192092896, 0.0], [1, 0.30000001192092896, 0.0], [1, 0.30000001192092896, 0.0], [1, 0.30000001192092896, 0.0], [1, 0.30000001192092896, 0.0]], "cmdName": "get_tool_drive_config", "errorMsg": ""}

说明:

  • force_ctrl_config:返回的是一个包含六个列表元素的列表,分别代表六个轴;每个列表里的三个元素分别代表:
    • opt 0 代表没有勾选, 非 0 值代表勾选
    • rigidity 拖拽手感,范围0~1,越大越硬
    • rebound 回弹,表示机械臂向初始位置弹性回复的力度

开启或关闭恒力柔顺控制

发送消息:

{"cmdName":"enable_cst_force_ctrl", "enable_flag":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "enable_cst_force_ctrl"}

说明:

  • enable_flag: 0为关闭; 1为开启

设置恒力柔顺控制参数

发送消息:

{"cmdName":"set_cst_force_ctrl_config", "axis":0, "opt":1, "ftDamping":10.0, "ftConstant":10.0,"ftReboundFK":10.0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_cst_force_ctrl_config"}

说明:

  • axis 代表配置哪一轴,可选值为 0~5 柔顺方向,分别对应 fx fy fz mx my mz
  • opt 0 代表没有勾选, 非 0 值代表勾选
  • ftDamping 阻尼力,表示机器人在力控过程中的硬度
  • ftConstant 代表目标力
  • ftReboundFK 回弹,表示机械臂向指令轨迹弹性回复的力度

获取恒力柔顺控制参数

发送消息:

{"cmdName":"get_cst_force_ctrl_config"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_cst_force_ctrl_config"}

说明:

  • axis 代表配置哪一轴,可选值为 0~5 柔顺方向,分别对应 fx fy fz mx my mz
  • opt 0 代表没有勾选, 非 0 值代表勾选
  • ftDamping 阻尼力,表示机器人在力控过程中的硬度
  • ftConstant 代表目标力
  • ftReboundFK 回弹,表示机械臂向指令轨迹弹性回复的力度

设置恒力柔顺控制坐标系

发送消息:

{"cmdName":"set_cst_force_ctrl_frame", "cstForceFrame":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_cst_force_ctrl_frame"}

说明:

  • cstForceFrame:0工具;1世界

获取恒力柔顺控制坐标系

发送消息:

{"cmdName":"get_cst_force_ctrl_frame"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_cst_force_ctrl_frame"}

说明:

  • cstForceFrame 0工具 ; 1世界

设置工具拖拽坐标系

发送消息:

{"cmdName":"set_tool_drive_frame", "toolDragFrame":0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_tool_drive_frame"}

说明:

  • toolDragFrame:0工具;1世界

获取工具拖拽坐标系

发送消息:

{"cmdName":"get_tool_drive_frame"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "get_tool_drive_frame", "toolDragFrame": 0}

说明:

  • toolDragFrame:0工具;1世界

设置恒力控制容差

发送消息:

{"cmdName":"set_cst_force_ctrl_tol", "force_tol":10.0, "torque_tol":10.0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_cst_force_ctrl_tol"}

说明:

  • force_tol:力容差
  • torque_tol:力矩容差

获取恒力控制容差

发送消息:

{"cmdName":"get_approach_speed_limit"}

接收消息:

{"errorCode": "0", "angular_speed_limit": 10.0, "cmdName": "get_approach_speed_limit", "speed_limit": 10.0, "errorMsg": ""}

说明:

  • force_tol:力容差
  • torque_tol:力矩容差

设置进近速度

发送消息:

{"cmdName":"set_approach_speed_limit", "speed_limit":10.0, "angular_speed_limit":10.0}

接收消息:

{"errorCode": "0", "errorMsg": "", "cmdName": "set_approach_speed_limit"}

说明:

  • speed_limit: 线速度限制,mm/s
  • angular_speed_limit: 角速度限制,deg/s

获取进近速度

发送消息:

{"cmdName":"get_approach_speed_limit"}

接收消息:

{"errorCode": "0", "angular_speed_limit": 10.0, "cmdName": "get_approach_speed_limit", "speed_limit": 10.0, "errorMsg": ""}

说明:

  • speed_limit: 线速度限制,mm/s
  • angular_speed_limit: 角速度限制,deg/s

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

发送消息:

{"cmdName":"get_tool_drive_stat"}

接收消息:

{"errorCode": "0", "errorMsg": "", "enable_flag": 0, "cmdName": "get_tool_drive_stat", "drive_stat": 0}

说明:

  • enable_flag: 0 为关闭力控拖拽使能,1 为开启
  • drive_stat: 是拖拽的当前状态是否触发奇异点、速度、关节限位预警

获取恒力柔顺开启状态

发送消息:

{"cmdName":"get_cst_force_ctrl_stat"}

接收消息:

{"errorCode": "0", "errorMsg": "", "cst_force_ctrl_stat": 0, "cmdName": "get_cst_force_ctrl_stat"}

说明:

  • cst_force_ctrl_stat: 0 代表未开启,1代表开启,2代表速度模式(兼容性,新版本不会有2)

问题排查

排查方法介绍

在使用JAKA TCP/IP控制协议过程中如遇到问题,可参考以下步骤进行排查:

  • 确认客户端与机器人控制器IP地址之间的网络连接正常;
  • 对于TCP/IP指令调用中的异常,可根据调用返回值以及返回的错误信息,判断相关错误信息;
  • 通过获取10000端口反馈数据中机器人系统错误码以及错误信息,排查相关异常;
  • 可结合机器人APP连接,排查机器人系统方面异常。 排查过程中可通过在客户端部署网络调试工具或Wireshark进行相关数据分析。

常见TCP/IP问题介绍

  1. 读者在实际开发测试过程中,如果遇到指令无法返回等问题,建议使用网络调试助手连接机器人服务端:ip为机器人ip,端口号为固定的10000或100001,以此查看机器人服务端是否正常,正常的话请读者检查代码是否有误。
  2. 在实际使用过程中,连接10000端口,发现每次收的包不完整,只有一部分;
  • 对于这种情况,建议检查客户端socket的接收缓冲区的大小,可能设置的小于10000端口返回的包大小导致接受不全。
  1. 出现数据推送的频率太低,不及时的问题。
  • 对于这种情况,建议检查服务端的端口数据刷新频率,如开头讲解的optionalconfig里的port10000_delay_ms,是否设置合理。

用户反馈

若文档中出现任何错误信息及描述不清之处,或有任何意见及建议,请发送邮件到support@jaka.com,我们将尽快给您回复。

上次编辑于: