传动系统#

介绍#

传动系统控制机器人的运动,使其能够精确地前进、转弯和停止。

当配置陀螺仪传感器或脑惯性传感器时,它还可以用作智能传动系统。

For the examples below, the configured drivetrain will be named drivetrain and will be used in all subsequent examples throughout this API documentation when referring to DriveTrain and SmartDrive class methods.

以下是所有方法的列表:

动作——移动和转动机器人。

  • drive – 无限期地沿指定方向移动传动系统。

  • drive_for – 将传动系统移动一段设定的距离。

  • turn – 无限期地向左或向右转动传动系统。

  • turn_for – 将传动系统转动一段设定的距离。

  • turn_to_heading – 使用传感器将智能传动系统转向指定航向。

  • turn_to_rotation – 将智能传动系统转到特定的旋转值。

  • stop – 以可配置的行为停止传动系统。

  • calibrate_drivetrain – 校准惯性传感器。

变异器——设置默认移动和转动速度。

Getters – 返回机器人状态和位置。

  • heading – 返回智能传动系统的当前航向。

  • rotation – 返回智能传动系统的当前旋转值。

  • velocity – 返回传动系统的当前速度。

  • current – 返回动力传动系统的电流。

  • is_moving – 返回传动系统当前是否正在移动。

  • is_done – 返回传动系统当前是否未移动。

  • is_turning – 返回传动系统当前是否正在转动。

  • power – 返回传动系统使用的功率。

  • torque – 返回传动系统产生的扭矩。

  • 效率 – 返回传动系统的效率。

  • 温度 – 返回传动系统的温度。

构造函数——手动初始化和配置传动系统。

  • DriveTrain – 创建基本传动系统。

  • SmartDrive – 创建配置有陀螺仪传感器或脑惯性传感器的动力传动系统。

行动#

drive#

drive moves the drivetrain in a specified direction indefinitely.

Usage:
drivetrain.drive(direction, velocity, units)

参数

描述

direction

The direction in which to drive:

  • FORWARD
  • REVERSE

velocity

可选。动力传动系统移动的速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。

units

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()

# Drive slowly in reverse then stop
drivetrain.drive(REVERSE, 20, PERCENT)
wait(2, SECONDS)
drivetrain.stop()

drive_for#

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

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

参数

描述

direction

The direction in which to drive:

  • FORWARD
  • REVERSE

distance

动力传动系统移动的距离,以浮点数或整数表示。

units

The unit that represents the distance:

  • MM – Millimeters
  • INCHES (default)
  • DistanceUnits.CM – Centimeters

velocity

可选。动力传动系统移动的速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。

units_v

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM (default) – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

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.

# Drive forward and backward
drivetrain.drive_for(FORWARD, 10)
drivetrain.drive_for(REVERSE, 10)

# Quickly drive forward and backward
drivetrain.drive_for(FORWARD, 200, MM, 100, PERCENT)
drivetrain.drive_for(REVERSE, 200, MM, 100, PERCENT)

turn#

turn turns the drivetrain left or right indefinitely.

Usage:
drivetrain.turn(direction, velocity, units)

参数

描述

direction

The direction in which to turn:

  • LEFT
  • RIGHT

velocity

可选。动力传动系统的转动速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。

units

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM (default) – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

# Turn right and left, then stop
drivetrain.turn(RIGHT)
wait(2, SECONDS)
drivetrain.turn(LEFT)
wait(2, SECONDS)
drivetrain.stop()

# Quickly turn right and left, then stop
drivetrain.turn(RIGHT, 100, PERCENT)
wait(2, SECONDS)
drivetrain.turn(LEFT, 100, PERCENT)
wait(2, SECONDS)
drivetrain.stop()

turn_for#

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

Usage:
drivetrain.turn_for(direction, angle, units, velocity, units_v, wait)

参数

描述

direction

The direction in which to turn:

  • LEFT
  • RIGHT

angle

传动系统转动的度数,以浮点数或整数表示。

units

The unit that represents the rotational value:

  • DEGREES (default)
  • TURNS

velocity

可选。动力传动系统的转动速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。

units_v

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM (default) – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

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.

# Turn the robot right and left
drivetrain.turn_for(RIGHT, 90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_for(LEFT, 90, DEGREES)

# Quickly turn the robot right and left
drivetrain.turn_for(RIGHT, 90, DEGREES, 100, PERCENT)
wait(1, SECONDS)
drivetrain.turn_for(LEFT, 90, DEGREES, 100, PERCENT)

turn_to_heading#

turn_to_heading turns a smart drivetrain to a specified heading.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.turn_to_heading(angle, units, velocity, units_v, wait)

参数

描述

angle

以浮点数或整数形式表示传动系统转向的方向。

units

The unit that represents the rotational value:

  • DEGREES

velocity

可选。电机或电机组的旋转速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。

units_v

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

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.

# Turn to face the cardinal directions
drivetrain.turn_to_heading(90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_heading(180, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_heading(270, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_heading(0, DEGREES)

# Turn twice slowly
drivetrain.turn_to_heading(90, DEGREES, 20, PERCENT)
wait(1, SECONDS)
drivetrain.turn_to_heading(180, DEGREES, 20, PERCENT)

turn_to_rotation#

turn_to_rotation turns a smart drivetrain to a specified rotational value.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.turn_to_rotation(angle, units, velocity, units_v, wait)

参数

描述

angle

将传动系统转向的旋转值作为浮点数或整数。

units

The unit that represents the rotational value:

  • DEGREES
  • TURNS

velocity

可选。电机或电机组的旋转速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。

units_v

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

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.

# Turn left, then spin in a circle 
# clockwise and face right
drivetrain.turn_to_rotation(-90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_rotation(450, DEGREES)

# Turn left then slowly spin in a 
# circle clockwise
drivetrain.turn_to_rotation(-90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_rotation(450, DEGREES, 20, PERCENT)

stop#

stop stops a drivetrain.

Usage:
drivetrain.stop(mode)

参数

描述

mode

Optional. How the drivetrain will stop:

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

# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()

# Drive forward and coast to a stop
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop(COAST)

calibrate_drivetrain#

calibrate_drivetrain calibrates the Gyro Sensor or Brain Inertial Sensor that is configured with the drivetrain. Calibration should be done when the drivetrain is not moving.

**注意:**大脑将在每个项目开始时自动校准。

Usage:
calibrate_drivetrain()

参数

描述

该方法没有参数。

# Calibrate the DriveTrain after turning
drivetrain.turn_for(RIGHT, 90, DEGREES)
calibrate_drivetrain()
brain.screen.print("Done!")

修改器#

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 if a specific velocity is not provided.

Usage:
drivetrain.set_drive_velocity(velocity, units)

参数

描述

velocity

动力传动系统移动的速度,以浮点数或整数表示。

units

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

# Drive forward at different velocities
# Default velocity
drivetrain.drive_for(FORWARD, 150, MM)
wait(1, SECONDS)
# Drive slower
drivetrain.set_drive_velocity(20, PERCENT)
drivetrain.drive_for(FORWARD, 150, MM)
wait(1, SECONDS)
# Drive faster
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.drive_for(FORWARD, 150, MM)

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 if a specific velocity is not provided.

Usage:
drivetrain.set_turn_velocity(velocity, units)

参数

描述

velocity

动力传动系统转动的速度,以浮点数或整数表示。

units

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

# Turn at different velocities
# Default velocity
drivetrain.turn_for(RIGHT, 360)
wait(1, SECONDS)
# Turn slower
drivetrain.set_turn_velocity(20, PERCENT)
drivetrain.turn_for(RIGHT, 360)
wait(1, SECONDS)
# Turn faster
drivetrain.set_turn_velocity(100, PERCENT)
drivetrain.turn_for(RIGHT, 360)

set_stopping#

set_stopping sets the stopping mode for a drivetrain.

Usage:
drivetrain.set_stopping(mode)

参数

描述

mode

How the drivetrain will stop:

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

# Drive forward and coast to a stop
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.set_stopping(COAST)
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()

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.

**注意:**传动系统的时间限制用于防止未达到目标位置的传动系统功能停止项目其余部分的执行。

Usage:
drivetrain.set_timeout(value, units)

参数

描述

value

运动功能在停止并移动到下一个功能之前运行的最大秒数(整数或浮点数)。

units

Optional. The unit that represents the time:

  • SECONDS
  • MSEC (default) – Milliseconds

# Turn right after driving forward
drivetrain.set_timeout(1, SECONDS)
drivetrain.drive_for(FORWARD, 25, INCHES)
drivetrain.turn_for(RIGHT, 90)

set_heading#

set_heading sets the heading of a smart drivetrain.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.set_heading(heading, units)

参数

描述

heading

新的标题为浮点数或整数。

units

Optional. The unit that represents the heading:

  • DEGREES (default)
  • TURNS

# Face the new 0 degrees
drivetrain.set_heading(90, DEGREES)
drivetrain.turn_to_heading(0, DEGREES)

set_rotation#

set_rotation method sets the rotation for the smart drivetrain.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.set_rotation(rotation, units)

参数

描述

rotation

新的旋转值为浮点数或整数。

units

Optional. The unit that represents the heading:

  • DEGREES (default)
  • TURNS

# Spin counterclockwise two times
drivetrain.set_rotation(720, DEGREES)
drivetrain.turn_to_rotation(0, DEGREES)

set_turn_threshold#

set_turn_threshold method sets the turn threshold for a smart drivetrain. The threshold value is used to determine that turns are complete. If this is too large, then turns will not be accurate. If too small, then turns may not complete.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.set_turn_threshold(value)

参数

描述

value

以度为单位设置的转弯阈值,可以是浮点数或整数。默认转弯阈值为 1 度。

# Turn and display the heading with different turn thresholds
brain.screen.set_font(FontType.PROP20)
brain.screen.print("Default threshold: ")
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())
brain.screen.next_row()
wait(2, SECONDS)
brain_inertial.reset_heading()
brain.screen.print("20 degree Threshold: ")
drivetrain.set_turn_threshold(20)
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())

set_turn_constant#

set_turn_constant sets the turn constant for a smart drivetrain. Smart drivetrains use a simple P controller when doing turns. This constant, generally known as kp, is the gain used in the equation that turns angular error into motor velocity.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.set_turn_constant(value)

参数

描述

value

新的转弯常数,范围为 0.1 - 4.0。默认值为 1.0。

# Turn and display the heading with different turn constants
brain.screen.set_font(FontType.PROP20)
brain.screen.print("Default Constant: ")
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())
brain.screen.next_row()
wait(2, SECONDS)
brain_inertial.reset_heading()
brain.screen.print("0.2 Turn Constant: ")
drivetrain.set_turn_constant(0.2)
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())

set_turn_direction_reverse#

set_turn_direction_reverse(value) sets the smart drivetrain to be reversed. This method works the same as setting the reverse parameter to True when constructing a SmartDrive.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.set_turn_direction_reverse(value)

参数

描述

value

Boolean value to set the direction reversed or not:

  • True – Reverse the smart drivetrain’s direction
  • False – Return the smart drivetrain’s direction to its default

# Example coming soon

吸气剂#

heading#

heading returns the current heading of a smart drivetrain as a float.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.heading(units)

参数

描述

units

Optional. The unit that represents the rotational value:

  • DEGREES (default)
  • TURNS

# Display the heading after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print("Heading: ")
brain.screen.print(drivetrain.heading())

rotation#

rotation returns the current rotational value of a smart drivetrain as a float.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.rotation(units)

参数

描述

units

Optional. The unit that represents the rotational value:

  • DEGREES (default)
  • TURNS

# Display the rotation after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print("Rotation: ")
brain.screen.print(drivetrain.rotation())

velocity#

velocity returns the current velocity of a drivetrain as a float.

Usage:
drivetrain.velocity(units)

参数

描述

units

Optional. The unit that represents the velocity:

  • PERCENT
  • RPM – Rotations per minute
  • VelocityUnits.DPS – Degrees per second

# Display the robot's velocity before 
# and after moving
brain.screen.print(drivetrain.velocity())
brain.screen.next_row()
drivetrain.drive(FORWARD)
wait(1, SECONDS)
brain.screen.print(drivetrain.velocity())
drivetrain.stop()

current#

current returns the current of the drivetrain in amps.

Usage:
drivetrain.current(units)

参数

描述

units

Optional. The unit that represents the current:

  • CurrentUnits.AMP – Amps
# Example coming soon

is_moving#

is_moving returns a Boolean indicating whether a drivetrain is currently moving.

  • True – The drivetrain is moving.

  • False – The drivetrain is not moving.

Usage:
drivetrain.is_moving()

参数

描述

该方法没有参数。

# Stop the Drivetrain after moving 
# forward for some time
drivetrain.drive_for(FORWARD, 200, MM, wait=False)
while drivetrain.is_moving():
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Still Moving...")
    wait (0.1, SECONDS)
    brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")

is_done()#

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

  • True – The drivetrain is not moving.

  • False – The drivetrain is moving.

Usage:
drivetrain.is_done()

参数

描述

该方法没有参数。

# Stop the Drivetrain and turn right 
# after moving forward for some time
drivetrain.drive_for(FORWARD, 200, MM, wait=False)
while True:
    if drivetrain.is_done():
        drivetrain.turn_for(RIGHT, 360)
        break
    else:
        brain.screen.set_cursor(1, 1)
        brain.screen.print("Still Moving...")
        wait (0.1, SECONDS)
        brain.screen.clear_screen()

is_turning#

is_moving returns a Boolean indicating whether a smart drivetrain is currently turning.

  • True – The smart drivetrain is turning.

  • False – The smart drivetrain is not turning.

注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。

Usage:
drivetrain.is_turning()

参数

描述

该方法没有参数。

# Detect when the Drivetrain is still turning
drivetrain.turn_for(RIGHT, 180, DEGREES, wait=False)
while drivetrain.is_turning():
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Turning...")
    wait (0.1, SECONDS)
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")

power#

power returns the average power of the drivetrain in watts.

Usage:
drivetrain.power()

参数

描述

该方法没有参数。

# Example coming soon

torque#

torque returns the average torque of the drivetrain.

Usage:
drivetrain.torque(units)

参数

描述

units

The unit that represents the torque:

  • TorqueUnits.NM (default) – Newton meters
  • TorqueUnits.INLB – Inch pounds
# Example coming soon

efficiency#

efficiency returns the average efficiency of the drivetrain in percent.

Usage:
drivetrain.efficiency()

参数

描述

该方法没有参数。

# Example coming soon

temperature#

temperature returns the average temperature of the drivetrain.

Usage:
drivetrain.temperature(units)

参数

描述

units

Optional. The units that represent the temperature:

  • TemperatureUnits.CELSIUS (default)
  • TemperatureUnits.FAHRENHEIT
# Example coming soon

构造函数#

Constructors are used to manually create DriveTrain and SmartDrive objects, which are necessary for configuring a drivetrain outside of VEXcode.

**注意:**为了创建动力传动系统,必须已经创建至少两个 MotorMotorGroup 对象。

Drivetrain#

DriveTrain creates a drivetrain without a Gyro Sensor or Brain Inertial Sensor.

Usage:
DriveTrain(lm, rm, wheelTravel, trackWidth, wheelBase, units, externalGearRatio)

范围

描述

lm

先前创建的左侧 电机电机组 的名称。

rm

先前创建的右侧 电机电机组 的名称。

wheelTravel

可选。传动系统车轮的周长。默认值为 300 毫米。

trackWidth

可选。传动系统的轮距。默认值为 320 毫米。

wheelBase

可选。传动系统的轴距。默认值为 320 毫米。

units

Optional. The unit that represents the wheelTravel, trackWidth, and wheelBase values:

  • MM (default) – Millimeters
  • INCHES
  • DistanceUnits.CM – Centimeters

externalGearRatio

可选。如果传动比为整数,则用于补偿驱动距离的传动比。

# Create the Motors
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT2, 1.0, True)
# Construct a 2-Motor Drivetrain "drivetrain" with the
# DriveTrain class
drivetrain = DriveTrain(left_drive_smart, right_drive_smart, 200, 173, 76, MM, 1)

drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)

# Create the left Motors and group them under the
# MotorGroup "left_motors"
left_motor_a = Motor(Ports.PORT1, 1.0, False)
left_motor_b = Motor(Ports.PORT2, 1.0, False)
left_drive_smart = MotorGroup(left_motor_a, left_motor_b)
# Create the right Motors and group them under the
# MotorGroup "right_motors"
right_motor_a = Motor(Ports.PORT3, 1.0, True)
right_motor_b = Motor(Ports.PORT4, 1.0, True)
right_drive_smart = MotorGroup(right_motor_a, right_motor_b)
# Construct a 4-Motor Drivetrain "drivetrain" with the
# DriveTrain class
drivetrain = DriveTrain(left_drive_smart, right_drive_smart, 200, 173, 76, MM, 1)

drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)

Smart Drivetrain#

SmartDrive creates a drivetrain with a Gyro Sensor or Brain Inertial Sensor.

Usage:
SmartDrive(lm, rm, g, wheelTravel, trackWidth, wheelBase, units, externalGearRatio)

范围

描述

lm

先前创建的左侧 电机电机组 的名称。

rm

先前创建的右侧 电机电机组 的名称。

g

先前创建的 惯性传感器陀螺仪传感器 的名称。

wheelTravel

可选。传动系统车轮的周长。默认值为 300 毫米。

trackWidth

可选。传动系统的轮距。默认值为 320 毫米。

wheelBase

可选。传动系统的轴距。默认值为 320 毫米。

units

Optional. The unit that represents the wheelTravel, trackWidth, and wheelBase values:

  • MM (default) – Millimeters
  • INCHES
  • DistanceUnits.CM – Centimeters

externalGearRatio

可选。如果传动比为整数,则用于补偿驱动距离的传动比。

# Construct a SmartDrive Drivetrain with 2 motors
brain_inertial = Inertial()
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT6, 1.0, True)

drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)

drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)

如果制作带有多个电机的智能传动系统,则需要先单独创建 电机,然后再将它们分组到 电机组中。

# Construct a SmartDrive Drivetrain with 4 motors
brain_inertial = Inertial()
left_motor_a = Motor(Ports.PORT1, 1.0, False)
left_motor_b = Motor(Ports.PORT2, 1.0, False)
left_drive_smart = MotorGroup(left_motor_a, left_motor_b)

right_motor_a = Motor(Ports.PORT5, 1.0, True)
right_motor_b = Motor(Ports.PORT6, 1.0, True)
right_drive_smart = MotorGroup(right_motor_a, right_motor_b)

drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)

drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)