Crazyflie笔记七: PC端 Python API 说明

原文地址:http://blog.sina.com.cn/s/blog_402c071e0102v810.html


这里详细介绍了 Crazyflie 的 PC 客户端 Crazyflie Python API 的使用说明,通过使用这些 API,就可以自定义一些飞行模式控制飞行器完成一些个性化的任务了。相信一定能帮到初学者。欢迎交流,30175224@qq.com。新浪长沙@WalkAnt,转载本博客文章,请注明出处,谢谢。

6.5 Crazyflie Python API介绍

        英文参考:http://wiki.bitcraze.se/doc:crazyflie:api:python:index

        Python API对Crazyflie的高级控制功能进行了封装。

        Source insight 对 python 的支持,需要导入配置文件: Python.CLF:

        详见文章:http://blog.163.com/bruce_wen/blog/static/13908242220111011113634768/

函数库结构

        函数库是异步的,主要基于对事件的回调。比如当调用open_link函数后,函数会立刻返回,等到连接建立后,回调函数将会被调用(执行)。整个函数库不包括任何线程和互锁,这样不会阻塞应用的运行。

统一资源标识(URI)

        所有通信链接都由URI标识。标识格式如下:

  • InterfaceType://InterfaceId/InterfaceChannel/InterfaceSpeed
  • 标识接口类型:// 接口ID接口通道接口速度

        当前只有 radio 和 debug用到接口了。以后 udp、serial、usb等等都会如此。以下是radio和debug的例子:

        例子1:

        radio接口:Crazyradio USB接口ID 0,通信通道10,传输速率250kbps;

        表达为:   radio://0/10/250K

        例子2:

        Debug接口:接口ID 0, 通道1

        表达为:   debug://0/1

回调 Callbacks

        所有的回调都使用Caller类来处理。

        如下:

    add_callback(cb)
        """注册 cb 为一个新的回调,不能重复注册. """
    remove_callback(cb)
        """注册 cb 为一个新的回调,不能重复注册"""
    call(*args)
        """调用注册过的带args参数的回调"""

调试驱动DebugDriver

        函数库包含一个特别的link driver,名为DebugDriver。这个驱动将模拟一个Crazyflie,被用来对UI和函数库进行测试。一般地,这个对用户是隐藏的,除非在配置文件里对其进行“使能”。这个驱动支持:

        1、连接一个下载参数TOC和日志TOC;

        2、设置日志配置和回发伪数据;

        3、设置和读取参数;

        4、Bootloading。

        DebugDriver会返回一系列不同的 URI(统一资源标识),这里包含一系列不同的函数,比如:总是返回一个随机的 TOC CRC校验,总是触发 TOC 下载或者触发连接中断。DebugDriver·同时支持随机延时的回传数据,以触发函数库的随机重发。

初始化link driver

        在函数库能被使用之前,link driver需要先初始化。Link driver的初始化将会搜寻可用的驱动,并且实例化他们。例如:

    init_drivers(enable_debug_driver=False)
       """搜寻并初始化link drivers. 如果 enable_debug_driver 为真,那么DebugDriver将也会启用."""

回调函数的具体实现Connection- and link-callbacks

        对link 和 connection 的操作,将直接返回。一旦有事件发生,将调用下面的回调对事件进行处理。回调如下:

            # 无论什么原因,一旦断开连接,下面的事件将触发

            disconnected = Caller()

            # 在数据丢包(间歇性连接)时被调用

            connection_lost = Caller()

            # 当一个新的link建立后,收到第一个数据包时被调用

            link_established = Caller()

            # 当有连接请求时,被调用。

            connection_requested = Caller()

            # 当连接建立,且所有TOC数据已经被下载是被调用

            connected = Caller()

           # 连接建立失败时调用

           connection_failed = Caller()

            # 每接收一个数据包则触发调用

            packet_received = Caller()

            # 每发送一个数据包则触发调用

            packet_sent = Caller()

            # 当 link driver 更新连接信号质量时被调用

           link_quality_updated = Caller()

 

        针对以上回调声明,注册具体回调的方法,举例如下:

    crazyflie = Crazyflie()
    crazyflie.connected.add_callback(crazyflie_connected)

搜寻一个Crazyflie并建立连接

        我们要做的第一件事,就是搜寻Crazyflie。首先将会扫描所有可用的接口(当前只有debug和radio两个接口)。

        cflib.crtp.init_drivers()

        available = cflib.crtp.scan_interfaces()

        for i in available:

        print "Interface with URI [%s] found and name/comment [%s]" % (i[0], i[1])

 

        通过创建一个Crazyflie对象来打开和关闭一个通信链接(communication link)

        crazyflie = Crazyflie()

        crazyflie.connected.add_callback(crazyflie_connected)

        crazyflie.open_link("radio://0/10/250K")

 

        那么你可以按照以下办法再次关闭连接

        crazyflie.close_link()

发送控制命令

        控制命令,不同于参数(parameters),相反他有另外的API

            send_setpoint(roll, pitch, yaw, thrust):

        """发送一个新的控制点给飞行器,包括roll/pitch/yaw/thust。这些都是控制点的目标值。"""

        举例如下:

            roll    = 0.0

            pitch   = 0.0

           yawrate = 0

            thrust  = 0

            crazyflie.commander.send_setpoint(roll, pitch, yawrate, thrust)

        油门是整型数,返回10001到60000。命令发送后,将维持500ms时间。如果500ms后未收到新的命令,飞行器将切断动力。因此,你定时刷新这些值。一般我们每10ms刷新一次。这也帮助我们更精确的控制飞行。

 

关于日志,参数部分尚未写,关于TOC参数表,日志表等的说明,日后在另一篇博文中集中阐述。或者直接进入英文链接参考:http://wiki.bitcraze.se/doc:crazyflie:api:python:index


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Crazyflie 2.0是一款多功能飞行器开发平台,重量仅为27g,适合您的手掌。它的高级功能使其成为开发人员的理想选择,蓝牙LE功能使其可以轻松地从移动设备上飞行。它体积小,重量轻,非常适合室内使用,但您可以轻松地在房子上方盘旋,因为您可以将鼠标悬停在餐桌旁。设计为无焊接套件,Crazyflie 2.0可通过将电机连接到电路板框架而快速组装,随时可以飞行。 Crazyflie 2.0实物组成: Crazyflie 2.0支持多种无线电协议,可以从支持蓝牙LE的移动设备或使用Crazyradio或Crazyradio PA的计算机上使用。虽然从移动设备飞行很有效,但通过使用适用于Windows,Mac OSX和Linux的Python客户端将平台连接到计算机,可以解锁平台的真正威力。这使您可以完全使用所有扩展板,轻松修剪飞行参数,以图形方式记录数据和设置参数。当连接到计算机时,您还可以获得额外的好处,即能够使用任何具有至少4个模拟轴的游戏手柄或操纵杆进行飞行。该设备可以轻松映射到客户端内部。 Crazyflie 2.0特征: 耐用的设计 易于组装,无需焊接 支持具有自动检测功能的扩展板 支持从支持蓝牙LE的iOS和Android飞行,以及使用Crazyradio或Crazyradio PA从Windows / MacOSX / Linux飞行 使用Crazyradio PA测试了1公里以上的无线电范围LOS 无线固件更新 通过标准uUSB进行车载充电 双MCU架构,带有专用无线电/电源管理SoC,适用于高级应用 使用Crazyradio或Crazyradio PA与计算机一起使用,用户可以通过无线电实时记录/绘图/设置变量,并充分利用扩展板 技术规范: 机械规格: 重量:27克 尺寸(WxHxD):92x92x29mm(电机到电机,包括电机安装脚) 收音机规格: 使用Crazyradio PA测试20 dBm无线电放大器至> 1 km范围的LOS 支持iOS和Android客户端的蓝牙低功耗支持(在iOS 7.1+和Android 4.4+上测试) 收音机向后兼容原版CrazyflieCrazyradio 微控制器: STM32F405主要应用MCU(Cortex-M4,168MHz,192kb SRAM,1Mb闪存) nRF51822无线电和电源管理MCU(Cortex-M0,32Mhz,16kb SRAM,128kb闪存) uUSB连接器: 板载LiPo充电器,提供100mA,500mA和980mA模式 全速USB设备接口 部分USB OTG功能(Usb OTG存在但没有5V输出) IMU: 3轴陀螺仪(MPU-9250) 3轴加速度计(MPU-9250) 3轴磁力计(MPU-9250) 高精度压力传感器(LPS25H) 飞行规格: 飞行时间与库存电池:7分钟 库存电池冷却时间:40分钟 最大推荐有效载荷重量:15克 扩展连接器: VCC(3.0V,最大100mA) GND VCOM(未经调节的VBAT或VUSB,最大1A) VUSB(用于输入和输出) I2C(400kHz) SPI 2 x UART 用于SPI的4 x GPIO / CS 1线总线,用于扩展识别 2 x GPIO连接到nRF51 8KB EEPROM 可能感兴趣的项目设计: MyCrazyflie2.0飞控原理图/PCB工程文件,你值得拥有 说明: Crazyflie 2.0是一个开放项目,提供源代码和硬件设计并记录在案。该平台在设计时考虑了开发,实现了使开发更容易,更快速的功能,例如日志记录和实时参数设置以及无线固件更新。大多数项目的完整开发环境在虚拟机中可用,因此您无需安装任何工具链即可进入开发阶段。但是虚拟机也可以用于飞行。除了固件和软件项目之外,还有许多社区支持的API,用Java,Ruby,C / C ++,C#和Javascript编写。对于有兴趣进行更高级开发的人来说,有一个开发适配器套件,支持与Crazyflie 2.0上的两个MCU轻松连接JTAG / SWD。 固件和软件不断更新,增加了各种改进和新功能。该平台通过无线电和蓝牙LE支持无线固件更新,因此当发布新的新固件时,轻松更新它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值