Arduino四轴飞行器PID控制系统
这是一个开源的Arduino四轴飞行器控制系统项目,基于Arduino Uno和MPU6050传感器。通过250Hz刷新率的数字PID控制和Ziegler-Nichols方法优化飞行控制算法。项目包括硬件连接说明、遥控配置、PID调优指南和安全机制,为无人机爱好者和开发者提供全面的学习资源。采用X型四轴结构,实现稳定飞行。项目详细说明了硬件连接、遥控配置和PID调优方法,并提供了安全机制和调试指南,适合无人机爱好者和开发者参考学习。
这个 Arduino 草图提供了一个基于 Arduino Uno 板和 MPU6050 传感器的 X 型四轴飞行器的飞行控制器。
基本上,这个自动化例程是一个数字 PID 的实现,刷新率为 250Hz。 用于计算 PID 系数的方法是 Ziegler-Nichols 方法。 四轴飞行器的框架基于 F450。
您可以使用 这个 来校准您的电机驱动器。
一篇详细的文章可以在 这里 找到(用法语)。
(i) 目前正在积极开发中。
Arduino 库:
+-------------------------+
| MPU-6050 |
| |
| 3V3 SDA SCL GND INT |
+--+----+----+----+----+--+
| | | |
| | | |
+---------+----+----+----+----------------+
| 3.3V A4 A5 GND |
| |
| |
| Arduino Uno |
| |
| #4 #5 #6 #7 #8 #9 #10 #11 |
+--+----+----+----+----+----+----+----+---+
| | | | | | | |
(M1) (M2) (M3) (M4) | | | |
| | | |
| | | |
+--+----+----+----+---+
| C1 C2 C3 C4 |
| |
| RF 接收器 |
+---------------------+
图例:
Mx: 电机 X
Cx: 接收通道 x
默认情况下,此草图使用模式 2 进行 RF 遥控,根据以下图片:
通道映射如下:
通道 | 命令 |
---|---|
1 | 横滚 |
2 | 俯仰 |
3 | 油门 |
4 | 偏航 |
要更改通道映射,请根据您的需求更新函数 configureChannelMapping
:
void configureChannelMapping() { mode_mapping[YAW] = CHANNEL4; mode_mapping[PITCH] = CHANNEL2; mode_mapping[ROLL] = CHANNEL1; mode_mapping[THROTTLE] = CHANNEL3; }
默认的 PID 系数值可能适用于 F450 类似的四轴飞行器。 但是,您可以在全局变量声明部分调整它们:
// PID 系数 float Kp[3] = {4.0, 1.3, 1.3}; // P 系数,顺序为: 偏航、俯仰、横滚 float Ki[3] = {0.02, 0.04, 0.04}; // I 系数,顺序为: 偏航、俯仰、横滚 float Kd[3] = {0, 18, 18}; // D 系数,顺序为: 偏航、俯仰、横滚
前
(1) (2) x
\ / z ↑
X \|
/ \ +----→ y
(3) (4)