Servo Arm Coordination

[From Adam Matic 2014.02.16.1500 CET.]

This project is similar to Bruce’s two servo arm project he mentioned a few weeks ago on the DIY control systems thread.

Bruce Abbott (2014.01.10.11810 EST)

image00224.jpg

[…] two RC servos, an sscII pulse-width modulation board (seetron.com) to send signals to the two servos and an OOPic II microcomputer board (Savage Innovations). The sscII includes a serial interface to connect to a PC’s serial port. (Shown is the cable for making that connection.) I also programmed the OOpic II shown below the arm to run the demo on its own, without the PC. In that case two potentiometers were connected to the OOPic board to provide the position reference signals

This is my arm project:

As in Bruce’s demo, this one has two servos, one per each joint. I’m using an Arduino board to generate pwm signals to set servo angular position. Both servos are opened a wire is soldered to the pot to get the position signal, which is read by the Arduino. Reach and elevation control are added and it took me quite a while to tune the gains, slowings and other parameters for these two systems. Elevation and reach control are structurally similar to Bill’s CoordinationDemo, with elevation error determining shoulder reference, and reach error determining both shoulder and elbow reference. I’m still not quite satisfied with how this works, as most of the tuning was done by trial and error, and there is still some ‘tremor’. I’ll continue working on this.

Arm parts are cut by hand from a foam plastic sheet (aka forex plastic, PVC foamboard).

I’m also making a larger arm project with more degrees of freedom, I’m currently tuning the same coordinating level systems, and I’m waiting for some new electronic components that will make control more precise.

Adam

[From Bruce Abbott (2014.02.17.0930 EST)]

Adam Matic 2014.02.16.1500 CET —

AM: This project is similar to Bruce’s two servo arm project he mentioned a few weeks ago on the DIY control systems thread.

AM: As in Bruce’s demo, this one has two servos, one per each joint. I’m using an Arduino board to generate pwm signals to set servo angular position. Both servos are opened a wire is soldered to the pot to get the position signal, which is read by the Arduino. Reach and elevation control are added and it took me quite a while to tune the gains, slowings and other parameters for these two systems. Elevation and reach control are structurally similar to Bill’s CoordinationDemo, with elevation error determining shoulder reference, and reach error determining both shoulder and elbow reference. I’m still not quite satisfied with how this works, as most of the tuning was done by trial and error, and there is still some ‘tremor’. I’ll continue working on this.

BA: I like that you are able to get joint position from the servo pots. Velocity and Acceleration would be derived from positional changes. RC servos usually track their reference positions well, so I wouldn’t expect there to be a problem with a noisy pot signal, but if noise is present in the positional signal it will be magnified when taking differences when computing the velocity and acceleration variables.

AM: Arm parts are cut by hand from a foam plastic sheet (aka forex plastic, PVC foamboard).

AM: I’m also making a larger arm project with more degrees of freedom, I’m currently tuning the same coordinating level systems, and I’m waiting for some new electronic components that will make control more precise.

I ‘m looking forward to seeing the completed arms in operation!

Bruce

[From Adam Matic 2014.02.17.19.30 CET]

···

Bruce Abbott (2014.02.17.0930 EST)

BA: I like that you are able to get joint position from the servo pots. Velocity and Acceleration would be derived from positional changes. RC servos usually track their reference positions well, so I wouldn’t expect there to be a problem with a noisy pot signal, but if noise is present in the positional signal it will be magnified when taking differences when computing the velocity and acceleration variables.

AM: With the servo arm, I’m using the position signals from servo pots just to compute reach and elevation perception signals. There is is some noise in the circuit - some of it is smoothed out in hardware, some digitally. Smoothing out reach perceptual signal required adding a lot of slowing/smoothing to the reach output signal.

The other arm has exactly those problems with noise you mention. Each joint has a geared DC motor and a pot that measures angular position and I have a cascade loop that controls velocity in inner, and position in the outer loop. Velocity is estimated from position change and it is noisy, but still useful. Acceleration is too noisy to use, but I think damping compensates for this.

BA: I ‘m looking forward to seeing the completed arms in operation!

Thank you, I hope that will be soon enough.

Adam