跳转至

PNDEncoder

ABS_Encoder 参数介绍

简介

ABS_Encoder是一款为PNDbotics机器人关节执行器提供末端位置检测的模块。它具备Ethernet或者Wi-Fi通讯配置及获取绝对角度等一系列功能,为机器人主控提供关节末端绝对位置信息。

工程图

应用场景

  • 场景一、机械臂的末端位置检测

  • 场景二、平行执行器的末端输出轴位置检测

  • 场景三、仿生双足机器人的膝关节末端位置检测

接口规格

接口规格

序号 接口说明
A1 A12 B1 B12 GND
A4 A9 B4 B9 VBUS
A6 B6 usb差分信号D+,内部接USB转串口芯片
A7 B7 usb差分信号D-,内部接USB转串口芯片
A10 以太网接收差分信号RX-
A11 以太网接收差分信号RX+
B2 以太网发送差分信号TX-
B3 以太网发送差分信号TX+

先进特征

  • 支持JSON-RPC框架, 实现远程函数调用
  • 灵活配置选用以太网或者Wi-Fi通信,优先采用以太网通信
  • 一路Type-C USB接口实现以太网和串口通信
  • OTA升级

接口定义

Name Specs
物理层 10/100Mbps 以太网或2.4GHz Wi-Fi
传输层协议 TCP/UDP
通信端口(service) 2334
IP获取方式 DHCP/Static IP
应用层协议 JSON-RPC

指示灯状态说明

序号 闪烁模式 含义
1 快速 紫色 呼吸闪烁 有线以太网连接中
2 慢速 紫色 呼吸闪烁 有线以太网连接成功
3 快速 青蓝色 呼吸闪烁 Wi-Fi连接中
4 慢速 青蓝色 呼吸闪烁 Wi-Fi连接成功
5 快速 红色 呼吸闪烁 错误
6 快速 翠绿色 呼吸闪烁 OTA升级中

JSON-RPC协议框架

JSON-RPC,是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容格式以 JSON 为主。

本文的JSON-RPC协议框架,物理层可以使用有线10/100Mbps以太网,也可以使用2.4GHz Wi-Fi进行通信。支持DHCP功能,连接路由器可自动获取IP。数据采用TCP或者UDP连接通讯,服务端口(Service Port)为2334。

协议中由 id 域指定调用的序号, method 域指定调用的方法, params 域指定调用的参数,result 域指定返回的结果和参数

json-rpc请求数据帧

类型 描述
“id” 整形 每次请求须制定请求帧ID,否则不执行
“method” 字符串 调用方法
“params” 对象 调用参数。具体每一个调用方法会展开具体的参数列表

json-rpc响应数据帧

类型 描述
“id” 整形 每次请求制定的请求帧ID,响应时返回
“result” 对象 响应参数。具体每一个调用方法的响应会展开响应参数

通信流程

以下所说客户端client代表用户的控制计算机(如:Raspberry Pi, PC, Mac 等),服务器server代表ABS编码器。

第1步,需要通过UDP向局域网内广播,获取设备信息 将全部ABS编码器接入局域网后。可先使用UDP广播,获取编码器的设备信息,设备信息中包含有编码器的IP地址。 广播地址为 255.255.255.255 以查询局域网内的所有设备。广播后,全部在线设备会返回设备基本信息给client。

以局域网内包含两个设备为例:

client广播内容为:
1
2
3
4
5
{
  "id": 0, 
  "method": "Device.Info", 
  "params": 
}
server回复内容格式如下:在UDP通信中,socket接口通常会自动返回server地址和端口
Server received from ('192.168.11.114', 2334):
{
  "id":0,
  "result":
  {
    "serial_number":"10B6D825754C",
    "dev_model":"ABS_Encoder",
    "dev_name":"ABS_Encoder0001",
    "Hw_version":"1.0.0",
    "fw_version":"1.0.3",
    "manufacturing_date":"20210308",
    "hostname":"abs_encoder",
    "connect_mode":"Wi-Fi",
    "DHCP_enable":false,
    "staticIP":"192.168.11.114",
    "RSSI":-48,
  }
}

Server received from ('192.168.11.115', 2334):
{
  "id":0,
  "result":
  {
    "serial_number":"10B6D825755D",
    "dev_model":"ABS_Encoder",
    "dev_name":"ABS_Encoder0002",
    "Hw_version":"1.0.0",
    "fw_version":"1.0.3",
    "manufacturing_date":"20210308",
    "hostname":"abs_encoder",
    "connect_mode":"Wi-Fi",
    "DHCP_enable":false,
    "staticIP":"192.168.11.115",
    "RSSI":-48,
  }
}

第2步,获取到ABS编码器的IP地址后,进行数据传输,获取IP地址后,可以通过TCP方式建立连接进行通讯,也可以保持UDP通讯方式。

获取配置信息

client向server的Service端口(2334)发送
1
2
3
4
5
{
  "id": 0, 
  "method": "Config.Info", 
  "params": 
}
server返回如下
{
    "id":0,
    "result":          
    {      
        "dev_name":"ABS_Encoder0002",
        "SSID":"abs",
        "password":"12345678",
        "hostname":"abs",
        "DHCP_enable":false,
        "staticIP":"192.168.11.119",
        "gateway":"192.168.11.1",
        "subnet":"255.255.255.0",
        "primaryDNS":"114.114.114.114",
        "secondaryDNS":"8.8.8.8"
    }
}

获取ABS编码器绝对角度

client向server的Service端口(2334)发送
1
2
3
4
5
{
  "id": 0, 
  "method": "Encoder.Angle", 
  "params": 
}
server返回如下
1
2
3
4
5
6
7
8
{
  "id":0,
  "result":
  {
    "angle":130.715, //Angle value
    "radian":2.28141 //Radian value
  }
}

设置配置信息

设备的配置信息包括设备名称、型号、生产日期、硬件版本号、Wi-Fi名称、Wi-Fi密码、主机名、是否使能DHCP、静态IP、网关、DNS等。client可以单独设置某一项,也可以同时设置多项。重启设备后生效。

client向server的Service端口(2334)发送
{
    "id": 0, 
    "method": "Set.Config", 
    "params": 
    {
        "dev_name":"ABS_Encoder012",
        "ssid":"myssid",
        "password":"mypassword",
        "hostname":"abs",
        "DHCP_enable":true,
        "staticIP":"192.168.11.119",
        "gateway":"192.168.11.1",
        "subnet":"255.255.255.0",
        "primaryDNS":"114.114.114.114",
        "secondaryDNS":"8.8.8.8"
    }
}
server返回如下
1
2
3
4
5
6
7
{
  "id":0,
  "result":
  {
    "set config ok"
   }
}

OTA

设备接收到OTA指令后,启动http升级固件

client向server的Service端口(2334)发送
1
2
3
4
5
{
  "id": 0, 
  "method": "OTA.Update", 
  "params": 
}
server返回如下
1
2
3
4
5
6
7
{
  "id":0,
  "result":
  {
    “recive ota update ok”
  }
}

设置配置信息

重启设备

设备接收到复位请求,并响应后,等待一秒钟后,重启。

client向server的Service端口(2334)发送
1
2
3
4
5
{
  "id": 0, 
  "method": "reboot", 
  "params": 
}
server返回如下
1
2
3
4
{
  "id":0,
  "result":{"set reboot ok"}
}