Appearance
JSON-RPC API 使用说明
1. JSON-RPC协议说明
1.1 简介
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种远程过程调用协议。它使用 JSON 作为数据格式,可以通过 TCP Socket、HTTP、WebSocket 等传输协议来进行客户端和服务器之间的通信。JSON-RPC 协议具有简易性、轻量级、跨语言、跨平台和支持多种传输协议等特性。
JSON-RPC 采用请求-响应
的方式来实现客户端和服务器之间的远程过程调用。客户端发送 JSON 格式请求给服务器,例如 {"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}。服务器接收到请求后,解析 JSON 对象,提取 “method” 、“params” 和 “id” 等字段的值。服务器执行与 "method" 对应的方法,并使用提供的参数。根据执行结果,服务器会生成一个响应对象并将响应对象序列化成 JSON 格式,例如 {"id":1,"jsonrpc":"2.0","result":["rob1"]},然后将 JSON 格式的响应发送给客户端。最后,客户端接收到服务器发送的响应。
1.2 支持的传输协议与端口号
JSON-RPC 支持 HTTP、WebSocket 和 TCP Socket 传输协议,其对应的端口号如下:
协议 | 端口号 |
---|---|
HTTP | 9012 |
WebSocket | 9012 |
TCP Socket | 30004 |
1.3 JSON-RPC 2.0 规范
请求对象
RPC 请求对象包含以下成员:
- jsonrpc:表示JSON-RPC协议的版本号,必须是2.0
- method:表示被调用的方法名称,是一个字符串
- params:表示参数值,是一个结构化的值
- id:标识符
例如,{"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}。
响应对象
这里有 RPC 调用成功和 RPC 调用失败两种情况:
当 RPC 调用成功时,RPC 响应对象包含以下成员:
- jsonrpc:表示JSON-RPC协议的版本号,必须是2.0
- result:表示函数被执行的返回值
- id:表示标识符,与请求对象的标识符一定相同
例如,{"id":1,"jsonrpc":"2.0","result":["rob1"]}。
当 RPC 调用出现错误时,RPC 响应对象包含以下成员:
- jsonrpc:表示JSON-RPC协议的版本号,必须是2.0
- error:表示错误对象,错误对象包含以下成员
- code 表示错误码
- message 表示简短的错误描述
- data 表示错误的附加信息,可能被忽略。
- id:表示标识符,与请求对象的标识符一定相同
例如,{"error":{"code":-32601,"message":"method not found: RobotManage.poweron"},"id":1038,"jsonrpc":"2.0"}。
错误码
错误码 | 消息 | 说明 |
---|---|---|
-32700 | Parse error. | 服务器接收到无效的JSON。在服务器解析JSON文本时发生错误。 |
-32600 | Invalid Request. | 发送的JSON不是有效的请求对象。 |
-32601 | Method not found. | 该方法不存在/不可用。 |
32602 | Invalid params. | 无效的方法参数。 |
-32603 | Internal error. | JSON-RPC 内部错误。 |
-32099..-32000 | Server error. | 保留用于实现定义的服务器错误。 |
2. API框架说明
- AuboApi 模块:机器人API管理,提供了访问不同功能模块的方法,比如数学相关的接口、系统信息、运行时接口、寄存器控制、机器人列表等。
- Math 模块:数学方法接口,例如位姿的加减运算、位姿变换等。
- RegisterControl 模块:寄存器、Modbus操作接口,例如寄存器的读取和写入、Modbus信号增删等。
- RobotInterface 模块:提供对机器人力控、IO控制、运动控制、机器人算法、机器人配置等模块的访问。
- ForceControl 模块:力控接口。
- IoControl 模块:IO控制接口。
- MotionControl 模块:运动控制接口,例如关节运动、直线运动、样条运动等。
- RobotAlgorithm 模块:机器人算法相关的对外接口,例如末端负载辨识、欧拉角与四元数转换等。
- RobotConfig 模块:设置和获取机器人配置接口,例如设置和获取TCP偏移等。
- RobotManage 模块:机器人管理接口,例如上下电、拖动示教等。
- RobotState 模块:获取机器人状态接口,例如获取机器人状态、固件版本号等。
- RuntimeMachine 模块:运行时接口,比如启动、暂停或停止脚本解释器的运行等。
- SystemInfo 模块:获取系统信息接口,例如控制器版本号、接口版本号等。
- Trace 模块:日志系统接口,例如修改控制器日志的格式等。
3. 典型 API 说明
3.1 获取机器人名字列表
函数名:getRobotNames
功能:获取机器人名字列表
参数:无
返回:机器人名字列表
示例:
请求:
{"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
该请求调用了名为
getRobotNames
的方法。响应:
{"id":1,"jsonrpc":"2.0","result":["rob1"]}
该示例中,获取的机器人名字为rob1。
3.2 获取版本信获取
3.2.1 获取控制器版本
函数名:getControlSoftwareVersionCode
功能:获取控制器版本号
参数:无
返回:控制器版本号
示例:
请求:
{"jsonrpc":"2.0","method":"SystemInfo.getControlSoftwareVersionCode","params":[],"id":2}
该请求调用了名为
getControlSoftwareVersionCode
的方法,该方法属于SystemInfo
对象。响应:
{"id":2,"jsonrpc":"2.0","result":28000}
该示例中,获取的控制器版本号为0.28.0。
3.2.2 获取接口版本
函数名:getInterfaceVersionCode
功能:获取接口版本号
参数:无
返回:接口版本号
示例:
请求:
{"jsonrpc":"2.0","method":"SystemInfo.getInterfaceVersionCode","params":[],"id":3}
该请求调用了名为
getInterfaceVersionCode
的方法,该方法属于SystemInfo
对象。响应:
{"id":3,"jsonrpc":"2.0","result":22002}
该示例中,获取的接口版本号为0.22.2。
3.2.3 获取主板固件版本
函数名:getMasterBoardFirmwareVersion
功能:获取主板固件版本号
参数:无
返回:主板固件版本号
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotState.getMasterBoardFirmwareVersion","params":[],"id":4}
该请求调用了名为
getMasterBoardFirmwareVersion
的方法,该方法属于RobotState
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":4,"jsonrpc":"2.0","result":9000004}
该示例中,获取的主板固件版本号为9.0.4。
3.2.4 获取从板固件版本
函数名:getSlaveBoardFirmwareVersion
功能:获取从板固件版本号
参数:无
返回:从板固件版本号
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotState.getSlaveBoardFirmwareVersion","params":[],"id":5}
该请求调用了名为
getSlaveBoardFirmwareVersion
的方法,该方法属于RobotState
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":5,"jsonrpc":"2.0","result":9000003}
该示例中,获取的从板固件版本号为9.0.3。
3.2.5 获取关节固件版本
函数名:getJointFirmwareVersions
功能:获取6个关节的固件版本号
参数:无
返回:6个关节的固件版本号
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotState.getJointFirmwareVersions","params":[],"id":6}
该请求调用了名为
getJointFirmwareVersions
的方法,该方法属于RobotState
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":6,"jsonrpc":"2.0","result":[4002003,4002003,4002003,4002003,4002003,4002003]}
该示例中,获取的6个关节固件版本号均为4.2.3。
3.2.6 获取工具固件版本
函数名:getToolFirmwareVersion
功能:获取工具固件版本号
参数:无
返回:工具固件版本号
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotState.getToolFirmwareVersion","params":[],"id":7}
该请求调用了名为
getToolFirmwareVersion
的方法,该方法属于RobotState
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":7,"jsonrpc":"2.0","result":1002000}
该示例中,获取的工具固件版本号为1.2.0。
3.2.7 获取基座固件版本
函数名:getPedestalFirmwareVersion
功能:获取基座固件版本号
参数:无
返回:基座固件版本号
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotState.getPedestalFirmwareVersion","params":[],"id":8}
该请求调用了名为
getPedestalFirmwareVersion
的方法,该方法属于RobotState
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":8,"jsonrpc":"2.0","result":2004005}
该示例中,获取的基座固件版本号为2.4.5。
3.3 机器人上下电
3.3.1 获取当前的机器人状态
函数名:getRobotModeType
功能:获取当前的机器人状态
参数:无
返回:当前的机器人状态
机器人状态 | 说明 |
---|---|
NoController | 提供给示教器使用的, 如果aubo_control进程崩溃则会显示为NoController |
Disconnected | 没有连接到机械臂本体(控制器与接口板断开连接或是 EtherCAT 等总线断开) |
ConfirmSafety | 正在进行安全配置, 断电状态下进行 |
Booting | 机械臂本体正在上电初始化 |
PowerOff | 机械臂本体处于断电状态 |
PowerOn | 机械臂本体上电成功, 刹车暂未松开(抱死), 关节初始状态未获取 |
Idle | 机械臂上电成功, 刹车暂未松开(抱死), 电机不通电, 关节初始状态获取完成 |
BrakeReleasing | 机械臂上电成功, 刹车正在松开 |
BackDrive | 反向驱动:刹车松开, 电机不通电 |
Running | 机械臂刹车松开, 运行模式, 控制权由硬件移交给软件 |
Maintaince | 维护模式: 包括固件升级、参数写入等 |
Error |
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotState.getRobotModeType","params":[],"id":9}
该请求调用了名为
getRobotModeType
的方法,该方法属于RobotState
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":9,"jsonrpc":"2.0","result":"Idle"}
该示例中,获取当前的机器人状态为Idle(空闲)。
3.3.2 上电
函数名:poweron
功能:上电
参数:无
返回:接口调用成功,返回0
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotManage.poweron","params":[],"id":10}
该请求调用了名为
poweron
的方法,该方法属于RobotManage
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":10,"jsonrpc":"2.0","result":0}
该示例中,poweron接口调用成功。
注:当机器人的状态变为
Idle(空闲)
时,表明上电成功。机器人状态可由getRobotModeType
接口获得,或在示教器界面中获知机器人状态。
3.3.2 启动,松刹车
函数名:startup
功能:启动,松刹车
参数:无
返回:接口调用成功,返回0
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotManage.startup","params":[],"id":11}
该请求调用了名为
startup
的方法,该方法属于RobotManage
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":11,"jsonrpc":"2.0","result":0}
该示例中,startup接口调用成功。
注:当机器人的状态变为
Running(运行)
时,表明松刹车成功。机器人状态可由getRobotModeType
接口获得,或在示教器界面中获知机器人状态。
3.3.3 断电
{"jsonrpc":"2.0","method":"robot_name.RobotManage.poweroff","params":[],"id":id}
函数名:poweroff
功能:断电
参数:无
返回:接口调用成功,返回0
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.RobotManage.poweroff","params":[],"id":12}
该请求调用了名为
poweroff
的方法,该方法属于RobotManage
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。响应:
{"id":12,"jsonrpc":"2.0","result":0}
该示例中,poweroff接口调用成功。
注:当机器人的状态变为PowerOff(断电)时,表明断电成功。机器人状态可由
getRobotModeType
接口获得,或在示教器界面中获知机器人状态。
3.4 机器人运动
3.4.1 关节运动
函数名:moveJoint
功能:关节运动
参数:
"params": ["q": q, "a": a, "v": v, "blend_radius": blend_radius, "duration": duration]
- q:目标关节角,单位 rad
- a:加速度,单位 rad/s^2
- v:速度,单位 rad/s
- blend_radius:交融半径,单位 m
- duration:运行时间,单位 s
返回:接口调用成功,返回0
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveJoint","params":[[-2.05177, -0.400292, 1.19625,0.0285152, 1.57033, -2.28774],0.3,0.3,0,0],"id":13}
该请求调用了名为
moveJoint
的方法,该方法属于MotionControl
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。目标关节角为[-2.05177, -0.400292, 1.19625,0.0285152, 1.57033, -2.28774],加速度和速度均为0.3。响应:
{"id":13,"jsonrpc":"2.0","result":0}
该示例中,moveJoint接口调用成功。
3.4.2 直线运动
函数名:moveLine
功能:直线运动
参数:
"params": ["pose": pose, "a": a, "v": v, "blend_radius": blend_radius, "duration": duration]
- pose:目标位置姿态,形式如[x,y,z,rx,ry,rz],位置的单位 m,姿态的单位 rad
- a:加速度(如果位置变化小于1mm,姿态变化大于 1e-4 rad,此加速度会被作为角加速度,单位 rad/s^2,否则为线加速度,单位 m/s^2)
- v:速度(如果位置变化小于1mm,姿态变化大于 1e-4 rad,此速度会被作为角速度,单位 rad/s,否则为线速度,单位 m/s)
- blend_radius: 交融半径,单位 m
- duration:运行时间,单位 s
返回:接口调用成功,返回0
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[0.54887, -0.12150, 0.43752, 3.142, 0.000, 1.571],0.3,0.3,0,0],"id":14}
该请求调用了名为
moveLine
的方法,该方法属于MotionControl
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。目标位姿为[0.54887, -0.12150, 0.43752, 3.142, 0.000, 1.571],加速度和速度均为0.3。响应:
{"id":14,"jsonrpc":"2.0","result":0}
该示例中,moveLine接口调用成功。
3.4.3 关节样条运动
函数名:moveSpline
功能:关节样条运动
参数:
"params": ["q": q, "a": a, "v": v, duration": duration]
- q:目标关节角,单位 rad。当传入的关节角为空时,机械臂开始做样条运动。
- a:加速度,单位 rad/s^2
- v:速度,单位 rad/s
- duration:运行时间,单位 s
返回:接口调用成功,返回0
示例:
请求:
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveSpline","params":[[-2.05177, -0.400292, 1.19625,0.0285152, 1.57033, -2.28774],0.3,0.3,0],"id":15}
该请求调用了名为
moveSpline
的方法,该方法属于MotionControl
对象,并且该对象属于名为rob1
的机器人。机器人的名字可通过getRobotNames
接口获得。目标关节角为[-2.05177, -0.400292, 1.19625,0.0285152, 1.57033, -2.28774],加速度和速度均为0.3。{"jsonrpc":"2.0","method":"rob1.MotionControl.moveSpline","params":[[],0.3,0.3,0],"id":16}
该请求中,moveSpline接口传入的关节角为空,机械臂开始做样条运动。
响应:
{"id":15,"jsonrpc":"2.0","result":0}
{"id":16,"jsonrpc":"2.0","result":0}
该示例中,返回值为0,表明moveSpline接口调用成功。
4. 基于HTTP通讯协议示例
4.1 curl 命令方法
curl 是一个命令行工具和库,用于在各种操作系统上进行数据传输。它支持 HTTP 网络协议,通过 curl,使用命令行发送 HTTP 请求并获取服务器的响应。
在使用 curl 命令前,请确保已在操作系统上安装好。可以在终端或命令提示符中运行 curl --version
命令来验证安装是否成功。
通过 curl 来发送 POST 请求的示例如下:
curl --request POST 'http://localhost:9012/jsonrpc' --data '{"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}'
--request POST
:这个选项指定 curl 发送的请求方法为 POST。在 HTTP 协议中,POST 方法用于向服务器提交数据。通过使用该选项,curl 将以 POST 方法发送请求,使服务器能够接收包含在请求体中的数据。http://localhost:9012/jsonrpc
:目标 URL。表示要发送请求的服务器地址和端点。http://localhost:9012
指定了服务器所在的位置。localhost
是机器人的ip地址,9012
是 rpc 端口号。/jsonrpc
是具体的端点路径,用于标识服务器上处理 JSON-RPC 请求的资源或服务。--data
:用于指定请求体的内容。在这个例子中,请求体的内容是一个 JSON 格式的字符串 ,获取机器人的名称列表。
4.2 Apifox Web版方法
Apifox Web版网址:https://app.apifox.com/user/login?redirect=https://app.apifox.com/main
登录之后,点击
新建项目
。选择项目类型为HTTP,输入项目名称,点击
新建
。点击
快捷请求
。选择
POST
,输入URL地址
,选择下发参数Body
,参数格式选为raw
,输入json-rpc请求内容
,点击发送
。在下方的
Body
栏中,可以看到响应信息。
5. 基于WebSocket通讯协议示例
WebSocket在线测试工具方法
WebSocket 是一种通信协议,用于在客户端和服务器之间实现双向实时通信。它允许在一个持久的连接上进行全双工通信,而不需要通过每次请求和响应的方式来建立新的连接。
下面介绍基于 WebSocket 在线测试网站来调用 JSON-RPC 接口的操作步骤:
WebSocket 在线测试网站:WEBSOCKET 在线测试工具
连接地址:ws://localhost:9012。localhost 是机器人 ip 地址,9012 是 json-rpc 端口号。
在
服务地址
中填入连接地址,点击开启连接
。连接成功后,
服务器配置状态
会显示连接成功。输入JSON- RPC请求后,点击
发送到服务端
。在
消息记录
中能看到 JSON-RPC 发送的请求和响应结果。
6. 基于TCP Socket通讯协议示例
TCP调试助手测试方法
下面介绍用TCP调试助手调用 JSON-RPC 接口的操作步骤:
打开TCP调试助手,创建
TCP Client
。输入
机械臂IP地址
和端口号
,点击确定
。点击
连接
。连接成功后,
Socket状态
会变成已连接
。输入json-rpc字符串请求后,点击
发送数据
。json-rpc响应如下图所示。
7. JSON-RPC应用示例
7.1 机械臂上下电
该示例描述机械臂通过json-rpc字符串实现上下电,步骤如下:
获取当前机器人的名字
请求:
{"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
响应:
{"id":1,"jsonrpc":"2.0","result":["rob1"]}
获取的机器人名字为rob1。
设置负载
请求:设置负载为4kg,重心(Cx,Cy,Cz)为(0m,0.1m,0.068m)。
{"jsonrpc":"2.0","method":"rob1.RobotConfig.setPayload","params":[4.0,[0,0.1,0.068],[0,0,0],[0,0,0,0,0,0] ],"id":2}
响应:
{"id":2,"jsonrpc":"2.0","result":0}
上电
请求:
{"jsonrpc":"2.0","method":"rob1.RobotManage.poweron","params":[],"id":3}
响应:
{"id":3,"jsonrpc":"2.0","result":0}
上电成功后,机械臂状态变成
空闲
。
松刹车
请求:
{"jsonrpc":"2.0","method":"rob1.RobotManage.startup","params":[],"id":4}
响应:
{"id":4,"jsonrpc":"2.0","result":0}
松刹车成功后,机械臂状态变成
运行
。
断电
请求:
{"jsonrpc":"2.0","method":"rob1.RobotManage.poweroff","params":[],"id":5}
响应:
{"id":5,"jsonrpc":"2.0","result":0}
断电成功后,机械臂状态变成
断电
。
7.2 关节运动+直线运动
注:该示例是根据i5型号的机械臂编写。
注:在机械臂做运动前,必须先设置负载、上电和松刹车。
该示例描述机械臂通过json-rpc字符串实现关节运动和直线运动,步骤如下:
获取当前机器人的名字
请求:
{"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
响应:
{"id":1,"jsonrpc":"2.0","result":["rob1"]}
获取的机器人名字为rob1。
设置TCP(相对于法兰盘中心)偏移,即工具中心点
请求:设置工具中心点(x,y,z,Rx,Ry,Rz)为(0,0.1,0.068,0,0,0)。x、y、z单位为米,Rx、Ry、Rz单位为弧度。
{"jsonrpc":"2.0","method":"rob1.RobotConfig.setTcpOffset","params":[[0,0.1,0.068,0,0,0]],"id":2}
响应:
{"id":2,"jsonrpc":"2.0","result":0}
设置运动速度比例
请求:设置运动速度比例为0.75,即75%。
{"jsonrpc":"2.0","method":"rob1.MotionControl.setSpeedFraction","params":[0.75],"id":3}
响应:
{"id":3,"jsonrpc":"2.0","result":0}
scope界面中的速度比例变成75%。
关节运动到初始位置
请求:关节运动到目标关节角[0,-0.2618,1.74533,0.436333,1.570797,0],加速度为1.4 rad/s^2,速度为1.05 rad/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveJoint","params":[[0,-0.2618,1.74533,0.436333,1.570797,0],1.4,1.05,0,0],"id":4}
响应:
{"id":4,"jsonrpc":"2.0","result":0}
直线运动到路点1
请求:直线运动到目标位置[0.64887,-0.12151,0.46613,-3.14,0.0,1.571],加速度为1.2 m/s^2,速度为0.25 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[0.64887,-0.12151,0.46613,-3.14,0.0,1.571],1.2,0.25,0,0],"id":5}
响应:
{"id":5,"jsonrpc":"2.0","result":0}
直线运动到路点2
请求:直线运动到目标位置[0.64887,0.17755,0.46613,-3.14,0.0,1.571],加速度为1.2 m/s^2,速度为0.25 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[0.64887,0.17755,0.46613,-3.14,0.0,1.571],1.2, 0.25, 0, 0],"id":6}
响应:
{"id":6,"jsonrpc":"2.0","result":0}
直线运动到路点3
请求:直线运动到目标位置[0.59639,0.17753,0.21115,-3.14,0.0,1.571],加速度为1.2 m/s^2,速度为0.25 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[0.59639,0.17753,0.21115,-3.14,0.0,1.571], 1.2, 0.25, 0, 0],"id":7}
响应:
{"id":7,"jsonrpc":"2.0","result":0}
7.3 运行时+关节/直线运动
注:要使直线运动的交融生效,需要开启运行时RuntimeMachine。
注:该示例是根据i5型号的机械臂编写。
注:在机械臂做运动前,必须先设置负载、上电和松刹车。
该示例描述机械臂通过json-rpc字符串实现直线运动的交融效果,步骤如下:
获取当前机器人的名字
请求:
{"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
响应:
{"id":1,"jsonrpc":"2.0","result":["rob1"]}
获取的机器人名字为rob1。
设置TCP(相对于基坐标系的)偏移,即工具中心点
请求:设置工具中心点(x,y,z,Rx,Ry,Rz)为(0,0.1,0.068,0,0,0)。x、y、z单位为米,Rx、Ry、Rz单位为弧度。
{"jsonrpc":"2.0","method":"rob1.RobotConfig.setTcpOffset","params":[[0,0.1,0.068,0,0,0]],"id":2}
响应:
{"id":2,"jsonrpc":"2.0","result":0}
设置运动速度比例
请求:设置运动速度比例为0.75,即75%。
{"jsonrpc":"2.0","method":"rob1.MotionControl.setSpeedFraction","params":[0.75],"id":3}
响应:
{"id":3,"jsonrpc":"2.0","result":0}
scope界面中的速度比例变成75%。
启动运行时
请求:
{"jsonrpc":"2.0","method":"RuntimeMachine.start","params":[],"id":4}
响应:
{"id":4,"jsonrpc":"2.0","result":0}
获取当前运行时的上下文
请求:当参数为-1时,表示获取当前正在运行的线程的运行上下文。
{"jsonrpc":"2.0","method":"RuntimeMachine.getPlanContext","params":[-1],"id":5}
响应:返回值中第一个参数表示当前的线程id,第二个参数表示行号,第三个参数表示上下文内容。
{"id":5,"jsonrpc":"2.0","result":[47,-1,""]}
新建一个线程(注:如果通过getPlanContext获取当前的线程id为正整数,则可省略这步)
请求:
{"jsonrpc":"2.0","method":"RuntimeMachine.newTask","params":[false],"id":6}
响应:返回值为当前的线程id,即48。
{"id":6,"jsonrpc":"2.0","result":48}
设置当前运行时的上下文
请求:第一个参数表示当前的线程id,第二个参数表示行号,第三个参数表示上下文内容。
{"jsonrpc":"2.0","method":"RuntimeMachine.setPlanContext","params":[48,-1,""],"id":7}
响应:
{"id":7,"jsonrpc":"2.0","result":0}
关节运动初始位置
请求:关节运动到目标关节角[-0.000003,-0.127267,-1.321124,0.37694,-1.570796,-0.000008],加速度为3.14rad/s^2,速度为3.14 rad/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveJoint","params":[[-0.000003,-0.127267,-1.321124,0.37694,-1.570796,-0.000008],3.14,3.14,0,0],"id":8}
响应:
{"id":8,"jsonrpc":"2.0","result":0}
直线运动到路点1
请求:直线运动到目标位置[-0.400318,0.064315,0.547598,3.14, 0.0,-2.63782],加速度为2m/s^2,速度为1 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[-0.400318,0.064315,0.547598,3.14, 0.0,-2.63782],2,1,0,0],"id":9}
响应:
{"id":9,"jsonrpc":"2.0","result":0}
直线运动到路点2
请求:直线运动到目标位置[-0.400318,0.064315,0.379989,3.14,0.0,-2.63782],加速度为2 m/s^2,速度为1 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[-0.400318,0.064315,0.379989,3.14,0.0,-2.63782],2,1,0,0],"id":10}
响应:
{"id":10,"jsonrpc":"2.0","result":0}
直线运动到路点3
请求:直线运动到目标位置[-0.400318,0.064315, 0.547598,3.14,0.0,-2.63782],加速度为2m/s^2,速度为1 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[-0.400318,0.064315, 0.547598,3.14,0.0,-2.63782],2,1,0,0],"id":11}
响应:
{"id":11,"jsonrpc":"2.0","result":0}
直线运动到路点4
请求:直线运动到目标位置[-0.400319,-0.298610, 0.547598,3.14,0.435471,-1.57],加速度为2 m/s^2,速度为1m/s,交融半径为0.02m。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[-0.400319,-0.298610, 0.547598,3.14,0.435471,-1.57],2,1,0.02,0],"id":12}
响应:
{"id":12,"jsonrpc":"2.0","result":0}
直线运动到路点5
请求:直线运动到目标位置[-0.400319,-0.243865, 0.429931,3.14,0.435471,-1.57],加速度为2 m/s^2,速度为1 m/s。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[-0.400319,-0.243865, 0.429931,3.14,0.435471,-1.57],2,1,0,0],"id":13}
响应:
{"id":13,"jsonrpc":"2.0","result":0}
直线运动到路点6
请求:直线运动到目标位置[-0.400319,-0.298610,0.547598,3.14, 0.435471,-1.57],加速度为2m/s^2,速度为1 m/s,交融半径为0.02m。
{"jsonrpc":"2.0","method":"rob1.MotionControl.moveLine","params":[[-0.400319,-0.298610,0.547598,3.14, 0.435471,-1.57],2,1,0.02,0],"id":14}
响应:
{"id":14,"jsonrpc":"2.0","result":0}
删除线程
请求:参数为当前的线程id
{"jsonrpc":"2.0","method":"RuntimeMachine.deleteTask","params": [48],"id":15}
响应:
{"id":15,"jsonrpc":"2.0","result":0}
停止运行时
请求:
{"jsonrpc":"2.0","method":"RuntimeMachine.stop","params":[],"id":16}
响应:
{"id":16,"jsonrpc":"2.0","result":0}
8. 基于 TCP Socket 通讯协议
通过TCP Socket发送脚本字符串或者脚本文件的端口号是30002。
下面介绍如何通过TCP调试助手发送脚本字符串和脚本文件。
示例中发送的脚本字符串如下所示:
lua
--[[
功能:关节运动
描述:以关节运动的方式依次经过3个路点
]]
return function(api)
local _ENV = require('aubo').sched.select_robot(1)
local sched = require('aubo').sched
sched.sleep(0)
pi = 3.14159265358979323846
-- 路点,用关节角表示,单位:弧度
waypoint0_q = {0.0/180*pi, -15/180*pi, 100/180*pi, 25/180*pi, 90.0/180*pi, 0.0/180*pi}
waypoint1_q = {35.92/180*pi, -11.28/180*pi, 59.96/180*pi, -18.76/180*pi, 90.0/180*pi, 35.92/180*pi}
waypoint2_q = {41.04/180*pi, -7.65/180*pi, 98.80/180*pi, 16.44/180*pi, 90.0/180*pi, 11.64/180*pi}
-- 设置机械臂的速度比率
setSpeedFraction(0.75)
-- 关节运动
moveJoint(waypoint0_q, 80/180*pi, 60/180*pi, 0, 0)
moveJoint(waypoint1_q, 80/180*pi, 60/180*pi, 0, 0)
moveJoint(waypoint2_q, 80/180*pi, 60/180*pi, 0, 0)
end
8.1 通过TCP调试助手发送脚本字符串
下面简要介绍通过TCP调试助手发送脚本字符串的操作步骤:
选择 TCP Client,输入机器人的IP地址和端口号30002后,点击 连接。
连接成功后,如下图所示。
输入脚本字符串,在脚本末尾按下两次回车键,点击 发送。
注:通过TCP Socket协议向机器人控制器发送的脚本字符串,需要以 \r\n\r\n 结尾。 \r\n表示回车换行符。所以,在将脚本粘贴到TCP调试助手中后,还需要在末尾按下至少两次回车键。
脚本运行成功后,数据接收信息如下。
8.2 通过TCP调试助手发送脚本文件
下面简要介绍通过TCP调试助手发送脚本文件的操作步骤:
选择 TCP Client,输入机器人的IP地址和端口号30002后,点击 连接。
连接成功后,如下图所示。
勾选 启动文件数据源。
打开脚本文件。
点击 发送。
脚本运行成功后,数据接收信息如下。