گیمپال و پایدارسازی تصویر چیست؟ (مبتدی)
وقتی یک پهپاد یا UGV حرکت میکند، دوربین همراه آن میلرزد — تصویر FPV ناپایدار میشود. یک گیمپال (Gimbal) یک پلتفرم متحرک است که لرزشها را با سروها جبران میکند — دوربین همیشه صاف میماند.
سنسور MPU-6050 یک IMU ۶ محوره (۳ محور شتابسنج + ۳ محور ژیروسکوپ) با قیمت زیر ۵ دلار است. آردوینو با کنترلر PID خطای زاویه را میگیرد و سروهای MG996R را تنظیم میکند. گیمپال ۳ محوره هر سه محور Roll، Pitch، و Yaw را کنترل میکند.
محصولی که میسازید
گیمپال ۳ محوره با MPU-6050 و ۳ سرو MG996R برای دوربین FPV.
- هزینه: ۵۰۰ هزار تا ۱ میلیون تومان
- محورها: Roll، Pitch، Yaw
- سرعت پاسخ: ۲۰۰Hz با MPU-6050
کد گیمپال با PID
#include <Wire.h>
#include <MPU6050.h>
#include <Servo.h>
MPU6050 mpu;
Servo servoRoll, servoPitch, servoYaw;
float rollAngle, pitchAngle, yawAngle;
float rollTarget=90, pitchTarget=90, yawTarget=90;
// PID هر محور:
float Kp=1.5, Ki=0.05, Kd=0.3;
float errR,errP,errY;
float intR=0,intP=0,intY=0;
float prevR=0,prevP=0,prevY=0;
void setup() {
Wire.begin();
mpu.initialize();
servoRoll.attach(9);
servoPitch.attach(10);
servoYaw.attach(11);
}
float pid(float err, float &integral, float &prev) {
integral += err;
float d = err - prev;
prev = err;
return Kp*err + Ki*integral + Kd*d;
}
void loop() {
int16_t ax,ay,az,gx,gy,gz;
mpu.getMotion6(&ax,&ay,&az,&gx,&gy,&gz);
// محاسبه زاویه از شتابسنج:
rollAngle = atan2(ay,az)*180/PI;
pitchAngle = atan2(-ax,sqrt(ay*ay+az*az))*180/PI;
// PID و خروجی سرو:
errR = rollTarget - rollAngle;
errP = pitchTarget - pitchAngle;
int outR = 90 + pid(errR,intR,prevR);
int outP = 90 + pid(errP,intP,prevP);
servoRoll.write(constrain(outR,0,180));
servoPitch.write(constrain(outP,0,180));
delay(5); // 200Hz
}
چکلیست کالیبراسیون و تست
| بررسی | روش |
|---|---|
| MPU-6050 افست کالیبره شده؟ | mpu.calibrateGyro() روی میز صاف |
| سرو در ۹۰° صفر درجه نگه میدارد؟ | rollTarget=pitchTarget=90 |
| گیمپال تکان را جبران میکند؟ | پایه را کج کنید — باید ثابت بماند |
| Oscillation (لرزش PID) وجود ندارد؟ | Kp را کاهش دهید |