Drivetrain#

Introduction#

The drivetrain controls a robot’s movement, allowing it to drive forward, turn, and stop with precision.

Below is a list of all methods:

Actions – Move and turn the robot.

  • drive – Moves the drivetrain in a specified direction indefinitely.

  • drive_for – Moves the drivetrain for a set distance.

  • drive_until – Moves the drivetrain until a condition is met.

  • turn – Turns the drivetrain left or right indefinitely.

  • turn_for – Turns the drivetrain for a set distance.

  • turn_to_heading – Turns the drivetrain to a specified heading.

  • turn_to_rotation – Turns the drivetrain to a specified rotation.

  • stop – Stops a drivetrain with configurable behavior.

Mutators – Set default movement and turn speeds.

  • set_drive_velocity – Sets the default moving velocity for the drivetrain.

  • set_turn_velocity – Sets the turning moving velocity for the drivetrain.

  • set_stopping – Sets the stop behavior (brake, coast, or hold).

  • set_timeout – Limits how long a drivetrain function waits before giving up if movement is blocked.

  • set_heading – Sets a drivetrain’s heading to a specific value.

  • set_rotation – Sets a drivetrain’s rotation to a specific value.

Getters – Return robot state and position.

  • get_heading – Returns a drivetrain’s current heading.

  • get_rotation – Returns a drivetrain’s current rotation.

  • get_velocity – Returns a drivetrain’s current velocity.

  • get_yaw – Returns the yaw of the robot in degrees.

  • get_roll – Returns the roll of the robot in degrees.

  • get_pitch – Returns the pitch of the robot in degrees.

  • get_crashed – Returns whether the robot has crashed.

  • is_stopped – Returns whether a drivetrain is currently not moving.

Actions#

drive#

drive moves the drivetrain in a specified direction indefinitely.

Usage:
drivetrain.drive(direction)

Parameters

Description

direction

The direction in which to drive:

  • FORWARD
  • REVERSE

# Build Used: Super Code Base 2.0
def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

drive_for#

drive_for moves the drivetrain in a specified direction for a set distance.

Usage:
drivetrain.drive_for(direction, distance, units, wait)

Parameters

Description

direction

The direction in which to drive:

  • FORWARD
  • REVERSE

distance

The distance for the drivetrain to move as a float or integer.

units

The unit that represents the distance:

  • MM – Millimeters
  • INCHES (default)

wait

Optional.

  • wait=True (default) – The project waits until drive_for is complete before executing the next line of code.
  • wait=False - The project starts the action and moves on to the next line of code right away, without waiting for drive_for to finish.

# Build Used: Super Code Base 2.0
def main():
    # Drive back and forth
    drivetrain.drive_for(FORWARD, 100, MM)
    drivetrain.drive_for(REVERSE, 4, INCHES)
    

# Start threads — Do not delete
start_thread(main)

drive_until#

drive_until moves the drivetrain forward until a certain condition is met.

Usage:
drivetrain.drive_until(condition, wait)

Parameters

Description

condition

The condition that stops the drivetrain:

  • CRASH – Stops when the drivetrain crashes into an object.
  • OBJECT – Stops when the Eye Sensor detects an object. An Eye Sensor must be configured for this parameter to be used.

wait

Optional.

  • wait=True (default) – The project waits until drive_until is complete before executing the next line of code.
  • wait=False - The project starts the action and moves on to the next line of code right away, without waiting for drive_until to finish.

# Build Used: Super Code Base 2.0
def main():
    # Turn right after a crash
    drivetrain.drive_until(CRASH)
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

turn#

turn turns the drivetrain left or right indefinitely.

Usage:
drivetrain.turn(direction)

Parameters

Description

direction

The direction in which to turn:

  • LEFT
  • RIGHT

# Build Used: Super Code Base 2.0
def main():
    # Turn right and left, then stop
    drivetrain.turn(RIGHT)
    wait(2, SECONDS)
    drivetrain.turn(LEFT)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

turn_for#

turn_for turns the drivetrain left or right for a specified angle or rotations.

Usage:
drivetrain.turn_for(direction, angle, wait)

Parameters

Description

direction

The direction in which to turn:

  • LEFT
  • RIGHT

angle

The amount of degrees the drivetrain will turn as a float or integer.

wait

Optional.

  • wait=True (default) – The project waits until turn_for is complete before executing the next line of code.
  • wait=False - The project starts the action and moves on to the next line of code right away, without waiting for turn_for to finish.

# Build Used: Super Code Base 2.0
def main():
    # Turn right then left
    drivetrain.turn_for(RIGHT, 90)
    drivetrain.turn_for(LEFT, 90)

# Start threads — Do not delete
start_thread(main)

turn_to_heading#

turn_to_heading turns a drivetrain to a specified heading.

Usage:
drivetrain.turn_to_heading(angle, wait)

Parameters

Description

angle

The heading to turn the drivetrain to face as a float or integer in degrees.

wait

Optional.

  • wait=True (default) – The project waits until turn_to_heading is complete before executing the next line of code.
  • wait=False - The project starts the action and moves on to the next line of code right away, without waiting for turn_to_heading to finish.

# Build Used: Super Code Base 2.0
def main():
    # Turn to face the cardinal directions
    drivetrain.turn_to_heading(90)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(180)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(270)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(0)

# Start threads — Do not delete
start_thread(main)

turn_to_rotation#

turn_to_rotation turns a drivetrain to a specified rotation.

Usage:
drivetrain.turn_to_rotation(angle, wait)

Parameters

Description

angle

The rotation to turn the drivetrain to face as a float or integer in degrees.

wait

Optional.

  • wait=True (default) – The project waits until turn_to_rotation is complete before executing the next line of code.
  • wait=False - The project starts the action and moves on to the next line of code right away, without waiting for turn_to_rotation to finish.

# Build Used: Super Code Base 2.0
def main():
    # Spin around twice
    drivetrain.turn_to_rotation(720)

# Start threads — Do not delete
start_thread(main)

stop#

stop stops a drivetrain.

Usage:
drivetrain.stop()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

Mutators#

set_drive_velocity#

set_drive_velocity sets the default moving velocity for a drivetrain. This velocity setting will be used for subsequent calls to any drivetrain functions.

Usage:
drivetrain.set_drive_velocity(velocity)

Parameters

Description

velocity

The velocity at which the drivetrain will move as a float or integer from 0% to 100%.

# Build Used: Super Code Base 2.0
def main():
    # Drive at different velocities
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive slow
    drivetrain.set_drive_velocity(20)
    drivetrain.drive_for(REVERSE, 50, MM)
    wait(1, SECONDS)
    # Drive fast
    drivetrain.set_drive_velocity(100)
    drivetrain.drive_for(FORWARD, 150, MM)

# Start threads — Do not delete
start_thread(main)

set_turn_velocity#

set_turn_velocity sets the default turning velocity for a drivetrain. This velocity setting will be used for subsequent calls to any drivetrain functions.

Usage:
drivetrain.set_turn_velocity(velocity)

Parameters

Description

velocity

The velocity at which the drivetrain will turn as a float or integer from 0% to 100%.

# Build Used: Super Code Base 2.0
def main():
    # Turn at different velocities
    drivetrain.turn_for(RIGHT, 180)
    wait(1, SECONDS)
    # Turn fast
    drivetrain.set_turn_velocity(100)
    drivetrain.turn_for(RIGHT, 180)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping sets the stopping mode for a drivetrain.

Usage:
drivetrain.set_stopping(brake)

Parameters

Description

brake

How the drivetrain will stop:

  • BRAKE – Stops immediately.
  • COAST – Slows gradually to a stop.
  • HOLD – Stops and resists movement using motor feedback.

# Build Used: Super Code Base 2.0
def main():
    drivetrain.set_drive_velocity(100)
    # Drive and then brake
    drivetrain.set_stopping(BRAKE)
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

set_timeout sets a time limit for how long a drivetrain function will wait to reach its target. If the drivetrain cannot complete the movement within the set time, it will stop automatically and continue with the next function.

Note: The drivetrain’s time limit is used to prevent drivetrain functions that do not reach their target position from stopping the execution of the rest of the project.

Usage:
drivetrain.set_timeout(value, units)

Parameters

Description

value

The maximum number of seconds a motor function will run before stopping and moving to the next function as an integer or float.

units

Optional. The unit that represents the time:

  • SECONDS
  • MSEC (default) – Milliseconds

# Build Used: Super Code Base 2.0
def main():
    # Turn right after driving forward
    drivetrain.set_timeout(1, SECONDS)
    drivetrain.drive_for(FORWARD, 25, INCHES)
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

set_heading#

set_heading sets the heading of the drivetrain to a specified value.

Usage:
drivetrain.set_heading(value)

Parameters

Description

value

The value to use for the new heading in degrees.

# Build Used: Super Code Base 2.0
def main():
    # Face the new 0 degree heading
    drivetrain.set_heading(90)
    drivetrain.turn_to_heading(0)

# Start threads — Do not delete
start_thread(main)

set_rotation#

set_rotation sets the rotation of the drivetrain to a specified value.

Usage:
drivetrain.set_rotation(value)

Parameters

Description

value

The value to use for the new rotation in degrees.

# Build Used: Super Code Base 2.0
def main():
    # Spin counterclockwise two times
    drivetrain.set_rotation(720)
    drivetrain.turn_to_rotation(0)

# Start threads — Do not delete
start_thread(main)

Getters#

get_heading#

get_heading returns the current heading of the drivetrain as a float in degrees.

Usage:
drivetrain.get_heading()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Monitor the heading while turning
    monitor_sensor("drivetrain.get_heading")
    drivetrain.turn_for(RIGHT, 450)


# Start threads — Do not delete
start_thread(main)

get_rotation#

get_rotation returns the current rotation of the Inertial Sensor in degrees.

Usage:
drivetrain.get_rotation()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Monitor the rotation while turning
    monitor_sensor("drivetrain.get_rotation")
    drivetrain.turn_for(RIGHT, 450)


# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity returns the current velocity of the drivetrain as a float in percent.

Usage:
drivetrain.get_velocity()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Display the velocity of the robot before and while moving
    console.print("Start: ")
    console.print(drivetrain.get_velocity())
    console.new_line()
    drivetrain.drive(FORWARD)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(drivetrain.get_velocity())
    drivetrain.stop()


# Start threads — Do not delete
start_thread(main)

get_yaw#

get_yaw returns the current yaw of the robot as a float in degrees.

Usage:
drivetrain.get_yaw()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the yaw while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_yaw")
    while True:
        if drivetrain.get_yaw() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_yaw() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_roll#

get_roll returns the current roll of the robot as a float in degrees.

Usage:
drivetrain.get_roll()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the roll while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_roll")
    while True:
        if drivetrain.get_roll() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_roll() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_pitch#

get_pitch returns the current pitch of the robot as a float in degrees.

Usage:
drivetrain.get_pitch()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the pitch while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_pitch")
    while True:
        if drivetrain.get_pitch() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_pitch() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_crashed#

get_crashed returns a Boolean indicating whether or not the robot has crashed.

  • True – The robot has crashed.

  • False – The robot has not crashed.

Usage:
drivetrain.get_crashed()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Drive until a crash
    drivetrain.drive(FORWARD)
    while not drivetrain.get_crashed():
        wait(50, MSEC)
    drivetrain.stop()
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

is_stopped#

is_stopped returns a Boolean indicating whether a drivetrain is not currently moving.

  • True – The drivetrain is stopped.

  • False – The drivetrain is moving.

Usage:
drivetrain.is_stopped()

Parameters

Description

This method has no parameters.

# Build Used: Super Code Base 2.0
def main():
    # Turn when the drivetrain is done moving forward
    drivetrain.drive_for(FORWARD, 200, MM, wait=False)
    wait(0.25, SECONDS)
    while True:
        if drivetrain.is_stopped():
            drivetrain.turn_for(RIGHT, 360)
            break
        else:
            console.print("Still moving...")
            wait(0.1, SECONDS)
            console.clear()

# Start threads — Do not delete
start_thread(main)