turtlebot3-burger_150.png
turtlebot3-waffle-pi_150.png
turtlebot3-arm_150.png
walking-y2_150.png
turbot3-multi_150.png
turbot3-dl-ros1_150.png
turbot3-ai.png
turbot3-dl-ros2_150.png
turbot3-slam_150.png
turbot3-arm_150.png
turtlebot4-lite_150.png
turtlebot4-pro_150.png
turbot4-dl_150.png
turbot4-ai_150.png
aidriving-racebot_150.png
aidriving-autodrive_150.png
turtlebot-arm_150.png
openmanipulator-x_150.png
Home » crazyflie开发笔记 » crazyflie开发笔记-CRTP 实时通信协议

crazyflie开发笔记-CRTP 实时通信协议

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号

说明:

  • 介绍Crazyflie的CRTP实时通信协议的相关内容

介绍:

  • CRTP通信包 英文参考:http://wiki.bitcraze.se/projects:crazyflie:firmware:comm_protocol CRTP是Crazyflie的通信协议(Crazy RealTime Protocol)。该协议分3层。

请输入图片描述

第一层:CRTP Link。负责在PC与Crazyflie之间传输数据包。主要处理包长度,包错误信息。 第二层:CRTP Packet handling。将数据包传递给相应的飞行器子系统和PC控制软件。 第三层:Application/ports。代表发送和接受数据包的相应子系统。

  • 数据通道 CRTP Link层对应的数据通道:

请输入图片描述

  • 数据端口
当前端口分配:

请输入图片描述 - 关于console数据端口:

英文参考:http://wiki.bitcraze.se/projects:crazyflie:firmware:console
  Console 采用consoleprintf函数可以将调试信息输出到PC端。
  Console端口用于Crazyflie飞行器向PC机单向打印信息,采用consoleprintf函数。飞行器端的console缓存长度为31个字节(0-30),当以下任一条件满足则发送。
    - 输出缓存满31字节,字符串则自动发送到PC机;
    - 字符串带\n或者\r,也触发字符串发送;
    - 调用flush命令也会发送。

- 关于Commander数据端口
英文参考:http://wiki.bitcraze.se/projects:crazyflie:crtp:commander
Commander端口,用来发送roll\pitch\yaw\thrust控制指令。一旦通信连接建立,这些roll\pitch\yaw\thrust数据包将被发送,这些值将会不断更新。
![请输入图片描述][4]

- 关于LOG数据端口
 英文参考:http://wiki.bitcraze.se/projects:crazyflie:firmware:log#communication_protocol
 LOG数据端口就是用来在Crazyflie飞行期间,实时将log数据传回PC端显示。每一个日志变量都属于一个group组,并有一个name名字。

请输入图片描述 在log.h源码中,日志变量通过一系列宏指令来定义。所有的日志变量都被定义在一个log group组里,例如:

LOG_GROUP_START(stabilizer)
LOG_ADD(LOG_FLOAT, roll, &eulerRollActual)
LOG_ADD(LOG_FLOAT, pitch, &eulerPitchActual)
LOG_ADD(LOG_FLOAT, yaw, &eulerYawActual)
LOG_GROUP_STOP(stabilizer)

请输入图片描述

日志变量的变量类型,列举如下:

请输入图片描述

  • CRTP通信包的结构
CRTP数据包,由一个8-bit header头,和0-30数据字节组成。

请输入图片描述 目标数据端口,指的是通信子系统。通信子系统可以是Console、Parameters、Commander、Log、Client-side debugging、Link layer等等。

  • 物理接口层
下面所讲述的数据通信包适用于有线和无线传输。但是数据包大小为31字节,所以无线传输时最好将所有数据能够完整放在一个数据包以内传输。

对于无线传输接口,会增加额外的CRC数据头。对于串口的参数配置为,波特率115200,8N1。CRTP数据包格式如下。

请输入图片描述 进一步的解释如下: 请输入图片描述

举例如下:
例1:Commander命令:
0xaa 0xaa 0x30 0x0e 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x3e
其中:0x30表示Commander命令;0x0e表示数据长度为14字节。

例2:数据链路ping指令(类似以太网ping指令)
-->   0xaa 0xaa 0xf0 0x01 0x01 0xf2     # Sent to the copter  发往copter飞行器
<--   0xaa 0xaa 0xf0 0x01 0x01 0xf2     # Received from the copter 接收自飞行器
其中0xf0表示用于控制和访问通信链路层的link layer数据端口命令。0x01表示数据长度1个字节。

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号


标签: none