转自:http://www.crazepony.com/wiki/comm-protocol.html

作者:nieyong

通信协议指的是遥控端和主控之间交互数据的封装,是一种自行约定的数据封装格式。我们采用的是Crazyflie项目中定义的CRTP协议。

遥控端和主控之间数据的交互,物理层可以有下面几种方式:

  • 单片2.4G无线射频收发芯片,通过SPI接口和MCU连接
  • 蓝牙2.1透传模块,通过串口UART和MCU连接
  • 蓝牙4.0低功耗BLE透传模块,通过串口UART和MCU连接

这几种不同的物理层通信方式在同一时刻只能够选择其中的一种。并且蓝牙2.1和蓝牙BLE根据安装的透传模块不一样进行选择。

ESky Protocol

在上面示意图的的通信方式选择上,最左边为EskyLink,对应使用宏USE_ESKYLINK来开启是否选择该种链接方式。

# Make copter firmware to be used with the bootloader, CF controlled with eSky ET6i transmitter$ make clean && make USE_ESKYLINK=1 CLOAD=1 all

所谓的Esky Protocol,其实就是ESky公司遥控器使用的通信协议。所以如果选用这种通信方式,那么可以使用ESky航模公司的遥控器进行控制。Crazyflie官网支持ESKY ET6I Remote Control遥控器。

关于ESky公司的2.4G遥控器设备的通信协议,参考ArduinoRCLib项目中的描述:

The Esky 2.4 GHz equipment uses the Nordic NRF2401AG in both the transmitter and receiver. A compatible alternative to this chip is the NRF24L01+ (which is widely available).

ESky相关协议内容暂时不研究。

串口

使用串口作为物理层指的是蓝牙透传模块(包括蓝牙2.1或者蓝牙4.0 BLE模块)。串口配置为115200 8N1,收发异步。

一个可供主控解析的数据包格式,约定如下:

  7   6   5   4   3   2   1   0+---+---+---+---+---+---+---+---+|     Port      |  Res. | Chan. | +---+---+---+---+---+---+---+---+|            DATA 0             |+---+---+---+---+---+---+---+---+:   :   :   :   :   :   :   :   :+---+---+---+---+---+---+---+---+|            DATA 31            |+---+---+---+---+---+---+---+---+

开始为一个字节的头,该字节中包括port字段,reserve字段,channel字段。紧跟着该自己,就是0-31个字节的数据,数据的长度是任意的。

头字节中的port字段用来区分该数据包的功能,常见的包括下面几个

  • 0x0 : console
  • 0x2 : parameter,表示后面的数据是系统的参数
  • 0x3 : commander,操作命令,控制飞机的飞行,包括pitch/yaw/roll等
  • ……

对于串口传输,在上面数据包的最前面需要加上两个字节0xaaaa的起始数据,在最后加上一个字节的checksum数据。格式如下:

  7   6   5   4   3   2   1   0+---+---+---+---+---+---+---+---+|             0xAA              |+---+---+---+---+---+---+---+---+|             0xAA              |+---+---+---+---+---+---+---+---+|      Port     |  Res  | Chan. |+---+---+---+---+---+---+---+---+|         Packet length         |+---+---+---+---+---+---+---+---+|            DATA 0             |+---+---+---+---+---+---+---+---+:   :   :   :   :   :   :   :   :+---+---+---+---+---+---+---+---+|            DATA 30            |+---+---+---+---+---+---+---+---+|            Cksum              |+---+---+---+---+---+---+---+---++--------+--------+--------+--------+--------+--....--+--------+|  0xAA  |  0xAA  | Header | Length | Data0  | Packet | Cksum  |+--------+--------+--------+--------+--------+--....--+--------+

注意,紧跟在头后面的第一个data字节,表示后面数据的长度。

操作命令

操作命令是指用于控制飞行器起飞,前后左右运动的命令,英文commander。操控命令是遥控器最基本,也是最常用的命令。数据包头中port字段为0x3表示操作命令。Crazyflie操作数据格式约定如下。

+-------+-------+-------+-------+
| ROLL  | PITCH |  YAW  |THRUST |
+-------+-------+-------+-------+
0       4       8       12      14 bytes

操作数据一共14个字节,前12个字节分别表示Roll,Pitch,Yaw的值,每个值使用4个字节。后2个字节表示Thrust的值,使用2个字节。

所以,使用串口发送的一个操作命令示例如下:

0xaa 0xaa 0x30 0x0e 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x3e

转载于:https://www.cnblogs.com/sky-heaven/p/5256387.html

CrazePony飞行器--通信部分介绍【转】相关推荐

  1. Binder通信机制介绍

    1.Binder通信机制介绍 这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Android会另起炉灶,采用Binder.接着,会根据 Binder的机制,去理解什么是Serv ...

  2. Java 网络通信必备之socket通信基本原理介绍

    Java socket通信基本原理介绍 Java socket通信在不断的进行相关代码的开发,下面我们就看看如何才能更好的使用有关技术为我们的编程工作带来一定的帮助. 作者:佚名来源:互联网|2010 ...

  3. FlexRay汽车通信总线介绍及测试环境

    FlexRay汽车通信总线介绍及测试环境 原文链接:http://www.ulantec.cn/a/xinwen/xingyezixun/8.html 综述 FlexRay通信总线是由多个汽车制造商和 ...

  4. 【SemiDrive源码分析】【X9芯片启动流程】21 - MailBox 核间通信机制介绍(代码分析篇)之 Mailbox for Linux 篇

    [SemiDrive源码分析][X9芯片启动流程]21 - MailBox 核间通信机制介绍(代码分析篇)之 Mailbox for Linux 篇 一.Mailbox for Linux 驱动框架分 ...

  5. 【SemiDrive源码分析】【X9芯片启动流程】20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇

    [SemiDrive源码分析][X9芯片启动流程]20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇 一.Mailbox for RTOS 源码分析 1. ...

  6. Java-互联网通信流程介绍【基础】

    Java-互联网通信流程介绍 一.基本概念 1.什么是互联网通信? 2.互联网通信角色的分类? 3.互联网通信模型(重点) ①C/S通信模型 ①B/S通信模型(重点) 4.共享资源文件 5.开发人员在 ...

  7. 【SemiDrive源码分析】【X9芯片启动流程】19 - MailBox 核间通信机制介绍(理论篇)

    [SemiDrive源码分析][X9芯片启动流程]19 - MailBox 核间通信机制介绍(理论篇) 一.核间通信 二.核间通信软件架构 三.Mailbox 设备驱动 3.1 Mailbox for ...

  8. 串口通信基本原理介绍

    串口通信基本原理介绍 一. 什么是串口通信? 串行通信是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式.尽管串行通信的速度比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况 ...

  9. 【SemiDrive源码分析】【X9芯片启动流程】23 - MailBox 核间通信机制介绍(代码分析篇)之 RPMSG-IPCC Kernel 篇

    [SemiDrive源码分析][X9芯片启动流程]23 - MailBox 核间通信机制介绍(代码分析篇)之 RPMSG-IPCC Kernel 篇 一.RPMSG 接口 1.1 Linux Kern ...

最新文章

  1. 这所211大学,实力强悍,适合“踩线生”报考!
  2. 基于libvlc和wxWidgets的简单播放器代码阅读
  3. apache php 调优_Apache的性能优化(二)
  4. 【机器学习算法专题(蓄力计划)】十五、机器学习中玄乎的最大熵原理及模型
  5. C语言程序练习- L1-010 比较大小 (10分)
  6. iOS开发Objective-C基础之──多态
  7. 检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败
  8. 与计算机密度密切相关的是,全国计算机二级MS考前冲刺试题及答案2016
  9. 让没有连续TabOrder的Edit连续获得焦点 [精华]
  10. django -orm操作总结
  11. paip.提升性能---首页性能加快解决方案
  12. Lab: Username enumeration via different responses:通过不同的响应来验证用户名是否正确复盘
  13. PSP开发简明教程(3)
  14. java中文件读取方式的顺序_java中读取文件的方式
  15. Java前端和后端的区别?
  16. 3.4 Linux常用的转义字符
  17. V3商家支付到零钱+商家支付到零钱状态查询(100免密PHP版)
  18. ArcGIS基础实验操作100例--实验61数据框投影变换
  19. UML组件视图、部署图、包图简要说明
  20. Unity 材质球参数修改

热门文章

  1. wowza官方测试报告
  2. 制作一个简易的QQ×××
  3. 聊聊spring cloud的LoadBalancerAutoConfiguration
  4. EqualLogic控制器算法研究一:基本管理
  5. python中的enumerate函数用于遍历序列中的元素以及它们的下标
  6. maven引入本地jar包
  7. SQL语句 - 嵌套查询
  8. [译]Mimic, 轻量级Web Service测试桩
  9. C#的ARRAYLIST 和HASHTABLE示例代码
  10. 居住7年未交一分钱天然气使用费 女房主替租户偿还近4万元欠款