</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

  • خانه
  • الکترونیک
  • پرینت سه‌بعدی
  • حکاکی و برش لیزری
  • ابزار کارگاهی
  • پهپاد
  • ربات زمینی UGV
  • ربات پرنده UAV
  • صنایع دستی
  • آموزش
  • پروژه‌ها
  • درباره ما
خانه›آموزش›ادغام IMU و GPS با فیلتر کالمن برای UGV پایدار (فارسی)
آموزش ربات‌های زمینی (UGV)

ادغام IMU و GPS با فیلتر کالمن برای UGV پایدار (فارسی)

​ ژوئن 12, 2026 1 دقیقه مطالعه
فیلتر کالمن EKF IMU GPS Sensor Fusion

چرا GPS و IMU به تنهایی کافی نیستند؟

GPS دقت ~۲.۵m دارد، به‌روزرسانی ۱Hz، و در زیر درخت یا نزدیک ساختمان خراب می‌شود. IMU بدون drift سریع است اما خطاهایش با زمان جمع می‌شوند. راه‌حل: ترکیب هر دو با فیلتر کالمن. این فیلتر یک مدل آماری است که به هر سنسور بسته به قابلیت‌اعتمادش وزن می‌دهد و بهترین تخمین را می‌سازد.

EKF (Extended Kalman Filter) نسخه توسعه‌یافته برای سیستم‌های غیرخطی مثل ناوبری است. ArduPilot، iNAV و ROS همه از EKF استفاده می‌کنند.

🛠️ کارت پروژه

سنسورها MPU-9250 (IMU+Mag) + NEO-M8N (GPS)
پردازنده Arduino Mega یا Raspberry Pi

فیلتر کالمن ساده — Complementary به Kalman

برای مبتدی‌ها ابتدا یک فیلتر کالمن ۱D برای ترکیب GPS Lat با Dead Reckoning پیاده می‌کنیم:

// فیلتر کالمن ۱ بعدی برای موقعیت X
struct Kalman1D {
  float x;       // تخمین موقعیت
  float P;       // واریانس خطا
  float Q=0.01;  // نویز پروسس (IMU drift)
  float R=2.5;   // نویز اندازه‌گیری (GPS noise متر)

  float update(float measurement, float prediction){
    // Predict
    P += Q;
    // Update
    float K = P / (P + R);          // Kalman Gain
    x = prediction + K*(measurement - prediction);
    P = (1 - K) * P;
    return x;
  }
};

Kalman1D kx, ky;
float estX=0, estY=0;

void loop(){
  // از Odometry/IMU تخمین حرکت
  float predX = estX + vx * dt;
  float predY = estY + vy * dt;

  if(gps.location.isUpdated()){
    // GPS موقعیت جدید (متر از مبدأ)
    float gpsX = (gps.location.lat() - homeLat) * 111320.0;
    float gpsY = (gps.location.lng() - homeLng) * 111320.0 * cos(radians(homeLat));
    estX = kx.update(gpsX, predX);
    estY = ky.update(gpsY, predY);
  } else {
    estX = predX; estY = predY;  // فقط IMU
  }
}

جدول مقایسه روش‌های Fusion

روش پیچیدگی دقت مناسب برای
فیلتر مکمل خیلی ساده متوسط تعادل ربات
Kalman 1D ساده خوب GPS + Odometry
EKF (ArduPilot) پیچیده عالی UGV حرفه‌ای
robot_localization (ROS) پیچیده عالی Raspberry Pi + ROS

  • کتابخانه Kalman Filter Arduino — GitHub
  • آپارات: فیلتر کالمن فارسی
برچسب‌ها: EKF GPS IMU Kalman Filter MPU-6050 Sensor Fusion UGV موقعیت‌یابی
​
مطلب بعدی RTK GPS برای UGV — دقت سانتی‌متری با u-blox ZED-F9P ارزان (فارسی) مطلب قبلی آشنایی با LoRa SX1278 — ارسال دستور به UGV از ۲ کیلومتر (فارسی)
</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

یاد بگیر، بساز، به اشتراک بگذار. جامعه‌ای برای سازندگان، مهندسان و علاقه‌مندان به فناوری در ایران.

دسته‌بندی‌ها

  • پروژه‌ها
  • ربات‌های پرنده (UAV)
  • آموزش
  • ربات‌های زمینی (UGV)
  • الکترونیک
  • پهپاد و مولتی‌روتور

پیوندها

  • خانه
  • درباره ما
  • تماس
  • فید RSS

آخرین مطالب

  • خلاصه دوره ArduPilot/iNAV و گام‌های بعدی (فارسی)
  • رادیو تله‌متری در مقابل LTE/4G برای کنترل از راه دور (فارسی)
  • Ground Station روی موبایل و تبلت — QGroundControl و Solex (فارسی)
  • راه‌اندازی Ground Station با Mission Planner (فارسی)
© 2026 Make for Iran – بسازیم برای ایران. تمامی حقوق محفوظ است.
ساخته شده با ❤️ برای سازندگان ایران  |  ورود