Asked — Edited

Servos Acting Up

Hey guys. I'm not sure if I am the only one with this problem. Every time I start up my robot, and the EZ Robot bulider, the servos jerk around on my robot for the first couple of times before it goes to normal. This has caused the eyes to break a couple times, I have to reset the mouth all the time, and the head jerks into places it's not suppose to go. Anything I can do to fix this?


ARC Pro

Upgrade to ARC Pro

With Synthiam ARC Pro, you're not just programming a robot; you're shaping the future of automation, one innovative idea at a time.

#1  

This is just a given with servos. They all do it. Try setting your servos in the opposite side they move, because they always seem to move the same direction.

You can do this by manually moving the servo to the position before startup. But BE CAREFUL, and take it slow. It is commonly frowned upon to move the servo manually, but you can do it slow and be safe.

This is on first power up. If your servos are moving a few seconds after the power up, either your power connection is loose or there is something wrong.

#2  

Ok.:) it's usually ok, and I can manage it. But there have been a few times where it was really rough, and it's done things like breaking the connection between the eyes and servo.

#3  

The only time your servo may move is when you first power it up and it's not at the center point. When servos are first powered up and have not yet received a command to move they usually want to move to center. Even if this is the issue you shouldn't be breaking linkage. I would suggest that you discount the linkage, power up the servo to get it to its native center and then reattach the linkage in its normal start up position. You should do this regardless of anything else.

Now, when you start ARC you should also have an int script start before any other scripts and set the starting servo speed and servo position for each servo.

Only after thouse two steps can you expect a smooth start up. There are some other things you can also do but start here first.;)

#4  

I would suggest setting up an independent script which monitors the battery voltage in a continuous loop. When the voltage drops below some point near to the cutoff voltage, have the script set the servos to a point least likely to cause damage when the robot is reactivated. There should be a way to do this manually as well so that it may be set appropriately when turning it off before the battery reaches that point. A manual method would also work out if you decided that the script should just say a verbal warning when the battery is getting to the cutoff point. Then you can decide whether to set the robot servos to the appropriate point before shutdown or not.

Yet another possibility just for the linkage problem would be to insert a small spring in the connection. The spring should be stiff enough to move the eyes as usual, but flexible enough to absorb the startup jerk by expanding a bit.

#5  

Thanks guys! I'll play around with it and see if it works.:)

#6  

Here's another trick to try before the first power up of a servo to keep it from jumping; Send both speed and position commands first then power up the servo. This will require running power through a TIP switch or relay that is scripted in ARC's Int script and connected to one of EZB's digital ports. This may not be practical if all the servos are jumping at power up.

In my robot I have many servos but only one was jumping at power up. It's a big HD servo and I was getting real bad damaging movement like you when I powered up the robot. Centering the servo's linkage, setting the servo up properly in ARC with the proper limits, position and speed helped a lot. However I still got a little jump at power up. This was unacceptable to me so I built a TIP switch. I ran the servo's power through it and had the EZB switch power to this servo on after the INT script in ARC set the servo's min and max limits, position and speed.

Just a thought. ;)

PRO
Synthiam
#7  

Easiest way is to move the servos into a "deinit" before powering down the robot.

The servos always jump the same direction when power is applied. Check which way they are jumping and create a script the moves them to the furthest reasonable opposite direction.

Then, when power is applied, they won't jump last the threshold.

#8  

You might also want to try separating the power for the servo's from the EZB.

Run the power wires to a separate switch from your power supply and have only the servo signal wires connected to the EZB.

I have 2 EZB's on my InMoov, one is wired as above and the other has the power for the servo's going thru the EZB.

The one wired with the power for the servo's coming thru the EZB does exactly as you described. They all go the extreme positions when I connect to the EZB and then to the position defined in my Init script. The one with the power for the servo's not going thru the EZB does not do this, they simply goes to the positions defined in my Init script.