14 Crtp Protocol Library - Cflib

一、cflib

cflib是一个基于CRTP协议的通信协议包,基于python开发,通过调用函数接口与Crazyflie实现通信.ESPlane完整移植了Crazyflie的CRTP协议,因此也能使用该软件包进行开发.

二、cflib安装过程&&解决依赖问题

cflib安装过程&&解决依赖问题

1. Fork the cflib
2. Clone the cflib, git clone git@github.com:YOUR-USERNAME/crazyflie-lib-python.git
3. Install the cflib in editable mode, pip install -e path/to/cflib

Note: If you are developing for the [cfclient]you must use python3. On Ubuntu (16.04, 18.08) use pip3 instead of pip.

cflib卸载过程

1. Uninstall the cflib if you don’t want it any more, pip uninstall cflib

三、cflib库设计架构

该库依赖事件回调函数机制.函数调用后会立即返回,当事件发生后,会调用回调函数.该库不包含任何可保持应用程序运行的线程或锁.Functions like open_link will return immediately, and the callback connected will be called when the link is opened.

  • Callbacks

    所有的回调函数使用Caller 类,包含了以下方法

    add_callback(cb)
        """ Register cb as a new callback. Will not register duplicates. """

    remove_callback(cb)
        """ Un-register cb from the callbacks """

    call(*args)
        """ Call the callbacks registered with the arguments args """

四、修改底层接口

设计上支持 radio,udp, serial, usb,等多种底层接口对接上层crtp协议,目前只有原生的radio通信方式功能比较完善,其他方式需要修改xxxxdriver.py文件.上层应用程序通过在连接函数中输入不同的URI来选择底层接口.ESPlane项目使用WiFi通信,因此修改了udpdriver.py与硬件对接.

五、cflib中变量的命名规则

  1. 所有的param变量和log变量遵守同一个命名结构:group.name

  2. 名字总长度不能超过28个字符

六、一般工作流程

1. 初始化drivers,搜索所有可以使用的底层接口

2. 设置回调函数

注册回调函数:

3. 查找和链接Crazyflie

查找能够被链接上的Crazyflie:

使用Crazyflie对象打开和关闭通信链接

4. 发送控制命令

七、Parameters系统设计

param库用于读取和设置固件运行时参数,跟log不一样的是,这里被用来操作固件中不经常改动的参数.该库并不连续的更新获取到的param值,当每次修改参数时,固件会返回更新过的值.

使用过程:

  1. 注册参数更新时的回调函数 parameter updated callbacks

  2. 链接ESPlane,获取parameter Table of content (TOC)

  3. 请求更新所有参数

  4. library收到更新值依次调用注册过的回调函数

  5. 修改参数,参数将被发送到固件

  1. 每次修改参数后,注册在当前参数的回调函数将会被调用

八、logging系统设计

该库支持实时logging程序中的变量.可以创建多个logblock(或称为logconf),每个block包含一组变量和logging频率.一旦该logblock被发送到固件,固件将按照配置的频率自动发回数据.

使用过程:

1.链接ESPlane,获取Table of content (TOC)

2.配置一个logblock,设置block包含的变量和获取周期

3.在检查配置是否有效之后,为应用程序中的数据设置回调并启动日志监视

4.固件按照指定的获取周期向上位机发送参数数据

注意事项

  1. crtp协议数据包最大为32bytes,也就意味着log block中变量个数不能太多

  2. 发送周期最小10ms

API LogConfig

API Crazyflie add_config(logconf) """Add a log configuration to the logging framework.

最后更新于

这有帮助吗?