Arm not holding position

Hello, we are doing very well on our robot but there is a problem. when our arm goes up, it is not able to hold its position. It can’t go up, and when it is going down, it speeds down and hits the ground. Is there a way to stop it? I’ve tried rubber bands, but so far nothing is happening. Please help!!!

I would suggest setting the arm to a little bit of power upwards. Like 10 power.

Really you should have the lift controlled by some sort of control loop.

Sounds like two separate problems. 1. Holding the arm in position. 2. The arm not having enough power to go up, and then moving down too fast.

  1. If you are coming from Vex IQ, then you are probably looking for a “Hold Position” setting for the EDR motors. Sorry, but that capability is not built into the EDR motors. That’s one of the reasons why the IQ motors are called Smart Motors. In EDR you will have to write the code that moves the arm motor to exactly the position you want (without bouncing back and forth), and then keep checking the position of the arm, and adjusting it if it starts to move down.

  2. Make sure you have your gear ratio for your arm configured for power, as opposed to speed. If it is geared for speed it won’t have enough power to move fast on the way up (and might not make it up at all), but it will have power and speed to go down. To be geared for power, you should have a small gear on the shaft coming out of the motor, and that gear should mesh with a much larger gear that actually turns the arm. The right gear ratio will depend on the weight of your arm and what it is carrying. A good place to start is using the smallest gear available on the motor shaft, and the largest available gear connected to the arm.

Hope that helps

If what @Tabor473 and @jrp62 suggested does not help (though that should be it), pictures of your lift would be beneficial in diagnosing the problem. As for the code suggestion, it is very simple. Some people would try to create a whole PID system for this, which could be even better, but to keep things simple, you could create a simple P loop. When you are moving the arms up and down, you update your target position in a variable. Somewhere in usercontrol, you can call a function that sets the motor speed to the difference between the target and their current position multiplied by a decimal value. You can tune this value according to how well the arm is being help up.

This code could be very helpful, but if your arm is not able to hold itself up at all, or if it sometimes can’t even lift itself, code might not be the best solution. You might need to gear it higher (for more torque). It might also be that the rubber bands are not helping hold it up. Again, pictures would be very beneficial. Good luck.

Another alternative is to use Vex worm gears along with normal gears since a worm gear will hold its position when the motor is stopped.

or, you could just use pid, which is useful anyways for being accurate anyways, and doesnt require more friction

We too are running into same issue. We built the basic clawbot using the steps described in the kit that we received and I believe we are using the default code that is shipped.

If I read this correctly - there is purely programming/code solution and that may not require any hardware changes. We are very new to Robotics and all this PID/P loop jargon sounds daunting. Is there any wiki page that explains this and how to write this code? Thanks for any help or pointers!

no, the easiest way to fix this is to attach rubber bands/surgical tubing the help support the arm, no code is required, yet pid is a great thing to learn anyways

A mechanical solution will be the best and most reliable. You will definitely also want PID though, especially if you plan on driving around with the arm raised.
These two videos should help:

The second link is for PID on flywheels, but it will help you get a basic understanding.

When I tried using a smaller gear for the shaft, it still didn’t hold its position. I’m about to try PIDs now. Also, I heard of a command that makes my robot able to stop the lift in position using potentiometer or encoder. Could anybody give me more info in that?

This thread may be useful in this discussion.

We usually use a combination of holding power and rubber band tension to keep our lift from drifting.

Ok so this command that you mentioned is exactly what PID is supposed to do. There is a command for that in VEX IQ because they have different motors, but we don’t have those in VRC. Also, what size gears are you using? That may help because I would say you would need at least a 5:1 for torque (or 1:5 for torque - trying to avoid gear ratio political conflict to keep this thread on topic :slight_smile: ).