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

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

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

UGV با موتورهای پله‌ای — ناوبری دقیق در فضای بسته بدون GPS (فارسی)

​ ژوئن 12, 2026 1 دقیقه مطالعه
UGV موتور پله‌ای NEMA17 Odometry

Odometry چیست؟ ناوبری بدون GPS

Odometry (کیلومترشمار) روشی است که با شمارش تعداد دورهای چرخ، موقعیت ربات را محاسبه می‌کند. موتور پله‌ای ایده‌آل است چون هر پالس = یک قدم دقیق (۱.۸°) — بدون encoder موقعیت دقیق داریم. Dead Reckoning یعنی با دانستن نقطه شروع + قدم‌های زده‌شده، موقعیت فعلی را می‌دانیم.

محدودیت: خطاها جمع می‌شوند — در مسافت‌های طولانی drift دارد. برای داخل ساختمان تا ۲۰–۵۰ متر کافی است.

🛠️ کارت پروژه

دقت موقعیت ~±۵mm در ۲ متر (با microstep 1/16)
بودجه ~۶۰۰K (NEMA17 × ۲ + A4988 × ۲)

محاسبات Odometry

پارامتر مقدار فرمول
قطر چرخ ۱۰۰mm —
محیط چرخ ۳۱۴.۱mm π × d
قدم در هر دور (1/16 step) ۳۲۰۰ 200 × 16
mm در هر قدم ۰.۰۹۸mm ۳۱۴.۱ / ۳۲۰۰
قدم برای ۱۰۰۰mm ۱۰۱۹۸ قدم ۱۰۰۰ / ۰.۰۹۸

کد حرکت به مختصات

#define STEP_L 3
#define DIR_L  4
#define STEP_R 5
#define DIR_R  6

const float MM_PER_STEP = 0.098;  // mm/قدم با 1/16 microstep
const float WHEEL_BASE  = 200.0;  // mm بین دو چرخ

float posX=0, posY=0, heading=0;  // mm, mm, degrees

void stepBoth(long stepsL, long stepsR, int delayUs=800){
  long maxSteps = max(abs(stepsL), abs(stepsR));
  for(long i=0; i0?HIGH:LOW);
      digitalWrite(STEP_L,HIGH); delayMicroseconds(delayUs/2);
      digitalWrite(STEP_L,LOW);
    }
    if(i0?HIGH:LOW);
      digitalWrite(STEP_R,HIGH); delayMicroseconds(delayUs/2);
      digitalWrite(STEP_R,LOW);
    }
    delayMicroseconds(delayUs/2);
  }
}

void moveMM(float dist){
  long steps = (long)(dist/MM_PER_STEP);
  stepBoth(steps,steps);
  posX += dist*cos(heading*PI/180);
  posY += dist*sin(heading*PI/180);
}

void turnDeg(float deg){
  float arc = (deg/360.0)*PI*WHEEL_BASE;
  long steps = (long)(arc/MM_PER_STEP);
  stepBoth(steps,-steps);  // چپ جلو، راست عقب = چرخش چپ
  heading += deg;
}

  • کتابخانه StepperDriver — GitHub
  • آپارات: موتور پله‌ای ربات
برچسب‌ها: A4988 Dead Reckoning NEMA17 Odometry UGV آردوینو موتور پله‌ای ناوبری دقیق
​
مطلب بعدی UGV با فرمان Ackermann — سرو موتور و درایو DC برای ماشین‌مانند (فارسی) مطلب قبلی VESC برای UGV: نصب، تنظیم FOC و کنترل از آردوینو (فارسی)
</> Make for Iran – بسازیم برای ایران

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

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

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

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

پیوندها

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

آخرین مطالب

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