# Help with limiting speed

we need help with limiting the speed of our robot when driving with a controller in java. The robot runs really quickly when the joysticks are moved and we need a way to limit how fast it will go.

There are a few things you can do. First is square your input that will make it accelerate less at the beginning of the stick movement so it wonâ€™t be so jumpy also apply a deadband. Use an exponent of 2 to start.

``````private static double modifyAxis(double value, int exponent) {
value = Math.copySign(Math.pow(value, exponent), value);
return value;
}``````

Then you can limit acceleration with a SlewRateLimiter . The parameter is the number of units per second. IF you are dealing with axis inputs to percent output the unit is 100% so a 3 like we use is full throttle in 1/3 of a second

``````private SlewRateLimiter xLimiter = new SlewRateLimiter(3);
private SlewRateLimiter yLimiter = new SlewRateLimiter(3);``````

then apply the value with the calculate

x = xLimiter.calculate(modifyAxis(xSupplier.doubleValue(), 2) ;

Then if you wanted to limit the cap you could MathUtil.clamp the value at .8 or something but I think the SlewRateLimiter and axis modification will help you

That works, or you could do what my team does; we get the value of the joystick and multiply that value by how quickly we want the robot to go (ex. 50 percent = 0.5).

In the Drivetrain subsystem
`public void teleopDrive (double Yspd, double Xspd) {`
`drive.arcadeDrive(Yspd, Xspd); `}

In the drive command:
`public void execute () {`
`drivetrain.teleopDrive(Robot container.joystick.getRawAxis(1) * 0.5, RobotContainer.joystick.getRawAxis(0) * 0.5);`
`}`

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.