Skip to content

Commit b254767

Browse files
committed
feat: add driver-controlled command for Mecanum drivetrain (rr 1.1.0)
Signed-off-by: Zach Harel <zach@zharel.me>
1 parent 7636a83 commit b254767

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ dev.nextftc.publishing.automaticMavenCentralSync=true
66

77
android.useAndroidX=true
88

9-
versions.roadrunner=1.0.1
9+
versions.roadrunner=1.1.0
1010
versions.pedro=1.0.0
1111
versions.fateweaver=1.0.0

roadrunner/src/main/kotlin/dev/nextftc/extensions/roadrunner/NextFTCMecanumDrive.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import com.acmerobotics.roadrunner.Pose2d
55
import com.acmerobotics.roadrunner.PoseVelocity2d
66
import com.acmerobotics.roadrunner.PoseVelocity2dDual
77
import com.acmerobotics.roadrunner.Time
8+
import com.acmerobotics.roadrunner.Vector2d
9+
import dev.nextftc.core.commands.utility.LambdaCommand
10+
import java.util.function.Supplier
811

912
/**
1013
* Represents a RoadRunner Mecanum drivetrain from the QuickStart.
@@ -26,4 +29,31 @@ abstract class NextFTCMecanumDrive {
2629
abstract fun commandBuilder(beginPose: Pose2d): TrajectoryCommandBuilder
2730

2831
open fun commandBuilder() = commandBuilder(getPose())
32+
33+
/**
34+
* Creates a command for driver-controlled operation.
35+
*
36+
* @param xPower A function providing the x-axis power.
37+
* @param yPower A function providing the y-axis power.
38+
* @param headingPower A function providing the heading power.
39+
* @param robotCentric Whether the controls are robot-centric (default: true).
40+
* @return A [LambdaCommand] that updates the drivetrain powers.
41+
*/
42+
@JvmOverloads fun driverControlledCommand(
43+
xPower: Supplier<Double>,
44+
yPower: Supplier<Double>,
45+
headingPower: Supplier<Double>,
46+
robotCentric: Boolean = true
47+
) = LambdaCommand()
48+
.setUpdate {
49+
var transVel = Vector2d(xPower.get(), yPower.get())
50+
51+
if (!robotCentric) {
52+
transVel = getPose().heading * transVel
53+
}
54+
55+
setDrivePowers(PoseVelocity2d(transVel, headingPower.get()))
56+
}.setIsDone { false }
57+
.requires(this)
58+
.named("RoadRunner Driver Controlled")
2959
}

0 commit comments

Comments
 (0)