نمونه کد برنامه نویسی
10 مثال کاربردی برای آموزش علاقهمندان ربات CarBot
سطح مبتدی
1. سیستم کنترل حرکت اساسی با تایمر
هدف: ایجاد یک الگوی حرکتی ساده برای ربات با استفاده از بلوکهای اصلی مهارتهای آموزشی: آشنایی با بلوکهای حرکتی پایه، مفهوم تایمر، ترتیب اجرای دستورات
1. آغاز با بلوک `start`
2. حرکت به جلو با استفاده از `forward&BackwardAtSpeed` با سرعت 150
3. استفاده از بلوک `wait` با مقدار 3000 میلیثانیه
4. استفاده از بلوک `moveLeft&Right` با مقادیر 150 برای چپ و 0 برای راست (گردش به چپ)
5. استفاده از بلوک `wait` با مقدار 2000 میلیثانیه
6. استفاده از `movementStop` برای توقف کامل ربات
چالش تکمیلی: دانشآموزان میتوانند ربات را طوری برنامهریزی کنند که یک مسیر مربعی شکل را طی کند.
2. کنترل LED با حسگرهای محیطی
هدف: آشنایی با استفاده از حسگرها و کنترل خروجیهای ربات مهارتهای آموزشی: خواندن دادههای حسگرها، ساختار شرطی، کنترل LED
1. شروع با بلوک `forever` برای اجرای مداوم
2. استفاده از بلوک شرطی `if...else`
3. در قسمت شرط: `lightSensor` > 50
4. در بخش if: استفاده از بلوک `brightness` با مقدار 0 (LED خاموش)
5. در بخش else: استفاده از بلوک `brightness` با مقدار 100 (LED روشن)
6. افزودن یک بلوک `wait` با مقدار 500 میلیثانیه برای ثبات
چالش تکمیلی: تنظیم روشنایی LED به صورت متناسب با مقدار نور محیط.
3. سیستم هشدار موانع با اولتراسونیک
هدف: ساخت یک سیستم هشدار ساده برای تشخیص موانع مهارتهای آموزشی: کار با حسگر اولتراسونیک، منطق شرطی، خروجی صوتی
1. شروع با بلوک `forever`
2. استفاده از ساختار `if...else if...else`
3. در شرط اول: `ultrasonicSensor` < 20
4. در بخش اول if: استفاده از بلوک `soundType` با پارامتر "high" + بلوک `wait` 200ms
5. در شرط دوم: `ultrasonicSensor` < 50
6. در بخش دوم if: استفاده از بلوک `soundType` با پارامتر "medium" + بلوک `wait` 500ms
7. در بخش else: استفاده از بلوک `soundType` با پارامتر "low" + بلوک `wait` 1000ms
چالش تکمیلی: اضافه کردن واکنش حرکتی مانند توقف یا تغییر مسیر هنگام نزدیک شدن به موانع.
سطح متوسط
4. سیستم ناوبری هوشمند با تشخیص موانع
هدف: ساخت الگوریتم ناوبری که به طور هوشمند موانع را تشخیص داده و از آنها اجتناب میکند مهارتهای آموزشی: ترکیب حسگرها، تصمیمگیری پیچیدهتر، کنترل حرکت پیشرفته
1. شروع با بلوک `forever`
2. استفاده از بلوک `if...else`
3. در قسمت شرط: `ultrasonicSensor` < 30
4. در بخش if:
a. استفاده از بلوک `movementStop`
b. استفاده از بلوک `brightness` با مقدار 100 (روشن کردن LED)
c. استفاده از بلوک `wait` با مقدار 500ms
d. استفاده از بلوک `moveLeft&Right` با مقادیر 0 برای چپ و 150 برای راست
e. استفاده از بلوک `wait` با مقدار 1500ms
f. استفاده از بلوک `brightness` با مقدار 0 (خاموش کردن LED)
5. در بخش else:
a. استفاده از بلوک `forward&BackwardAtSpeed` با سرعت 120
چالش تکمیلی: افزودن یک الگوریتم جستجوی بازگشتی برای یافتن بهترین مسیر در صورت برخورد با موانع متعدد.
5. تعقیبکننده خط با کنترل PID ساده
هدف: طراحی یک سیستم تعقیب خط با استفاده از حسگرهای نوری و کنترل PID ساده مهارتهای آموزشی: الگوریتم PID، کالیبراسیون حسگر، کنترل حرکت دقیق
1. تعریف متغیرهای `targetValue = 50`, `Kp = 0.5`, `error = 0`, `correction = 0`
2. شروع با بلوک `forever`
3. محاسبه خطا: `error = lightSensorLeft - lightSensorRight`
4. محاسبه تصحیح: `correction = Kp * error`
5. استفاده از بلوک `moveLeft&Right` با مقادیر:
a. چپ = 100 - correction
b. راست = 100 + correction
6. افزودن بلوک `wait` با مقدار 50ms برای کنترل نرم
چالش تکمیلی: افزودن ضرایب I و D به الگوریتم کنترل برای بهبود عملکرد تعقیب خط.
6. سیستم تشخیص اشیاء با واکنش هوشمند
هدف: استفاده از قابلیت تشخیص اشیاء CarBot برای ایجاد واکنشهای متفاوت به اشیاء مختلف مهارتهای آموزشی: کار با مدلهای تشخیص اشیاء، برنامهریزی رفتاری، استفاده از رویدادها
1. استفاده از بلوک `start` برای تنظیمات اولیه
2. استفاده از بلوک `objectDetection` با پارامتر "person"
3. در بخش `detect_tasks`:
a. استفاده از بلوک `soundType` با پارامتر "high"
b. استفاده از بلوک `brightness` با مقدار 100
c. استفاده از بلوک `forward&BackwardAtSpeed` با سرعت 60
4. استفاده از بلوک `objectDetection` با پارامتر "car"
5. در بخش `detect_tasks`:
a. استفاده از بلوک `soundType` با پارامتر "medium"
b. استفاده از بلوک `movementStop`
c. استفاده از بلوک `brightness` با مقدار 0
چالش تکمیلی: ایجاد یک سیستم امتیازدهی که بر اساس نوع و تعداد اشیاء شناسایی شده امتیاز جمعآوری کند.
سطح پیشرفته
7. اتوپایلوت با یادگیری تقلیدی
هدف: پیادهسازی سیستم اتوپایلوت پیشرفته با استفاده از مدلهای یادگیری تقلیدی OpenBot مهارتهای آموزشی: کار با مدلهای هوش مصنوعی پیشرفته، درک یادگیری تقلیدی، تنظیم پارامترهای مدل
1. استفاده از بلوک `start`
2. استفاده از بلوک `display_sensors` برای نمایش `battery_voltage`
3. استفاده از ساختار شرطی `if`
4. در قسمت شرط: `battery_voltage` > 7.5
5. در بخش if:
a. استفاده از بلوک `autopilot` با مدل "CIL-Mobile-Cmd"
b. تنظیم پارامتر confidence threshold به 0.8
c. تنظیم پارامتر max speed به 150
d. افزودن بلوک `sound.tone` با پارامتر "beep"
6. در بخش else:
a. استفاده از بلوک `soundType` با پارامتر "low"
b. استفاده از بلوک `movementStop`
c. استفاده از بلوک `display_status` با پیام "ولتاژ باتری ناکافی"
چالش تکمیلی: افزودن یک سیستم نظارت که عملکرد اتوپایلوت را ارزیابی کرده و در صورت نیاز مداخله کند.
8. سیستم SLAM ساده با نقشهبرداری محیط
هدف: پیادهسازی یک سیستم مکانیابی و نقشهبرداری همزمان (SLAM) ساده مهارتهای آموزشی: ادغام دادههای چندگانه حسگرها، الگوریتمهای نقشهبرداری، مفاهیم SLAM
1. تعریف آرایه دوبعدی `map[20][20]` برای ذخیرهسازی نقشه
2. تعریف متغیرهای `posX = 10`, `posY = 10`, `orientation = 0`
3. استفاده از بلوک `start`
4. استفاده از بلوک `forever`:
a. بروزرسانی موقعیت با استفاده از دادههای `wheelOdometerSensors`
b. بهروزرسانی نقشه با دادههای `ultrasonicSensor`
c. استفاده از بلوک `display_map` (سفارشی) برای نمایش نقشه جاری
d. استفاده از بلوک `navigateToUnexplored` (سفارشی) برای حرکت به نواحی کاوشنشده
e. افزودن بلوک `wait` با مقدار 100ms
چالش تکمیلی: پیادهسازی یک الگوریتم مسیریابی که بتواند کوتاهترین مسیر را بین دو نقطه در نقشه ایجادشده پیدا کند.
9. سیستم ناوبری مبتنی بر دید کامپیوتری با PilotNet
هدف: ایجاد یک سیستم ناوبری پیشرفته با استفاده از مدل PilotNet و دوربین مهارتهای آموزشی: پردازش تصویر، کار با مدلهای یادگیری عمیق، هماهنگی سیستمهای بینایی و حرکتی
1. استفاده از بلوک `start`
2. استفاده از بلوک `camera_initialization` با تنظیم resolution = "640x480"
3. استفاده از بلوک `model_initialization` با پارامتر "PilotNet-Goal"
4. استفاده از بلوک `display_status` با پیام "سیستم ناوبری آماده"
5. تعریف هدف با بلوک `set_goal_coordinates` با مختصات x=50, y=100
6. استفاده از بلوک `forever`:
a. استفاده از بلوک `camera_process` برای پردازش تصویر جاری
b. استفاده از بلوک `navigateForwardAndLeft` با مدل "PilotNet-Goal"
c. استفاده از ساختار شرطی برای بررسی رسیدن به هدف
d. استفاده از بلوکهای واکنش مناسب برای موانع شناساییشده
چالش تکمیلی: اضافه کردن قابلیت شناسایی و دنبال کردن یک هدف متحرک با استفاده از دوربین.
10. سیستم ربات گروهی با ارتباط بلوتوث
هدف: پیادهسازی یک سیستم چند رباتی که با یکدیگر ارتباط برقرار کرده و همکاری میکنند مهارتهای آموزشی: ارتباطات بیسیم، الگوریتمهای رفتار گروهی، هماهنگی چندعاملی
1. تعریف پارامترهای ارتباطی: `deviceID`, `groupID`, `role` (leader/follower)
2. استفاده از بلوک `start`
3. استفاده از بلوک `bluetooth_initialization` با پارامترهای تعریفشده
4. استفاده از ساختار شرطی برای تعیین رفتار بر اساس نقش:
a. برای "leader":
i. استفاده از بلوک `objectDetection` برای شناسایی مسیر
ii. محاسبه مسیر بهینه
iii. ارسال اطلاعات مسیر به پیروان با بلوک `bluetooth_send`
iv. حرکت در مسیر با بلوکهای حرکتی مناسب
b. برای "follower":
i. دریافت اطلاعات از رهبر با بلوک `bluetooth_receive`
ii. محاسبه مسیر نسبی بر اساس دادههای دریافتی
iii. حرکت در مسیر محاسبهشده با فاصله مناسب
5. استفاده از بلوک `collision_avoidance` برای جلوگیری از برخورد رباتها
چالش تکمیلی: طراحی یک الگوریتم پیشرفته برای تشکیل الگوهای گروهی متحرک مانند دسته پرندگان یا ماهیها.