Skip to content

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 传输协议,其对应的端口号如下:

协议端口号
HTTP9012
WebSocket9012
TCP Socket30004

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 调用失败两种情况:

  1. 当 RPC 调用成功时,RPC 响应对象包含以下成员:

    • jsonrpc:表示JSON-RPC协议的版本号,必须是2.0
    • result:表示函数被执行的返回值
    • id:表示标识符,与请求对象的标识符一定相同

    例如,{"id":1,"jsonrpc":"2.0","result":["rob1"]}。

  2. 当 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"}。

错误码

错误码消息说明
-32700Parse error.服务器接收到无效的JSON。在服务器解析JSON文本时发生错误。
-32600Invalid Request.发送的JSON不是有效的请求对象。
-32601Method not found.该方法不存在/不可用。
32602Invalid params.无效的方法参数。
-32603Internal error.JSON-RPC 内部错误。
-32099..-32000Server error.保留用于实现定义的服务器错误。

2. API框架说明

  1. AuboApi 模块:机器人API管理,提供了访问不同功能模块的方法,比如数学相关的接口、系统信息、运行时接口、寄存器控制、机器人列表等。
  2. Math 模块:数学方法接口,例如位姿的加减运算、位姿变换等。
  3. RegisterControl 模块:寄存器、Modbus操作接口,例如寄存器的读取和写入、Modbus信号增删等。
  4. RobotInterface 模块:提供对机器人力控、IO控制、运动控制、机器人算法、机器人配置等模块的访问。
    • ForceControl 模块:力控接口。
    • IoControl 模块:IO控制接口。
    • MotionControl 模块:运动控制接口,例如关节运动、直线运动、样条运动等。
    • RobotAlgorithm 模块:机器人算法相关的对外接口,例如末端负载辨识、欧拉角与四元数转换等。
    • RobotConfig 模块:设置和获取机器人配置接口,例如设置和获取TCP偏移等。
    • RobotManage 模块:机器人管理接口,例如上下电、拖动示教等。
    • RobotState 模块:获取机器人状态接口,例如获取机器人状态、固件版本号等。
  5. RuntimeMachine 模块:运行时接口,比如启动、暂停或停止脚本解释器的运行等。
  6. SystemInfo 模块:获取系统信息接口,例如控制器版本号、接口版本号等。
  7. 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版方法

  1. Apifox Web版网址:https://app.apifox.com/user/login?redirect=https://app.apifox.com/main

  2. 登录之后,点击 新建项目

  3. 选择项目类型为HTTP,输入项目名称,点击新建

  4. 点击 快捷请求

  5. 选择 POST,输入URL地址,选择下发参数Body,参数格式选为raw,输入json-rpc请求内容,点击发送

    在下方的Body栏中,可以看到响应信息。

5. 基于WebSocket通讯协议示例

WebSocket在线测试工具方法

WebSocket 是一种通信协议,用于在客户端和服务器之间实现双向实时通信。它允许在一个持久的连接上进行全双工通信,而不需要通过每次请求和响应的方式来建立新的连接。

下面介绍基于 WebSocket 在线测试网站来调用 JSON-RPC 接口的操作步骤:

  1. WebSocket 在线测试网站:WEBSOCKET 在线测试工具

  2. 连接地址:ws://localhost:9012。localhost 是机器人 ip 地址,9012 是 json-rpc 端口号。

  3. 服务地址中填入连接地址,点击开启连接

    连接成功后,服务器配置状态会显示连接成功。

  4. 输入JSON- RPC请求后,点击发送到服务端

  5. 消息记录中能看到 JSON-RPC 发送的请求和响应结果。

6. 基于TCP Socket通讯协议示例

TCP调试助手测试方法

下面介绍用TCP调试助手调用 JSON-RPC 接口的操作步骤:

  1. 打开TCP调试助手,创建TCP Client

  2. 输入机械臂IP地址端口号,点击确定

  3. 点击连接

    连接成功后,Socket状态会变成已连接

  4. 输入json-rpc字符串请求后,点击发送数据

  5. json-rpc响应如下图所示。

7. JSON-RPC应用示例

7.1 机械臂上下电

该示例描述机械臂通过json-rpc字符串实现上下电,步骤如下:

  1. 获取当前机器人的名字

    • 请求:

      {"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
    • 响应:

      {"id":1,"jsonrpc":"2.0","result":["rob1"]}

      获取的机器人名字为rob1。

  2. 设置负载

    • 请求:设置负载为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}
  3. 上电

    • 请求:

      {"jsonrpc":"2.0","method":"rob1.RobotManage.poweron","params":[],"id":3}
    • 响应:

      {"id":3,"jsonrpc":"2.0","result":0}

      上电成功后,机械臂状态变成空闲

  4. 松刹车

    • 请求:

      {"jsonrpc":"2.0","method":"rob1.RobotManage.startup","params":[],"id":4}
    • 响应:

      {"id":4,"jsonrpc":"2.0","result":0}

      松刹车成功后,机械臂状态变成运行

  5. 断电

    • 请求:

      {"jsonrpc":"2.0","method":"rob1.RobotManage.poweroff","params":[],"id":5}
    • 响应:

      {"id":5,"jsonrpc":"2.0","result":0}

      断电成功后,机械臂状态变成断电

7.2 关节运动+直线运动

注:该示例是根据i5型号的机械臂编写。

注:在机械臂做运动前,必须先设置负载、上电和松刹车。

该示例描述机械臂通过json-rpc字符串实现关节运动和直线运动,步骤如下:

  1. 获取当前机器人的名字

    • 请求:

      {"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
    • 响应:

      {"id":1,"jsonrpc":"2.0","result":["rob1"]}

      获取的机器人名字为rob1。

  2. 设置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}
  3. 设置运动速度比例

    • 请求:设置运动速度比例为0.75,即75%。

      {"jsonrpc":"2.0","method":"rob1.MotionControl.setSpeedFraction","params":[0.75],"id":3}
    • 响应:

      {"id":3,"jsonrpc":"2.0","result":0}

      scope界面中的速度比例变成75%。

  4. 关节运动到初始位置

    • 请求:关节运动到目标关节角[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}
  5. 直线运动到路点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}
  6. 直线运动到路点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}
  7. 直线运动到路点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字符串实现直线运动的交融效果,步骤如下:

  1. 获取当前机器人的名字

    • 请求:

      {"jsonrpc":"2.0","method":"getRobotNames","params":[],"id":1}
    • 响应:

      {"id":1,"jsonrpc":"2.0","result":["rob1"]}

      获取的机器人名字为rob1。

  2. 设置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}
  3. 设置运动速度比例

    • 请求:设置运动速度比例为0.75,即75%。

      {"jsonrpc":"2.0","method":"rob1.MotionControl.setSpeedFraction","params":[0.75],"id":3}
    • 响应:

      {"id":3,"jsonrpc":"2.0","result":0}

      scope界面中的速度比例变成75%。

  4. 启动运行时

    • 请求:

      {"jsonrpc":"2.0","method":"RuntimeMachine.start","params":[],"id":4}
    • 响应:

      {"id":4,"jsonrpc":"2.0","result":0}
  5. 获取当前运行时的上下文

    • 请求:当参数为-1时,表示获取当前正在运行的线程的运行上下文。

      {"jsonrpc":"2.0","method":"RuntimeMachine.getPlanContext","params":[-1],"id":5}
    • 响应:返回值中第一个参数表示当前的线程id,第二个参数表示行号,第三个参数表示上下文内容。

      {"id":5,"jsonrpc":"2.0","result":[47,-1,""]}
  6. 新建一个线程(注:如果通过getPlanContext获取当前的线程id为正整数,则可省略这步)

    • 请求:

      {"jsonrpc":"2.0","method":"RuntimeMachine.newTask","params":[false],"id":6}
    • 响应:返回值为当前的线程id,即48。

      {"id":6,"jsonrpc":"2.0","result":48}
  7. 设置当前运行时的上下文

    • 请求:第一个参数表示当前的线程id,第二个参数表示行号,第三个参数表示上下文内容。

      {"jsonrpc":"2.0","method":"RuntimeMachine.setPlanContext","params":[48,-1,""],"id":7}
    • 响应:

      {"id":7,"jsonrpc":"2.0","result":0}
  8. 关节运动初始位置

    • 请求:关节运动到目标关节角[-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}
  9. 直线运动到路点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}
  10. 直线运动到路点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}
  11. 直线运动到路点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}
  12. 直线运动到路点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}
  13. 直线运动到路点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}
  14. 直线运动到路点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}
  15. 删除线程

    • 请求:参数为当前的线程id

      {"jsonrpc":"2.0","method":"RuntimeMachine.deleteTask","params": [48],"id":15}
    • 响应:

      {"id":15,"jsonrpc":"2.0","result":0}
  16. 停止运行时

    • 请求:

      {"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调试助手发送脚本字符串的操作步骤:

  1. 选择 TCP Client,输入机器人的IP地址和端口号30002后,点击 连接

  2. 连接成功后,如下图所示。

  3. 输入脚本字符串,在脚本末尾按下两次回车键,点击 发送

    注:通过TCP Socket协议向机器人控制器发送的脚本字符串,需要以 \r\n\r\n 结尾。 \r\n表示回车换行符。所以,在将脚本粘贴到TCP调试助手中后,还需要在末尾按下至少两次回车键。

  4. 脚本运行成功后,数据接收信息如下。

8.2 通过TCP调试助手发送脚本文件

下面简要介绍通过TCP调试助手发送脚本文件的操作步骤:

  1. 选择 TCP Client,输入机器人的IP地址和端口号30002后,点击 连接

  2. 连接成功后,如下图所示。

  3. 勾选 启动文件数据源

  4. 打开脚本文件。

  5. 点击 发送

  6. 脚本运行成功后,数据接收信息如下。