Does Programming Environment Affect Performance? A Comparison for Robotics Competitions
When using LEGO SPIKE Prime for a robotics competition, does the programming environment impact performance? I conducted an experiment to compare different programming environments and see how they affect robot movement.
Tested Programming Environments
I compared the following four environments:
- Word Blocks (SPIKE App 3) → Download here
- Python (SPIKE App 3) → Download here
- Python (Pybricks) → More info
- C Language (spike-rt) → GitHub repository
Test Method
To compare the environments, I ran the following test:
- The robot moves straight and stops when the color sensor detects red
- Travel distance before detection: ~30 cm
- Speed: ~900 deg/s
- Measure the stopping distance (braking distance) from the moment red is detected until the robot stops completely
- Conduct five trials for each environment and calculate the average stopping distance
- The same logic was used for all environments
Program Code:
- Word Blocks (SPIKE App 3)
- Python (SPIKE App 3)
from hub import port
import motor,color_sensor,time
import color
motor.run(port.A, -900)
motor.run(port.B, 900)
while color_sensor.color(port.C) != color.RED:
pass
motor.stop(port.A,stop=motor.BRAKE)
motor.stop(port.B,stop=motor.BRAKE)
time.sleep_ms(1000)
- Python (Pybricks)
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor
from pybricks.parameters import Color, Port, Stop
from pybricks.tools import wait
# Initialize the sensor.
sensor = ColorSensor(Port.C)
# Initialize the motor.
left_motor = Motor(Port.A)
right_motor = Motor(Port.B)
wait(500)
left_motor.run(-900)
right_motor.run(900)
while sensor.color() != Color.RED:
pass
left_motor.brake()
right_motor.brake()
wait(1000)
- C Language (spike-rt)
#include
#include
#include
#include
#include "spike/pup/motor.h"
#include "spike/pup/colorsensor.h"
#include
pup_motor_t *motorA; // Variable for using motor A
pup_motor_t *motorB; // Variable for using motor B
pup_device_t *ColorSensor; // Variable for using color sensor
void Main(intptr_t exinf)
{
// Wait 3 seconds
dly_tsk(1000000);
motorA = pup_motor_init(PBIO_PORT_ID_A, PUP_DIRECTION_COUNTERCLOCKWISE);
motorB = pup_motor_init(PBIO_PORT_ID_B, PUP_DIRECTION_CLOCKWISE);
ColorSensor = pup_color_sensor_get_device(PBIO_PORT_ID_C);
pup_motor_set_speed(motorA, 900);
pup_motor_set_speed(motorB, 900);
while(pup_color_sensor_color_name(ColorSensor, true) != 'r');
pup_motor_brake(motorA);
pup_motor_brake(motorB);
dly_tsk(1000000);
// End the program
exit(0);
}
Robot Configuration
I used the following robot setup:
- Left motor: Port A
- Right motor: Port B
- Color sensor: Port C
Results: Which Environment Performed Best?
Here are the average stopping distances (shorter is better):
- 24mm - C Language (spike-rt) 🏆
- 26.6mm - Python (Pybricks)
- 27mm - Word Blocks (SPIKE App 3)
- 27.2mm - Python (SPIKE App 3)
The C language environment (spike-rt) had the shortest stopping distance, meaning it responded the fastest.
Want to Try C Programming on LEGO SPIKE Prime?
If you’re interested in trying C on SPIKE Prime, there are beginner-friendly learning materials available. As of March 2025, a trial version is also accessible—give it a try!
To see more
If you're interested in more LEGO SPIKE Prime experiments with C language, check out this related article:
- Introducing SPIKE-RT: The C Language Software Platform for LEGO SPIKE Prime
- Testing LEGO SPIKE Prime with C: Line Follower Speed & Stability
- Comparing LEGO SPIKE Prime Programming: Which Is Best for Robotics Competitions? - 2
- Comparing LEGO SPIKE Prime Programming: Which Is Best for Robotics Competitions? - 3
- Comparing LEGO SPIKE Prime Programming: Which Is Best for Robotics Competitions? - 4
More tests are planned, including further evaluations for robotics competitions. Stay tuned for future updates!