原文地址:http://blog.sina.com.cn/s/blog_402c071e0102v7py.html
这里详细介绍了 Crazyflie 的 CRTP实时通信协议的相关内容,由于内容很长,分几篇博文来讲述。这里是第一节内容。欢迎交流:30175224@qq.com。新浪长沙@WalkAnt,转载本博客文章,请注明出处,谢谢。
7.1 CRTP通信包
1、数据通道
UART link | 主要用于早期开发。 |
USB link | micro USB端口。 |
radio link | 主要使用2.4 GHz NordicSemi的nRF24L01芯片。 |
2、数据端口
端口号 Port | 数据端口 | 用途 |
0 | Console 采用consoleprintf函数可以将调试信息输出到PC端。 | |
2 | 读写Crazyflie参数,这些参数在源码中用宏来表示。 | |
3 | 发送roll\pitch\yaw\thrust控制指令。 | |
5 | 设置日志变量,这些日志变量将会以指定的周期发送。日志变量在源码中用宏来表示。 | |
14 | 用于调试PC端UI界面程序,只针对Crazyflie Python API。 | |
15 | 用于控制和访问通信链路层 |
Name | Byte | Size | Type | Comment |
Roll | 0-3 | 4 | float | Roll值 |
Pitch | 4-7 | 4 | float | Pitch值 |
Yaw | 8-11 | 4 | float | Yaw值 |
Thrust | 12-13 | 2 | uint16_t | Thrust值 |
宏 | 用法 |
LOG_GROUP_START(grp_name) | 开始一个log group的定义,其中grp_name为组名 |
LOG_GROUP_STOP(grp_name) | 停止一个log group的定义 |
LOG_ADD(type, name, address) | 添加一个log变量。 type 是变量类型; name 是发送到地面站的变量名字; address 是源码中真实变量的地址。 |
类型定义 | 对应的C99变量类型 | 说明 |
LOG_UINT8 | uint8_t | |
LOG_UINT16 | uint16_t | |
LOG_UINT32 | uint32_t | |
LOG_INT8 | int8_t | |
LOG_INT16 | int16_t | |
LOG_INT32 | int32_t | |
LOG_FLOAT | float | IEEE 754 binary32 (single precision float) |
LOG_FP16 | N/A? | IEEE 754 binary16, intended for log report only (not in memory) |
3、CRTP通信包的结构
bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
目标数据端口 Port 例:Log=5; Commander= 3 ; Parameters=2 | Res 保留 | 目标通道 Channel | |||||
DATA 0 | |||||||
DATA1 | |||||||
… | |||||||
… | |||||||
DATA30 |
4、物理接口层
bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
0xAA | |||||||
0xAA | |||||||
目标数据端口 Port 例:Log=5; Commander= 3 ; Parameters=2 | Res 保留 | 目标通道 Channel | |||||
Packet length | |||||||
DATA 0 | |||||||
DATA1 | |||||||
… | |||||||
… | |||||||
DATA30 | |||||||
Cksum 校验码 |
0xAA | 0xAA | Header 数据头 | Length 数据长度 | Data0…………………….Data30 | Cksum |