14 Crtp Protocol Library - Cflib
一、cflib
cflib是一个基于CRTP协议的通信协议包,基于python开发,通过调用函数接口与Crazyflie实现通信.ESPlane完整移植了Crazyflie的CRTP协议,因此也能使用该软件包进行开发.
二、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/cflibNote: 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中变量的命名规则
所有的param变量和log变量遵守同一个命名结构:group.name
名字总长度不能超过28个字符
六、一般工作流程
1. 初始化drivers,搜索所有可以使用的底层接口
2. 设置回调函数
注册回调函数:
3. 查找和链接Crazyflie
查找能够被链接上的Crazyflie:
使用Crazyflie对象打开和关闭通信链接
4. 发送控制命令
七、Parameters系统设计
param库用于读取和设置固件运行时参数,跟log不一样的是,这里被用来操作固件中不经常改动的参数.该库并不连续的更新获取到的param值,当每次修改参数时,固件会返回更新过的值.
使用过程:
注册参数更新时的回调函数 parameter updated callbacks
链接ESPlane,获取parameter Table of content (TOC)
请求更新所有参数
library收到更新值依次调用注册过的回调函数
修改参数,参数将被发送到固件
每次修改参数后,注册在当前参数的回调函数将会被调用
八、logging系统设计
该库支持实时logging程序中的变量.可以创建多个logblock(或称为logconf),每个block包含一组变量和logging频率.一旦该logblock被发送到固件,固件将按照配置的频率自动发回数据.
使用过程:
1.链接ESPlane,获取Table of content (TOC)
2.配置一个logblock,设置block包含的变量和获取周期
3.在检查配置是否有效之后,为应用程序中的数据设置回调并启动日志监视
4.固件按照指定的获取周期向上位机发送参数数据
注意事项
crtp协议数据包最大为32bytes,也就意味着log block中变量个数不能太多
发送周期最小10ms
API LogConfig
API Crazyflie add_config(logconf) """Add a log configuration to the logging framework.
最后更新于
这有帮助吗?