XSTD Communication Interface
- 硬件连接标准
- CAN Bus Configuration
- CAN协议构架说明
- 通用CAN协议标准
- 底盘类CAN协议标准
- 运载平台类CAN协议标准
- 灯光类CAN协议标准
- 电源类CAN协议标准
- 电子开关类CAN协议标准
- 惯导类CAN协议标准
硬件连接标准
XSTD的标准规定了CAN接口的规范,目前所有具有CAN功能的设备皆采用此连接方式。该接口采用 EDGK3.5 4P 端子,一般为橘黄色,接线方式如下:
-
红线:V
-
黑线:G
-
黄线:CAN-H
-
绿/蓝线:CAN-L
端口定义如下图:
CAN通讯连接拓展案例如下图所示:
如果扩展网络中有电源转换器存在,请将底盘与电源先相连,防止大电流通过HUB等其他设备造成过流烧毁
端子使用时请注意正确拧开螺钉如下图,安装完成后请检查CAN是否有短路
连接底盘时请先断电,如果底盘使用航空接口一般会有方向性,请对准后插入,不要强行硬插
CAN Bus Configuration
CAN Bus Principles
If you have not purchased products like IMUs or distance sensors that are independent of the chassis/robot, you do not need to read this section.
Prerequisites
The physical limitations of the CAN bus require that the ends of the CAN bus must be equipped with two 120-ohm termination resistors.
HEXMOVE CAN Configuration
All CAN devices in HexMove are CAN 2.0B, 500K. A typical usage scenario is shown in the following image:
In the image above, the end device is typically an industrial computer
or USB-to-CAN device of an industrial computer
. Based on the above usage scenario, HEXMove has two types of devices that are by default fitted with 120 ohms:
All CAN adapters provided by HEXMove are set to default with 120 ohms on, which means that when using them, you only need to ensure that the last device connected is a CAN-HUB. If you are using your own CAN adapter, you need to ensure that the 120 ohms on the adapter are correctly connected.
However, if you are not using our chassis/navigation tower
, it means that the CAN termination resistor shown on the left side of the image is missing. You will need to ensure that the other end also has a 120-ohm termination resistor, either by soldering or other means (such as hanging another CAN-HUB there purely for the purpose of providing 120 ohms).
CAN协议构架说明
XSTD是一套基于CAN网络,可扩展到ROS使用的通讯协议规范。该规范为支持多设备和模组设计,在保持简洁易懂的同时提供给各模组充分的拓展空间,并支持多个同种设备同时在线工作。协议对同类型设备采用统一规范,牺牲少量效率换来极大的便捷性,非常便于早期功能开发与学习。
1.设备状态定义
使能(通讯设备默认状态)
▪设备所有功能正常运行。
▪对CAN和COM指令做出反馈。
▪默认关闭次要反馈,可通过指令开启。
失能(普通设备默认状态)
▪设备进入通讯静默状态,内部任然运行。
▪只接受通用指令,不接受专用指令。
▪只发送心跳反馈和通用指令的反馈,不发送专用指令反馈。
▪射频遥控器等设备自身安装的控制设备任然有效,并拥有更高优先级。
2.设备的分类与识别
每个设备有三个主要识别属性:大类、型号、编号
▪大类是按设备类型共分为30类,编码从0x01~0x1E,0x1F作为广播编码 。
▪型号是从0x01~0xFE的序号,在同一大类中,型号是确定且唯一的,与设备名称绑定的,0xFF下作为广播编码。
▪编号是从0x01~0xFE的序号,可以在XVIEW上设置,用于区分同大类且同型号的设备,0xFF作下为广播编码。
在使用指令时,需要对应的大类、型号、编号,对应的大类与型号代码请在对应设备的用户手册中查询。
3.指令类型
指令分为通用指令和专用指令
▪通用指令只通过CAN ID区分接受设备,数据内容对所有大类都是相同的,主要用于基础功能下设置和反馈
▪专用指令是按大类区分,每个大类的功能是不同的,同个大类中功能按需取用
▪通用指令的功能编码从0x 01开始,对应反馈从 0x A1开始(心跳包反馈为0x B0)
▪专用指令的功能编码从0x 11开始,对应反馈从 0x B1开始
4.CAN数据结构
产品中CAN通讯采用CAN2.0B(扩展帧),通讯波特率为500K。
CAN ID 编码规范:
CAN 数据位:Byte[0]~Byte[7]:
CAN使用的CAN信息为上述提到的CANID与CAN_DATA,总计12个字节数据。使用时,针对不同CANID进行相应的CAN_DATA数据传输。
CANID中大类与型号是设备的固定参数,数值不会改变,编号默认为1,当有多个同类设备同时使用时,可以通过通用指令修改。
CAN数据帧 |
|||||
数据定义 |
ID[0] |
ID[1] |
ID[2] |
ID[3] |
DATA [4~11] |
数据类型 |
unsigned int8 |
unsigned int8 |
unsigned int8 |
unsigned int8 |
0~8 x unsigned int8 |
说明 |
设备大类 |
设备型号 |
设备编号 |
设备功能 |
0~8字节数据 |
5.指令集查询说明
CAN协议分为设备通用指令与设备专用指令。通用指令操作对系统所有模块配件均适用,常见用于设备启动,系统升级,版本查询,系统复位等;设备专用指令专属于不同设备模块,不同模块根据需要选择使用部分专用指令,对特殊设备可定制专用指令。
CAN闭环控制系统,对绝大数指令均有应答机制。即命令帧,反馈帧一一对应。根据反馈帧实时监控数据流准确性。对部分功能可能需要先使能反馈或设置反馈周期。
6.CAN分析仪
如果有使用CAN-COM HUB或WiFi HUB,可以使用XVIEW的CAN分析仪功能来测试
通用CAN协议标准
通用指令是所有设备都会用到的指令,包含了各项设备基础功能。
请注意使用设备CANID替换表中XX部分
请先确保阅读了CAN协议构架说明再开始以下内容
通用指令在设备失能情况下也是可以使用的,其中心跳包是任何情况下都会反馈的,是设备是否在线的标识
通用指令总表
此表展示了通用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
||||||||||
命令内容 |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
设备重启 |
xx |
xx |
xx |
01 |
xx |
xx |
xx |
A1 |
准备重启 |
对命令反馈 |
必备 |
设备完全重置,相当于上电操作 |
|
软体版本查询 |
xx |
xx |
xx |
02 |
xx |
xx |
xx |
A2 |
软体版本反馈 |
对命令反馈 |
必备 |
大版本查询,不同于bin文件固件号 |
|
通用设置 |
xx |
xx |
xx |
03 |
xx |
xx |
xx |
A3 |
通用设置成功 |
对命令反馈 |
必备 |
使能和编号设置 |
|
特殊状态复位 |
xx |
xx |
xx |
04 |
xx |
xx |
xx |
A4 |
特殊复位成功 |
对命令反馈 |
必备 |
清除错误等特殊状态 |
|
运动状态复位 |
xx |
xx |
xx |
05 |
xx |
xx |
xx |
A5 |
运动复位成功 |
对命令反馈 |
选备 |
清除里程计等运动数据,非运动设备可无视指令 |
|
编号设置 |
xx |
xx |
xx |
06 |
xx |
xx |
xx |
A6 |
编号设置成功 |
对命令反馈 |
必备 |
用于设置设备编号 |
|
查找设备 |
xx |
xx |
xx |
07 |
/ |
/ |
/ |
/ |
/ |
/ |
选备 |
收到后设备利用可用的方式 (包括不限于蜂鸣器,LED,灯光等) 将自身与其他同类设备区分出来 便于人类寻找到特定设备 |
|
/ |
/ |
/ |
/ |
/ |
xx |
xx |
xx |
B0 |
设备心跳包 |
周期反馈 |
必备 |
||
进入升级模式 |
xx |
xx |
xx |
F1 |
/ |
/ |
/ |
/ |
/ |
/ |
选备 |
如果没有boot loader则无视指令 |
|
升级模式专用 |
xx |
xx |
xx |
F2~FF |
xx |
xx |
xx |
F2~FF |
升级模式专用 |
对命令反馈 |
不需要 |
主程序直接忽略,bootloader使用 |
1. 设备重启/准备重启
设备重启会导致设备对外输出关闭,有其他用电设备例如工控机时,请谨慎使用
设备重启 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 01 |
3 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
大类 |
unsigned int8 |
按设备型号分配表中大类(与ID中相同 ) |
|
byte[1] |
型号 |
unsigned int8 |
按设备型号分配表中型号(与ID中相同 ) |
|
byte[2] |
编号 |
unsigned int8 |
初始为1(与ID中相同 ) |
|
byte[3~7] |
/ |
/ |
/ |
准备重启反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A1 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
注:当系统中有多台机器同时使用时,可更改设置设备编号,设备编号默认为0x01。发送指令数据长度为8,无效位补0(后文同)。
举例:向型号0x02 编号0x03的底盘发送CANID:0x01 02 03 01 数据:01 02 03,系统重启。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 01
数据帧
扩展帧
3
01 02 03
上位机
0x01 02 03 A1
数据帧
扩展帧
0
/
2. 固件版本查询
设备重启 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 02 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
/ |
/ |
/ |
准备重启反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A2 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
硬件版本字符[0] |
unsigned int8ASCII |
用于电控的版本号,PCB修改时更新 |
|
byte[1] |
硬件版本字符[1] |
unsigned int8ASCII |
||
byte[2] |
硬件版本字符[2] |
unsigned int8ASCII |
||
byte[3] |
硬件版本字符[3] |
unsigned int8ASCII |
||
byte[4] |
软件版本字符[0] |
unsigned int8ASCII |
用于大更新的版本号,不同于bin文件的固件号 |
|
byte[5] |
软件版本字符[1] |
unsigned int8ASCII |
||
byte[6] |
软件版本字符[2] |
unsigned int8ASCII |
||
byte[7] |
软件版本字符[3] |
unsigned int8ASCII |
举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 02 数据:NULL。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 02
数据帧
扩展帧
0
/
上位机
0x01 02 03 A2
数据帧
扩展帧
8
XX XX XX XX XX XX XX XX
3. 通用设置/通用设置成功
通用设置指令用于对设备进行设备使能操作,一般是上电后第一要使用的指令
通用设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 03 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
大类 |
unsigned int8 |
按设备型号分配表中大类(与ID中相同) |
|
byte[1] |
型号 |
unsigned int8 |
按设备型号分配表中型号 (与ID中相同 ) |
|
byte[2] |
编号 |
unsigned int8 |
初始为1(与ID中相同 ) |
|
byte[3] |
使能 |
unsigned int8 |
0x00: 关闭设备 / 0x01: 使能设备 |
|
byte[4~7] |
/ |
/ |
/ |
设置成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A3 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
注:底盘默认上电是失能状态。
举例:使能设备型号0x02 编号0x03 的底盘,向系统ID:0x01 02 03 03发送指令01 02 03 01,设备使能。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 03
数据帧
扩展帧
4
01 02 03 01
上位机
0x01 02 03 A3
数据帧
扩展帧
0
/
4. 特殊状态复位 / 特殊复位成功
特殊状态复位用于系统异常(发生错误)时清错重置
特殊状态复位 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 04 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
状态复位 |
unsigned int8 |
0xCC:复位 / 其他值无操作 |
|
byte[1~7] |
/ |
/ |
/ |
复位成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A4 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 04 数据:CC 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 04
数据帧
扩展帧
1
CC
上位机
0x01 02 03 A4
数据帧
扩展帧
0
/
5. 运动状态复位 / 运动复位成功
运动状态复位用于系统重置运动数据,例如里程计数据,该指令只对有运动能力的设备有效
运动状态复位 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 05 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
状态复位 |
unsigned int8 |
0xCC:复位 / 其他值无操作 |
|
byte[1~7] |
/ |
/ |
/ |
复位成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A5 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 05 数据:CC 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 05
数据帧
扩展帧
1
CC
上位机
0x01 02 03 A5
数据帧
扩展帧
0
/
6. 编号设置
编号设置指令用于对设备设置新编号。当系统只有单一设备时,编号始终默认为0x01,当系统中有多台设备时可自定义设置设备编号
编号设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 06 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
大类 |
unsigned int8 |
按设备型号分配表中大类(与ID中相同) |
|
byte[1] |
型号 |
unsigned int8 |
按设备型号分配表中型号 (与ID中相同 ) |
|
byte[2] |
编号 |
unsigned int8 |
初始为1(与ID中相同 ) |
|
byte[3] |
新编号 |
unsigned int8 |
如果不改变编号则与原编号相同 |
|
byte[4~7] |
/ |
/ |
/ |
设置成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A6 (此处反馈为原编号) |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
举例:设备型号0x02 编号0x03 的底盘更改设备编号为0x02,向系统ID:0x01 02 03 06发送指令01 02 03 02 ;设备编号由0x03切换为0x02。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 06
数据帧
扩展帧
4
01 02 03 02
上位机
0x01 02 03 A6
数据帧
扩展帧
0
/
7. 查找设备
当有多个设备存在无法分辨需要寻找的设备时,可以使用该功能是设备LED或蜂鸣器做出响应,方便寻找
查找设备 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 07 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
该条指令无反馈消息
举例:查找设备大类0x02 型号0x02 编号0x03 的设备。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x02 02 03 07
数据帧
扩展帧
0
/
上位机
/
/
/
/
/
8. 设备心跳包
心跳包在设备失能和使能时都能持续发出,不需要任何指令控制,是设备是否在线的标识
设备心跳 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX B0 |
1 |
500 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
使能状态 |
unsigned int8 |
0x00: 已关闭 / 0x01: 已使能 |
|
byte[1~7] |
/ |
/ |
/ |
该条反馈持续每500ms发出,不接受任何指令控制
举例: 型号0x02 编号0x03 使能的底盘反馈心跳包。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x01 02 03 B0
数据帧
扩展帧
1
01
底盘类CAN协议标准
为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为底盘使用的专用CAN协议。
请先确保阅读了CAN协议构架说明再开始以下内容
请注意使用设备CANID替换表中XX部分
底盘类设备的大类ID为 01
底盘指令总表
此表展示了专用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
|||||||||||
设备对象 |
命令内容 |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
移动底盘 |
底盘状态设置 |
01 |
xx |
xx |
11 |
01 |
xx |
xx |
B1 |
底盘状态信息 |
周期反馈 |
必备 |
||
底盘运动控制 |
01 |
xx |
xx |
12 |
01 |
xx |
xx |
B2 |
底盘运动信息 |
周期反馈 |
必备 |
|||
/ |
/ |
/ |
/ |
/ |
01 |
xx |
xx |
B3 |
主轮里程计 |
周期反馈 |
必备 |
|||
/ |
/ |
/ |
/ |
/ |
01 |
xx |
xx |
B4 |
次轮里程计 |
周期反馈 |
选备 |
主要用于正交轮和麦克纳姆轮体系 |
||
遥控器信息发送使能 |
01 |
xx |
xx |
15 |
01 |
xx |
xx |
B5 |
车载遥控器信息 |
使能后周期反馈 |
必备 |
|||
安全传感器发送使能 |
01 |
xx |
xx |
16 |
01 |
xx |
xx |
B6 |
车载安全传感器信息 |
使能后周期反馈 |
选备 |
|||
驱动器运动信息发送使能 |
01 |
xx |
xx |
17 |
01 |
xx |
xx |
B7 |
驱动器运动信息 |
使能后周期反馈 |
选备 |
|||
驱动器状态信息发送使能 |
01 |
xx |
xx |
18 |
01 |
xx |
xx |
B8 |
驱动器状态信息 |
使能后周期反馈 |
选备 |
|||
底盘零点较准 |
01 |
xx |
xx |
19 |
01 |
xx |
xx |
B9 |
零点较准信息 |
对命令反馈 |
选备 |
主要用于阿克曼底盘的方向舵较准 |
||
/ |
/ |
/ |
/ |
/ |
01 |
xx |
xx |
BA |
错误状态信息 |
周期反馈 |
必备 |
|||
获取RTC时间 |
01 |
xx |
xx |
1B |
01 |
xx |
xx |
BB |
RTC时间信息 |
对命令反馈 |
选备 |
需要具有板载时钟芯片 |
||
设置RTC时间 |
01 |
xx |
xx |
1C |
01 |
xx |
xx |
BC |
设置RTC时间反馈 |
对命令反馈 |
选备 |
|||
设置唤醒时间 |
01 |
xx |
xx |
1D |
01 |
xx |
xx |
BD |
设置唤醒时间反馈 |
对命令反馈 |
选备 |
用于需要睡眠模式的设备 |
||
电源输出控制 |
01 |
xx |
xx |
1E |
01 |
xx |
xx |
BE |
电源输出反馈 |
对命令反馈 |
选备 |
配合睡眠模式使用 |
||
机械参数设置 |
01 |
xx |
xx |
1F |
01 |
xx |
xx |
BF |
机械参数反馈 |
对命令反馈 |
必备 |
|
||
odom设置 |
01 |
xx |
xx |
20 |
01 |
xx |
xx |
C0 |
odom-位移反馈 |
周期反馈 |
选备 |
|
||
/ |
/ |
/ |
/ |
/ |
01 |
xx |
xx |
C1 |
odom-旋转反馈 |
周期反馈 |
选备 |
|
1. 底盘状态设置 / 底盘状态信息
底盘的基础设置,某些功能如刹车、特殊功能等只对部分车型有效,请查阅对应车型的用户手册
底盘状态设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 11 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设置控制模式 |
unsigned int8 |
0x00: 待机 / 0x01: 遥控 / 0x02: CAN控制 / 0x03: 随动 |
|
byte[1] |
使能蜂鸣器 |
unsigned int8 |
0x00: 关闭 / 0x01: 开启(默认) 手动控制蜂鸣器,不影响报警的蜂鸣器 |
|
byte[2] |
使能刹车 |
unsigned int8 |
0x00: 松开 / 0x01: 锁止(如有刹车则默认) |
|
byte[3] |
使能特殊功能 |
unsigned int8 |
0x00: 关闭(默认) / 0x01: 开启 |
|
byte[4~7] |
/ |
/ |
/ |
底盘状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B1 |
8 |
100 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设备状态 |
unsigned int8 |
0x00: 正常 / 0x01: 异常(出现错误报警) |
|
byte[1] |
控制模式 |
unsigned int8 |
0x00: 待机 / 0x01: 遥控 / 0x02: CAN控制 / 0x03: 随动 |
|
byte[2] |
电池电压低8位 |
unsigned int16 |
单位:0.1V |
|
byte[3] |
电池电压高8位 |
|||
byte[4] |
蜂鸣器状态 |
unsigned int8 |
0x00: 关闭 / 0x01: 开启(默认) 手动控制蜂鸣器,不影响报警的蜂鸣器 |
|
byte[5] |
遥控器状态 |
unsigned int8 |
0: 在线 / 1: 离线 |
|
byte[6] |
刹车状态 |
unsigned int8 |
0x00: 松开 / 0x01: 锁止(如有刹车则默认) |
|
byte[7] |
特殊功能状态 |
unsigned int8 |
0x00: 关闭(默认) / 0x01: 开启 |
当使用有线方式控制底盘时,需先切换控制模式至CAN模式。如果使用了遥控器,请将遥控器SWA拨到最下面的CAN模式,遥控器说明请看设备的用户手册。
刹车使能只适用于有刹车功能的底盘,无刹车功能的默认该位保持0x00,有刹车功能的默认开启刹车。
特殊功能根据底盘而不同,例如阿克曼底盘为差速锁功能,不是所有底盘都有特殊功能。特殊功能也可由遥控器开启,参见对应设备的用户手册。
举例: 型号0x02 编号0x03 的底盘更改为CAN模式控制并使能蜂鸣器, 发送CANID:0x 01 02 03 11 数据:02 01 00 00。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 11
数据帧
扩展帧
4
02 01 00 00
上位机
0x01 02 03 B1
数据帧
扩展帧
7
00 02 XX XX 01 00 00
2. 底盘运动控制 / 底盘运动信息
底盘的基础控制指令,对不同车型有所不同,注意区分
底盘运动控制 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 12 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[1] |
x方向速度高8位 |
|||
byte[2] |
y方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[3] |
y方向速度高8位 |
|||
byte[4] |
角速度低8位 |
signed int16 |
阿克曼模式不可作为输入控制,但可以反馈 单位:mrad/s |
|
byte[5] |
角速度高8位 |
|||
byte[6] |
角度低8位 |
signed int16 |
阿克曼模式专用 单位:mrad |
|
byte[7] |
角度高8位 |
底盘运动信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B2 |
8 |
20 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[1] |
x方向速度高8位 |
|||
byte[2] |
y方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[3] |
y方向速度高8位 |
|||
byte[4] |
角速度低8位 |
signed int16 |
单位:mrad/s |
|
byte[5] |
角速度高8位 |
|||
byte[6] |
角度低8位 |
signed int16 |
阿克曼模式专用 单位:mrad |
|
byte[7] |
角度高8位 |
Y方向速度只对麦克纳姆轮系等具有平移功能的车型才有效,其他车型默认为0
由于电机执行有精度问题,系统反馈值会与设定值有细微偏差
阿克曼车型只使用角度控制,但同时提供角度和角速度反馈。该处角度指前轮转向角
举例: 型号0x02 编号0x03 的底盘以0.5m/s的速度前进,同时以-0.1rad/s的角度转动,发送CANID:0x01 02 03 12 数据:F4 01 00 00 9C FF 00 00。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 12
数据帧
扩展帧
8
F4 01 00 00 9C FF 00 00
上位机
0x01 02 03 B2
数据帧
扩展帧
8
F4 01 00 00 9C FF 00 00
3. 里程计反馈
主里程计 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B3 |
8 |
20 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
左轮里程计 [7:0] |
signed int32 |
单位:mm |
|
byte[1] |
左轮里程计 [15:8] |
|||
byte[2] |
左轮里程计[23:16] |
|||
byte[3] |
左轮里程计[31:24] |
|||
byte[4] |
右轮里程计 [7:0] |
signed int32 |
单位:mm |
|
byte[5] |
右轮里程计[15:8] |
|||
byte[6] |
右轮里程计[23:16] |
|||
byte[7] |
右轮里程计[31:24] |
次里程计 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B4 |
8 |
20 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
左后轮里程计[7:0] |
signedint32 |
适用全向轮和麦轮系统 单位:mm |
|
byte[1] |
左后轮里程计[15:8] |
|||
byte[2] |
左后轮里程计[23:16] |
|||
byte[3] |
左后轮里程计[31:24] |
|||
byte[4] |
右后轮里程计[7:0] |
signedint32 |
适用全向轮和麦轮系统 单位:mm |
|
byte[5] |
右后轮里程计[15:8] |
|||
byte[6] |
右后轮里程计[23:16] |
|||
byte[7] |
右后轮里程计[31:24] |
两轮差速和四轮差速只使用主里程计,全向轮和麦克纳姆轮系统同时使用两组里程计
举例: 型号0x02 编号0x03 的底盘反馈里程计数据
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x01 02 03 B3
数据帧
扩展帧
8
XX XX XX XX XX XX XX XX
4. 遥控器信息发送使能 /遥控器信息
该指令用于配套的手持射频遥控器数据的设置,可以读取遥控器所有按键数据
遥控器信息发送使能 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 15 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭(默认) / 1~20:20ms / 20~255:设定值 |
|
byte[1~7] |
/ |
/ |
/ |
车载遥控器信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B5 |
7 |
20~255(默认关闭) |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
拨动开关 |
unsigned int8 |
按照拨动开关档位表 |
|
byte[1] |
左摇杆水平轴 |
signed int8 |
范围:-100~100 |
|
byte[2] |
左摇杆垂直轴 |
signed int8 |
范围:-100~100 |
|
byte[3] |
右摇杆水平轴 |
signed int8 |
范围:-100~100 |
|
byte[4] |
右摇杆垂直轴 |
signed int8 |
范围:-100~100 |
|
byte[5] |
左旋钮VRA |
signed int8 |
范围:-100~100 |
|
byte[6] |
右旋钮VRA |
signed int8 |
范围:-100~100 |
|
byte[7] |
/ |
/ |
/ |
拨动开关档位表 |
||
位 |
值 |
说明 |
bit[0] |
0: 失效 1: 上档 2: 中档 3: 下档 |
SWA |
bit[1] |
||
bit[2] |
0: 失效 1: 上档 2: 中档 3: 下档 |
SWB |
bit[3] |
||
bit[4] |
0: 失效 1: 上档 2: 中档 3: 下档 |
SWC |
bit[5] |
||
bit[6] |
0: 失效 1: 上档 2: 中档 3: 下档 |
SWD |
bit[7] |
举例: 型号0x02 编号0x03 的底盘设置100ms遥控反馈,发送CANID:0x01 02 03 15 数据:64。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 15
数据帧
扩展帧
1
64
上位机
0x01 02 03 B5
数据帧
扩展帧
7
XX XX XX XX XX XX XX
5. 安全传感器信息发送使能 /安全传感器信息
该指令用提供碰撞传感器和超声波等安全传感器信息
安全传感器信息发送使能 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 16 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭(默认) / 1~20:20ms / 20~255:设定值 |
|
byte[1~7] |
/ |
/ |
/ |
车载安全传感器信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B6 |
7 |
20~255(默认关闭) |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
触碰开关 |
unsigned int8 |
参考触碰开关表 |
|
byte[1] |
超声波0 |
unsigned int8 |
0:失效/1~255:距离单位cm |
|
byte[2] |
超声波1 |
unsigned int8 |
0:失效/1~255:距离单位cm |
|
byte[3] |
超声波2 |
unsigned int8 |
0:失效/1~255:距离单位cm |
|
byte[4] |
超声波3 |
unsigned int8 |
0:失效/1~255:距离单位cm |
|
byte[5] |
超声波4 |
unsigned int8 |
0:失效/1~255:距离单位cm |
|
byte[6] |
超声波5 |
unsigned int8 |
0:失效/1~255:距离单位cm |
|
byte[7] |
/ |
/ |
/ |
触碰开关表 |
||
位 |
值 |
说明 |
bit[0] |
0:未触发 / 1:触发 |
触碰开关0 |
bit[1] |
0:未触发 / 1:触发 |
触碰开关1 |
bit[2] |
0:未触发 / 1:触发 |
触碰开关2 |
bit[3] |
0:未触发 / 1:触发 |
触碰开关3 |
bit[4] |
0:未触发 / 1:触发 |
触碰开关4 |
bit[5] |
0:未触发 / 1:触发 |
触碰开关5 |
bit[6] |
0:未触发 / 1:触发 |
触碰开关6 |
bit[7] |
0:未触发 / 1:触发 |
触碰开关7 |
仅限安装了防撞边条或触碰传感器的设备才反馈该数据
举例: 型号0x02 编号0x03 的底盘设置100ms安全反馈,发送CANID:0x01 02 03 16 数据:64 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 16
数据帧
扩展帧
1
64
上位机
0x01 02 03 B6
数据帧
扩展帧
7
XX XX XX XX XX XX XX
6. 驱动器运动信息使能 / 驱动器运动信息
此数据为系统最底层来自驱动器的直接记数,用户可根据原始数据自行求解里程计和速度
驱动器运动信息发送使能 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 17 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭(默认) / 1~20:20ms / 20~255:设定值 |
|
byte[1~7] |
/ |
/ |
/ |
驱动器运动信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B7 |
7 |
20~255(默认关闭) |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
驱动编号 |
unsigned int8 |
可选0,1,2,3,4,5,6,7(轮流发送) |
|
byte[1] |
转速低8位 |
signed int16 |
单位:Rpm |
|
byte[2] |
转速高8位 |
|||
byte[3] |
位置值 [7:0] |
signed int32 |
单位:脉冲数 |
|
byte[4] |
位置值 [15:8] |
|||
byte[5] |
位置值 [23:16] |
|||
byte[6] |
位置值 [31:24] |
|||
byte[7] |
/ |
/ |
/ |
举例: 型号0x02 编号0x03 的底盘设置100ms驱动器运动反馈,发送CANID:0x01 02 03 17 数据:64 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 17
数据帧
扩展帧
1
64
上位机
0x01 02 03 B7
数据帧
扩展帧
7
XX XX XX XX XX XX XX
7. 驱动器状态信息使能 / 驱动器状态信息
此数据为驱动器和电机的工作数据,可用于驱动的安全监控
驱动器状态信息发送使能 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 18 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭(默认) / 1~100: 100ms / 100~255:设定值 |
|
byte[1~7] |
/ |
/ |
/ |
驱动器状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B8 |
8 |
100~255(默认关闭) |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
驱动编号 |
unsigned int8 |
可选0,1,2,3,4,5,6,7(轮流发送) |
|
byte[1] |
电压低8位 |
unsigned int16 |
单位:0.1V |
|
byte[2] |
电压高8位 |
|||
byte[3] |
电流低8位 |
unsigned int16 |
单位:0.1A |
|
byte[4] |
电流高8位 |
|||
byte[5] |
驱动器温度 |
signed int8 |
单位:1°C |
|
byte[6] |
电机温度 |
signed int8 |
单位:1°C |
|
byte[7] |
特殊状态 |
unsignedint8 |
按照驱动器特殊状态表 |
触碰开关表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1: 过低 |
驱动低压报警 |
bit[1] |
0: 正常 / 1: 过温 |
驱动过温报警 |
bit[2] |
0: 正常 / 1: 过流 |
电机过流报警 |
bit[3] |
0: 正常 / 1: 过温 |
电机过温报警 |
bit[4] |
0: 正常 / 1: 卡死 |
电机卡死报警 |
bit[5~7] |
/ |
/ |
举例: 型号0x02 编号0x03 的底盘设置100ms驱动器状态反馈,发送CANID:0x01 02 03 18 数据:64 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 18
数据帧
扩展帧
1
64
上位机
0x01 02 03 B8
数据帧
扩展帧
8
XX XX XX XX XX XX XX XX
8. 底盘零点较准 / 底盘零点较准信息
此数据为驱动器和
底盘零点较准 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 19 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
零点偏移量1 |
int32 |
单位:mrad |
|
byte[1] |
||||
byte[2] |
||||
byte[3] |
||||
byte[4] |
零点偏移量2 |
int32 |
单位:mrad |
|
byte[5] |
||||
byte[6] |
||||
byte[7] |
零点较准信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B9 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
零点偏移量1 |
int32 |
单位:mrad |
|
byte[1] |
||||
byte[2] |
||||
byte[3] |
||||
byte[4] |
零点偏移量2 |
int32 |
单位:mrad |
|
byte[5] |
||||
byte[6] |
||||
byte[7] |
单阿克曼使用偏移量1;前后阿克曼前转向用1,后转向用2;双舵轮左边用1,右边用2
举例: 型号0x02 编号0x03 的单阿克曼底盘设置1000mrad偏移,发送CANID:0x01 02 03 19 数据:E8 03 00 00 00 00 00 00
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 19
数据帧
扩展帧
8
E8 03 00 00 00 00 00 00
上位机
0x01 02 03 B9
数据帧
扩展帧
8
E8 03 00 00 00 00 00 00
9. 底盘错误状态
反馈底盘的报错信息
错误状态反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX BA |
5 |
500 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
电机故障 |
unsigned int8 |
查看电机故障表 |
|
byte[1] |
驱动故障 |
unsigned int8 |
查看驱动故障表 |
|
byte[2] |
通讯故障 |
unsigned int8 |
查看通讯故障表 |
|
byte[3] |
其他故障 |
unsigned int8 |
查看其他故障表 |
|
byte[4] |
电源故障 |
unsigned int8 |
查看其电源障表 |
|
byte[5] |
/ |
/ |
/ |
电机故障表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1:故障 |
电机过流报警 |
bit[1] |
0: 正常 / 1:故障 |
电机过温报警 |
bit[2] |
0: 正常 / 1:故障 |
编码器故障 |
bit[3] |
0: 正常 / 1:故障 |
霍尔传感器故障 |
bit[4~7] |
/ |
/ |
驱动故障表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1:故障 |
驱动低压报警 |
bit[1] |
0: 正常 / 1:故障 |
驱动过温报警 |
bit[2~7] |
/ |
/ |
通讯故障表 |
||
位 |
值 |
说明 |
bit[0] |
0: 在线 / 1:离线 |
1号驱动通讯故障 |
bit[1] |
0: 在线 / 1:离线 |
2号驱动通讯故障 |
bit[2] |
0: 在线 / 1:离线 |
3号驱动通讯故障 |
bit[3] |
0: 在线 / 1:离线 |
4号驱动通讯故障 |
bit[4~7] |
/ |
/ |
其他故障表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1:警告 |
电池低电压提醒 (<15%) ( 蜂鸣器提醒,设备正常工作)> |
bit[1] |
0: 正常 / 1:故障> |
电池低电压报警 (<5%)( 设备输出异常状态,驱动停止输出)> |
bit[2] |
0: 未触发 / 1:触发 |
触碰传感器触发 |
bit[3] |
0: 未触发 / 1:触发 |
急停开关 |
bit[4~7] |
/ |
/ |
电源故障表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1:故障> |
主继电器故障 |
bit[1] |
0: 正常 / 1:故障> |
缓启动故障 |
bit[2] |
0: 正常 / 1:故障> |
缓启动升压故障 |
bit[3] |
0: 正常 / 1:故障> |
输出过流故障 |
bit[4] |
0: 正常 / 1:故障> |
纽扣电池故障 |
bit[5~7] |
/ | / |
举例: 型号0x02 编号0x03 的底盘反馈触碰传感器触发。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x01 02 03 BA
数据帧
扩展帧
5
00 00 00 04 00
10. 获取RTC时间
对安装有RTC计数模块的底盘可以获取芯片时间
获取RTC时间 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 1B |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
RTC时间信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX BB |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
当前unix 时间[0:7] |
unsigned int32 |
unix时间,从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数 |
|
byte[1] |
当前unix 时间[8:15] |
|||
byte[2] |
当前unix时间[16:23] |
|||
byte[3] |
当前unix时间[24:31] |
|||
byte[4~7] |
/ |
/ |
/ |
底盘必须具有RTC时间功能,该功能为特别订制
举例: 型号0x02 编号0x03 的底盘获取时间为2024-01-01 00:00:30。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 1B
数据帧
扩展帧
0
/
上位机
0x01 02 03 BB
数据帧
扩展帧
4
1E 90 91 65
11. 设置RTC时间
设置RTC时间 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 1C |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
unix时间 [0:7] |
unsigned int32 |
unix时间,从格林威治时间 1970年01月01日00时00分 00 秒起至现在的总秒数 |
|
byte[1] |
unix时间[8:15] |
|||
byte[2] |
unix时间[16:23] |
|||
byte[3] |
unix时间[24:31] |
|||
byte[4~7] |
/ |
/ |
/ |
设置RTC时间反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX BC |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设置RTC反馈 |
unsigned int8 |
0:设置成功 1:数据错误,设置失败 |
|
byte[1~7] |
/ |
/ |
/ |
举例: 型号0x02 编号0x03 的底盘设置RTC时间为2024-01-01 00:00:30。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 1C
数据帧
扩展帧
4
1E 90 91 65
上位机
0x01 02 03 BC
数据帧
扩展帧
1
00
12. 设置唤醒时间
设置RTC时钟的自动唤醒功能,在使用休眠等节能需求时候使用
设置唤醒时间 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 1D |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
unix时间 [0:7] |
unsigned int32 |
unix时间,从格林威治时间 1970年01月01日00时00分 00 秒起至现在的总秒数 |
|
byte[1] |
unix时间[8:15] |
|||
byte[2] |
unix时间[16:23] |
|||
byte[3] |
unix时间[24:31] |
|||
byte[4~7] |
/ |
/ |
/ |
设置唤醒时间反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX BD |
5 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设置唤醒时间反馈 |
unsigned int8 |
0:设置成功 1-闹钟时间小于当前时间,设置失败 |
|
byte[1] |
唤醒时间 [0:7] |
unsigned int32 |
unix时间,从格林威治时间 1970年01月01日00时00分 00 秒起至现在的总秒数 |
|
byte[2] |
唤醒时间[8:15] |
|||
byte[3] |
唤醒时间[16:23] |
|||
byte[4] |
唤醒时间[24:31] |
|||
byte[5] |
/ |
/ |
/ |
举例: 型号0x02 编号0x03 的底盘设置唤醒时间为2024-01-01 00:00:30。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 1D
数据帧
扩展帧
4
1E 90 91 65
上位机
0x01 02 03 BD
数据帧
扩展帧
5
00 1E 90 91 65
13. 电源输出控制
控制底盘对外部的电源输出,如果是电池直出则不受影响
电源输出控制 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 1E |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
电源输出控制 |
unsigned int8 |
0:关闭电源 1:启动电源 2:查询当前电源状态 |
|
byte[1~7] |
/ |
/ |
/ |
电源输出反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX BE |
2 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
电源输出控制反馈 |
unsigned int8 |
0:操作成功 1:唤醒时间未设置,关闭失败 2:开启失败,电源未关闭 |
|
byte[1] |
电源输出状态反馈 |
unsigned int8 |
0:电源已关闭 1:电源已开启 |
|
byte[2~7] |
/ |
/ |
/ |
如果有工控机等外部设备请谨慎使用该功能,该功能需要具备RTC时间功能的底盘,并需要先设置唤醒时间才能关闭电源
举例: 型号0x02 编号0x03 的底盘关闭输出电源。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 1E
数据帧
扩展帧
1
00
上位机
0x01 02 03 BE
数据帧
扩展帧
2
00 01
14. 机械参数设置
底盘的结构参数,用于补偿里程计和速度差异
机械参数设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 1F |
2 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设置轮径 |
uint16 |
0: 不设置 单位:mm |
|
byte[1] |
||||
byte[2~7] |
/ |
/ |
/ |
机械参数反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX BF |
7 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
运动模型 | uint8 | 参考运动模型ID表 | |
byte[1] |
轴距 |
uint16 |
单位:mm | |
byte[2] |
||||
byte[3] |
轮距 |
uint16 |
单位:mm | |
byte[4] |
||||
byte[5] |
轮径 |
uint16 |
单位:mm | |
byte[6] |
||||
byte[7] |
/ |
/ |
/ |
运动模型ID表 |
||
字节 |
状态码的取值 |
状态说明 |
byte[0] |
0x00 |
未知模型 |
0x01 |
两轮差速 |
|
0x02 |
四轮差速 |
|
0x03 |
阿克曼 |
|
0x04 |
麦轮 |
|
0x05 |
三正交轮 |
|
0x06 |
四正交轮 |
机械参数设置会严重影响里程计与速度数据输出,请谨慎使用
举例: 型号0x02 编号0x03 轴距500mm 轮距300mm 的底盘设置轮径为200mm。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 1F
数据帧
扩展帧
1
C8 00
上位机
0x01 02 03 BF
数据帧
扩展帧
7
01 F4 01 2C 01 C8 00
15. odom设置
用于开启底盘计算odom模式,会比上位机计算精确,并可开启IMU较准
odom设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 01 XX XX 20 |
2 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
使能odom反馈 |
uint8 |
0: 失能(默认) / 1:使能 |
|
byte[1] |
IMU较准 |
uint8 |
0: 不使用 / 1:使用(默认) 如果底盘没有IMU则不可使用 |
|
byte[2~7] |
/ |
/ |
/ |
odom-位移反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX C0 |
8 |
20 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
odom_x [7:0] |
signed int32 |
单位:mm |
|
byte[1] |
odom_x[15:8] |
|||
byte[2] |
odom_x[23:16] |
|||
byte[3] |
odom_x[31:24] |
|||
byte[4] |
odom_y[7:0] |
signed int32 |
单位:mm |
|
byte[5] |
odom_y[15:8] |
|||
byte[6] |
odom_y[23:16] |
|||
byte[7] |
odom_y[31:24] |
odom-旋转反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX C1 |
4 |
20 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
odom_th [7:0] |
signed int32 |
单位:mrad |
|
byte[1] |
odom_th [15:8] |
|||
byte[2] |
odom_th [23:16] |
|||
byte[3] |
odom_th [31:24] |
|||
byte[4~7] |
/ |
/ |
/ |
只有具备车载IMU功能的底盘才能开启IMU较准
举例: 型号0x02 编号0x03 底盘开启IMU较准 odom,odom位置为x=1m y= 1m。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 20
数据帧
扩展帧
2
01 01
上位机
0x01 02 03 C0
数据帧
扩展帧
8
E8 03 00 00 E8 03 00 00
上位机
0x01 02 03 C1
数据帧
扩展帧
4
00 00 00 00
运载平台类CAN协议标准
为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为运载平台用的专用CAN协议。
请先确保阅读了CAN协议构架说明再开始以下内容
请注意使用设备CANID替换表中XX部分
运载平台类设备的大类ID为 03
运载平台指令总表
此表展示了专用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
|||||||||||
设备对象 |
命令内容 |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
运载平台 |
平台状态设置 |
03 |
xx |
xx |
11 |
03 |
xx |
xx |
B1 |
平台状态信息 |
周期反馈 |
必备 |
||
平台工作范围查询 |
03 |
xx |
xx |
12 |
03 |
xx |
xx |
B2 |
工作范围信息 |
对命令反馈 |
必备 |
|||
平台移动速度控制 |
03 |
xx |
xx |
13 |
03 |
xx |
xx |
B3 |
平台移动信息 |
周期反馈 |
选备 |
适用于有移动轴的平台 |
||
平台移动位置控制 |
03 |
xx |
xx |
14 |
03 |
xx |
xx |
B4 |
平台位置信息 |
周期反馈 |
选备 |
适用于有移动轴的平台 |
1. 平台状态设置/ 平台状态信息
平台状态设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 03 XX XX 11 |
3 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
启动零点较准 |
uint8 |
0x00: 不启动 / 0x01:启动 | |
byte[1] |
移动速度上限低8位 |
unsigned int16 |
位置控制模式专用 单位:mm/s |
|
byte[2] |
移动速度上限高8位 |
|||
byte[3~7] |
/ |
/ |
/ |
平台状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 03 XX XX B1 |
6 |
100 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设备状态 |
uint8 |
0x00: 正常 / 0x01:异常 |
|
byte[1] |
零点较准状态 | uint8 | 0x00: 较准完成 / 0x01:校准中 | |
byte[2] |
特殊状态 | uint16 | 查看特殊状态表 | |
byte[3] |
||||
byte[4] |
移动速度上限低8位 |
unsigned int16 |
位置控制模式专用 单位:mm/s |
|
byte[5] |
移动速度上限高8位 |
|||
byte[6~7] |
/ |
/ |
/ |
特殊状态表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1:触发 |
x平移限位触发 |
bit[1] |
0: 正常 / 1:触发 |
y平移限位触发 |
bit[2] |
0: 正常 / 1:触发 |
z平移限位触发 |
bit[3] |
0: 正常 / 1:堵转 |
x电机堵转 |
bit[4] |
0: 在线 / 1:堵转 |
y电机堵转 |
bit[5] |
0: 正常 / 1:堵转 |
z电机堵转 |
bit[6] |
0: 正常 / 1:过温 |
x电机过温 |
bit[7] |
0: 在线 / 1:过温 |
y电机过温 |
bit[8] |
0: 正常 / 1:过温 |
z电机过温 |
bit[9~15] |
/ |
/ |
启动校准后平台会缓慢寻找零点并停在零点处
移动速度上限是指位置控制模式下,移动的最大可达速度
举例: 型号0x02 编号0x03 的平台启动校准,上限速度0.5m/s,发送CANID:0x03 02 03 11 数据:01 F4 01。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x03 02 03 11
数据帧
扩展帧
3
01 F4 01
上位机
0x03 02 03 B1
数据帧
扩展帧
4
00 01 00 00
2. 平台工作范围查询 / 平台工作范围信息
用于获得平台移动轴的运动范围,是设备的固定参数
平台移动范围查询 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 03 XX XX 12 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
平台移动范围信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 03 XX XX B2 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x移动范围低8位 |
signed int16 |
单位:mm |
|
byte[1] |
x移动范围高8位 |
|||
byte[2] |
y移动范围低8位 |
signed int16 |
单位:mm |
|
byte[3] |
y移动范围高8位 |
|||
byte[4] |
z移动范围低8位 |
signed int16 |
单位:mm |
|
byte[5] |
z移动范围高8位 |
|||
byte[6] |
移动速度范围低8位 |
unsigned int16 |
单位: mm/s |
|
byte[7] |
移动速度范围高8位 |
速度范围是指设备允许的最大速度,是由设备机械结构决定的,是一个确定值
举例: 型号0x02 编号0x03 的平台获取移动范围x=1000mm,发送CANID:0x03 02 03 12。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x03 02 03 12
数据帧
扩展帧
0
/
上位机
0x03 02 03 B2
数据帧
扩展帧
8
E8 03 00 00 00 00 E8 03
3. 平台速度控制 / 平台速度信息
通过控制速度来移动平台
平台速度控制 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 03 XX XX 13 |
6 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[1] |
x方向速度高8位 |
|||
byte[2] |
y方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[3] |
y方向速度高8位 |
|||
byte[4] |
z方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[5] |
z方向速度高8位 |
|||
byte[6~7] |
/ |
/ |
/ |
平台速度信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 03 XX XX B3 |
6 |
50 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[1] |
x方向速度高8位 |
|||
byte[2] |
y方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[3] |
y方向速度高8位 |
|||
byte[4] |
z方向速度低8位 |
signed int16 |
单位:mm/s |
|
byte[5] |
z方向速度高8位 |
|||
byte[6~7] |
/ |
/ |
/ |
需要实时读取位置信息,可能会出现超限
举例: 型号0x02 编号0x03 的平台设置移动x=1m/s,发送CANID:0x03 02 03 13,数据:E8 03 00 00 00 00。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x03 02 03 13
数据帧
扩展帧
6
E8 03 00 00 00 00
上位机
0x03 02 03 B3
数据帧
扩展帧
6
E8 03 00 00 00 00
4. 平台位置控制 / 平台位置信息
通过控制位置来移动平台
平台位置控制 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 03 XX XX 14 |
6 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向位置低8位 |
signed int16 |
单位:mm |
|
byte[1] |
x方向位置高8位 |
|||
byte[2] |
y方向位置低8位 |
signed int16 |
单位:mm |
|
byte[3] |
y方向位置高8位 |
|||
byte[4] |
z方向位置低8位 |
signed int16 |
单位:mm |
|
byte[5] |
z方向位置高8位 |
|||
byte[6~7] |
/ |
/ |
/ |
平台位置信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 03 XX XX B4 |
6 |
50 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向位置低8位 |
signed int16 |
单位:mm |
|
byte[1] |
x方向位置高8位 |
|||
byte[2] |
y方向位置低8位 |
signed int16 |
单位:mm |
|
byte[3] |
y方向位置高8位 |
|||
byte[4] |
z方向位置低8位 |
signed int16 |
单位:mm |
|
byte[5] |
z方向位置高8位 |
|||
byte[6~7] |
/ |
/ |
/ |
举例: 型号0x02 编号0x03 的平台设置移动到位置 x=1m ,发送CANID:0x03 02 03 14。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x03 02 03 14
数据帧
扩展帧
6
E8 03 00 00 00 00
上位机
0x03 02 03 B4
数据帧
扩展帧
6
E8 03 00 00 00 00
灯光类CAN协议标准
为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为灯光使用的专用CAN协议。
请先确保阅读了CAN协议构架说明再开始以下内容
请注意使用设备CANID替换表中XX部分
灯光类设备的大类ID为 04
灯光控制器指令总表
指令集 |
反馈集 |
重要性 |
说明 |
|||||||||||
设备对象 |
命令内容 |
大类 ( 00~1F) |
型号 (00~FF) |
编号 ( 00~FF) |
功能 ( 00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
灯光控制器 |
控制器状态设置 |
04 |
xx |
xx |
11 |
04 |
xx |
xx |
B1 |
控制器状态信息 |
周期反馈 |
必备 |
||
单点灯光状态设置 |
04 |
xx |
xx |
12 |
/ |
/ |
/ |
/ |
/ |
/ |
必备 |
|||
呼吸模式设置 |
04 |
xx |
xx |
13 |
04 |
xx |
xx |
B3 |
设置成功 |
单次反馈 |
必备 |
1. 控制器状态设置 / 控制器状态信息
控制器状态设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 04 XX XX 11 |
3 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
工作模式 |
unsigned int8 |
查看工作模式表 |
|
byte[1] |
亮度倍率 |
unsigned int8 |
1~100(最大亮度百分比,用于总控) |
|
byte[2] |
灯光数量 |
unsigned int8 |
控制的灯光LED数量 |
|
byte[3~7] |
/ |
/ |
/ |
控制器状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 04 XX XX B1 |
8 |
500 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
工作模式 |
unsigned int8 |
查看工作模式表 |
|
byte[1] |
亮度倍率 |
unsigned int8 |
1~100 |
|
byte[2] |
灯光数量 |
unsigned int8 |
控制的灯光LED数量 |
|
byte[3~7] |
/ |
/ |
/ |
触碰开关表 |
||
位 |
值 |
说明 |
byte[0] |
0x00 |
待机模式(蓝色呼吸灯) |
0x01 |
警报模式(红色快闪) |
|
0x02 |
单点控制 |
|
0x03 |
呼吸模式 |
举例: 型号0x02 编号0x03 的灯光使用警报模式 100亮度 50个led,发送CANID:0x04 02 03 11 数据:01 64 32 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x04 02 03 11
数据帧
扩展帧
3
01 64 32
上位机
0x04 02 03 B1
数据帧
扩展帧
3
01 64 32
2. 单点灯光状态设置
用于单一LED的控制,可以每个LED都有不同颜色
控制器状态设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 04 XX XX 12 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
灯光ID |
unsigned int8 |
ID从1开始,0为空 |
|
byte[1] |
R值 |
unsigned int8 |
RGB的R值 |
|
byte[2] |
G值 |
unsignedint8 |
RGB的G值 |
|
byte[3] |
B值 |
unsigned int8 |
RGB的B值 |
|
byte[4] |
灯光ID |
unsigned int8 |
ID从1开始,0为空 |
|
byte[5] |
R值 |
unsigned int8 |
RGB的R值 |
|
byte[6] |
G值 |
unsignedint8 |
RGB的G值 |
|
byte[7] |
B值 |
unsigned int8 |
RGB的B值 |
每次至多设置两个LED,可以连续发送,单个LED可以设置另一个ID为0
需要工作模式为单点控制才有效
举例: 型号0x02 编号0x03 的灯光设置第一个LED 白色,发送CANID:0x04 02 03 12 数据:01 FF FF FF 00 00 00 00。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x04 02 03 12
数据帧
扩展帧
8
01 FF FF FF 00 00 00 00
上位机
/
/
/
/
/
3. 呼吸模式设置 / 设置成功
呼吸模式是所有灯以一种颜色渐变
呼吸模式设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 04 XX XX 13 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
呼吸周期 |
unsigned int8 |
单位:S |
|
byte[1] |
R值 |
unsigned int8 |
RGB的R值 |
|
byte[2] |
G值 |
unsigned int8 |
RGB的G值 |
|
byte[3] |
B值 |
unsigned int8 |
RGB的B值 |
|
byte[4~7] |
/ |
/ |
/ |
设置成功 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 04 XX XX B3 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
需要工作模式为呼吸模式才有效
举例: 型号0x02 编号0x03 的灯光设置LED 白色1s呼吸,发送CANID:0x04 02 03 13 数据:01 64 32 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x04 02 03 13
数据帧
扩展帧
4
01 FF FF FF
上位机
0x04 02 03 B3
数据帧
扩展帧
0
/
电源类CAN协议标准
为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为电源使用的专用CAN协议。
请先确保阅读了CAN协议构架说明再开始以下内容
请注意使用设备CANID替换表中XX部分
电源类设备的大类ID为 06
电源指令总表
此表展示了专用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
|||||||||||
设备对象 |
命令内容 |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
电池 |
/ |
/ |
/ |
/ |
/ |
06 |
xx |
xx |
B1 |
BMS状态信息 |
周期反馈 |
必备 |
||
/ |
/ |
/ |
/ |
/ |
06 |
xx |
xx |
B2 |
BMS数据反馈 |
周期反馈 |
必备 |
|||
充电站 |
充电站设置 |
06 |
xx |
xx |
13 |
06 |
xx |
xx |
B3 |
充电站状态信息 |
周期反馈 |
必备 |
||
/ |
/ |
/ |
/ |
/ |
06 |
xx |
xx |
B4 |
充电站数据反馈 |
周期反馈 |
必备 |
|||
数字电源 |
数字电源设置 |
06 |
xx |
xx |
15 |
06 |
xx |
xx |
B5 |
电源数据反馈 |
周期反馈 |
必备 |
1. BMS状态信息
用于带有BMS功能的电池包的数据采集
BMS状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 06 XX XX B1 |
4 |
1000 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
工作状态 |
unsigned int8 |
0x00: 正常 / 0x01: 警告 /0x02: 保护 |
|
byte[1] |
警告状态 |
unsigned int8 |
警告状态表 |
|
byte[2] |
保护状态 |
unsigned int8 |
保护状态表 |
|
byte[3] |
充电标识 |
unsigned int8 |
0x00: 未充电 / 0x01: 充电中 |
|
byte[4~7] |
/ |
/ |
/ |
警告状态表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1: 警告 |
电池过压警告 |
bit[1] |
0: 正常 / 1: 警告 |
电池欠压警告 |
bit[2] |
0: 正常 / 1: 警告 |
电池高温警告 |
bit[3] |
0: 正常 / 1: 警告 |
电池低温警告 |
bit[4] |
0: 正常 / 1: 警告 |
放电过流警告 |
bit[5] |
0: 正常/ 1: 警告 |
充电过流警告 |
bit[6] |
0: 正常 / 1: 警告 |
低电量警告(SOC<20%) |
bit[7] |
/ |
/ |
保护状态表 |
||
位 |
值 |
说明 |
bit[0] |
0: 正常 / 1: 触发 |
电池过压保护 |
bit[1] |
0: 正常 / 1: 触发 |
电池欠压保护 |
bit[2] |
0: 正常 / 1: 触发 |
电池高温保护 |
bit[3] |
0: 正常 / 1: 触发 |
电池低温保护 |
bit[4] |
0: 正常 / 1: 触发 |
放电过流保护 |
bit[5] |
0: 正常 / 1: 触发 |
充电过流保护 |
bit[6] |
0: 正常 / 1: 触发 |
低电量保护(SOC<10%) |
bit[7] |
0: 正常 / 1: 触发 |
短路保护 |
电池包必须带有BMS才能使用该功能
举例: 型号0x01 编号0x02 的BMS 充电中。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x06 01 02 B1
数据帧
扩展帧
4
00 00 00 01
2. BMS数据反馈
用于带有BMS功能的电池包的数据采集
BMS数据反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 06 XX XX B2 |
8 |
500 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
SOC |
unsigned int8 |
范围 0~100 |
|
byte[1] |
SOH |
unsigned int8 |
范围 0~100 |
|
byte[2] |
电池电压低8位 |
unsigned int16 |
单位:0.01V |
|
byte[3] |
电池电压高8位 |
|||
byte[4] |
电池电流低8位 |
signed int16 |
单位:0.1A |
|
byte[5] |
电池电流高8位 |
|||
byte[6] |
电池温度低8位 |
signed int16 |
单位:0.1℃ |
|
byte[7] |
电池温度高8位 |
电池包必须带有BMS才能使用该功能
举例: 型号0x01 编号0x02 的BMS 满电48V反馈。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x06 01 02 B2
数据帧
扩展帧
8
64 64 C0 12 00 00 68 01
3. 充电站设置
用于配套的自动充电站的设置
充电站设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 06 XX XX 13 |
5 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
工作模式 |
unsigned int8 |
0:自动(默认) /1:手动 查看工作模式功能表 |
|
byte[1] |
手动开关设置(仅手动模式有效) |
unsigned int8 |
0:断开(默认) /1:连接 查看工作模式功能表 |
|
byte[2] |
蜂鸣器使能(报警无法关闭) |
unsigned int8 |
0:关闭 /1:开启(默认) |
|
byte[3] |
再充电压差值(与满电电压的压差) |
unsigned int8 |
单位:0.1V(默认1.0V) |
|
byte[4] |
充电截至电流 |
unsigned int8 |
单位:0.1A(默认0.2A) |
|
byte[5~7] |
/ |
/ |
/ |
充电站状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 06 XX XX B3 |
7 |
500/接触触发(看备注) |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
工作模式 |
unsigned int8 |
0:自动 /1:手动 |
|
byte[1] |
充电站探测状态 |
unsigned int8 |
0:未接触 /1:已接触 |
|
byte[2] |
工作状态 |
unsigned int8 |
0: 断开/ 1:连接 / 2:已充满(低电流) / 3:错误 |
|
byte[3] |
错误状态 |
unsigned int8 |
查看错误状态表 |
|
byte[4] |
蜂鸣器使能状态 |
unsigned int8 |
0:关闭 /1:开启(默认) |
|
byte[5] |
再充电压差值 |
unsigned int8 |
单位:0.1V(默认1.0V) |
|
byte[6] |
充电截至电流 |
unsigned int8 |
单位:0.1A(默认0.2A) |
|
byte[7] |
/ |
/ |
/ |
错误状态表 |
||
字节 |
状态值 |
说明 |
byte[3] |
0x00 |
无错误 |
0x01 |
电源过压 |
|
0x02 |
充电过流 |
|
0x03 |
短路保护 |
工作状态指示表 |
||
工作状态 |
LED状态 |
蜂鸣器状态 |
断开(未接触) |
无灯 |
无 |
断开(已接触) |
绿灯闪烁 |
无 |
连接 |
红绿交替 |
无 |
已充满 |
绿灯常亮 |
无 |
错误 |
红灯常亮 |
按规定的错误发声模式 |
工作模式功能表 |
|||
工作模式 |
探测状态 |
手动开关 |
工作状态 |
自动 |
未接触 |
无效 |
断开 |
接触 |
无效 |
连接 |
|
手动 |
未接触 |
无效 |
断开 |
接触 |
连接 |
连接 |
|
断开(默认) |
断开 |
一般反馈周期为500ms,如果出现充电站探测变化则立即发送充电站状态信息帧
再冲电电压差指完成第一次充电后,如果电池电压下降超过设置的压差值,会再次启动充电
举例: 型号0x02 编号0x03 的充电站 手动控制连接。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x06 02 03 13
数据帧
扩展帧
5
01 01 00 0A 02
上位机
0x06 02 03 B3
数据帧
扩展帧
7
01 01 01 00 00 0A 02
4. 充电站数据反馈
用于配套的自动充电站的充电数据反馈
充电站数据反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 06 XX XX B4 |
4 |
500 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
充电电压低8位 |
unsigned int16 |
单位:0.01V |
|
byte[1] |
充电电压高8位 |
|||
byte[2] |
充电电流低8位 |
signed int16 |
单位:0.1A |
|
byte[3] |
充电电流高8位 |
|||
byte[4~7] |
/ |
/ |
/ |
举例: 型号0x02 编号0x03 的充电站48V 1A充电。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x06 02 03 B4
数据帧
扩展帧
4
C0 12 0A 00
5. 数字电源设置
用于专用的数字电源
数字电源设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 06 XX XX 15 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
电源通道ID |
unsigned int8 |
1~255 |
|
byte[1] |
模式 |
unsigned int8 |
1:恒压模式 / 2:恒流模式 |
|
byte[2] |
反馈周期 |
unsigned int8 |
单位ms |
|
byte[3] |
/ |
/ |
/ |
|
byte[4] |
输出电流或最大电流 |
unsigned int16 |
单位 mA |
|
byte[5] |
||||
byte[6] |
输出电压或最大电压 |
unsigned int16 |
单位 mV |
|
byte[7] |
数字电源数据反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 06 XX XX B5 |
8 |
按设置周期 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
电源通道ID |
unsigned int8 |
1~255 |
|
byte[1] |
模式 |
unsigned int8 |
1:恒压模式 / 2:恒流模式 |
|
byte[2] |
错误码 |
unsigned int8 |
查看错误状态码 |
|
byte[3] |
/ |
/ |
/ |
|
byte[4] |
输出电流或最大电流 |
unsigned int16 |
单位 mA |
|
byte[5] |
||||
byte[6] |
输出电压或最大电压 |
unsigned int16 |
单位 mV |
|
byte[7] |
错误状态表 |
||
字节 |
状态值 |
说明 |
byte[2] |
0x00 |
无错误 |
0x01 |
电源过压 |
|
0x02 |
电源过流 |
|
0x03 |
电源过温 |
电子开关类CAN协议标准
为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为电子开关使用的专用CAN协议。
请先确保阅读了CAN协议构架说明再开始以下内容
请注意使用设备CANID替换表中XX部分
电子开关类设备的大类ID为 0A
电子开关指令总表
此表展示了专用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
|||||||||||
设备对象 |
命令内容 |
大类 ( 00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
电子开关 |
可控开关状态设置 |
0A |
xx |
xx |
11 |
0A |
xx |
xx |
B1 |
可控开关状态信息 |
周期反馈 |
选备 |
开关性质只能是其中一种 | |
/ |
/ |
/ |
/ |
/ |
0A |
xx |
xx |
B2 |
按键状态信息 |
周期反馈 |
选备 |
|||
/ |
/ |
/ |
/ |
/ |
0A |
xx |
xx |
B3 |
AD状态信息 |
周期反馈 |
选备 |
|||
反馈周期设置 |
0A |
xx |
xx |
14 |
0A |
xx |
xx |
B4 |
反馈周期信息 |
即时反馈 |
选备 |
1. 可控开关状态设置 / 可控开关状态信息
用于可控的IO设备
可控开关状态设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 0A XX XX 11 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设置开关 |
unsigned int8 |
0x00: 关闭 / 0x01: 开启 |
|
byte[1~7] |
/ |
/ |
/ |
可控开关状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0A XX XX B1 |
7 |
默认1000/触发模式 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
开关状态 |
unsigned int8 |
0x00: 关闭 / 0x01: 开启 |
|
byte[1~7] |
/ |
/ |
/ |
可控开关指通过单一变量控制启停的设备,包括灯光、门锁、气泵、电磁阀等
保持每次操作间隔超过 500ms,先读取状态再操作,防止过频繁烧毁部件
举例: 型号0x02 编号0x03 的开关开启, 发送CANID:0x 0A 02 03 11 数据:01。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x0A 02 03 11
数据帧
扩展帧
1
01
上位机
0x0A 02 03 B1
数据帧
扩展帧
1
01
2. 按键状态信息
用于按键单输入设备的控制
按键状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B2 |
8 |
默认100/触发模式 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
按键1 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[1] |
按键2 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[2] |
按键3 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[3] |
按键4 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[4] |
按键5 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[5] |
按键6 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[6] |
按键7 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
|
byte[7] |
按键8 |
unsigned int8 |
0x00: 未触发 / 0x01: 触发 |
使用触发模式要注意按键抖动问题
举例: 型号0x02 编号0x03 的按键1按下。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x0A 02 03 B2
数据帧
扩展帧
8
01 00 00 00 00 00 00 00
3. AD状态信息
用于AD输入设备的控制
AD状态信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 01 XX XX B3 |
8 |
默认100 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
AD1低8位 |
signed int16 |
|
|
byte[1] |
AD1高8位 |
|||
byte[2] |
AD2低8位 |
signed int16 |
|
|
byte[3] |
AD2高8位 |
|||
byte[4] |
AD3低8位 |
signed int16 |
|
|
byte[5] |
AD3高8位 |
|||
byte[6] |
AD4低8位 |
signed int16 |
|
|
byte[7] |
AD4高8位 |
举例: 型号0x02 编号0x03 的AD1 = 80%。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x0A 02 03 B3
数据帧
扩展帧
8
50 00 00 00 00 00 00 00
4. 反馈周期设置 / 反馈周期信息
反馈周期设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 0A XX XX 14 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
设置周期 |
unsigned int32 |
0: 触发模式 / 其他数值单位ms |
|
byte[1] |
||||
byte[2] |
||||
byte[3] |
||||
byte[4~7] |
/ |
/ |
/ |
反馈周期信息 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0A XX XX B4 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
当反馈周期设置为0时进入触发模式,该模式下只有开关状态变化才会反馈
举例: 型号0x02 编号0x03 的设置反馈周期100ms, 发送CANID:0x 0A 02 03 14 数据:64 00 00 00。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x0A 02 03 14
数据帧
扩展帧
4
64 00 00 00
上位机
0x0A 02 03 B4
数据帧
扩展帧
0
/
惯导类CAN协议标准
为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为惯导设备使用的专用CAN协议。
请先确保阅读了CAN协议构架说明再开始以下内容
请注意使用设备CANID替换表中XX部分
惯导类设备的大类ID为 0B
惯导传感器指令总表
此表展示了专用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
|||||||||||
设备对象 |
命令内容 |
大类 ( 00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
惯导传感器 |
角度信息设置 |
0B |
xx |
xx |
11 |
0B |
xx |
xx |
B1 |
传感器角度信息 |
周期反馈 |
必备 |
||
角速度信息设置 |
0B |
xx |
xx |
12 |
0B |
xx |
xx |
B2 |
传感器角速度信息 |
周期反馈 |
必备 |
|||
加速度信息设置 |
0B |
xx |
xx |
13 |
0B |
xx |
xx |
B3 |
传感器加速度信息 |
周期反馈 |
必备 |
|||
四元数信息设置 |
0B |
xx |
xx |
14 |
0B |
xx |
xx |
B4 |
传感器四元数信息1 |
使能后周期反馈 |
选备 |
|||
/ |
/ |
/ |
/ |
/ |
0B |
xx |
xx |
B5 |
传感器四元数信息2 |
使能后周期反馈 |
选备 |
1. 角度信息设置 / 传感器角度信息
角度信息设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 0B XX XX 11 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭/ 1~10: 10ms / 10~255:设定值(默认10ms) |
|
byte[1~7] |
/ |
/ |
/ |
传感器角度信息 | ||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0B XX XX B1 |
8 |
默认10 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x轴旋转角[7:0] |
signed int16 |
单位:0.01deg(°) |
|
byte[1] |
x轴旋转角[8:15] |
|||
byte[2] |
y轴旋转角 [7:0] |
signed int16 |
单位:0.01deg(°) |
|
byte[3] |
y轴旋转角 [8:15] |
|||
byte[4] |
z轴旋转角[7:0] |
signed int16 |
单位:0.01deg(°) |
|
byte[5] |
z轴旋转角[8:15] |
|||
byte[6] |
发布时间戳[7:0] |
unsigned int16 |
单位:ms |
|
byte[7] |
发布时间戳[8:15] |
举例: 型号0x01 编号0x02 的IMU 设置10ms,反馈x=0.5° y=1.0° z=1.5°。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x0B 01 02 11
数据帧
扩展帧
1
14
上位机
0x0B 01 02 B1
数据帧
扩展帧
8
32 00 64 00 96 00 01 00
2. 角速度设置 / 角速度信息
角速度信息设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 0B XX XX 12 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭/ 1~10: 10ms / 10~255:设定值(默认10ms) |
|
byte[1~7] |
/ |
/ |
/ |
角速度信息 | ||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0B XX XX B2 |
8 |
默认10 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向角速度[7:0] |
signed int16 |
单位:0.01 deg/s |
|
byte[1] |
x方向角速度 [8:15] |
|||
byte[2] |
y方向角速度 [7:0] |
signed int16 |
单位:0.01 deg/s |
|
byte[3] |
y方向角速度 [8:15] |
|||
byte[4] |
z方向角速度 [7:0] |
signed int16 |
单位:0.01 deg/s |
|
byte[5] |
z方向角速度 [8:15] |
|||
byte[6] |
发布时间戳[7:0] |
unsigned int16 |
单位:ms |
|
byte[7] |
发布时间戳[8:15] |
举例: 型号0x01 编号0x02 的IMU 设置10ms,反馈x=0.5°/s y=1.0°/s z=1.5°/s。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x0B 01 02 12
数据帧
扩展帧
1
14
上位机
0x0B 01 02 B2
数据帧
扩展帧
8
32 00 64 00 96 00 01 00
3. 加速度设置 / 加速度信息
加速度信息设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 0B XX XX 13 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭/ 1~10: 10ms / 10~255:设定值(默认10ms) |
|
byte[1~7] |
/ |
/ |
/ |
加速度信息 | ||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0B XX XX B3 |
8 |
默认10 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
x方向加速度[7:0] |
signed int16 |
单位:0.01m/s² |
|
byte[1] |
x方向加速度 [8:15] |
|||
byte[2] |
y方向加速度 [7:0] |
signed int16 |
单位:0.01m/s² |
|
byte[3] |
y方向加速度 [8:15] |
|||
byte[4] |
z方向加速度 [7:0] |
signed int16 |
单位:0.01m/s² |
|
byte[5] |
z方向加速度 [8:15] |
|||
byte[6] |
发布时间戳[7:0] |
unsigned int16 |
单位:ms |
|
byte[7] |
发布时间戳[8:15] |
举例: 型号0x01 编号0x02 的IMU 设置10ms,反馈x=0.5m/s y=1.0m/s z=1.5m/s。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x0B 01 02 13
数据帧
扩展帧
1
14
上位机
0x0B 01 02 B3
数据帧
扩展帧
8
32 00 64 00 96 00 01 00
4. 四元数信息设置
四元数信息设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x 0B XX XX 14 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
发送周期设置 |
unsigned int8 |
0: 关闭(默认)/ 1~10: 10ms / 10~255:设定值 |
|
byte[1~7] |
/ |
/ |
/ |
四元数信息1 | ||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0B XX XX B4 |
8 |
默认关闭 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
四元数qw[0:7] |
float |
||
byte[1] |
四元数qw[8:15] |
|||
byte[2] |
四元数qw[16:23] |
|||
byte[3] |
四元数qw[24:31] |
|||
byte[4] |
四元数qx[0:7] |
float |
||
byte[5] |
四元数qx[8:15] |
|||
byte[6] |
四元数qx[16:23] |
|||
byte[7] |
四元数qx[24:31] |
四元数信息2 | ||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x 0B XX XX B5 |
8 |
默认关闭 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
四元数qy[0:7] |
float |
||
byte[1] |
四元数qy[8:15] |
|||
byte[2] |
四元数qy[16:23] |
|||
byte[3] |
四元数qy[24:31] |
|||
byte[4] |
四元数qz[0:7] |
float |
||
byte[5] |
四元数qz[8:15] |
|||
byte[6] |
四元数qz[16:23] |
|||
byte[7] |
四元数qz[24:31] |