Skip to content

Creating your first Autonomous Mode

Rapidly develop and test new Autonomous programs for your robot with the Volt library.

What is an AutonomousMode?

An AutonomousMode allows you to “assemble” a sequence of Actions to run without any user input.

Creating an AutonomousMode

Create a new Kotlin class in the TeamCode/src/main/kotlin/org/firstinspires/ftc/teamcode/opmodes/autonomous package that inherits the AutonomousMode class.

The AutonomousMode class contains:

  1. A robot
  2. A list of actions
  3. The function execute() that is called when the OpMode begins
class ExampleAuto : AutonomousMode() {
override val robot = SimpleRobotWithMecanumDrive(hardwareMap, Pose2d(
Vector2d(0.0, 0.0),
Math.toRadians(0.0) // Make sure to use radians!
))
init {
// Initialize
}
}

Add an action

Create a function

Create a new private function that returns a SequentialAction.

class ExampleAuto : AutonomousMode() {
override val robot = SimpleRobotWithMecanumDrive(hardwareMap, Pose2d(
Vector2d(0.0, 0.0),
Math.toRadians(0.0)
))
init {
// Initialize
}
private fun doAnAction(): Action {
return SequentialAction(
robot.turnTo(90.0),
robot.strafeTo(Vector2d(24.0, 0.0))
)
}
}

Add the function to the action sequence

In init, add the action to the action sequence.

class ExampleAuto : AutonomousMode() {
override val robot = SimpleRobotWithMecanumDrive(hardwareMap, Pose2d(
Vector2d(0.0, 0.0),
Math.toRadians(0.0)
))
init {
actionSequence.add { doAnAction() } // Lambda function
}
private fun doAnAction(): Action {
return SequentialAction(
robot.turnTo(90.0),
robot.strafeTo(Vector2d(24.0, 0.0))
)
}
}

Make it an OpMode

Add the @Autonomous annotation to the class definition.

@Autonomous(name = "Example", group = "Examples")
class ExampleAuto : AutonomousMode() {
override val robot = SimpleRobotWithMecanumDrive(hardwareMap, Pose2d(
Vector2d(0.0, 0.0),
Math.toRadians(0.0)
))
init {
actionSequence.add { doAnAction() } // Lambda function
}
private fun doAnAction(): Action {
return SequentialAction(
robot.turnTo(90.0),
robot.strafeTo(Vector2d(24.0, 0.0))
)
}
}

Result

package org.firstinspires.ftc.teamcode.opmodes.autonomous
import com.acmerobotics.roadrunner.*
import com.qualcomm.robotcore.eventloop.opmode.Autonomous
import dev.kingssack.volt.autonomous.AutonomousMode
import dev.kingssack.volt.robot.SimpleRobotWithMecanumDrive
@Autonomous(name = "Example", group = "Examples")
class ExampleAuto : AutonomousMode() {
override val robot = SimpleRobotWithMecanumDrive(hardwareMap, Pose2d(
Vector2d(0.0, 0.0),
Math.toRadians(0.0)
))
init {
actionSequence.add { doAnAction() } // Lambda function
}
private fun doAnAction(): Action {
return SequentialAction(
robot.turnTo(90.0),
robot.strafeTo(Vector2d(24.0, 0.0))
)
}
}