...
Table of Contents | ||||
---|---|---|---|---|
|
...
简介
SLAMWARE Core模块与外部系统通过Control Bus低速总线连接。通过Control Bus总线协议,SLAMWARE Core可以获取外部系统的状态参数,例如外部系统的电池电量信息,是否在充电状态,外部系统的电机转速,传感器状态等信息。同时,SLAMWARE Core也通过Control Bus总线协议控制外部系统的电机运动,从而实现完整的室内定位导航功能。
Control Bus总线协议是运行在串口上的,波特率为115200bps,外部系统必须实现此总线协议才可以使SLAMWARE Core正常工作。
SLAMWARE Core Control Bus通讯协议使用的是Inter-chip通讯协议的扩展模式。Inter-chip通讯协议是SLAMTEC专门为底层电子系统,诸如微控制器之间、微控制器与宿主系统、微控制器与设备之间相互通讯而设计的协议。它以数据包为单位在通讯媒介上传递数据,通讯包中包含了数据校验机制以及帧同步机制,可以实现可靠的通讯链路。目前该协议广泛用于SLAMTEC的机器人系统、传感器和模块设备中,并可在USART、USB、I2C、TCP以太网中使用。
...
当Flag字段的LongFrame位设置为1时,LenH字段也将出现在数据包中,并与Len字段构成一个16bit的联合字段。此时数据包可以携带65534字节的数据。注意:当Len
Note | ||
---|---|---|
| ||
当Len/LenH字段设置为0时,本数据包将被视为无效数据包而被协议栈丢弃。 |
CMD字段
存储顺序 | MSB +7 | +0 LSB | ||||||
---|---|---|---|---|---|---|---|---|
CMD: | CMD[7..0] |
...
当Resp为<Error> (0x03)或者<Invalid>(0xFF)时,Payload[N]将存放一个16bit的错误码,描述出错情况。Standard Profile规范要求协议栈保留如下的错误码取值,具体含义请参考下表。Slave上的应用程序也可以定义更多的错误代码。
错误码 | 描述 |
---|---|
0x40 | 请求命令包校验和不匹配 |
0x20 | 请求命令包长度超过了当前Slave协议栈缓冲区承受范围 |
0x10 | Slave协议栈信道没有完成同步 |
0x8000 | 请求命令包中的CMD字段不被Slave支持 |
0x8001 | 请求命令在执行中遇到格式类错误,例如请求参数不符合规范 |
0x8002 | 请求命令在执行中遇到操作类错误,例如执行过程遇到问题而无法继续 |
SLAMWARE Core 协议命令
SLAMWARE Core Ctrl Bus通讯协议
...
SLAMWARE Core和外部系统之间的Ctrl Bus通讯协议设计为单向通讯模式,始终由SLAMWARE Core发起数据包请求。
外部系统需要及时回应SLAMWARE Core的请求命令,否则SLAMWARE Core将认为外部系统连线中断,可能停止正常工作。
请求命令与应答必须是成对出现的,每个应答总对应于一个请求命令。SLAMWARE Core在发送一个请求命令后,总会在接收到外部系统发送应答数据包或者通讯超时后,才会进行下一个请求命令的发送。
SLAMWARE Core也可以接受外部系统的控制命令,但由于单向通讯的模式,外部系统只能在SLAMWARE CORE定期发送外部系统控制命令查询请求的时候才可以发送控制命令。但外部系统可以通过#CMD信号通知SLAMWARE CORE尽快发送外部系统控制命令查询请求。Core定期发送外部系统控制命令查询请求的时候才可以发送控制命令。但外部系统可以通过#CMD信号通知SLAMWARE Core尽快发送外部系统控制命令查询请求。
SLAMWARE CORE 请求命令
SLAMWARE CORE室内定位导航模块会发送以下请求命令,外部系统可以根据需要响应请求命令,否则SLAMWARE CORE CTRL BUS协议栈会做默认响应。标Core室内定位导航模块会发送以下请求命令,外部系统可以根据需要响应请求命令,否则SLAMWARE Core Ctrl Bus协议栈会做默认响应。标*的命令为外部系统必须响应的请求命令。否则SLAMWARE CORE将不能正常工作。Core将不能正常工作。
请求命令 | 命令代码 | 描述 |
---|
外部系统连接请求 |
(CONNECT_BASE) |
* | 0x10 | 请求连接外部系统,外部系统将会返回硬件、固件版本信息表示连接成功。 |
外部系统参数获取请求 |
( |
GET_BASE_CONF) |
* | 0x20 | 请求外部系统的配置参数,包括尺寸类型,尺寸半径,轮组类型,传感器位置角度等。 |
外部系统配置获取请求 |
(GET_BINARY_CONF) |
#_外部系统配置获取请求(GET_BINARY_CONF)]
0x21
请求外部系统配置参数。该指令用于替代上述的0x20指令,具有更大的可扩展性。SLAMWARE CORE会首先尝试该指令,如果该指令返回了Not Support,则再调用0x20获取外部系统配置。
[外部系统状态获取请求
(GET_BASE_STATUS)
0x21 | 请求外部系统配置参数。该指令用于替代上述的0x20指令,具有更大的可扩展性。SLAMWARE Core会首先尝试该指令,如果该指令返回了Not Support,则再调用0x20获取外部系统配置。 |
外部系统状态获取请求(GET_BASE_STATUS) |
* | 0x30 | 请求获取外部系统的状态,包括电池电量,充电状态等。 |
外部系统轮组状态获取请求 |
(GET_BASE_MOTOR_DATA) |
* | 0x31 | 请求外部系统返回轮组运行距离累计值。 |
外部系统距离传感器数据获取请求 |
(GET_BASE_SENSOR_DATA) |
* | 0x32 | 请求外部系统返回距离传感器的数据。 |
外部系统触碰传感器数据获取请求 |
(GET_BASE_BUMPER_DATA) |
#_外部系统触碰传感器数据获取请求(GET_BUMPER_DATA)] *
0x33
请求外部系统返回触碰传感器的数据。
[外部系统自动回充数据获取请求
(GET_AUTO_HOME_DATA)
* | 0x33 | 请求外部系统返回触碰传感器的数据。 |
外部系统自动回充数据获取请求(GET_AUTO_HOME_DATA) |
* | 0x34 | 请求外部系统返回自动回充的数据。 |
外部系统辅助定位数据获取请求(GET_AUXILIARY_ANCHOR) |
#_外部系统辅助定位数据获取请求(GET_AUXILIARY_ANCHOR]
0x35 | 请求辅助定位传感器数据 |
外部系统运动控制请求 |
(SET_BASE_MOTOR) |
* | 0x40 | 请求外部系统控制轮组运动。 |
外部系统设置速度及获取Deadreckon请求 SET_V_AND_GET_DEADRECKON * | 0x41 | 请求外部系统设置速度变量并获取上一个周期的Deadreckon数据。 |
外部系统命令查询请求POLL_BASE_CMD * | 0x50 | 查询外部系统是否有命令发送。 |
外部系统命令回应请求 POLL_BASE_ANS_CMD * | 0x5F | 回应外部系统命令请求 |
SLAMWARE |
Core系统事件通知命令(SEND_EVENT) * | 0x60 | 通知外部系统SLAMWARE |
Core事件 | ||
外部系统健康管理命令请求(HEALTH_MGMT) * | 0x90 | 获取外部系统健康状况 |
...
SLAMWARE CORE室内定位导航模块在准备好后会一直发送外部系统连接请求确认外部系统已正常工作。直到外部系统响应此请求后SLAMWARE CORE才会开始正常工作。
- 请求数据包:
0x10命令代码负载数据u8协议版本
- 应答数据包:
Wiki Markup |
---|
<span style="color: #262626"><OK></span>应答代码<span style="color: #262626">固件版本</span><span style="color: #262626">硬件版本</span>version负载数据u16u16<span style="color: #262626">型号</span><span style="color: #262626">序列号</span>u8\[12\]u32\[3\] |
...
数据域
...
类型
...
描述
...
协议版本
...
u8
...
协议的版本信息,版本信息不匹配时外部系统应应答错误
...
型号
Wiki Markup |
---|
u8\[12\] |
...
外部系统的型号,最多12个字符
...
固件版本
...
u16
...
外部系统的固件版本
...
硬件版本
...
u16
...
外部系统的硬件版本
...
序列号
Wiki Markup |
---|
u32\[3\] |
...
外部系统的序列号,最多12个字节
...
SLAMWARE CORE室内定位导航模块在与外部系统连接后会发送参数获取请求以获得外部系统的基本结构信息,包括尺寸类型,尺寸半径,轮组类型以及传感器安装位置信息等。目前版本SLAMWARE CORE只支持圆形和方形尺寸以及两轮差动轮组。
- 请求数据包:
0x20命令代码
- 应答数据包:
...
外部系统连接请求(CONNECT_BASE)
SLAMWARE Core室内定位导航模块在准备好后会一直发送外部系统连接请求确认外部系统已正常工作。直到外部系统响应此请求后SLAMWARE Core才会开始正常工作。
请求数据包 | ||||||
---|---|---|---|---|---|---|
命令代码 | 负载数据 | |||||
0x10 | 协议版本(u8) | |||||
应答数据包 | ||||||
应答代码 | 负载数据 | |||||
<OK> | 型号(u8[12]) | 固件版本(u16) | 硬件版本(u16) | 序列(u32[3]) |
数据域 | 类型 | 描述 |
---|---|---|
协议版本 | u8 | 协议的版本信息,版本信息不匹配时外部系统应应答错误 |
型号 | u8[12] | 外部系统的型号,最多12个字符 |
固件版本 | u16 | 外部系统的固件版本 |
硬件版本 | u16 | 外部系统的硬件版本 |
序列号 | u32[3] | 外部系统的序列号,最多12个字节 |
外部系统参数获取请求(GET_BASE_CONF)
SLAMWARE Core室内定位导航模块在与外部系统连接后会发送参数获取请求以获得外部系统的基本结构信息,包括尺寸类型,尺寸半径,轮组类型以及传感器安装位置信息等。目前版本SLAMWARE Core只支持圆形和方形尺寸以及两轮差动轮组。
请求数据包 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
命令代码 | 负载数据 | |||||||||||
0x20 | 无 | |||||||||||
应答数据包 | ||||||||||||
应答代码 | 负载数据 | |||||||||||
<OK> | 尺寸类别(u8) | 尺寸半径(u32) | 轮组类别(u8) | 距离传感器数量(u8) | 距离传感器数量(pose[8]) | |||||||
触碰传感器数量(u8) | 触碰传感器安装位置(pose[8]) |
数据域 | 类型 | 描述 |
---|---|---|
尺寸类型 | u8 | 外部系统的尺寸类型,目前只支持圆形和方形 |
尺寸半径 | u32 | 外部系统的尺寸半径,以mm为单位,Q8定点小数 |
轮组类型 | u8 | 外部系统的轮组类型,目前只支持两轮差动轮组 |
距离传感器数量 | u8 | 外部系统的距离传感器数量,最多支持8组 |
距离传感器安装位置 |
pos |
[8 |
] | 外部系统的距离传感器安装位置 | |
触碰传感器数量 | u8 | 外部系统的触碰传感器数量,最多支持8组 |
触碰传感器安装位置 |
pos |
[8 |
] | 外部系统的触碰传感器安装数据 |
...
Note |
---|
...
|
...
| |
当使用0x20底盘配置指令时,最多可支持8组距离传感器;当使用0x21 |
...
Binary Config指令配置时,最多可支持16组距离传感器 |
目前支持的尺寸类型有:
类型编号 | 描述 |
---|---|
0x00 | 圆形 |
0x01 |
方形
...
方形 |
目前支持的轮组类型有:
类型编号 | 描述 |
---|---|
0x00 | 两轮差动 |
...
传感器安装位置的pos数据表示为:
数据域 | 类型 | 描述 |
---|---|---|
X轴向距离 | s32 | 传感器中心距离外部系统中心的X轴向距离,Q8定点小数 |
Y轴向距离 | s32 | 传感器中心距离外部系统中心的Y轴向距离,Q8定点小数 |
Z轴向距离 | s32 | 传感器中心距离外部系统中心的Z轴向距离,Q8定点小数 |
角度 | u32 | 传感器中心跟外部系统中心点的逆时针夹角,Q8定点小数 |
...
外部系统配置获取请求(GET_BINARY_CONF)
这是上述0x20指令的升级指令,SLAMWARE CORE模块会优先使用该指令获取外部系统的配置信息,如果外部系统返回Not Core模块会优先使用该指令获取外部系统的配置信息,如果外部系统返回Not Support的话才会选择去调用0x20指令。
这个指令相对于0x20指令来说提供了更多的功能,如雷达安装位置的配置等。
...
请求数据包 | ||||||
---|---|---|---|---|---|---|
命令代码 | 负载数据 | |||||
0x21 |
...
- 应答数据包:
...
无 | ||||||
应答数据包 | ||||||
---|---|---|---|---|---|---|
应答代码 | 负载数据 | |||||
<OK> | 外部系统配置数据(u8*n) |
外部系统的配置数据由SDK中所附的Slamware Configuration Tool自动生成。只需将生成的.c文件加入到工程项目中,将其中的slamware_config变量作为外部系统配置数据字段数据即可。
注:当使用0x21 Binary Config指令配置时,请将 0x20底盘配置指令中的所有传感器数据设置为0。
...
Note | ||
---|---|---|
| ||
当使用0x21 Binary Config指令配置时,请将 0x20底盘配置指令中的所有传感器数据设置为0。 |
...
外部系统状态获取请求(GET_BASE_STATUS)
SLAMWARE CORE室内定位导航模块在准备好后会一直发送外部系统连接请求确认外部系统已正常工作。直到外部系统响应此请求后SLAMWARE CORE才会开始正常工作。SLAMWARE CORE正常工作后将不断轮询获取外部系统的状态,外部系统应当在规定的时间内给予答复。否则SLAMWARE CORE将认为外部系统断开连接。
...