Category Archives: Quadcopters
Crazyflie firmware(2)-Commander Framework
The Commander module 具体在crazyflie firmware的代码参考src/modules/src/commander.c。Crazyflie无人机的setpoints可以 set directly set by a python script using 电脑端的cflib/ cfclientor 手机端的app layer(下图中的蓝色blue pathways) set by the high-level commander module (下图中的紫色pathway) 上图中可以发现,High-level commander可以can be controlled remotely from the python library(从off-board的手机或者电脑端) or from inside the Crazyflie(从onboard的firmware)。 需要指出的是, the commander module会检查上一次接收到的setpoint是多久以前。如果很长时间(时长有常量COMMANDER_WDT_TIMEOUT_STABILIZE定义在commander.c)没有收到新的setpoint,那么就会把参考姿态角设置为0,以防止飞机失控。如果等了超过COMMANDER_WDT_TIMEOUT_SHUTDOWN的时间,那么a null setpoint就会给出,使得无人机关掉电机并着陆。如果你使用的是high level commander,以上的事情不会发生。 Setpoint structure setpoint的数据结构是定义在crazyflie firmware上的src/modules/interface/stabilizer_types.h中的变量setpoint_t。 有2层需要去控制,即 Position(X,Y,Z) Attitude(pitch, roll, yaw or…
Crazyflie firmware(4)-Controller
有了state estimation, Crazyflie就知道了 where it is,那么我们接下来要知道where it wants to go,这可以通过high level commander(作为crazyswarm project的部分实现)或者set-points(由地面站上的CFclient 给出)或者直接from scripts using Crazyflie python lib。具体关于Crazyflie无人机的动力学,可以参考Demystifying Drone Dynamics!。 针对Crazyflie的控制器,可以有多种,如下图: Cascaded PID controller 在Crazyflie的firmware上默认的控制器就是PID,上图中的第一个。 INDI Controller INDI控制器是 Incremental Nonlinear Dynamic Inversion控制器的缩写。这是一个很新的addition to the Crazyflie firmware。它是基于2016年发表于AIAA的Journal of Guidance, Control, and Dynamics的文章Adaptive incremental nonlinear dynamic inversion for attitude control of micro air vehicles而实现的。其中position controller还是和第一个Cascaded PID controller的一样。我们还没有完全test it…
Crazyflie firmware(3)-State estimation
在Crazyflie上有两种类型的state estimators: Complementary Filter Extended Kalman Filter Complementary Filter(CF) 该CF最初的输入为IMU上的gyroscope(测量角速度)和accelerator, 后面增加了 Zranger deck(The Z-ranger deck v2 uses a laser sensor to measure the distance to the ground and adds the possibility to fly with precise height control)测量的ToF distance(Time-of-Flight)。滤波器的输出为Crazyflie的姿态角(roll, pitch, yaw)和高度(Z轴的Altitude)。滤波器的输出可以供controller用,也用于manual control(手动操控飞行)。如果你对具体的代码实现感兴趣,可以去参看firmware上的两个C文件:estimator_complementary.c 以及sensfusion6.c。该complementary filter 为Crazyflie firmware上默认的state estimator。下图给出了该滤波器的架构。 Extended Kalman Filter 该滤波器比默认的complementary filter更加复杂,因为它可以接受更多的sensor inputs,both internal与external sensors。具体详细关于EKF,可以参考ETH的课程。 我们偏爱Kalman filter in…
Crazyflie firmware(1)-Position control
我们一直努力试图为Crazyflie 2.0开发a local positioning system, 我们现在完成了主要的两步:(1)improve the stabilizer code architecture, (2)move the position control code into the firmware. 从an external system获取position, 但是为了控制Crazyflie在desired position,我们依然需要去控制pitch, roll and yaw。之前,我们一直在an external computer(即在Crazyflie之外)跑控制算法,但是现在我们可以将该控制算法移到the Crazyflie itself上跑。该控制算法是一个简单的PID控制器,并且还可以继续改善,这项工作的主要目的是improve the architecture in this area。我们还没有在firmware上实现estimation of the position,但是现在这个architecture可以支持开发者进行该implementation。 我们的整体架构architecture如下: 上图架构中的Crazyflie上的sensors(传感器)有gyroscope, accelerometer and pressure sensor。我们未来可以加入更多,例如 position和altitude的测量 。 上图架构中的state estimator(状态估计器)利用传感器的测量值,尽可能准确地估计Crazyflie的状态。状态包括Crazyflie的姿态角 (roll, pitch, yaw), position和speed。 目前我们的state estimator有针对姿态角和高度。在不久的将来,将会估计完整的position。 上图架构中的commander会给出让Crazyflie跟踪的setpoint。目前是通过Crazyradio或者bluetooth从地面站上的CFclient对Crazyflie发送commander…
Crazyflie的开发
本文翻译自https://www.bitcraze.io/documentation/tutorials/getting-started-with-development/ 准备 一个组装好的crazyflie 一个crazyradio PA 装有Virtual Machine的电脑(主要是运行Crazyflie的PC client),具体在virtual machine或者Linux系统如何操作,请参考https://www.bitcraze.io/documentation/tutorials/getting-started-with-crazyflie-2-x/#inst-comp 在Ubuntu 20.04跑crazyflie client(一个GUI的应用程序) 在Linux系统上可以直接通过执行crazyflie-client-python源代码来运行crazyflie client,那么我们首先需要获取源代码: 其次安装python3, pip, pyqt5: 最后打开刚刚git clone的crazyflie-client-python源代码的路径,安装crazyflie client: 安装完成之后,继续保持在crazyflie-client-python源代码的路径下,启动crazyflie-client: python3 bin/cfclient 或者重启之后直接在terminal运行:
学习Crazyflie 2.X平台(4)
STEM drone bundle 包含了3个东西 Crazyfile 2.X清单中所有的东西[见学习Crazyflie 2.X平台(1)] 额外加一个Flow deck Crazyradio PA 安装flow deck: 拿到按照学习Crazyflie 2.X平台(1)安装好的无人机,将flow deck安装在下面[必须在下面],用long pin-headers将deck别上去。 安装python和cflib(以下只讲Ubuntu系统下的情况,tested on Ubuntu 16.04): 安装python3和pip: sudo apt-get install python3 python3-pip python3-usb idle3 安装Crazyflie Library: pip3 install cflib 为了可以使用Crazyradio,需要USB devices的access权限。那么我们需要跑以下命令来获取access权限。并且在跑完以下命令之后,需要将Crazyradio重插一下。 跑第一个飞行实验 我们需要跑以下的Python script要飞Crazyflie。一定要注意的就是如果python client是打开的,一定要与Crazyflie断开连接,因为Crazyradio只能支持同时跟一个program对话。如果python client还开着,刚跑python script是没作用的。 跑完以上代码,crazyflie会按照以上script的描述飞行,期望的输出应该是: STEM ranging bundle:基本跟刚才的bundle一样,就不翻译了
学习Crazyflie 2.X平台(3)
Loco Positioning System Loco Positioning System可以配置两种模式: Two Way Ranging(TWR)模式 Time Difference of Arrival(TDoA)模式 TWR模式的设置过程更加直接简单,加上TDoA模式可以通过TWR轻松切换过去,因此建议即使你想使用TDoA模式,优先考虑通过先进入TWR模式再切换至TDoA。为了解释anchor placements,我们有2个参考系统(reference systems): 6 anchors(主要为TWR模式) 8 anchors(主要为TDoA模式) 更新最新版的loco positioning firmware 为了使用能Loco Positioning System,我们需要: 安装相应的expansion deck:Loco positioning deck 更新最新版本的Crazyflie client 在Crazyflie client上,更新最新版本的firmware 准备anchors 确保已经在Crazyflie client上,更新最新版本的firmware; 确保配置好LPS(Loco Positioning System) nodes LPS配置工具,参见https://github.com/bitcraze/lps-tools 下载最新LPS node firmware——lps-node-firmware.dfu 更新LPS nodes 打开LPS配置工具 通过USB连接到电脑,并保持DFU按钮要一直按着,这样就可以启动LPS node的DFU mode In DFU mode, the…
学习Crazyflie 2.X平台(2)
扩展甲板 在按照学习Crazyflie 2.X平台(1)安装好的Crazyflie 2.X 上,有a flexible expansion port,可以让我们安装新的硬件上去,以便扩展新的功能 由于这个expansion port是上下两边都可以连上,因此可以同时attach两个deck 如何attach a deck 确保安装或者卸下任何甲板时,电源是断开的 在安装deck时,要注意哪面要向上,以及哪边朝前,deck上有标注,如下图所示: 如果要把deck安装在Crazyflie的上面,需要取下之前的电池支托板,新装的deck就可以卡住电池,如下图所示: 三种安装拓展甲板的方法 只装一个拓展deck: 装两个扩展deck,都在上面 装两个扩展deck,一个在上面,一个在下面
学习Crazyflie 2.X平台(1)
本文翻译自https://www.bitcraze.io/documentation/tutorials/getting-started-with-crazyflie-2-x/, 更多Crazyflie相关的tutorial请参见https://www.bitcraze.io/documentation/tutorials/ 组装之前的测试 Crazyflie 2.X芯片板在生产过程中已经被充分测试过,但是为了确保运输过程没有导致任何损害,还是需要在组装之前做测试 将Crazyflie 2.X芯片板用USB线连上电源。注意观察LED灯M1和M4, 如果M4会快速闪5次绿灯,则测试通过。如果M1灯快速闪5次红灯,则测试失败,去Bitcraze论坛解决方法,直到测试通过。 组装 注意drone的头在哪里,以及对应的各个propeller的转向 零件 一个Crazyflie 2.X c芯片板 with all components mounted 5个顺时针桨叶+5个逆时针桨叶 5个空芯直流电机+6个电机固定座 1个锂电池(LiPo, 容量是240mAh) + 1个电池支托板() 2个8mm长的expansion connector pins即headers(10个pin, 2mm spacing) 2个14mm长的expansion connector pin(10个pin, 2mm spacing) 1个USB线(只有Crazyflie 2.1有) 安装步骤和注意事项 扭转电机线(减少电子噪声) 装电机到电机固定座上 将扭转的电机线弄到电机固定座的卡槽上 装上桨叶,注意方向 将橡胶垫放在两个expansion header之间(增加摩擦以便固定电池,同时保护电子器件) 将2个8mm的header插入expansion connector 将电池放在两个header之间,并将电池支托板弄到header上的pin 按下电源开关的push button, 四个propeller会依次转起来。如果没有,检查motor连接 Crazyflie 2.X 的启动 Crazyflie 2.X芯片板一旦powered on,它会自动开始进行一系列的事件 跑self-test:…