JAKA TCP/IP 控制协议
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][0]==0:
- setup[N][1]:扩展IO模块的别名。
- setup[N][2]:通信配置,根据通信类型不同。
- setup[N][0]:通讯类型。0代表Modbus RTU。1代表Modbus TCP/IP。
- 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表示关闭。
- status:所有扩展IO引脚的状态,包括DI、DO、AI、AO。
- 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维,对负载重力和传感器零点进行补偿之后的数值)
- torqsensor[0]:当前传感器的设置
- 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 接口使能,模拟输入功能禁止
- DI Pins:
获取 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接口使能,模拟输入功能禁止
- DI Pins:
设置 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:轨迹数据文件名。
力控相关
本节内容建议在完成阅读 力控产品使用手册的基础上阅读,并参考节卡SDK力控功能快速入门指南配合理解。 为避免文字冗长,本节将使用“力控”代指“力柔顺控制”,使用“末端力传感器”或“力传感器”或“传感器”代指安装于机器人末端的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:负载辨识终点,关于终点点位设置的注意事项,请参考力控产品使用手册中对相关功能的说明。
获取传感器末端负载辨识状态
发送消息:
{"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以确保正常运作。
关于对上述各参数的理解,请进一步参考力控产品使用手册中的相关说明。
获取力柔顺控制参数
发送消息:
{"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问题介绍
- 读者在实际开发测试过程中,如果遇到指令无法返回等问题,建议使用网络调试助手连接机器人服务端:ip为机器人ip,端口号为固定的10000或100001,以此查看机器人服务端是否正常,正常的话请读者检查代码是否有误。
- 在实际使用过程中,连接10000端口,发现每次收的包不完整,只有一部分;
- 对于这种情况,建议检查客户端socket的接收缓冲区的大小,可能设置的小于10000端口返回的包大小导致接受不全。
- 出现数据推送的频率太低,不及时的问题。
- 对于这种情况,建议检查服务端的端口数据刷新频率,如开头讲解的optionalconfig里的port10000_delay_ms,是否设置合理。
用户反馈
若文档中出现任何错误信息及描述不清之处,或有任何意见及建议,请发送邮件到support@jaka.com,我们将尽快给您回复。