Robot too sensitive. How do I fix this?

Hey all.
I have been searching for a bit and I haven’t yet found a way to reduce the sensitivity on one of our older robots. Every time I attempt to drive our robot (one stick arcade) the robots sensitivity goes way off and the robot starts spinning in circles… It makes it a pain to drive.
Also is there a way to limit the max output of a motor via programming? We want one of our robots to be safe in crowds of people.

Warning, I have never actually programmed an FRC robot

In order to solve the problem with the older robot you will need to look at how the code works. For a 1 stick arcade, the turning is likely determined by taking the X axis input of the joystick and adding it to one side and subtracting from the other. If you divide this input by a constant before it is applied to the motors it should make the controls less sensitive.

In terms of limiting the max output via programming there are a few ways to do this. You can leave the control scaling the way it is and simply limit the motors to a certain value by testing with IF statements if the motor is above the max forward or below the max reverse and setting it to the max value if it is too high.

You can also rescale your controls using a constant as described above such that a full forward input on the joystick corresponds to a less than full output on the motors.

Others will probably be able to give you better specifics with regard to exact syntax, but this should get you started.

Here’s a post to how our team has dealt with over-sensitive joysticks - the quick and dirty way:

http://www.chiefdelphi.com/forums/showthread.php?p=742101&highlight=cubic+transfer+function#post742101

The entire thread is very useful.

Also try search terms like: “joystick sensitivity” and “joystick input mapping”

Good Luck!

For a moment I thought you were going to say that you kept hurting the robot’s feelings and that it couldn’t take a joke.

For taking the robot out in public you can limit the maximum value that is sent to a PWM (and thus the maximum power to a motor) but that probably won’t completely solve your problem of “human robot interaction”, and will definitely make the robot appear slow and sluggish.

What we do is build a “robot corral”, out of 10’ long 2x8 bolted together at the ends. If people stay out of the corral, then the robot (usually) won’t hit them. If you build it out of 12’ long 2x10, then the corral can double as the walls for a low-cost VEX/FTC playing field. See herefor a photo.

The spinning in circles issue could be many things. Here are a few questions to help come up with a diagnosis:

  1. Can you make the robot go straight ahead and straight backwards if you are very careful with the joystick? (if not, then it may be an electrical or mechanical problem on the robot)

  2. Did the robot once go straight? If so, what have you done to it since then? Did you put new code in to the robot? If so, what code did you put in… are you using EasyC pro?

  3. Have you tried a couple of different joysticks? It is possible that the joystick you are using is damaged or worn. For that matter, what joystick are you using… the beige ones that come in the KoP? If so, have you been able to get an improved performance by adjusting the trim?

Finally, you may be interested in searching for the term “deadband”. You’ll find threads like this one http://www.chiefdelphi.com/forums/showthread.php?t=61929&highlight=deadband that might help solve your problems.

Jason

Create a step function. Also, create a wide base of 127. You could either do this

if (drive_left >127 || drive_left<150)
drive left = 127;

or

create a funtion in which it takes the pwm value, splits it into 14 or 17 sections. Then it will return a number and that number could stand for a wide base of numbers:

ex: (pwm01/17) = 14. 14 would stand for the value 236. If the answer came out to be 14.2, C and C++ cuts numbers so that equals 14. This is pretty much a step function used in math.