How do I prevent the robot from jiggling around?

I don't know what the proper technical term is, so I will call it "jiggle" for now. I am making a puppet that is using industrial servo motors. However, the motion is not as smooth as I would like. Rather, when the arm moves, it tends to sway back and forth when it stops. It does this at around 11 Hz, and settles down after 4 or 5 sways.

I have set the motion velocity to ramp up and down in speed as it starts and stops. This does help the situation, but there is obviously a pendulum type of motion that must be planned and compensated for.

In my case, the motions will all be programmed in advance. So it may be viable to simply monitor the motion, and then make some sort of adjustment to try to compensate, and then try again, until the motion is satisfactory. But, of course, it would be ideal for the robot to manage this problem in an unplanned performance. Also, since this is for an entertainment robot that does not have to walk, I think the position control itself does not require high precision compared to most industrial robots.

I can observe the motion from the current and position data collected in the servo system. Although, the data seems to show very little straying from ideal, when I see the magnitude of the jiggle itself. I am sure that this is because the mechanism itself has some spring to it. So, the jiggle is behaving like a weight at the end of a length of spring wire.

Here are a few more details. Rather than a DC motor, the motor itself is a stepper motor, and is driven using a Elmo DC Bell. I am using the Elmo Motion Control system software, which includes some automatic tuning. This tuning includes a routine that can sense the mechanical system and apply notch filters at various frequencies. However, the automatic system does not seem to be able to sense and compensate for the 11hz jiggle I am seeing.

Any suggestions about the search terms I should use on the Internet search engine?

Any other advice?

Thank you in advance for the replies,

Joe Dunfee

Reply to
cadcoke5
Loading thread data ...

Some thoughts...

It's unclear from your description whether the sway is purely mechanical, or whether it's induced in the control system.

Does the servo motor itself sway as it tries to stop - aka rotate back and forth instead of just stopping? Or does the servo stop as programmed, and then the arm sways?

From where you write: "the data seems to show very little straying from ideal" it makes it sound like this is just a mechanical issue where the frame of the robot is not stiff enough to allow it to stop (or the servo coupling or the servo itself is not powerful enough for you puppet).

If it's a mechanical issue you might be able to compensate by programming the servo control correctly, but it will be highly sensitive to the exact mechanical properties of the system. Which would mean if you do it "blind" (without feedback sensors) you will have to tweak the algorithm by hand until it works well enough, but then, over time, as the system wears down, the mechanical properties will change and the motion will slowly get worse over time.

If you have a position sensory that can accurately detect the sway, then you use a standard feedback circuit to "fix" it. Google PID controllers. It's a matter of optimizing the PID parameters to minimize the oscillation.

I don't know anything about the software and hardware specifically that you mentioned above so I have no clue if what you are looking at might be something that can already be adjusted with your setup.

Reply to
Curt Welch

I am confident the jiggle we are seeing is mechanical, and due to a lack of rigidity in the structure.

I will mention that, in our earlier attempts, before tuning the control system, we also saw substantial "jiggle" as the motion was underway. The jiggle would also continue indefinitely after it reached the end of travel. However, reducing the gain seems to have resolved that.

I did find a refernce to "overshoot" as I did more research. This may be the term for what I am seeing. However, to be clear, this motion is comparable to lifting a weight hung from a spring. When you stop the motion at the lift point, the weight will tend to continue to move up and down.

Since this performance robot is supposed to look like an animal, we do want the motion to appear as natural as possible. The jiggle we are seeing strongly broadcasts the message, "I am a robot" to the audience.

The web site where I found the term "overshoot" had used inertia sensors at the end of the arm to detect this jiggle on their robot. But, I don't have those sensors. Rather, I only have the type of data that I can obtain from my servo motor system. It does detect the jiggle, and reacts.

As I mentioned before, the articles I came across in regards to this subject had sensors that can accurately describe the jiggle. Since my detection is more removed from the actual motion, this may make the process of controling it more difficult.

I did look up PID controllers and see that this is certainly an area I need to focus my efforts to learn about. My Elmo Motor Controller does have PID control built in, and I know it is active. I understand the general concepts, but it looks like I need to understand more about how to tweak the parameters.

Thank you for the input, now I know where to focus my efforts,

Joe Dunfee

Reply to
cadcoke5

Can you control the motion profile of the servo or do you just have control of the endpoint of a move? If you can reduce the acceleration and deceleration of the motor, the mechanical ringing should go down. The motion should look more natural too. The other choice would be to stiffen the structure of the critter.

BobH

Reply to
BobH

The motion "script" is actually coming from a theatrical lighting control program. it sends its signals for "light" levels to a device that turns it into a 0-10 volt analog output. Then, that analog 0-10v signal is fed into my motor controller. So, it is really not an ideal program to do this sort of motion scripting. Yes, I can make the controls curve by adding spine controls. But, this is just done by eye, since you cannot control these points by entering numbers.

The motor driver, an Elmo DC Bell, has a lot of internal controls. But, once I set things there, I cannot vary them during the performance. Thus, if I adjust the the motor controller parameters for good performance with relatively slow motions, I may make it impossible to do fast motions.

But, I have not played with the PID controls to any extent yet. I think that is where I may have some success. I think that will enable both fast and slow motions to be well controlled.

Joe Dunfee

Reply to
cadcoke5

Here is an update. I ended up having a lot of success just adjusting one o f the gain parameters. It really looked to me like the standard servo-jitte r you see when the gain is not correct, but I was told that stepper motor d rivers don't use a "gain" setting.

It turns out that there are a number of different gain settings. And, I re ally don't understand them all. But, on the hunch about how it looked like servo-jitter, I cut back on it, and that was all that was needed.

I have made some further refinements using the "sin wave" tuning. This is where the programming software visibly directs the motion through a number of moves at various frequencies, and notes the results. This way it can fi nd the pendulum-like swings of the entire system. I originally thought the first round of "tuning" that I did was supposed to be this, and was puzzle d when it went through it in just an instant and without visible movement o f the system. It turns out my prior effort was really focused on the motor itself, and not the entirety of the system.

This problem also highlights how much I still need to learn about this proc ess, and this particular system.

Joe Dunfee

Reply to
cadcoke5

Good to hear you were able to make it work!

Reply to
Curt Welch

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.