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

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

  • خانه
  • الکترونیک
  • پرینت سه‌بعدی
  • حکاکی و برش لیزری
  • ابزار کارگاهی
  • پهپاد
  • ربات زمینی UGV
  • ربات پرنده UAV
  • صنایع دستی
  • آموزش
  • پروژه‌ها
  • درباره ما
خانه›آموزش›Differential Drive UGV: فرمول‌های حرکت، Odometry و کد آردوینو (فارسی)
آموزش ربات‌های زمینی (UGV)

Differential Drive UGV: فرمول‌های حرکت، Odometry و کد آردوینو (فارسی)

​ ژوئن 12, 2026 1 دقیقه مطالعه
Differential Drive سینماتیک Odometry آردوینو

سینماتیک Differential Drive — ریاضیات ساده

در Differential Drive دو چرخ موازی با سرعت مستقل وجود دارد. اگر سرعت چرخ چپ = vL و راست = vR باشد:
سرعت خطی (v) = (vL + vR) / 2
سرعت زاویه‌ای (ω) = (vR – vL) / L (L = فاصله بین دو چرخ)
با این دو مقدار می‌توانیم موقعیت x, y و جهت θ را در هر لحظه محاسبه کنیم.

مدل سینماتیک Differential Drive ربات (Robot Body) مرکز در نقطه (x, y, θ) vL vR L = ۲۰۰mm v = (vL+vR)/2 ω = (vR-vL)/L Δx = v·cos(θ)·Δt Δy = v·sin(θ)·Δt Δθ = ω·Δt

کد Odometry با Encoder

// Encoder پولس‌شمار — هر موتور یک encoder ۲۰PPR
volatile long encL=0, encR=0;
void isrL(){ encL++; }
void isrR(){ encR++; }

const float WHEEL_D    = 65.0;   // mm قطر چرخ
const float WHEEL_BASE = 200.0;  // mm فاصله
const int   PPR        = 20;     // پالس در هر دور

float posX=0, posY=0, theta=0;   // mm, mm, radians

void updateOdometry(long dL_pulses, long dR_pulses){
  float dL = (dL_pulses/(float)PPR)*PI*WHEEL_D;
  float dR = (dR_pulses/(float)PPR)*PI*WHEEL_D;
  float v   = (dL+dR)/2.0;
  float dTh = (dR-dL)/WHEEL_BASE;
  posX  += v*cos(theta+dTh/2.0);
  posY  += v*sin(theta+dTh/2.0);
  theta += dTh;
}

void setup(){
  attachInterrupt(digitalPinToInterrupt(2), isrL, RISING);
  attachInterrupt(digitalPinToInterrupt(3), isrR, RISING);
}

void loop(){
  long snapshotL = encL; encL=0;
  long snapshotR = encR; encR=0;
  updateOdometry(snapshotL, snapshotR);
  Serial.print("X:"); Serial.print(posX,1);
  Serial.print(" Y:"); Serial.print(posY,1);
  Serial.print(" θ:"); Serial.println(theta*57.3,1);
  delay(50);
}

  • Columbia: راهنمای ریاضی سینماتیک چرخ‌محور
  • آپارات: encoder ربات آردوینو
برچسب‌ها: Differential Drive Encoder Kinematics Odometry UGV آردوینو سینماتیک ربات
​
مطلب بعدی VESC برای UGV: نصب، تنظیم FOC و کنترل از آردوینو (فارسی) مطلب قبلی پلتفرم UGV تانکی از قطعات اسکرپ — شنی DIY با موتور DC (فارسی)
</> Make for Iran – بسازیم برای ایران

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

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

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

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

پیوندها

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

آخرین مطالب

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