源:Crazyflie笔记五: CRTP 实时通信协议(一)

这里详细介绍了 Crazyflie 的 CRTP实时通信协议的相关内容,由于内容很长,分几篇博文来讲述。这里是第一节内容。欢迎交流:30175224@qq.com。新浪长沙@WalkAnt,转载本博客文章,请注明出处,谢谢。

7.1 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。代表发送和接受数据包的相应子系统。

1、数据通道

CRTP Link层对应的数据通道:

UART link

主要用于早期开发。

USB link

micro USB端口。

radio link

主要使用2.4 GHz NordicSemi的nRF24L01芯片。

2、数据端口

当前端口分配:

端口号

Port

数据端口

用途

0

Console

Console 采用consoleprintf函数可以将调试信息输出到PC端。

2

Parameters

读写Crazyflie参数,这些参数在源码中用宏来表示。

3

Commander

发送roll\pitch\yaw\thrust控制指令。

5

Log

设置日志变量,这些日志变量将会以指定的周期发送。日志变量在源码中用宏来表示。

14

Client-side debugging

用于调试PC端UI界面程序,只针对Crazyflie Python API。

15

Link layer

用于控制和访问通信链路层

        A)       关于console数据端口:

英文参考:http://wiki.bitcraze.se/projects:crazyflie:firmware:console

Console 采用consoleprintf函数可以将调试信息输出到PC端。

Console端口用于Crazyflie飞行器向PC机单向打印信息,采用consoleprintf函数。飞行器端的console缓存长度为31个字节(0-30),当以下任一条件满足则发送。

1)输出缓存满31字节,字符串则自动发送到PC机;

2)字符串带\n或者\r,也触发字符串发送;

3)调用flush命令也会发送。

        B)       关于Commander数据端口

英文参考:http://wiki.bitcraze.se/projects:crazyflie:crtp:commander

Commander端口,用来发送roll\pitch\yaw\thrust控制指令。一旦通信连接建立,这些roll\pitch\yaw\thrust数据包将被发送,这些值将会不断更新。

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值

        C)       关于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)

用法

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通信包的结构

CRTP数据包,由一个8-bit header头,和0-30数据字节组成。

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

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

4、物理接口层

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

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

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长度)

DATA 0

DATA1

DATA30

Cksum 校验码

进一步的解释如下:

0xAA

0xAA

Header

数据头

Length

数据长度

Data0…………………….Data30

Cksum

举例如下:

例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个字节。

关于Crazyflie笔记的其他文章,请参考http://blog.sina.com.cn/antinformation

Crazyflie笔记五: CRTP 实时通信协议(一)(转)的更多相关文章

  1. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  2. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  3. 《MFC游戏开发》笔记五 定时器和简单动画

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...

  4. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  5. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  9. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

随机推荐

  1. 最短路径问题/Spfa

    题目链接 题目描述 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线, 则输出花费最少的. 最后一行是两个数 s,t;起 ...

  2. Android中图片占用内存的计算

    Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html   在Android开发中,我现在发现很多人还不 ...

  3. Jdk1.7环境变量的配置

    在"系统属性——高级——环境变量——系统变量"中新建如下变量: 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0_03  (即jdk ...

  4. Vector2.Angle 的 bug

    获取角度 ,官方提供了 Vector2.Angle 来得值,他的值是在 0  ,180之间 原始代码是 public static float Angle(Vector3 from, Vector3 ...

  5. POJ 2186 Popular Cows tarjan缩点算法

    题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...

  6. android sql Cursor

    Cursor 是每行的集合. 使用 moveToFirst() 定位第一行. 你必须知道每一列的名称.你必须知道每一列的数据类型.Cursor 是一个随机的数据源. 所有的数据都是通过下标取得. Cu ...

  7. HDU - 1702 ACboy needs your help again!(栈和队列)

    Description ACboy was kidnapped!! he miss his mother very much and is very scare now.You can't image ...

  8. USACO Section 1.3 Ski Course Design 解题报告

    题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...

  9. 【转载】linux环境下为firefox/chrome浏览器安装flash player

    本文转载自 http://blog.sina.com.cn/s/blog_6ad624380102v1xf.html     firefox安装flash player的方法: 先到adobe网站上下 ...

  10. html5中拨打电话代码

    <a href="tel:18600000000">给我打电话</a>   <a href="sms:18600000000"&g ...