Skip to content

Commit 02040ac

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 02040ac

2 files changed

Lines changed: 28 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: 27 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,28 @@ 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().setUpdate {
48+
var transVel = Vector2d(xPower.get(), yPower.get())
49+
50+
if (!robotCentric) {
51+
transVel = getPose().heading * transVel
52+
}
53+
54+
setDrivePowers(PoseVelocity2d(transVel, headingPower.get()))
55+
}
2956
}

0 commit comments

Comments
 (0)