kobuki node和kobuki 底盘framwork通信通过串口/dev/kobuki(默认情况下),分析下kobuki驱动通信的规范,就可以清楚的明白kobuki地盘framwork做了什么工作。再结合kobuki node订阅和发布的topics,就可以清楚知道kobuki node做了什么工作。
通信分成两种:命令(node->framwork)和反馈(node<-framwork);
通信方式serial.write("/dev/kobuki",xxxxxxx);和serial.read("/dev/kobuki",xxxxxxx);
先简单介绍下通信数据结构:命令和反馈的结构是一样的
| Name | Header 0 | Header 1 | Length | Payload | Checksum |
|---|---|---|---|---|---|
| Size | 1 Byte | 1 Byte | 1 Byte | N Bytes | 1 Byte |
| Description | 0xAA (Fixed) |
0x55 (Fixed) |
Size of payload in bytes | Described below | XOR'ed value of every bytes of bytesream except headers |
| Payload | ||||
| Sub-Payload 0 | Sub-Payload 1 | Sub-Payload 2 | ... | Sub-Payload N-1 |
Sub-Payload:
| Name | Header | Length | Data |
|---|---|---|---|
| Size | 1 Byte | 1 Byte | N Byte(s) |
| Description | Predefined Identifier | Size of data in byte(s) | Described below |
Checksum:校验位
总览:
| Headers | Length | Payload | Checksum | |||||
| Header 0 | Header 1 | Sub-Payload 0 | Sub-Payload 1 | Sub-Payload 2 | ... | Sub-Payload N-1 | ||
1.命令格式:
命令ID
| ID | Name | Description |
|---|---|---|
| 1 | Base Control | 控制轮胎电机 |
| 2 | Reserved | |
| 3 | Sound | 播放用户自定义声音 |
| 4 | Sound Sequence | 播放预定义的声音 |
| 5 | Reserved | |
| 6 | Reserved | |
| 7 | Reserved | |
| 8 | Reserved | |
| 9 | Request Extra | 请求额外的信息 |
| 10 | Reserved | |
| 11 | Reserved | |
| 12 | General Purpose Output | 控制一般用途的输出 |
| 13 | Set Controller Gain | 设置轮胎速度控制器的PID增益 |
| 14 | Get Controller Gain | 请求当前轮胎速度控制器的PID增益 |
1.1 Base Control
向固件传递的是两个值:速度和半径,格式如下:
| Name | Size | Value | Value in Hex | Description | |
|---|---|---|---|---|---|
| Header | Identifier | 1 | 1 | 0x01 | Fixed |
| Length | Size of data field | 1 | 4 | 0x04 | Fixed |
| Data | Speed | 2 | in mm/s | ||
| Radius | 2 | in mm |
其中速度和半径的计算公式:
| Motion | Speed(mm/s) | Radius(mm) |
|---|---|---|
| Pure Translation | v | 0 |
| Pure Rotation | wi) * bii) / 2 | 1 |
| Translation + Rotation | (radius + bii) / 2)× wi), if radius > 1 (radius - bii) / 2)* wi) , if radius < -1 |
v/w |
v:传入kobuki driver的线速度
w:传入kobuki driver的的旋转角速度 单位:每秒多少弧度,rad/s
b:轴距
举例说明:w为弧度每秒,根据数学公式,弧长 = 弧度×半径,(不明白的去百度上搜,我以前把w当成角度/s,结果怎么看公式都看不明白,后来当成弧度/s,这才看明白)
弧长/s = v(速度) = w(弧度/s)×半径 ->randius = v/w -> v = randius * w
以下图为例,robot往左前方运动,radius为左轮到原点的距离,而传入的speed为轴中心的速度。轴中心距左轮的距离为b/2,所以轴中心距园点的半径实际为(radius+b/2),
故,轴中心的速度为(radius+b/2)×w
1.2 Sound
播放自定义声音,在固件中实现,在kobuki driver中没有实现
| Name | Size | Value | Value in Hex | Description | |
|---|---|---|---|---|---|
| Header | Identifier | 1 | 3 | 0x03 | Fixed |

本文详细解析了Kobuki底盘通信规范,包括命令(node->framework)和反馈(node<-framework)的方式,重点介绍了速度和半径的计算公式。Kobuki驱动通过串口与framework进行交互,并提供了播放声音、请求硬件信息等功能。反馈数据以50Hz的频率周期发送,涵盖Docking IR、Inertial Sensor、Cliff等多个传感器数据。
最低0.47元/天 解锁文章
1304

被折叠的 条评论
为什么被折叠?



