پارک خودکار سالهاست در خودروهای مدرن استفاده میشود. ما همان مفهوم را در مقیاس کوچک روی CarBot پیاده کردهایم تا کاربران ببینند پشت دکمهی «خودپارک» چه الگوریتمی کار میکند.
توضیح مختصر
در این پروژه، ربات باید یک محل پارک خالی را تشخیص دهد، فاصلهی خود تا موانع را بسنجد و با چند مانور دقیق، خود را در جای مناسب قرار دهد. تاریخچهی این فناوری به سیستمهای کمکی اولتراسونیک در خودروها برمیگردد که فقط هشدار میدادند؛ امروز اما خودروها با ترکیب دوربین، رادار و الگوریتمهای پیشرفتهی کنترل، کار پارک را بهطور کامل انجام میدهند.
در CarBot از دوربین موبایل برای تشخیص فضای خالی و علامتگذاری جای پارک (مثلاً با چسبهای رنگی یا بلوکهای کوچک) استفاده میشود و سنسور فاصلهسنج، فاصله تا دیوار یا موانع را اندازه میگیرد. کاربر برنامهای مینویسد که ابتدا محل مناسب را پیدا کند، سپس با دنبالهای از حرکتهای جلو، عقب و چرخش، ربات را وارد جای پارک کند. این تمرین برای درک الگوریتمهای مسیریابی، کنترل سرعت و زاویه، و پیادهسازی حالتهای مختلف (حالت جستوجوی جای پارک، حالت مانور، حالت توقف) بسیار مناسب است.
تاریخچه پارک خودکار خودرو (Automated Parking)
مرحله 1 – سیستمهای اولیه سنسوری (2000–2010)
این مرحله مربوط به خودروهایی است که فقط سونار اولتراسونیک و سنسور پارک دنده عقب داشتند.
ویژگیها:
• فقط فاصله را هشدار میدادند
• هیچ «تصمیمگیری» انجام نمیشد
• صرفاً ابزار کمک به راننده بودند
نمونه خودروها:
BMW E90، پژو 206، مرسدس C-Class قدیمی
مرحله 2 – پارک نیمهخودکار (2010–2015)
سیستمهایی که فضای پارک را اندازهگیری میکردند و فرمان را خودکار کنترل میکردند.
ویژگیها:
• یافتن فضای پارک با سونار
• محاسبه زاویه چرخش
• کنترل فرمان خودکار
• حرکت جلو/عقب همچنان توسط راننده انجام میشد
نمونه:
Volkswagen Park Assist – Ford Active Park Assist
مرحله 3 – پارک خودکار کامل (2015–2020)
در این مرحله خودرو خودش:
• فضا را پیدا میکند
• تصمیمگیری میکند
• فرمان و گاز و ترمز را کنترل میکند
سنسورها:
• دوربینهای 360
• رادار
• سونار
• واحد IMU
الگوریتمها:
• ماشین حالت (FSM)
• محاسبات هندسی (Arc-based Parking)
• کنترل PID برای مسیرهای منحنی
• SLAM سبک برای محیطهای کوچک پارکینگ
مرحله 4 – پارک مبتنی بر هوش مصنوعی (2020–اکنون)
سنسورها و الگوریتمها بسیار پیشرفتهتر شدند.
ویژگیهای این نسل:
• تشخیص فضای پارک با AI / Computer Vision
• پیشبینی مسیر ایمن
• تحلیل رفتار عابر – خودروهای اطراف
• کنترل کاملاً خودمختار
الگوریتمها:
• YOLO برای تشخیص خطوط/موانع
• Depth Estimation برای سنجش فاصله
• Reinforcement Learning برای تصمیمگیری
• Neural Motion Planning (راهحلهای مشابه Tesla و Mobileye)
این دقیقاً همان چیزی است که CarBot اجازه میدهد با یک موبایل هوشمند انجام دهید.
استفاده از CarBot برای پروژه پارک خودکار
CarBot یک ربات بسیار مناسب برای نشان دادن پروژه پارکینگ خودکار هوشمند است، زیرا:
سنسورها و قابلیتهای ربات:
دوربین موبایل → Computer Vision + AI
قابلیت کنترل موتورهای چپ/راست → مانورهای پیچیده پارک
IMU موبایل → تعیین زاویه پارک
سونار (اختیاری) → اندازهگیری فاصله جلو/عقب
سه روش برای انجام پروژه پارک خودکار با CarBot
روش 1 – فقط با سونار (سطح مبتدی)
• پیدا کردن فضای خالی
• انجام مانور ۷ مرحلهای
• مثل کدی که در مثالهای برنامه وجود دارد.
محدودیت:
• نمیتواند اندازه واقعی فضا یا زاویه دیوارها را تشخیص دهد
• در محیطهای پیچیده خطا بالا است.
منظور کد زیر می باشد:
پروژه نیمه حرفهای: پارکینگ خودکار
سیستم پارکینگ خودکار که فضای خالی را پیدا میکند و ربات را با دقت پارک میکند.
🎯 اهداف یادگیری:
- State Machine (ماشین حالت)
- ناوبری پیشرفته
- محاسبات هندسی
- سیستمهای چند مرحلهای
📝 مراحل:
- دو متغیر ایجاد کنید: frontDistance و parkingMode
- در start: parkingMode = 1 (جستجو), LED و صدا را تنظیم کنید
- در forever: سونار جلو را بخوانید
- حالت 1 (جستجو): اگر frontDistance > 60 → فضا پیدا شد، parkingMode = 2
- حالت 2 (پارک): مانور 7 مرحلهای – جلو، توقف، چرخش، توقف، عقب، توقف، parkingMode = 3
- حالت 3 (پارک شده): توقف کامل، LED کم نور، صرفهجویی انرژی
- تولید کد و تست در فضای باز با علامتگذاری فضای پارک
- نکته: برای تست، میتوانید با دست parkingMode را تغییر دهید
💻 کد تولید شده:
var frontDistance = 0;
var parkingMode = 1; // 1=Search, 2=Parking, 3=Parked
// مقداردهی
ledBrightness(100);
toggleLed('ON');
playSound('BEEP_ONCE');
forever(function() {
frontDistance = sonarReading();
// حالت 1: جستجوی فضا
if (parkingMode === 1) {
if (frontDistance > 60) {
stopMovement();
playSound('BEEP_TWICE');
parkingMode = 2;
}
}
// حالت 2: مانور پارک
else if (parkingMode === 2) {
setSpeed(30, 'forward');
wait(500);
stopMovement();
setTurn(50, 'right');
wait(500);
stopMovement();
setSpeed(25, 'backward');
wait(1000);
stopMovement();
playSound('BEEP_THRICE');
parkingMode = 3;
}
// حالت 3: پارک شده
else {
stopMovement();
ledBrightness(10);
}
wait(100);
}); نسخه حرفهای تر برنامه پارک خودکار ماشین
state = SEARCH;
loop:
readSonar();
readIMU();
analyzeCamera(); // برای نسخه AI
switch(state):
case SEARCH:
detectGap();
if (gapLength > MIN_PARK_SIZE) {
state = ALIGN;
}
case ALIGN:
turnToAngle(targetAngle);
state = ENTER;
case ENTER:
while (notInsideParkingBox) {
adjustAnglePID();
maintainDistance();
}
state = CENTERING;
case CENTERING:
centerRobotBetweenLines();
state = PARKED;
case PARKED:
stopAll();
روش 2 – ترکیب سونار + محاسبات هندسی (سطح متوسط)
• تعیین طول فضای پارک
• محاسبه قوس فرمان برای ورود
• اصلاح مسیر با PID
این روش در خودروهای واقعی تا سال ۲۰۱۵ استفاده میشد.
روش 3 – پارکینگ هوشمند با بینایی ماشین (سطح حرفهای – توصیه شده)
• تشخیص خط پارک با AI
• تشخیص فضای خالی با segmentation
• تخمین فاصله با depth estimation
• برنامهریزی مسیر با کنترلر MPC یا RL
ابزارهای قابل استفاده با CarBot:
• TensorFlow Lite
• MediaPipe
• مدل Lane Detection
• مدل Object Detection
نتیجه:
میتوانید کاری مشابه سیستم Park Assist خودروهای Tesla/Mercedes انجام دهید.
در ادامه کد پیشرفته برای استفاده در ربات CarBot برای پارک خودکار ماشین قرار داده میشود.
جهت استفاده باید از کارگاه کدنویسی استفاده نمایید
و این هم نمونه کد دیگر
var frontDistance = 0;
var parkingMode = 1; // 1=GoToSpot, 2=Align, 3=FinalPark, 4=Parked
var targetFront = 20; // فاصله هدف از مرجع جلویی (cm)
var tolerance = 2; // تلورانس (cm)
var stepStart = 0;
// init
ledBrightness(100);
toggleLed(‘ON’);
playSound(‘BEEP_ONCE’);
function nowMs() {
// اگر در محیط شما تابع زمان وجود دارد، از آن استفاده کنید.
// در غیر این صورت میتوانید با شمارنده و wait تقریب بزنید.
return Date.now();
}
forever(function () {
frontDistance = sonarReading();
// Mode 1: رفتن تا نقطه هدف با فیدبک سونار (بدون زمانبندی کور)
if (parkingMode === 1) {
if (frontDistance > targetFront + tolerance) {
setSpeed(25, ‘forward’);
} else if (frontDistance < targetFront – tolerance) {
// اگر خیلی نزدیک شد (یا overshoot)، کمی عقب برود
setSpeed(20, ‘backward’);
} else {
stopMovement();
playSound(‘BEEP_TWICE’);
parkingMode = 2;
stepStart = nowMs();
}
}
// Mode 2: همراستا شدن (یک مانور کوتاه و قابل تنظیم)
else if (parkingMode === 2) {
// مثال: کمی چرخش برای همراستا شدن با فضای پارک
setTurn(40, ‘right’);
wait(400);
stopMovement();
parkingMode = 3;
stepStart = nowMs();
}
// Mode 3: ورود نهایی به پارک (ترکیب عقب + توقف)
else if (parkingMode === 3) {
setSpeed(20, ‘backward’);
wait(700);
stopMovement();
playSound(‘BEEP_THRICE’);
parkingMode = 4;
}
// Mode 4: Parked
else {
stopMovement();
ledBrightness(10);
}
wait(100);
});




