kobuki驱动通信规范

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

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:校验位

unsigned int packet_size(buffer.size());
unsigned char cs(0);
for ( unsigned int i = 2; i < packet_size; i++)
{
cs ^= buffer[i];
}
return cs ? false : true;


总览:

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

velocity_representation.png
Velocity Representation


1.2 Sound

播放自定义声音,在固件中实现,在kobuki driver中没有实现

  Name Size Value Value in Hex Description
Header
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值