مقایسه برنامه نویسی 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 ، یک نسخه آزمایشی نیز در دسترس است – آن را امتحان کنید!
مقالات مرتبط
- تست LEGO SPIKE PRIME با C: سرعت و پایداری دنبال کننده خط
- معرفی Spike-RT: پلت فرم نرم افزار زبان C برای LEGO SPIKE PRIME
- مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 1
- مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 2
- مقایسه برنامه نویسی LEGO Spike Prime: کدام یک برای مسابقات رباتیک بهترین است؟ – 3