四轴无人机 PID 实现
1. 简介
这个 Arduino 草图提供了一个基于 Arduino Uno 板和 MPU6050 传感器的 X 型四轴飞行器的飞行控制器。
基本上,这个自动化例程是一个数字 PID 的实现,刷新率为 250Hz。 用于计算 PID 系数的方法是 Ziegler-Nichols 方法。 四轴飞行器的框架基于 F450。
您可以使用 这个 来校准您的电机驱动器。
一篇详细的文章可以在 这里 找到(用法语)。
(i) 目前正在积极开发中。
2. 要求
Arduino 库:
3. 针脚连接:
+-------------------------+
| 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
4. 配置
4.1 遥控器配置
默认情况下,此草图使用模式 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;
}
4.2 PID 调整
默认的 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 系数,顺序为: 偏航、俯仰、横滚
5. 四轴飞行器方位
前
(1) (2) x
\ / z ↑
X \|
/ \ +----→ y
(3) (4)
- 电机 1: 左前 - 顺时针
- 电机 2: 右前 - 逆时针
- 电机 3: 左后 - 顺时针
- 电机 4: 右后 - 逆时针
- 左翼 上 表示正侧滚
- 鼻子 上 表示正俯仰
- 鼻子 右 表示正偏航
MPU6050 必须如下方向放置:
- X 轴: 横滚
- Y 轴: 俯仰
- Z 轴: 偏航
6. 启动/停止
这个草图带有一个安全过程:要启动四轴飞行器,将遥控器的左操纵杆移到左下角,然后再移回中间位置。
要停止四轴飞行器,将左操纵杆移到右下角。
7. 调试
如果您需要打印调试信息,请确保以 57600 波特初始化串行:
void setup() {
Serial.begin(57600);
// ...
}
void loop() {
Serial.println(measures[ROLL]);
// ...
}