Ideal Drive Speed for Tower Takeover

#1

for drive speeds what does everyone think. fast, torque or on the middle of the two? i ask this because there is not a lot of room to move around on the field with all the blocks in the way

0 Likes

#2

i was thinking that high-speed would be a good gear ratio

0 Likes

#3

If you have V5 then you should be able to get away with a pretty speedy drivetrain, as there is not a ton of pushing (although wallbots could be a problem)

0 Likes

#4

Careful, there was a lot of pushing in Turning Point and we haven’t seen Tower Takeover played much (at all?) yet. Though with objectives far more spread out in Tower Takeover, I’m inclined to agree that pushing will probably not be a terribly common thing outside of some bots that might choose to specialize in it.

2 Likes

#5

yes i agree that you agree. but if you’r too fast you loose control and accuracy

1 Like

#6

If you’re losing control and accuracy, you need better code and more practice, not less speed :slight_smile:

6 Likes

#7

it depends on your motor gear ratio not just drive practice. but i think i should be ok, ill be using high speed

0 Likes

#8

Don’t neglect better code, too. There’s a lot you can do with driver control code to make an otherwise wild robot into a beast that respects your authority.

4 Likes

#9

Personally I like the idea of a speedy robot this year, the only issue is that with a fast drive you’ll lose torque, and this game looks like you will be caring a lot of weight around. I think 200RPM will probably be the sweet spot.

1 Like

#10

Could you say more about this?

0 Likes

#11

The terms “fast, torque or on the middle of the two” are meaningless. What kind of speeds are you talking about, in quantifiable terms (RPM, m/sec, ft/sec, etc.)?

1 Like

#12

One of the common methods of making a robot more controllable is to make the middle regions of the joystick less sensitive, and the edges of the joystick more sensitive. This allows for more precise control at low speeds while still allowing access to full speed maneuvers. Other options I’ve seen include a “boost” toggle that switches input sensitivity from partial speed to full speed. Some drivers also find tank or arcade drive easier to use, so tailoring your control scheme for your driver also factors into the equation.

5 Likes

#13

I agree with John_Tyler.

0 Likes

#14

For instance, you could have a variable for each side of the drive, which is constantly being changed in the right direction.
Here’s some code that I haven’t tested (yet) but should work with some tuning.

float sensitivity = ???; //tune this variable to adjust the rate of responsiveness (should be greater than 1, and the closer to 1, the more responsive it will be but the less curved it will be as well)
int speedL = 0;
int speedR = 0;
while(true){
speedL+=(joystickL-speedL)/sensititvity;
speedR+=(joystickR-speedR)/sensititvity;
motorL=speedL;
motorR=speedR;
}

This should automatically curve the motor speed so they don’t burn out or slip. Additionally, if you want to drive perfectly straight straight, as well as put a speed cap in order to keep the motors from overheating, you can modify it to be more like the following code. (A speed cap will also ensure that the motors run at a constant speed, with less fluctuation.)

float sensitivity = ???; //tune this variable to adjust the rate of responsiveness (should be greater than 1, and the closer to 1, the more responsive it will be but the less curved it will be as well)
int speedL = 0;
int speedR = 0;
int maxSpeed = 110; //controls the max speed the motors can run at
int fullSpeedZone = 100; //controls how far the joysticks must be in order to run the max speed
while(true){
speedL+=(joystickL-speedL)/sensititvity;
speedR+=(joystickR-speedR)/sensititvity;
if(joystickL>fullSpeedZone){
speedL=maxSpeed;
}
if(joystickL<-fullSpeedZone){
speedL=-maxSpeed;
}
if(joystickR>fullSpeedZone){
speedR=maxSpeed;
}
if(joystickR<-fullSpeedZone){
speedR=-maxSpeed;
}
motorL=speedL;
motorR=speedR;
}

As a final feature, you can make a controller deadzone, eliminating joystick drift.

float sensitivity = ???; //tune this variable to adjust the rate of responsiveness (should be greater than 1, and the closer to 1, the more responsive it will be but the less curved it will be as well)
int speedL = 0;
int speedR = 0;
int maxSpeed = 110; //controls the max speed the motors can run at
int fullSpeedZone = 100; //controls how far the joysticks must be in order to run the max speed
int deadZone = 10; //controls the range of the controller deadzone
while(true){
speedL+=(joystickL-speedL)/sensititvity;
speedR+=(joystickR-speedR)/sensititvity;
if(joystickL>fullSpeedZone){
speedL=maxSpeed;
}
if(joystickL<-fullSpeedZone){
speedL=-maxSpeed;
}
if(joystickR>fullSpeedZone){
speedR=maxSpeed;
}
if(joystickR<-fullSpeedZone){
speedR=-maxSpeed;
}
if(joystickL<deadZone&&joystickL>-deadZone){
speedL=0;
}
if(joystickR<deadZone&&joystickR>-deadZone){
speedR=0;
}
motorL=speedL;
motorR=speedR;
}

This is just the tip of the iceberg when it comes to augmented driver code.

3 Likes

#15

if you need the power but can’t do a 6 motor drive then you can do a 5 motor drive with the 5th wheel being in between the rear wheels, driving that wheel is simply taking the values of the 2 outer wheels, adding them up and diving it by 2.

1 Like