برنامه نویسی

مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 4: دقت تشخیص رنگ

شرح تصویر
هنگام شرکت در یک مسابقه رباتیک با استفاده از LEGO Spike Prime ، انتخاب محیط برنامه نویسی مناسب می تواند بر عملکرد تأثیر بگذارد. در این آزمایش ، ما آزمایش کردیم که چگونه محیط های برنامه نویسی با دقت در هنگام حرکت ربات ، رنگ ها را تشخیص می دهند.

محیط های برنامه نویسی آزمایش شده

من چهار محیط زیر را مقایسه کردم:

پیکربندی ربات

برای تست ، من از یک ربات از نوع ماشین با تنظیم زیر استفاده کردم:

  • موتور چرخ چپ: بندر A
  • موتور چرخ راست: بندر B
  • سنسور رنگ جانبی: بندر C
  • سنسور رنگ رو به پایین: بندر D
    شرح تصویر

روش تست

برای مقایسه محیط ها ، من آزمایش زیر را انجام دادم:

  • سنسور رنگ جانبی در حالی که روبات حرکت می کند ، رنگهای مختلف بلوک را تشخیص می دهد.
  • سنسور رنگ رو به پایین سیاه را تشخیص می دهد و روبات را متوقف می کند.
  • هر محیط پنج بار مورد آزمایش قرار گرفت و میانگین نتایج مقایسه شد.
  • برنامه ها برای هر محیط در حالی که سرعت حرکت را تقریباً یکسان نگه می داشت بهینه می شد.

بلوک های کلمه ای (برنامه سنبله 3)
شرح تصویر
پایتون (برنامه سنبله 3)

# Set up all devices
LineSensor = port.D
ColorSensor = port.C

colors = []
color_now = None

# Color reading task
async def color_task():
    global color_now
    while True:
        color_now = color_sensor.color(ColorSensor)
        await runloop.sleep_ms(1)

async def main():
    global colors
    global color_now

    motor_pair.pair(motor_pair.PAIR_1, port.A, port.B)
    motor_pair.move(motor_pair.PAIR_1, 0, velocity=900)

    while color_sensor.reflection(LineSensor) > 50:
        if len(colors) == 0 or color_now != colors[-1]:
            colors.append(color_now)
        await runloop.sleep_ms(1)

    motor_pair.stop(motor_pair.PAIR_1, stop=motor.BRAKE)

    print(colors)

runloop.run(color_task(), main())
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Python (Pybricks)

# Set up all devices.
hub = PrimeHub()
left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
right_motor = Motor(Port.B, Direction.CLOCKWISE)
line_sensor = ColorSensor(Port.D)
color_sensor = ColorSensor(Port.C)

# Variables for color detection
color_now = None
colors = []

# Color reading task
async def color_task():
    global color_now
    while True:
        color_now = await color_sensor.color(surface=True)
        await wait(1)

async def run():
    global colors
    global color_now

    # start moving
    left_motor.run(900)
    right_motor.run(900)

    while await line_sensor.reflection() > 50:
        if len(colors) == 0 or color_now != colors[-1]:
            colors.append(color_now)
        await wait(1)

    left_motor.brake()
    right_motor.brake()

    print(colors)

async def main():
    await multitask(color_task(), run())

run_task(main())
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

زبان ج (Spike-RT)

pup_motor_t *motorA;             
pup_motor_t *motorB;             
pup_device_t *ColorSensor;       
pup_device_t *LineSensor;

char colors[30]; // Array to store detected colors
char color_now;

void Main(intptr_t exinf)
{
  motorA = pup_motor_init(PBIO_PORT_ID_A, PUP_DIRECTION_COUNTERCLOCKWISE);
  motorB = pup_motor_init(PBIO_PORT_ID_B, PUP_DIRECTION_CLOCKWISE);
  LineSensor = pup_color_sensor_get_device(PBIO_PORT_ID_D);
  ColorSensor= pup_color_sensor_get_device(PBIO_PORT_ID_C);

  int8_t i = 0;

  // Wait for left button to be pressed
  hub_button_t pressed;
  while(!(pressed&HUB_BUTTON_LEFT)){
    hub_button_is_pressed(&pressed);
    hub_light_on_color(PBIO_COLOR_GREEN);
  }

  sta_cyc(CYC_HDR); // Start color_task

  // Start moving
  pup_motor_set_speed(motorA,900);
  pup_motor_set_speed(motorB,900);

  // Add detected colors to the array
  while (pup_color_sensor_reflection(LineSensor) > 50 ) {
    if (i == 0 || color_now != colors[i-1]) {
      if (i < sizeof(colors) - 1) {
        colors[i] = color_now;
        i++;
      }
    }
  }

  // Stop moving
  pup_motor_stop(motorA);
  pup_motor_stop(motorB);

  stp_cyc(CYC_HDR); // Stop color_task

  // Output the colors detected
  int8_t j;
  for (j = 0; j < 30; j++) {
    syslog(LOG_NOTICE, "%d : %c", j, colors[j]);
  }
}

// Read color every 1ms
void color_task(intptr_t exinf)
{
  color_now = pup_color_sensor_color_name(ColorSensor, true);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • ربات و قرار دادن بلوک در طول آزمایش:
    شرح تصویر

  • توالی تشخیص رنگ مورد انتظار:
    هیچکدام → قرمز → هیچکدام → هیچکدام → سبز → قرمز → هیچکدام → زرد → آبی → هیچکدام → سبز → هیچکدام → قرمز → هیچ → آبی → هیچکدام
    https://www.youtube.com/watch؟v=ea6x1y07xxs

نتایج: کدام محیط دقیق ترین بود؟

شرح تصویر
محیطی با کمترین نادرست زبان C (Spike-RT) بود:
1.2 ٪ – زبان C (Spike -RT)
2.5 ٪ – Python (Pybricks)
3.22 ٪ – بلوک کلمه (Spike App3)
4.27 ٪ – پایتون (Spike App3)

روند مشاهده شده
Word Block & Python (Spike App3):

  • به احتمال زیاد هنگام تغییر به/از رنگ سبز (اغلب به اشتباه آبی یا سیاه روشن) رنگ ها را اشتباه می گیرید.
  • بیشتر احتمال دارد که هنگام تغییر از زرد ، سفید را اشتباه کند.
  • به احتمال زیاد هنگام تغییر از آبی ، آبی روشن را اشتباه می کند.
  • به نظر می رسید وقتی رنگ شیء مبهم یا دور بود ، رنگ های پس زمینه را به جای “هیچ” تشخیص می داد.

Pybricks & C (Spike-RT):

  • به احتمال زیاد هنگام تغییر از سبز ، زرد را اشتباه می کند.
  • بیشتر احتمال دارد که هنگام تغییر از زرد ، سفید را اشتباه کند.

آیا می خواهید برنامه نویسی C را در LEGO Spike Prime امتحان کنید؟

اگر علاقه مند به تلاش C در Spike Prime هستید ، مطالب یادگیری دوستانه مبتدی در دسترس است. از مارس 2025 ، یک نسخه آزمایشی نیز در دسترس است – آن را امتحان کنید!


مقالات مرتبط

  1. تست LEGO SPIKE PRIME با C: سرعت و پایداری دنبال کننده خط
  2. معرفی Spike-RT: پلت فرم نرم افزار زبان C برای LEGO SPIKE PRIME
  3. مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 1
  4. مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 2
  5. مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 3

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا